<?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>125746</bug_id>
          
          <creation_ts>2013-12-14 17:42:42 -0800</creation_ts>
          <short_desc>[iOS] Upstream PLATFORM(IOS) changes to Source/WebKit/</short_desc>
          <delta_ts>2013-12-31 15:43:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>mkwst</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>959881</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-12-14 17:42:42 -0800</bug_when>
    <thetext>[iOS] Upstream PLATFORM(IOS) changes to Source/WebKit/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959884</commentid>
    <comment_count>1</comment_count>
      <attachid>219265</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-12-14 18:06:49 -0800</bug_when>
    <thetext>Created attachment 219265
[iOS] Upstream PLATFORM(IOS) changes to Source/WebKit/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960313</commentid>
    <comment_count>2</comment_count>
      <attachid>219265</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-16 17:06:07 -0800</bug_when>
    <thetext>Comment on attachment 219265
[iOS] Upstream PLATFORM(IOS) changes to Source/WebKit/

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

Briefly read through some of this patch. When I have a moment, I&apos;ll look to finish reading through this patch and be more thorough.

&gt; Source/WebKit/mac/DOM/WebDOMOperations.mm:110
&gt; +    if (![self isKindOfClass:[DOMHTMLInputElement class]] &amp;&amp;

Nit: &amp;&amp; should be moved to the start of the next line.

&gt; Source/WebKit/mac/DOM/WebDOMOperations.mm:121
&gt; +    if (![self isKindOfClass:[DOMHTMLInputElement class]] &amp;&amp;

Ditto.

&gt; Source/WebKit/mac/DOM/WebDOMOperations.mm:125
&gt; +    Node *node = core(self);

Nit: This variable is used exactly once (below) and its name doesn&apos;t improve the readability of this code. I suggest we inline its value into the line below.

&gt; Source/WebKit/mac/History/WebBackForwardList.mm:181
&gt; +    HistoryItemVector::iterator it = historyItems.begin();

Nit: We should use the keyword auto here.

&gt; Source/WebKit/mac/History/WebBackForwardList.mm:182
&gt; +    while (it != historyItems.end()) {

Nit: We should look to convert this to a C++11 range-based for loop.

&gt; Source/WebKit/mac/History/WebBackForwardList.mm:184
&gt; +        it++;

Nit: Ideally we would use an C++11 range-based for loop (see above comment). Otherwise, I would use a pre increment operator here since we aren&apos;t using the return value of the post-increment operator.

&gt; Source/WebKit/mac/History/WebBackForwardList.mm:189
&gt; +        [NSNumber numberWithUnsignedInt:coreBFList-&gt;current()], WebBackForwardListDictionaryCurrentKey,

Nit: We should look to expose a better interface to BackForwardList so that we don&apos;t need to directly access its internal index (via BackForwardList::current()) as such a detail seems to violate encapsulation. Consider adding a FIXME comment.

&gt; Source/WebKit/mac/History/WebBackForwardList.mm:214
&gt; +    size_t listSize = coreBFList-&gt;entries().size();
&gt; +    if (currentIndex &gt;= listSize)
&gt; +        currentIndex = listSize - 1;
&gt; +    coreBFList-&gt;setCurrent(currentIndex);

Nit: We should look to expose a better interface to BackForwardList so that we don&apos;t need to manage its size and index. Such details seem to violate the encapsulation of the BackForwardList. Consider adding a FIXME comment.

&gt; Source/WebKit/mac/History/WebHistory.mm:362
&gt; +    WebHistoryItem *otherEntry= [_entriesByURL objectForKey:URLString];

Nit: Missing a space on the left side of the &apos;=&apos;.

&gt; Source/WebKit/mac/History/WebHistory.mm:367
&gt; +        if ([otherEntry lastVisitedTimeInterval]&lt;[entry lastVisitedTimeInterval]) {

Nit: Missing a space on both sides of the &apos;&lt;&apos;.

&gt; Source/WebKit/mac/History/WebHistory.mm:377
&gt; +            

Nit: Line begins with extraneous whitespace.

&gt; Source/WebKit/mac/History/WebHistory.mm:382
&gt; +        // Special case for merges when new items may be older than pre-existing entries.
&gt; +        else

Nit: The else should be on the same line as the &apos;}&apos;. Consider moving the comment on line 381 to be inline on line 382.

&gt; Source/WebKit/mac/History/WebHistoryItem.mm:481
&gt; +#if PLATFORM(IOS)
&gt;  - (NSDictionary *)dictionaryRepresentation
&gt;  {
&gt; +    return [self dictionaryRepresentationIncludingChildren:YES];
&gt; +}
&gt; +
&gt; +- (NSDictionary *)dictionaryRepresentationIncludingChildren:(BOOL)includesChildren
&gt; +#else
&gt; +- (NSDictionary *)dictionaryRepresentation
&gt; +#endif

We should look to clean this up after we upstream iOS. One way to clean this up is to keep the dictionaryRepresentationIncludingChildren() function and compile it without guards then update the Mac callers to pass NO. You may want to consider adding a FIXME comment to the code to help increase the visibility of this effort.

&gt; Source/WebKit/mac/History/WebHistoryItem.mm:555
&gt; +    if (viewportArguments) {
&gt; +        [dict setObject:viewportArguments forKey:@&quot;WebViewportArguments&quot;];
&gt; +    }

Nit: The curly braces aren&apos;t necessary.

&gt; Source/WebKit/mac/Misc/WebCache.mm:202
&gt; +    WebCore::SecurityOrigin* topOrigin = 0;

Nit: Use nullptr instead of 0.

&gt; Source/WebKit/mac/Misc/WebCache.mm:219
&gt; +    WebCore::SecurityOrigin* topOrigin = 0;

Ditto.

&gt; Source/WebKit/mac/Misc/WebCache.mm:230
&gt; +        return 0;

Ditto.

&gt; Source/WebKit/mac/Misc/WebCache.mm:234
&gt; +        return 0;

Ditto.

&gt; Source/WebKit/mac/Misc/WebCache.mm:237
&gt; +        return 0;

Ditto.

&gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:299
&gt; +    

Nit: This line has extraneous whitespace.

&gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:523
&gt; +    if (queryLength == 0)

Nit: !queryLength instead of queryLength == 0

&gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:529
&gt; +    while (equalSearchRange.location &lt; queryLength - 1 &amp;&amp; equalSearchRange.length != 0) {

Nit: The &quot;!= 0&quot; isn&apos;t necessary as NSRange.length is an unsigned integer.

&gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:555
&gt; +        if (keyRange.length != 0 &amp;&amp; valueRange.length != 0) {

Ditto.

&gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:560
&gt; +            if ([key length] != 0 &amp;&amp; [value length] != 0)

Nit: Similarly the &quot;!= 0&quot; isn&apos;t necessary as NSString.length is an unsigned datatype.

&gt; Source/WebKit/mac/Plugins/WebPluginController.mm:108
&gt; +    static bool audioSessionWasInitialized = false;

Nit: It&apos;s unnecessary to explicitly initialize this variable to false. The C and C++ standard guarantee that variables of static storage duration are zero initialized.

Also, we tend to follow the Cocoa naming convention and place the verb at the beginning of the variable name (e.g. wasAudioSessionInitialized).

&gt; Source/WebKit/mac/Plugins/WebPluginController.mm:215
&gt; +    FrameView* coreView = coreFrame ? coreFrame-&gt;view() : 0;

Nit: 0 =&gt; nullptr.

&gt; Source/WebKit/mac/Plugins/WebPluginController.mm:318
&gt; +    for (NSUInteger i = 0; i &lt; viewsCount; i++)

Nit: i++ =&gt; ++i (since we aren&apos;t using the return value; although the compiler is likely smart enough to realize this).

&gt; Source/WebKit/mac/Plugins/WebPluginController.mm:323
&gt; +    for (NSUInteger i = 0; i &lt; viewsNotInDocumentCount; i++)

Ditto.

&gt; Source/WebKit/mac/Plugins/WebPluginController.mm:338
&gt; +    for (NSUInteger i = 0; i &lt; viewsCount; i++)

Ditto.

&gt; Source/WebKit/mac/Plugins/WebPluginController.mm:343
&gt; +    for (NSUInteger i = 0; i &lt; viewsNotInDocumentCount; i++)

Ditto.

&gt; Source/WebKit/mac/Storage/WebDatabaseManager.mm:204
&gt; +                deletedDatabaseFileCount++;

Nit:: deletedDatabaseFileCount++ =&gt; ++deletedDatabaseFileCount

&gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm:910
&gt; +    return 0;

Nit: 0 =&gt; nullptr

&gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm:919
&gt; +    return 0;

Ditto.

&gt; Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:807
&gt; +    m_selectionNotificationSuppressions--;

Nit: m_selectionNotificationSuppressions-- =&gt; --m_selectionNotificationSuppressions

&gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:1880
&gt; +            return 0;

Nit: 0 =&gt; nullptr

&gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:2159
&gt; +                        return 0;

Nit: 0 =&gt; nullptr

&gt; Source/WebKit/mac/WebCoreSupport/WebOpenPanelResultListener.mm:107
&gt; +    for (NSUInteger i = 0; i &lt; count; i++)

Nit: i++ =&gt; ++i

&gt; Source/WebKit/mac/WebCoreSupport/WebOpenPanelResultListener.mm:110
&gt; +    _chooser-&gt;deref();

Nit: It&apos;s sad we have to manage this ourselves.

&gt; Source/WebKit/mac/WebCoreSupport/WebOpenPanelResultListener.mm:111
&gt; +    _chooser = 0;

0 =&gt; nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961594</commentid>
    <comment_count>3</comment_count>
      <attachid>219265</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-12-19 15:49:38 -0800</bug_when>
    <thetext>Comment on attachment 219265
[iOS] Upstream PLATFORM(IOS) changes to Source/WebKit/

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

r=me

&gt; Source/WebKit/mac/Configurations/DebugRelease.xcconfig:33
&gt; -MACOSX_DEPLOYMENT_TARGET_iphoneos = 10.5;
&gt; -MACOSX_DEPLOYMENT_TARGET_iphonesimulator = 10.5;
&gt; +MACOSX_DEPLOYMENT_TARGET_iphoneos = 10.6;
&gt; +MACOSX_DEPLOYMENT_TARGET_iphonesimulator = 10.6;

Lies!

&gt; Source/WebKit/mac/Configurations/Version.xcconfig:35
&gt; -SYSTEM_VERSION_PREFIX_iphoneos = 6; // iPhone OS is most like SnowLeopard currently.
&gt; +SYSTEM_VERSION_PREFIX_iphoneos = 6; // iOS is most like SnowLeopard currently.

More lies!

&gt; Source/WebKit/mac/Configurations/WebKit.xcconfig:64
&gt; -HEADER_SEARCH_PATHS = $(WEBKITSYSTEMINTERFACE_STATIC_LIBRARY_HEADERS_FOLDER_PATH) $(WEBCORE_PRIVATE_HEADERS_DIR)/ForwardingHeaders $(WEBCORE_PRIVATE_HEADERS_DIR)/icu &quot;${BUILT_PRODUCTS_DIR}/DerivedSources/WebKit&quot; $(HEADER_SEARCH_PATHS);
&gt; +HEADER_SEARCH_PATHS = $(WEBKITSYSTEMINTERFACE_STATIC_LIBRARY_HEADERS_FOLDER_PATH) $(WEBCORE_PRIVATE_HEADERS_DIR)/ForwardingHeaders $(WEBCORE_PRIVATE_HEADERS_DIR)/icu &quot;${BUILT_PRODUCTS_DIR}/DerivedSources/WebKit&quot; &quot;$(BUILT_PRODUCTS_DIR)/usr/local/include&quot; $(HEADER_SEARCH_PATHS);

This typo exited in open source, but the curly brackets around &quot;${BUILT_PRODUCTS_DIR} &quot; should be parenthesis instead &quot;$(BUILT_PRODUCTS_DIR)&quot;.

&gt; Source/WebKit/mac/History/WebBackForwardList.mm:110
&gt;  + (void)initialize
&gt;  {
&gt; +#if !PLATFORM(IOS)
&gt;      JSC::initializeThreading();
&gt;      WTF::initializeMainThreadToProcessMainThread();
&gt;      RunLoop::initializeMainRunLoop();
&gt; +#endif

All code like this needs to turn into a runtime check eventually.  (Please file a bug.)

&gt; Source/WebKit/mac/WebView/WebFrame.mm:1751
&gt; +// WebCoreFrameBridge methods used by iOS applications and frameworks

Oh. The. Horror.  WebCoreFrameBride is long gone.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962674</commentid>
    <comment_count>4</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-12-23 17:57:21 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 219265 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219265&amp;action=review
&gt; 
&gt; Briefly read through some of this patch. When I have a moment, I&apos;ll look to finish reading through this patch and be more thorough.
&gt; 
&gt; &gt; Source/WebKit/mac/DOM/WebDOMOperations.mm:110
&gt; &gt; +    if (![self isKindOfClass:[DOMHTMLInputElement class]] &amp;&amp;
&gt; 
&gt; Nit: &amp;&amp; should be moved to the start of the next line.

Done.

&gt; 
&gt; &gt; Source/WebKit/mac/DOM/WebDOMOperations.mm:121
&gt; &gt; +    if (![self isKindOfClass:[DOMHTMLInputElement class]] &amp;&amp;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/DOM/WebDOMOperations.mm:125
&gt; &gt; +    Node *node = core(self);
&gt; 
&gt; Nit: This variable is used exactly once (below) and its name doesn&apos;t improve the readability of this code. I suggest we inline its value into the line below.

Done.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebBackForwardList.mm:181
&gt; &gt; +    HistoryItemVector::iterator it = historyItems.begin();
&gt; 
&gt; Nit: We should use the keyword auto here.

Done.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebBackForwardList.mm:182
&gt; &gt; +    while (it != historyItems.end()) {
&gt; 
&gt; Nit: We should look to convert this to a C++11 range-based for loop.

Done.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebBackForwardList.mm:184
&gt; &gt; +        it++;
&gt; 
&gt; Nit: Ideally we would use an C++11 range-based for loop (see above comment). Otherwise, I would use a pre increment operator here since we aren&apos;t using the return value of the post-increment operator.

I went with the range-based for loop.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebBackForwardList.mm:189
&gt; &gt; +        [NSNumber numberWithUnsignedInt:coreBFList-&gt;current()], WebBackForwardListDictionaryCurrentKey,
&gt; 
&gt; Nit: We should look to expose a better interface to BackForwardList so that we don&apos;t need to directly access its internal index (via BackForwardList::current()) as such a detail seems to violate encapsulation. Consider adding a FIXME comment.

// FIXME: Move into WebCore the code that deals directly with WebCore::BackForwardList.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebBackForwardList.mm:214
&gt; &gt; +    size_t listSize = coreBFList-&gt;entries().size();
&gt; &gt; +    if (currentIndex &gt;= listSize)
&gt; &gt; +        currentIndex = listSize - 1;
&gt; &gt; +    coreBFList-&gt;setCurrent(currentIndex);
&gt; 
&gt; Nit: We should look to expose a better interface to BackForwardList so that we don&apos;t need to manage its size and index. Such details seem to violate the encapsulation of the BackForwardList. Consider adding a FIXME comment.
&gt; 
&gt; &gt; Source/WebKit/mac/History/WebHistory.mm:362
&gt; &gt; +    WebHistoryItem *otherEntry= [_entriesByURL objectForKey:URLString];
&gt; 
&gt; Nit: Missing a space on the left side of the &apos;=&apos;.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebHistory.mm:367
&gt; &gt; +        if ([otherEntry lastVisitedTimeInterval]&lt;[entry lastVisitedTimeInterval]) {
&gt; 
&gt; Nit: Missing a space on both sides of the &apos;&lt;&apos;.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebHistory.mm:377
&gt; &gt; +            
&gt; 
&gt; Nit: Line begins with extraneous whitespace.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebHistory.mm:382
&gt; &gt; +        // Special case for merges when new items may be older than pre-existing entries.
&gt; &gt; +        else
&gt; 
&gt; Nit: The else should be on the same line as the &apos;}&apos;. Consider moving the comment on line 381 to be inline on line 382.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebHistoryItem.mm:481
&gt; &gt; +#if PLATFORM(IOS)
&gt; &gt;  - (NSDictionary *)dictionaryRepresentation
&gt; &gt;  {
&gt; &gt; +    return [self dictionaryRepresentationIncludingChildren:YES];
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +- (NSDictionary *)dictionaryRepresentationIncludingChildren:(BOOL)includesChildren
&gt; &gt; +#else
&gt; &gt; +- (NSDictionary *)dictionaryRepresentation
&gt; &gt; +#endif
&gt; 
&gt; We should look to clean this up after we upstream iOS. One way to clean this up is to keep the dictionaryRepresentationIncludingChildren() function and compile it without guards then update the Mac callers to pass NO. You may want to consider adding a FIXME comment to the code to help increase the visibility of this effort.

// FIXME: The only iOS difference here should be whether YES or NO is passed to dictionaryRepresentationIncludingChildren:

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebHistoryItem.mm:555
&gt; &gt; +    if (viewportArguments) {
&gt; &gt; +        [dict setObject:viewportArguments forKey:@&quot;WebViewportArguments&quot;];
&gt; &gt; +    }
&gt; 
&gt; Nit: The curly braces aren&apos;t necessary.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebCache.mm:202
&gt; &gt; +    WebCore::SecurityOrigin* topOrigin = 0;
&gt; 
&gt; Nit: Use nullptr instead of 0.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebCache.mm:219
&gt; &gt; +    WebCore::SecurityOrigin* topOrigin = 0;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebCache.mm:230
&gt; &gt; +        return 0;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebCache.mm:234
&gt; &gt; +        return 0;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebCache.mm:237
&gt; &gt; +        return 0;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:299
&gt; &gt; +    
&gt; 
&gt; Nit: This line has extraneous whitespace.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:523
&gt; &gt; +    if (queryLength == 0)
&gt; 
&gt; Nit: !queryLength instead of queryLength == 0

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:529
&gt; &gt; +    while (equalSearchRange.location &lt; queryLength - 1 &amp;&amp; equalSearchRange.length != 0) {
&gt; 
&gt; Nit: The &quot;!= 0&quot; isn&apos;t necessary as NSRange.length is an unsigned integer.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:555
&gt; &gt; +        if (keyRange.length != 0 &amp;&amp; valueRange.length != 0) {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebNSURLExtras.mm:560
&gt; &gt; +            if ([key length] != 0 &amp;&amp; [value length] != 0)
&gt; 
&gt; Nit: Similarly the &quot;!= 0&quot; isn&apos;t necessary as NSString.length is an unsigned datatype.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Plugins/WebPluginController.mm:108
&gt; &gt; +    static bool audioSessionWasInitialized = false;
&gt; 
&gt; Nit: It&apos;s unnecessary to explicitly initialize this variable to false. The C and C++ standard guarantee that variables of static storage duration are zero initialized.
&gt; 
&gt; Also, we tend to follow the Cocoa naming convention and place the verb at the beginning of the variable name (e.g. wasAudioSessionInitialized).

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Plugins/WebPluginController.mm:215
&gt; &gt; +    FrameView* coreView = coreFrame ? coreFrame-&gt;view() : 0;
&gt; 
&gt; Nit: 0 =&gt; nullptr.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Plugins/WebPluginController.mm:318
&gt; &gt; +    for (NSUInteger i = 0; i &lt; viewsCount; i++)
&gt; 
&gt; Nit: i++ =&gt; ++i (since we aren&apos;t using the return value; although the compiler is likely smart enough to realize this).

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/Plugins/WebPluginController.mm:323
&gt; &gt; +    for (NSUInteger i = 0; i &lt; viewsNotInDocumentCount; i++)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/Plugins/WebPluginController.mm:338
&gt; &gt; +    for (NSUInteger i = 0; i &lt; viewsCount; i++)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/Plugins/WebPluginController.mm:343
&gt; &gt; +    for (NSUInteger i = 0; i &lt; viewsNotInDocumentCount; i++)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/Storage/WebDatabaseManager.mm:204
&gt; &gt; +                deletedDatabaseFileCount++;
&gt; 
&gt; Nit:: deletedDatabaseFileCount++ =&gt; ++deletedDatabaseFileCount

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm:910
&gt; &gt; +    return 0;
&gt; 
&gt; Nit: 0 =&gt; nullptr

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm:919
&gt; &gt; +    return 0;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:807
&gt; &gt; +    m_selectionNotificationSuppressions--;
&gt; 
&gt; Nit: m_selectionNotificationSuppressions-- =&gt; --m_selectionNotificationSuppressions

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:1880
&gt; &gt; +            return 0;
&gt; 
&gt; Nit: 0 =&gt; nullptr

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:2159
&gt; &gt; +                        return 0;
&gt; 
&gt; Nit: 0 =&gt; nullptr

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebOpenPanelResultListener.mm:107
&gt; &gt; +    for (NSUInteger i = 0; i &lt; count; i++)
&gt; 
&gt; Nit: i++ =&gt; ++i

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebOpenPanelResultListener.mm:110
&gt; &gt; +    _chooser-&gt;deref();
&gt; 
&gt; Nit: It&apos;s sad we have to manage this ourselves.

    // FIXME: we shouldn&apos;t be manually deref()&apos;ing here.

&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebOpenPanelResultListener.mm:111
&gt; &gt; +    _chooser = 0;
&gt; 
&gt; 0 =&gt; nullptr

Fixed.

Thanks for the feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962675</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-12-23 17:58:20 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 219265 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219265&amp;action=review
&gt; 
&gt; r=me

Thanks!

&gt; 
&gt; &gt; Source/WebKit/mac/Configurations/DebugRelease.xcconfig:33
&gt; &gt; -MACOSX_DEPLOYMENT_TARGET_iphoneos = 10.5;
&gt; &gt; -MACOSX_DEPLOYMENT_TARGET_iphonesimulator = 10.5;
&gt; &gt; +MACOSX_DEPLOYMENT_TARGET_iphoneos = 10.6;
&gt; &gt; +MACOSX_DEPLOYMENT_TARGET_iphonesimulator = 10.6;
&gt; 
&gt; Lies!

Updated to 10.8.

&gt; 
&gt; &gt; Source/WebKit/mac/Configurations/Version.xcconfig:35
&gt; &gt; -SYSTEM_VERSION_PREFIX_iphoneos = 6; // iPhone OS is most like SnowLeopard currently.
&gt; &gt; +SYSTEM_VERSION_PREFIX_iphoneos = 6; // iOS is most like SnowLeopard currently.
&gt; 
&gt; More lies!

Ditto.

&gt; 
&gt; &gt; Source/WebKit/mac/Configurations/WebKit.xcconfig:64
&gt; &gt; -HEADER_SEARCH_PATHS = $(WEBKITSYSTEMINTERFACE_STATIC_LIBRARY_HEADERS_FOLDER_PATH) $(WEBCORE_PRIVATE_HEADERS_DIR)/ForwardingHeaders $(WEBCORE_PRIVATE_HEADERS_DIR)/icu &quot;${BUILT_PRODUCTS_DIR}/DerivedSources/WebKit&quot; $(HEADER_SEARCH_PATHS);
&gt; &gt; +HEADER_SEARCH_PATHS = $(WEBKITSYSTEMINTERFACE_STATIC_LIBRARY_HEADERS_FOLDER_PATH) $(WEBCORE_PRIVATE_HEADERS_DIR)/ForwardingHeaders $(WEBCORE_PRIVATE_HEADERS_DIR)/icu &quot;${BUILT_PRODUCTS_DIR}/DerivedSources/WebKit&quot; &quot;$(BUILT_PRODUCTS_DIR)/usr/local/include&quot; $(HEADER_SEARCH_PATHS);
&gt; 
&gt; This typo exited in open source, but the curly brackets around &quot;${BUILT_PRODUCTS_DIR} &quot; should be parenthesis instead &quot;$(BUILT_PRODUCTS_DIR)&quot;.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/mac/History/WebBackForwardList.mm:110
&gt; &gt;  + (void)initialize
&gt; &gt;  {
&gt; &gt; +#if !PLATFORM(IOS)
&gt; &gt;      JSC::initializeThreading();
&gt; &gt;      WTF::initializeMainThreadToProcessMainThread();
&gt; &gt;      RunLoop::initializeMainRunLoop();
&gt; &gt; +#endif
&gt; 
&gt; All code like this needs to turn into a runtime check eventually.  (Please file a bug.)

Filed https://bugs.webkit.org/show_bug.cgi?id=126197

&gt; 
&gt; &gt; Source/WebKit/mac/WebView/WebFrame.mm:1751
&gt; &gt; +// WebCoreFrameBridge methods used by iOS applications and frameworks
&gt; 
&gt; Oh. The. Horror.  WebCoreFrameBride is long gone.  :)

// FIXME: WebCoreFrameBridge is long gone. Can we remove these methods?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962678</commentid>
    <comment_count>6</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-12-23 18:04:18 -0800</bug_when>
    <thetext>Committed r161043: &lt;http://trac.webkit.org/changeset/161043&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962723</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-12-23 23:40:01 -0800</bug_when>
    <thetext>I rolled this out in http://trac.webkit.org/changeset/161049 because it broke the 32-bit Mac build. Reopening to investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963564</commentid>
    <comment_count>8</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-12-31 15:43:56 -0800</bug_when>
    <thetext>Committed r161185: &lt;http://trac.webkit.org/changeset/161185&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219265</attachid>
            <date>2013-12-14 18:06:49 -0800</date>
            <delta_ts>2013-12-19 15:49:37 -0800</delta_ts>
            <desc>[iOS] Upstream PLATFORM(IOS) changes to Source/WebKit/</desc>
            <filename>bug-125746-20131214180648.patch</filename>
            <type>text/plain</type>
            <size>591491</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQxNTE1YWE3MjFjMmVhMzc3
M2Q1N2IwMmMxZWQyM2EwODViMTE2MzcuLmE3MzRmZWQ2OGUwZjIzNmQ4NTVmMzIwOGYxMThlZjdm
NGY5OTViNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMTItMTQgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFtIFBMQVRGT1JN
KElPUykgY2hhbmdlcyB0byBTb3VyY2UvV2ViS2l0LworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogQWRkZWQgV2ViRGF0YWJhc2VNYW5hZ2VySW50ZXJuYWwuaAorICAgICAgICBhbmQgaU9TLnhj
Y29uZmlnLgorCiAyMDEzLTEyLTEzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgY29ycmVjdGlvbiBhZnRlciByMTYwNTQ4Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9p
b3MvQ2hhbmdlTG9nCmluZGV4IGQ1OWZhNWIzZDcxZGY1NWE4YWJlNjFmNDViYzZlYjUzOGFkZDZj
NTMuLjNhY2E5MWNjZjIzZTdjNzMwMjAyMzM4NjdlYWFlYjFmNjY3MmJlZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0xMi0xNCAgQW5keSBFc3RlcyAgPGFlc3Rlc0Bh
cHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVXBzdHJlYW0gUExBVEZPUk0oSU9TKSBjaGFuZ2Vz
IHRvIFNvdXJjZS9XZWJLaXQvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjU3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbToKKyAgICAg
ICAgKC1bV2ViVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQXRTdGFydE9yRW5kT2ZXb3JkXSk6IENo
YW5nZWQgYSBjb21tZW50CisgICAgICAgIHRvIG1lbnRpb24gaU9TIHJhdGhlciB0aGFuIGlQaG9u
ZS4KKwogMjAxMy0xMi0wNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+
CiAKICAgICAgICAgQ29uc29saWRhdGUgdmFyaW91cyBmcmFtZSBzbmFwc2hvdCBjYXBhYmlsaXRp
ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZTAzZjkxNjVlNmU1MWNmMjhiOWJlODkzZTVkNGM0ZTll
YjYyYzU2Yi4uZmNiZDk3ZjYxNTdmM2I3ODZlNGIwOTFjMTFhMWM4MGNiM2NlYjFhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1NiBAQAogMjAxMy0xMi0xNCAgQW5keSBFc3RlcyAgPGFl
c3Rlc0BhcHBsZS5jb20+CiAKKyAgICAgICAgW2lPU10gVXBzdHJlYW0gUExBVEZPUk0oSU9TKSBj
aGFuZ2VzIHRvIFNvdXJjZS9XZWJLaXQvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjU3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgc3RyYWlnaHQgdXBzdHJlYW1pbmcgb2YgdGhlIHZh
cmlvdXMgUExBVEZPUk0oSU9TKSBjaGFuZ2VzCisgICAgICAgIG1hZGUgdG8gU291cmNlL1dlYktp
dC8gd2l0aCB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6CisKKyAgICAgICAgLSBJbmNsdWRl
cyBvZiA8Q29jb2EvQ29jb2EuaD4gd2VyZSBnZW5lcmFsbHkgcmVwbGFjZWQgd2l0aCBhbiBpbmNs
dWRlCisgICAgICAgIG9mIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4gZm9sbG93ZWQgYnkgYW4g
aW5jbHVkZSBvZgorICAgICAgICA8QXBwS2l0L0FwcEtpdC5oPiBvbiBub24taU9TIHBsYXRmb3Jt
cy4gVGhpcyBhc3N1bWVzIHRoYXQgbm9ib2R5IHdhcworICAgICAgICByZWx5aW5nIG9uIDxDb2Nv
YS9Db2NvYS5oPidzIGluY2x1c2lvbiBvZiA8Q29yZURhdGEvQ29yZURhdGEuaD4uCisKKyAgICAg
ICAgLSBJbmNsdWRlcyBvZiA8Q29jb2EvQ29jb2EuaD4gYW5kIDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4gd2VyZQorICAgICAgICByZW1vdmVkIGZyb20gZmlsZXMgdGhhdCBpbmNsdWRlIFdlYktp
dFByZWZpeC5oLgorCisgICAgICAgIC0gSW5zdGFuY2VzIG9mICdpUGhvbmUgKE9TKScgaW4gY29t
bWVudHMgd2VyZSByZXBsYWNlZCB3aXRoICdpT1MnLCBhbmQKKyAgICAgICAgb3RoZXIgc2Vuc2l0
aXZlIHRlcm1zIHdlcmUgZWxpZGVkLgorCisgICAgICAgIC0gVmFyaW91cyBQTEFURk9STShJT1Mp
IGJsb2NrcyB3ZXJlIHNpbXBsaWZpZWQuIEZvciBpbnN0YW5jZToKKworICAgICAgICAgICAgI2lm
ICFQTEFURk9STShJT1MpCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICNlbmRpZgorICAg
ICAgICAgICAgI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAg
I2VuZGlmCisKKyAgICAgICAgV2FzIHNpbXBsaWZpZWQgdG86CisKKyAgICAgICAgICAgICNpZiAh
UExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAjZWxzZQorICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAqIENvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWc6CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhj
Y29uZmlnOgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL1ZlcnNpb24ueGNjb25maWc6CisgICAg
ICAgICogQ29uZmlndXJhdGlvbnMvV2ViS2l0LnhjY29uZmlnOgorICAgICAgICAqIENvbmZpZ3Vy
YXRpb25zL2lPUy54Y2NvbmZpZzogQWRkZWQuCisgICAgICAgICogRE9NL1dlYkRPTU9wZXJhdGlv
bnMubW06CisgICAgICAgICogRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0Q29udGV4dE1lbnVE
ZWxlZ2F0ZS5tbToKKyAgICAgICAgKiBEZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRFZGl0aW5n
RGVsZWdhdGUubToKKyAgICAgICAgKiBEZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRQb2xpY3lE
ZWxlZ2F0ZS5tOgorICAgICAgICAqIERlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFVJRGVsZWdh
dGUuaDoKKyAgICAgICAgKiBEZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRVSURlbGVnYXRlLm06
CisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06CisgICAgICAgICogSGlz
dG9yeS9XZWJIaXN0b3J5Lm1tOgorICAgICAgICAqIEhpc3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW06
CisgICAgICAgICogSGlzdG9yeS9XZWJVUkxzV2l0aFRpdGxlcy5tOgorICAgICAgICAqIE1pc2Mv
V2ViQ2FjaGUubW06CisgICAgICAgICogTWlzYy9XZWJEb3dubG9hZC5tbToKKyAgICAgICAgKiBN
aXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tOgorICAgICAgICAqIE1pc2MvV2ViSWNvbkRhdGFi
YXNlLm1tOgorICAgICAgICAqIE1pc2MvV2ViSWNvbkRhdGFiYXNlSW50ZXJuYWwuaDoKKyAgICAg
ICAgKiBNaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAqIE1pc2MvV2ViS2l0
U3lzdGVtQml0cy5tOgorICAgICAgICAqIE1pc2MvV2ViS2l0VmVyc2lvbkNoZWNrcy5oOgorICAg
ICAgICAqIE1pc2MvV2ViS2l0VmVyc2lvbkNoZWNrcy5tOgorICAgICAgICAqIE1pc2MvV2ViTG9j
YWxpemFibGVTdHJpbmdzLm1tOgorICAgICAgICAqIE1pc2MvV2ViTlNBcnJheUV4dHJhcy5oOgor
ICAgICAgICAqIE1pc2MvV2ViTlNBcnJheUV4dHJhcy5tOgorICAgICAgICAqIE1pc2MvV2ViTlND
b250cm9sRXh0cmFzLmg6CisgICAgICAgICogTWlzYy9XZWJOU0NvbnRyb2xFeHRyYXMubToKKyAg
ICAgICAgKiBNaXNjL1dlYk5TRGljdGlvbmFyeUV4dHJhcy5oOgorICAgICAgICAqIE1pc2MvV2Vi
TlNEaWN0aW9uYXJ5RXh0cmFzLm06CisgICAgICAgICogTWlzYy9XZWJOU0V2ZW50RXh0cmFzLm06
CisgICAgICAgICogTWlzYy9XZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLm1tOgorICAgICAgICAqIE1p
c2MvV2ViTlNJbWFnZUV4dHJhcy5oOgorICAgICAgICAqIE1pc2MvV2ViTlNJbWFnZUV4dHJhcy5t
OgorICAgICAgICAqIE1pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tOgorICAgICAgICAqIE1p
c2MvV2ViTlNQcmludE9wZXJhdGlvbkV4dHJhcy5oOgorICAgICAgICAqIE1pc2MvV2ViTlNQcmlu
dE9wZXJhdGlvbkV4dHJhcy5tOgorICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMubW06Cisg
ICAgICAgICogTWlzYy9XZWJOU1ZpZXdFeHRyYXMubToKKyAgICAgICAgKiBNaXNjL1dlYk5TV2lu
ZG93RXh0cmFzLm06CisgICAgICAgICogUGFuZWxzL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaDoK
KyAgICAgICAgKiBQYW5lbHMvV2ViQXV0aGVudGljYXRpb25QYW5lbC5tOgorICAgICAgICAqIFBh
bmVscy9XZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5tOgorICAgICAgICAqIFBsdWdpbnMv
SG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKiBQbHVnaW5z
L1dlYkJhc2VQbHVnaW5QYWNrYWdlLmg6CisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlUGx1Z2lu
UGFja2FnZS5tbToKKyAgICAgICAgKiBQbHVnaW5zL1dlYkphdmFQbHVnSW4uaDoKKyAgICAgICAg
KiBQbHVnaW5zL1dlYlBsdWdpbkNvbnRhaW5lckNoZWNrLm1tOgorICAgICAgICAqIFBsdWdpbnMv
V2ViUGx1Z2luQ29udHJvbGxlci5oOgorICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2luQ29udHJv
bGxlci5tbToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm1tOgorICAgICAg
ICAqIFBsdWdpbnMvV2ViUGx1Z2luUGFja2FnZS5tbToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBs
dWdpbnNQcml2YXRlLm06CisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW06
CisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAg
KiBTdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlckNsaWVudC5tbToKKyAgICAgICAgKiBTdG9yYWdl
L1dlYkRhdGFiYXNlTWFuYWdlckludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIFN0b3JhZ2Uv
V2ViU3RvcmFnZU1hbmFnZXIubW06CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlv
blBhbmVsLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5tbToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW06CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5tbToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJLZXlHZW5lcmF0b3IubW06CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZp
Y2F0aW9uQ2xpZW50Lm1tOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyLm1tOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3Jp
Z2luLm1tOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tbToK
KyAgICAgICAgKiBXZWJLaXRQcmVmaXguaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkFyY2hpdmUu
bW06CisgICAgICAgICogV2ViVmlldy9XZWJDbGlwVmlldy5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViRGF0YVNvdXJjZS5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoaW5nLmg6CisgICAgICAgICogV2ViVmlldy9XZWJEZWxlZ2F0ZUltcGxlbWVudGF0
aW9uQ2FjaGluZy5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkRldmljZU9yaWVudGF0aW9uLm1t
OgorICAgICAgICAqIFdlYlZpZXcvV2ViRG9jdW1lbnRJbnRlcm5hbC5oOgorICAgICAgICAqIFdl
YlZpZXcvV2ViRG9jdW1lbnRMb2FkZXJNYWMubW06CisgICAgICAgICogV2ViVmlldy9XZWJEeW5h
bWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViRm9ybURl
bGVnYXRlLm06CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKiBXZWJW
aWV3L1dlYkZyYW1lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmlldy5t
bToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmg6CisgICAgICAg
ICogV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXdJbnRlcm5hbC5oOgorICAgICAgICAq
IFdlYlZpZXcvV2ViUERGRG9jdW1lbnRFeHRyYXMuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlBE
RkRvY3VtZW50RXh0cmFzLm1tOgorICAgICAgICAqIFdlYlZpZXcvV2ViUERGUmVwcmVzZW50YXRp
b24uaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlBERlJlcHJlc2VudGF0aW9uLm1tOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViUERGVmlldy5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViUERGVmlldy5t
bToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViUmVzb3VyY2UubW06CisgICAgICAgICogV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlRleHRJdGVyYXRvci5tbToKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5o
OgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEubW06CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3SW50ZXJuYWwuaDoKKworMjAxMy0xMi0xNCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBs
ZS5jb20+CisKICAgICAgICAgW2lPU10gVXBzdHJlYW0gY2hhbmdlcyB0byBXZWJLaXQgUHVibGlj
IGFuZCBQcml2YXRlIGhlYWRlcnMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNTc0NQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA2MTNjNDZlNzBhYjc3MzQ2ZWNiZjc1MTQzMzg1N2Y2MTY3
ODU2YjhhLi45ZDMzNjM4NmZmZDA5YzkxOTk2MTY2ZGUwODlhNzhjNzFhZDI1ZWM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMyw2
ICsxMDMsNyBAQAogCQk1MTU4RjZFRjEwNkQ4NjJBMDBBRjQ1N0MgLyogV2ViSGlzdG9yeURlbGVn
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTU4
RjZFRTEwNkQ4NjJBMDBBRjQ1N0MgLyogV2ViSGlzdG9yeURlbGVnYXRlLmggKi87IH07CiAJCTUx
ODVGNjI2MTA3MTJCODAwMDdBQTM5MyAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NUY2MjUxMDcxMkI4MDAwN0FB
MzkzIC8qIFdlYk5hdmlnYXRpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE4NUY2MjgxMDcxMkI5NzAwN0FBMzkzIC8qIFdlYk5hdmln
YXRpb25EYXRhLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE4NUY2MjcxMDcxMkI5NzAwN0FBMzkzIC8qIFdlYk5hdmlnYXRpb25EYXRhLm1tICovOyB9
OworCQk1MUFFREVGMTBDRUNGNDU3MDA4NTQzMjggLyogV2ViRGF0YWJhc2VNYW5hZ2VySW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUVE
RUYwMENFQ0Y0NTcwMDg1NDMyOCAvKiBXZWJEYXRhYmFzZU1hbmFnZXJJbnRlcm5hbC5oICovOyB9
OwogCQk1MUIyQTEwMDBBREIxNUQwMDAyQTlCRUUgLyogV2ViSWNvbkRhdGFiYXNlRGVsZWdhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjJBMEZG
MEFEQjE1RDAwMDJBOUJFRSAvKiBXZWJJY29uRGF0YWJhc2VEZWxlZ2F0ZS5oICovOyB9OwogCQk1
MUM3MTRGQjBCMjBGNzlGMDBFNUUzM0MgLyogV2ViQmFja0ZvcndhcmRMaXN0SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzcxNEZBMEIy
MEY3OUYwMEU1RTMzQyAvKiBXZWJCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oICovOyB9OwogCQk1
MUNCRkNBRDBEMTBFNkM1MDAyREJGNTEgLyogV2ViQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0JGQ0FDMEQx
MEU2QzUwMDJEQkY1MSAvKiBXZWJDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oICovOyB9OwpAQCAt
NTg3LDYgKzU4OCw3IEBACiAJCTUxQThCNTc5MDQyODM0RjcwMENBMkQzQSAvKiBXZWJWaWV3Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTUxQThCNTdBMDQyODM0RjcwMENBMkQzQSAvKiBXZWJWaWV3Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlldy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCTUxQThCNTdEMDQyODM1M0EwMENBMkQzQSAvKiBXZWJWaWV3UHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWV3UHJpdmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKKwkJNTFBRURFRjAwQ0VDRjQ1NzAwODU0MzI4IC8qIFdlYkRhdGFiYXNlTWFuYWdlckludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRhdGFiYXNlTWFuYWdl
ckludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjJBMEZGMEFEQjE1
RDAwMDJBOUJFRSAvKiBXZWJJY29uRGF0YWJhc2VEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJJY29uRGF0YWJhc2VEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUM3MTRGQTBCMjBGNzlGMDBFNUUzM0MgLyogV2ViQmFja0Zvcndh
cmRMaXN0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQmFj
a0ZvcndhcmRMaXN0SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFD
QkZDQUMwRDEwRTZDNTAwMkRCRjUxIC8qIFdlYkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTksNiArOTAxLDcgQEAKIAkJRjgz
NEFBRDYwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlRleHRJdGVyYXRvci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjhDQTE1QjUwMjlBMzlEOTAxMDAwMTIyIC8qIFdlYkF1dGhl
bnRpY2F0aW9uUGFuZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViQXV0aGVudGljYXRpb25QYW5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjhDQTE1QjYwMjlBMzlEOTAx
MDAwMTIyIC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJBdXRoZW50aWNhdGlvblBhbmVsLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owor
CQlGRUU3RDY5MTBEOTlCMDZBMDA1MzUxRjYgLyogaU9TLnhjY29uZmlnICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IGlPUy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJh
bWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTA1MCw2ICsxMDUzLDcgQEAKIAkJCQkx
QzkwNEZENTBCQTlERDBGMDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLywKIAkJCQkxQzkwNEZE
NDBCQTlERDBGMDA4MUU5RDAgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovLAogCQkJCTQ0OTA5
OEI5MEY4RjgyREYwMDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyAqLywKKwkJCQlG
RUU3RDY5MTBEOTlCMDZBMDA1MzUxRjYgLyogaU9TLnhjY29uZmlnICovLAogCQkJCTFDOTA0RkQz
MEJBOUREMEYwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovLAogCQkJCTFDOTA0RkQyMEJB
OUREMEYwMDgxRTlEMCAvKiBXZWJLaXQueGNjb25maWcgKi8sCiAJCQkpOwpAQCAtMTE3OCw2ICsx
MTgyLDcgQEAKIAkJCQk1MTFGM0ZEMTBDRUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VNYW5h
Z2VyLm1tICovLAogCQkJCTUxMUYzRkQzMENFQ0M4OEYwMDg1MjU2NSAvKiBXZWJEYXRhYmFzZU1h
bmFnZXJDbGllbnQuaCAqLywKIAkJCQk1MTFGM0ZENDBDRUNDODhGMDA4NTI1NjUgLyogV2ViRGF0
YWJhc2VNYW5hZ2VyQ2xpZW50Lm1tICovLAorCQkJCTUxQUVERUYwMENFQ0Y0NTcwMDg1NDMyOCAv
KiBXZWJEYXRhYmFzZU1hbmFnZXJJbnRlcm5hbC5oICovLAogCQkJCTUxMUYzRkQyMENFQ0M4OEYw
MDg1MjU2NSAvKiBXZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmggKi8sCiAJCQkJQTVERUZDMEQx
MUQ1MzQzRTAwODg1MjczIC8qIFdlYkRhdGFiYXNlUXVvdGFNYW5hZ2VyLmggKi8sCiAJCQkJQTVE
RUZDMEUxMUQ1MzQzRTAwODg1MjczIC8qIFdlYkRhdGFiYXNlUXVvdGFNYW5hZ2VyLm1tICovLApA
QCAtMTcwNCw2ICsxNzA5LDcgQEAKIAkJCQk5Mzk4MTAxNjA4MjRCRjAxMDA4REYwMzggLyogV2Vi
Q29yZVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTJBMUE0MTIzQjBCM0MwMDlG
RTEyQSAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMUYzRkQ3
MENFQ0M4OEYwMDg1MjU2NSAvKiBXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxQUVERUYxMENFQ0Y0NTcwMDg1NDMyOCAvKiBXZWJEYXRhYmFzZU1hbmFnZXJJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRjNGRDYwQ0VDQzg4RjAwODUyNTY1IC8q
IFdlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1REVGQzBG
MTFENTM0M0UwMDg4NTI3MyAvKiBXZWJEYXRhYmFzZVF1b3RhTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5ODEwNEIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkRhdGFTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IGM1ZDdiNGU2MWIxZjQxNTk0OThmYjI1MWFlMmU5
YzdhMDE1ODVlOGQuLjg0ZjNjNWFjOWU5M2QzNGNmODQyZDA4NjVhOTM3MDMxZmZiODdkMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3Np
dGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxl
UG9zaXRpb24ubW0KQEAgLTMwMSw3ICszMDEsNyBAQCAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilw
b3NpdGlvbkF0U3RhcnRPckVuZE9mV29yZAogewogICAgIC8vIFJpcHBlZCBmcm9tIFdlYkNvcmU6
OkZyYW1lOjptb3ZlU2VsZWN0aW9uVG9TdGFydE9yRW5kT2ZDdXJyZW50V29yZAogICAgIAotICAg
IC8vIE5vdGU6IHRoaXMgaXMgdGhlIGlQaG9uZSBub3Rpb24sIG5vdCB0aGUgdW5pY29kZSBub3Rp
b24uCisgICAgLy8gTm90ZTogdGhpcyBpcyB0aGUgaU9TIG5vdGlvbiwgbm90IHRoZSB1bmljb2Rl
IG5vdGlvbi4KICAgICAvLyBIZXJlLCBhIHdvcmQgc3RhcnRzIHdpdGggbm9uLXdoaXRlc3BhY2Ug
b3IgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBhbmQKICAgICAvLyBlbmRzIGF0IHRoZSBuZXh0IHdo
aXRlc3BhY2UsIG9yIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKaW5kZXggMmNjZWM5ZjlmYWVmZGFk
NzAxZmJlYTU4ZjFmOWY3NjcxY2JkNzRlNC4uOTllYmE4MzRmODViOTQzN2Q4YjAyNWUyNTM4YjYz
MTJkMzJkMTdmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMv
QmFzZS54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9CYXNl
LnhjY29uZmlnCkBAIC0xOSw3ICsxOSw5IEBACiAvLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAvLyBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIC8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAi
aU9TLnhjY29uZmlnIgogCiBDTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4Owog
Q0xBTkdfQ1hYX0xJQlJBUlkgPSBsaWJjKys7CkBAIC03OCw3ICs4MCwxMCBAQCBERUJVR19ERUZJ
TkVTX25vcm1hbCA9IE5ERUJVRzsKIERFQlVHX0RFRklORVMgPSAkKERFQlVHX0RFRklORVNfJChD
VVJSRU5UX1ZBUklBTlQpKTsKIAogR0NDX09QVElNSVpBVElPTl9MRVZFTCA9ICQoR0NDX09QVElN
SVpBVElPTl9MRVZFTF8kKENVUlJFTlRfVkFSSUFOVCkpOwotR0NDX09QVElNSVpBVElPTl9MRVZF
TF9ub3JtYWwgPSAyOworR0NDX09QVElNSVpBVElPTl9MRVZFTF9ub3JtYWwgPSAkKEdDQ19PUFRJ
TUlaQVRJT05fTEVWRUxfbm9ybWFsXyQoUExBVEZPUk1fTkFNRSkpOworR0NDX09QVElNSVpBVElP
Tl9MRVZFTF9ub3JtYWxfaXBob25lb3MgPSAzOworR0NDX09QVElNSVpBVElPTl9MRVZFTF9ub3Jt
YWxfaXBob25lc2ltdWxhdG9yID0gMzsKK0dDQ19PUFRJTUlaQVRJT05fTEVWRUxfbm9ybWFsX21h
Y29zeCA9IDI7CiBHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMX2RlYnVnID0gMDsKIAogU1RSSVBfSU5T
VEFMTEVEX1BST0RVQ1QgPSAkKFNUUklQX0lOU1RBTExFRF9QUk9EVUNUXyQoQ1VSUkVOVF9WQVJJ
QU5UKSk7CkBAIC04OSwxMCArOTQsMTQgQEAgU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1RfZGVidWcg
PSBOTzsKIC8vIGJ1aWxkaW5nIHRoZSBNaUcgYmluZGluZ3MgZm9yIFdlYktpdFBsdWdpbkNsaWVu
dCBldmVuIHdoZW4gdGhlIGZ1bmN0aW9ucyB0aGF0IHRoZSBiaW5kaW5ncyB3cmFwIGFyZSBub3Qg
YnVpbHQuCiBERUFEX0NPREVfU1RSSVBQSU5HID0gWUVTOwogCi1TRUNUT1JERVJfRkxBR1MgPSAt
V2wsLW9yZGVyX2ZpbGUsbWFjL1dlYktpdC5vcmRlcjsKK1NFQ1RPUkRFUl9GTEFHUyA9ICQoU0VD
VE9SREVSX0ZMQUdTXyQoUExBVEZPUk1fTkFNRSkpOworU0VDVE9SREVSX0ZMQUdTX2lwaG9uZW9z
ID0gLVdsLC1vcmRlcl9maWxlLCQoU0RLUk9PVCkvQXBwbGVJbnRlcm5hbC9PcmRlckZpbGVzL1dl
YktpdC5vcmRlcjsKK1NFQ1RPUkRFUl9GTEFHU19tYWNvc3ggPSAtV2wsLW9yZGVyX2ZpbGUsbWFj
L1dlYktpdC5vcmRlcjsKIAogU0RLUk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKIAorU1VQUE9SVEVE
X1BMQVRGT1JNUyA9IGlwaG9uZXNpbXVsYXRvciBpcGhvbmVvcyBtYWNvc3g7CisKIFRPT0xDSEFJ
TlMgPSAkKFRPT0xDSEFJTlNfJChQTEFURk9STV9OQU1FKSk7CiBUT09MQ0hBSU5TX2lwaG9uZW9z
ID0gJChUT09MQ0hBSU5TKTsKIFRPT0xDSEFJTlNfaXBob25lc2ltdWxhdG9yID0gJChUT09MQ0hB
SU5TKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0RlYnVn
UmVsZWFzZS54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0RlYnVn
UmVsZWFzZS54Y2NvbmZpZwppbmRleCBiZjNhOTgxYjU2YjkyZmVhNDFhOGU3MjJjOWUxM2JjOGM0
MWJkNThkLi5kOWFhMTExYTg0MTU2NjVhZDg2Yjc2NGM0ZTJkMzE0MjdkNmU5MWZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25m
aWcKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhj
Y29uZmlnCkBAIC0yOSw4ICsyOSw4IEBAIEFSQ0hTID0gJChBUkNIU19TVEFOREFSRF8zMl82NF9C
SVQpOwogT05MWV9BQ1RJVkVfQVJDSCA9IFlFUzsKIAogTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VU
ID0gJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChQTEFURk9STV9OQU1FKSk7Ci1NQUNPU1hf
REVQTE9ZTUVOVF9UQVJHRVRfaXBob25lb3MgPSAxMC41OwotTUFDT1NYX0RFUExPWU1FTlRfVEFS
R0VUX2lwaG9uZXNpbXVsYXRvciA9IDEwLjU7CitNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfaXBo
b25lb3MgPSAxMC42OworTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUX2lwaG9uZXNpbXVsYXRvciA9
IDEwLjY7CiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfbWFjb3N4ID0gJChNQUNPU1hfREVQTE9Z
TUVOVF9UQVJHRVRfbWFjb3N4XyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKTsKIE1B
Q09TWF9ERVBMT1lNRU5UX1RBUkdFVF9tYWNvc3hfMTA4MCA9IDEwLjg7CiBNQUNPU1hfREVQTE9Z
TUVOVF9UQVJHRVRfbWFjb3N4XzEwOTAgPSAxMC45OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ29uZmlndXJhdGlvbnMvVmVyc2lvbi54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NvbmZpZ3VyYXRpb25zL1ZlcnNpb24ueGNjb25maWcKaW5kZXggZjhiOGEwYmQwZDY3YzgwMzg5
NzBhNmZhMGZjZDQ3Y2JmZmNiYTliNy4uYTBiNDE5MjgzYjVkMjUxZjA1OTRjNWM1MmJkMjhmZjdl
OTg4ODUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvVmVy
c2lvbi54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9WZXJz
aW9uLnhjY29uZmlnCkBAIC0zMiw3ICszMiw3IEBAIFNIT1JUX1ZFUlNJT05fU1RSSU5HID0gJChT
SE9SVF9WRVJTSU9OX1NUUklOR18kKENPTkZJR1VSQVRJT04pKQogCiAvLyBUaGUgc3lzdGVtIHZl
cnNpb24gcHJlZml4IGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN5c3RlbSB2ZXJzaW9uLgogU1lT
VEVNX1ZFUlNJT05fUFJFRklYID0gJChTWVNURU1fVkVSU0lPTl9QUkVGSVhfJChQTEFURk9STV9O
QU1FKSk7Ci1TWVNURU1fVkVSU0lPTl9QUkVGSVhfaXBob25lb3MgPSA2OyAvLyBpUGhvbmUgT1Mg
aXMgbW9zdCBsaWtlIFNub3dMZW9wYXJkIGN1cnJlbnRseS4KK1NZU1RFTV9WRVJTSU9OX1BSRUZJ
WF9pcGhvbmVvcyA9IDY7IC8vIGlPUyBpcyBtb3N0IGxpa2UgU25vd0xlb3BhcmQgY3VycmVudGx5
LgogU1lTVEVNX1ZFUlNJT05fUFJFRklYX2lwaG9uZXNpbXVsYXRvciA9ICQoU1lTVEVNX1ZFUlNJ
T05fUFJFRklYX2lwaG9uZW9zKTsKIFNZU1RFTV9WRVJTSU9OX1BSRUZJWF9tYWNvc3ggPSAkKFNZ
U1RFTV9WRVJTSU9OX1BSRUZJWF9tYWNvc3hfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpP
UikpOwogU1lTVEVNX1ZFUlNJT05fUFJFRklYX21hY29zeF8xMDgwID0gODsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZwppbmRleCAyMjk4NTdl
YzQyOGMxZDg1ODY2MjZkODQwNzQ3NGViMTljNmQxMDk4Li5jMGUwMDk5ZDhhYzMxZmNiYzM5NDc1
OWQ3NGM0ZTdiMWI3YjAzOWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9Db25maWd1
cmF0aW9ucy9XZWJLaXQueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJh
dGlvbnMvV2ViS2l0LnhjY29uZmlnCkBAIC0zMyw5ICszMywxNiBAQCBFWFBPUlRFRF9TWU1CT0xT
X0ZJTEUgPSAkKEVYUE9SVEVEX1NZTUJPTFNfRklMRV8kKENVUlJFTlRfQVJDSCkpOwogRVhQT1JU
RURfU1lNQk9MU19GSUxFXyA9IG1hYy9XZWJLaXQuZXhwOwogRVhQT1JURURfU1lNQk9MU19GSUxF
X2FybXY2ID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9XZWJL
aXQuZ2VuZXJhdGVkLmV4cDsKIEVYUE9SVEVEX1NZTUJPTFNfRklMRV9hcm12NyA9ICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvV2ViS2l0LmdlbmVyYXRlZC5leHA7
Ci1FWFBPUlRFRF9TWU1CT0xTX0ZJTEVfaTM4NiA9IG1hYy9XZWJLaXQuZXhwOworRVhQT1JURURf
U1lNQk9MU19GSUxFX2FybXY3ZiA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQvV2ViS2l0LmdlbmVyYXRlZC5leHA7CitFWFBPUlRFRF9TWU1CT0xTX0ZJTEVfYXJt
djdzID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9XZWJLaXQu
Z2VuZXJhdGVkLmV4cDsKK0VYUE9SVEVEX1NZTUJPTFNfRklMRV9hcm02NCA9ICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvV2ViS2l0LmdlbmVyYXRlZC5leHA7CitF
WFBPUlRFRF9TWU1CT0xTX0ZJTEVfaTM4NiA9ICQoRVhQT1JURURfU1lNQk9MU19GSUxFX2kzODZf
JChQTEFURk9STV9OQU1FKSk7CitFWFBPUlRFRF9TWU1CT0xTX0ZJTEVfaTM4Nl9pcGhvbmVzaW11
bGF0b3IgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L1dlYktp
dC5nZW5lcmF0ZWQuZXhwOworRVhQT1JURURfU1lNQk9MU19GSUxFX2kzODZfbWFjb3N4ID0gbWFj
L1dlYktpdC5leHA7CiBFWFBPUlRFRF9TWU1CT0xTX0ZJTEVfcHBjID0gbWFjL1dlYktpdC5leHA7
Ci1FWFBPUlRFRF9TWU1CT0xTX0ZJTEVfeDg2XzY0ID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdC9XZWJLaXQuTFA2NC5leHA7CitFWFBPUlRFRF9TWU1CT0xTX0ZJ
TEVfeDg2XzY0ID0gJChFWFBPUlRFRF9TWU1CT0xTX0ZJTEVfeDg2XzY0XyQoUExBVEZPUk1fTkFN
RSkpOworRVhQT1JURURfU1lNQk9MU19GSUxFX3g4Nl82NF9pcGhvbmVzaW11bGF0b3IgPSAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L1dlYktpdC5nZW5lcmF0ZWQu
ZXhwOworRVhQT1JURURfU1lNQk9MU19GSUxFX3g4Nl82NF9tYWNvc3ggPSAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L1dlYktpdC5MUDY0LmV4cDsKIAogRlJBTUVX
T1JLX1NFQVJDSF9QQVRIUyA9ICQoRlJBTUVXT1JLX1NFQVJDSF9QQVRIU18kKFBMQVRGT1JNX05B
TUUpKTsKIEZSQU1FV09SS19TRUFSQ0hfUEFUSFNfaXBob25lb3MgPSAkKEZSQU1FV09SS19TRUFS
Q0hfUEFUSFNfaXBob25lb3NfJChDT05GSUdVUkFUSU9OKSk7CkBAIC01NCw3ICs2MSw3IEBAIE9U
SEVSX0NQTFVTUExVU0ZMQUdTID0gJChPVEhFUl9DRkxBR1MpOwogCiBHQ0NfUFJFRklYX0hFQURF
UiA9IG1hYy9XZWJLaXRQcmVmaXguaDsKIEdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAk
KERFQlVHX0RFRklORVMpICQoRkVBVFVSRV9ERUZJTkVTKSBGUkFNRVdPUktfTkFNRT1XZWJLaXQg
V0VCS0lUX1ZFUlNJT05fTUlOX1JFUVVJUkVEPVdFQktJVF9WRVJTSU9OX0xBVEVTVCAkKEdDQ19Q
UkVQUk9DRVNTT1JfREVGSU5JVElPTlMpOwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoV0VCS0lU
U1lTVEVNSU5URVJGQUNFX1NUQVRJQ19MSUJSQVJZX0hFQURFUlNfRk9MREVSX1BBVEgpICQoV0VC
Q09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKFdFQkNPUkVfUFJJ
VkFURV9IRUFERVJTX0RJUikvaWN1ICIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0IiAkKEhFQURFUl9TRUFSQ0hfUEFUSFMpOworSEVBREVSX1NFQVJDSF9QQVRIUyA9
ICQoV0VCS0lUU1lTVEVNSU5URVJGQUNFX1NUQVRJQ19MSUJSQVJZX0hFQURFUlNfRk9MREVSX1BB
VEgpICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKFdF
QkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvaWN1ICIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVy
aXZlZFNvdXJjZXMvV2ViS2l0IiAiJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNs
dWRlIiAkKEhFQURFUl9TRUFSQ0hfUEFUSFMpOwogSU5GT1BMSVNUX0ZJTEUgPSBtYWMvSW5mby5w
bGlzdDsKIElOU1RBTExfUEFUSCA9ICQoSU5TVEFMTF9QQVRIXyQoUExBVEZPUk1fTkFNRSkpOwog
SU5TVEFMTF9QQVRIX2lwaG9uZW9zID0gJChTWVNURU1fTElCUkFSWV9ESVIpL1ByaXZhdGVGcmFt
ZXdvcmtzOwpAQCAtNzMsNyArODAsNyBAQCBVTUJSRUxMQV9GUkFNRVdPUktTX0RJUiA9ICQoUFJP
RFVDVElPTl9GUkFNRVdPUktTX0RJUikvV2ViS2l0LmZyYW1ld29yay9WZXJzaW9ucwogCiBPVEhF
Ul9MREZMQUdTX0JBU0UgPSAtbGljdWNvcmUgLWZyYW1ld29yayBKYXZhU2NyaXB0Q29yZSAtZnJh
bWV3b3JrIFF1YXJ0ekNvcmUgLWZyYW1ld29yayBXZWJDb3JlOwogT1RIRVJfTERGTEFHUyA9ICQo
aW5oZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfQkFTRSkgJChPVEhFUl9MREZMQUdTXyQoUExBVEZP
Uk1fTkFNRSkpOwotT1RIRVJfTERGTEFHU19pcGhvbmVvcyA9IC1sb2JqYyAtZnJhbWV3b3JrIENG
TmV0d29yayAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNz
IC1mcmFtZXdvcmsgQ29yZVRleHQgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgR3Jh
cGhpY3NTZXJ2aWNlcyAtZnJhbWV3b3JrIEltYWdlSU87CitPVEhFUl9MREZMQUdTX2lwaG9uZW9z
ID0gLWxvYmpjIC1mcmFtZXdvcmsgQ0ZOZXR3b3JrIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24g
LWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBDb3JlVGV4dCAtZnJhbWV3b3JrIEZv
dW5kYXRpb24gLWZyYW1ld29yayBHcmFwaGljc1NlcnZpY2VzIC1mcmFtZXdvcmsgSW1hZ2VJTyAt
bE1vYmlsZUdlc3RhbHQ7CiBPVEhFUl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoT1RIRVJf
TERGTEFHU19pcGhvbmVvcyk7CiBPVEhFUl9MREZMQUdTX21hY29zeCA9IC1zdWJfdW1icmVsbGEg
V2ViQ29yZSAtZnJhbWV3b3JrIENhcmJvbiAtZnJhbWV3b3JrIENvY29hIC1mcmFtZXdvcmsgRGlz
a0FyYml0cmF0aW9uIC1mcmFtZXdvcmsgSU9LaXQgLWZyYW1ld29yayBPcGVuR0wgLWZyYW1ld29y
ayBTZWN1cml0eTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlv
bnMvaU9TLnhjY29uZmlnIGIvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvaU9TLnhj
Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE3N2IzMTk4OWM1ZTFmYWRhNmQ1MDYzYWM3NDY2YjQ1ZjA2YzBh
MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9p
T1MueGNjb25maWcKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIjxERVZFTE9QRVJfRElSPi9BcHBs
ZUludGVybmFsL1hjb2RlQ29uZmlnL0FzcGVuRmFtaWx5LnhjY29uZmlnIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0gYi9Tb3VyY2UvV2ViS2l0
L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQppbmRleCA5ZTNlY2U3Nzk4ZjAzYmYzODJkNWZl
ZjU0NDdlNjRhODJhOGQwMTBjLi44OTZkOTA2NTQxNjQxNGVmYzEyNTk3MzEyNjBlNDJkYjZjNWZj
Y2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQpAQCAtOTEs
NiArOTEsNDMgQEAgLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmVCeUZpbHRlcmluZ1N1YmZyYW1l
czooV2ViQXJjaGl2ZVN1YmZyYW1lRmlsdGVyKXdlYkFyY2gKICAgICByZXR1cm4gW3dlYkFyY2hp
dmUgYXV0b3JlbGVhc2VdOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAoQk9PTClpc0hvcml6
b250YWxXcml0aW5nTW9kZQoreworICAgIE5vZGUqIG5vZGUgPSBjb3JlKHNlbGYpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICBy
ZXR1cm4gWUVTOworICAgIAorICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpOworfQorCistICh2b2lkKWhpZGVQbGFjZWhvbGRlcgoreworICAgIGlm
ICghW3NlbGYgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTElucHV0RWxlbWVudCBjbGFzc11dICYmCisg
ICAgICAgICFbc2VsZiBpc0tpbmRPZkNsYXNzOltET01IVE1MVGV4dEFyZWFFbGVtZW50IGNsYXNz
XV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOb2RlICpub2RlID0gY29yZShzZWxmKTsK
KyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCAqZm9ybUNvbnRyb2wgPSBzdGF0aWNfY2Fz
dDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCAqPihub2RlKTsKKyAgICBmb3JtQ29udHJvbC0+
aGlkZVBsYWNlaG9sZGVyKCk7Cit9CisKKy0gKHZvaWQpc2hvd1BsYWNlaG9sZGVySWZOZWNlc3Nh
cnkKK3sKKyAgICBpZiAoIVtzZWxmIGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxJbnB1dEVsZW1lbnQg
Y2xhc3NdXSAmJgorICAgICAgICAhW3NlbGYgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTFRleHRBcmVh
RWxlbWVudCBjbGFzc11dKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTm9kZSAqbm9kZSA9
IGNvcmUoc2VsZik7CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgKmZvcm1Db250cm9s
ID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgKj4obm9kZSk7CisgICAg
Zm9ybUNvbnRyb2wtPnNob3dQbGFjZWhvbGRlcklmTmVjZXNzYXJ5KCk7Cit9CisjZW5kaWYKKwog
QGVuZAogCiBAaW1wbGVtZW50YXRpb24gRE9NTm9kZSAoV2ViRE9NTm9kZU9wZXJhdGlvbnNQZW5k
aW5nUHVibGljKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvRGVmYXVsdERlbGVnYXRl
cy9XZWJEZWZhdWx0Q29udGV4dE1lbnVEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0Rl
ZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdENvbnRleHRNZW51RGVsZWdhdGUubW0KaW5kZXggYWMy
MGJlMmQ0ZTBiMWI4NGZiOGUzN2VmYzc3ZGQzZmU2NTc1Y2VlNC4uNDdjZTY0YWZhYmViNTgyMTMx
NzczYjhlMzI2Mjk1ZWFlMjEzZjRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvRGVm
YXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0Q29udGV4dE1lbnVEZWxlZ2F0ZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRDb250ZXh0TWVudURlbGVn
YXRlLm1tCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQorCiAjaW1wb3J0ICJXZWJEZWZhdWx0Q29udGV4dE1lbnVEZWxlZ2F0ZS5oIgogCiAj
aW1wb3J0ICJXZWJET01PcGVyYXRpb25zLmgiCkBAIC0xODYsMyArMTg4LDUgQEAgLSAoTlNBcnJh
eSAqKXdlYlZpZXc6KFdlYlZpZXcgKil3diBjb250ZXh0TWVudUl0ZW1zRm9yRWxlbWVudDooTlNE
aWN0aW9uYXJ5ICopZWwKIH0KIAogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEVk
aXRpbmdEZWxlZ2F0ZS5tIGIvU291cmNlL1dlYktpdC9tYWMvRGVmYXVsdERlbGVnYXRlcy9XZWJE
ZWZhdWx0RWRpdGluZ0RlbGVnYXRlLm0KaW5kZXggZjg1MGRkNjZlZDIxYTAyYzYxZTNiMThlYTA3
ZmQ5ZTliYjhiYjhiNC4uMDFmOTA0M2U3OTNjOGU1Y2FhMGRjYTk3MWYzNTIzNTVmZGY1MjhhMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0
RWRpdGluZ0RlbGVnYXRlLm0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvRGVmYXVsdERlbGVnYXRl
cy9XZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlLm0KQEAgLTI2LDggKzI2LDYgQEAKICAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KLQogI2ltcG9ydCA8V2ViS2l0L1dl
YkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUuaD4KIAogI2ltcG9ydCA8V2ViS2l0L0RPTS5oPgpAQCAt
MTAyLDkgKzEwMCwyMSBAQCAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRvQ29t
bWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgogICAgIHJldHVybiBOTzsKIH0KIAorI2lmICFQ
TEFURk9STShJT1MpCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRpZFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiB7CiB9Cisj
ZWxzZQorLSAoTlNBcnJheSAqKXN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxl
Y3Rpb24KK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChET01Eb2N1bWVudEZyYWdtZW50ICop
ZG9jdW1lbnRGcmFnbWVudEZvclBhc3RlYm9hcmRJdGVtQXRJbmRleDooTlNJbnRlZ2VyKWluZGV4
Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKyNlbmRpZgogCiAtICh2b2lkKXdlYlZpZXdEaWRCZWdp
bkVkaXRpbmc6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0
ZS5tIGIvU291cmNlL1dlYktpdC9tYWMvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0UG9saWN5
RGVsZWdhdGUubQppbmRleCBiYWQ4N2Q1YzM2Y2E3NTMwOTU4MDQ0MzI0ZDlhMzFkMWRlZjFmZmU5
Li5iMTJiNDBkNjljOWM1YWUxOTMzOTdmZjcwNjYzZDQxMTBjOWU0YzRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0
ZS5tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFBv
bGljeURlbGVnYXRlLm0KQEAgLTkxLDcgKzkxLDkgQEAgLSAodm9pZCl3ZWJWaWV3OiAoV2ViVmll
dyAqKXd2IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KE5TRGljdGlvbmFyeSAqKWEK
ICAgICAgICAgLy8gQSBmaWxlIFVSTCBzaG91bGRuJ3QgZmFsbCB0aHJvdWdoIHRvIGhlcmUsIGJ1
dCBpZiBpdCBkaWQsCiAgICAgICAgIC8vIGl0IHdvdWxkIGJlIGEgc2VjdXJpdHkgcmlzayB0byBv
cGVuIGl0LgogICAgICAgICBpZiAoIVtbcmVxdWVzdCBVUkxdIGlzRmlsZVVSTF0pIHsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgICAgICAgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2Vd
IG9wZW5VUkw6W3JlcXVlc3QgVVJMXV07CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICBbbGlz
dGVuZXIgaWdub3JlXTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9EZWZh
dWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRVSURlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9E
ZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRVSURlbGVnYXRlLmgKaW5kZXggNDMxNTEyMWFkZjRj
ZGZjMzQ2Yjg3Yjk5MTUzZTM2ZTEyNjg5NTg1ZC4uYmY3ZDIwNjcwZDcxZWZjZmFiZGNkYWIyNDA5
MDllYTQ0NzU5YTAyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvRGVmYXVsdERlbGVn
YXRlcy9XZWJEZWZhdWx0VUlEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0RlZmF1
bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFVJRGVsZWdhdGUuaApAQCAtMzAsNyArMzAsOSBAQAogCiBA
aW50ZXJmYWNlIFdlYkRlZmF1bHRVSURlbGVnYXRlIDogTlNPYmplY3QKIHsKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIElCT3V0bGV0IE5TTWVudSAqZGVmYXVsdE1lbnU7CisjZW5kaWYKIH0KICsg
KFdlYkRlZmF1bHRVSURlbGVnYXRlICopc2hhcmVkVUlEZWxlZ2F0ZTsKIEBlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFVJRGVsZWdh
dGUubSBiL1NvdXJjZS9XZWJLaXQvbWFjL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFVJRGVs
ZWdhdGUubQppbmRleCBlMTdkOGZiZjdjMzNhODY2YjJmNGQ4ZWEzOTNhMTEyZWJjN2Q4N2I2Li41
N2E3MDk4Zjg3NTM4OTljMDVhYmZmOTczYmRiMTU1MTljNmJhNTEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRVSURlbGVnYXRlLm0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0VUlEZWxlZ2F0
ZS5tCkBAIC0yNiwyMCArMjYsMjQgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCA8Q29j
b2EvQ29jb2EuaD4KKyNpbXBvcnQgIldlYkRlZmF1bHRVSURlbGVnYXRlLmgiCiAKLSNpbXBvcnQg
PEZvdW5kYXRpb24vTlNVUkxSZXF1ZXN0Lmg+Ci0KLSNpbXBvcnQgPFdlYktpdC9XZWJEZWZhdWx0
VUlEZWxlZ2F0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkphdmFTY3JpcHRUZXh0SW5wdXRQYW5l
bC5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXcuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJVSURl
bGVnYXRlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L0RPTS5oPgorI2ltcG9ydCAiV2ViSmF2
YVNjcmlwdFRleHRJbnB1dFBhbmVsLmgiCiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCisj
aW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViVmlldy5oIgorCisj
aWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8V2ViQ29yZS9XQUtWaWV3UHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV0tWaWV3UHJpdmF0
ZS5oPgorI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogQGludGVyZmFjZSBOU0FwcGxpY2F0
aW9uIChEZWNsYXJhdGlvblN0b2xlbkZyb21BcHBLaXQpCiAtICh2b2lkKV9jeWNsZVdpbmRvd3NS
ZXZlcnNlZDooQk9PTClyZXZlcnNlZDsKIEBlbmQKKyNlbmRpZgogCiBAaW1wbGVtZW50YXRpb24g
V2ViRGVmYXVsdFVJRGVsZWdhdGUKIApAQCAtNjcsMjUgKzcxLDM4IEBAIC0gKFdlYlZpZXcgKil3
ZWJWaWV3OiAoV2ViVmlldyAqKXd2IGNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdDooTlNVUkxSZXF1
ZXN0ICopcmVxCiAgICAgcmV0dXJuIG5pbDsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKFdl
YlZpZXcgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVz
dDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCB1c2VyR2VzdHVyZTooQk9PTCl1c2VyR2VzdHVyZQor
eworICAgIHJldHVybiBuaWw7Cit9CisjZW5kaWYKKwogLSAodm9pZCl3ZWJWaWV3U2hvdzogKFdl
YlZpZXcgKil3dgogewogfQogCiAtICh2b2lkKXdlYlZpZXdDbG9zZTogKFdlYlZpZXcgKil3dgog
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgW1t3diB3aW5kb3ddIGNsb3NlXTsKKyNlbmRpZgog
fQogCiAtICh2b2lkKXdlYlZpZXdGb2N1czogKFdlYlZpZXcgKil3dgogeworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgW1t3diB3aW5kb3ddIG1ha2VLZXlBbmRPcmRlckZyb250Ond2XTsKKyNlbmRp
ZgogfQogCiAtICh2b2lkKXdlYlZpZXdVbmZvY3VzOiAoV2ViVmlldyAqKXd2CiB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBpZiAoW1t3diB3aW5kb3ddIGlzS2V5V2luZG93XSB8fCBbW1t3diB3
aW5kb3ddIGF0dGFjaGVkU2hlZXRdIGlzS2V5V2luZG93XSkgewogICAgICAgICBbTlNBcHAgX2N5
Y2xlV2luZG93c1JldmVyc2VkOkZBTFNFXTsKICAgICB9CisjZW5kaWYKIH0KIAogLSAoTlNSZXNw
b25kZXIgKil3ZWJWaWV3Rmlyc3RSZXNwb25kZXI6IChXZWJWaWV3ICopd3YKQEAgLTEzMSwxOSAr
MTQ4LDI3IEBAIC0gKHZvaWQpd2ViVmlldzogKFdlYlZpZXcgKil3diBzZXRTdGF0dXNCYXJWaXNp
YmxlOihCT09MKXZpc2libGUKIAogLSAoQk9PTCl3ZWJWaWV3SXNSZXNpemFibGU6IChXZWJWaWV3
ICopd3YKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIE5POworI2Vsc2UKICAgICBy
ZXR1cm4gW1t3diB3aW5kb3ddIHNob3dzUmVzaXplSW5kaWNhdG9yXTsKKyNlbmRpZgogfQogCiAt
ICh2b2lkKXdlYlZpZXc6IChXZWJWaWV3ICopd3Ygc2V0UmVzaXphYmxlOihCT09MKXJlc2l6YWJs
ZQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBhY3R1
YWxseSBjaGFuZ2UgdGhlIHJlc2l6YWJpbGl0eSBvZiB0aGUgd2luZG93LAogICAgIC8vIG9ubHkg
dmlzaWJpbGl0eSBvZiB0aGUgaW5kaWNhdG9yLgogICAgIFtbd3Ygd2luZG93XSBzZXRTaG93c1Jl
c2l6ZUluZGljYXRvcjpyZXNpemFibGVdOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpd2ViVmlldzog
KFdlYlZpZXcgKil3diBzZXRGcmFtZTooTlNSZWN0KWZyYW1lCiB7CisjaWYgIVBMQVRGT1JNKElP
UykKICAgICBbW3d2IHdpbmRvd10gc2V0RnJhbWU6ZnJhbWUgZGlzcGxheTpZRVNdOworI2VuZGlm
CiB9CiAKIC0gKE5TUmVjdCl3ZWJWaWV3RnJhbWU6IChXZWJWaWV3ICopd3YKQEAgLTE2NSw2ICsx
OTAsNyBAQCAtIChCT09MKXdlYlZpZXc6IChXZWJWaWV3ICopd3YgcnVuSmF2YVNjcmlwdENvbmZp
cm1QYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKQogCiAtIChOU1N0cmluZyAqKXdlYlZpZXc6
IChXZWJWaWV3ICopd3YgcnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdDooTlNT
dHJpbmcgKilwcm9tcHQgZGVmYXVsdFRleHQ6KE5TU3RyaW5nICopZGVmYXVsdFRleHQgaW5pdGlh
dGVkQnlGcmFtZTooV2ViRnJhbWUgKilmcmFtZQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAg
V2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsICpwYW5lbCA9IFtbV2ViSmF2YVNjcmlwdFRleHRJ
bnB1dFBhbmVsIGFsbG9jXSBpbml0V2l0aFByb21wdDpwcm9tcHQgdGV4dDpkZWZhdWx0VGV4dF07
CiAgICAgW3BhbmVsIHNob3dXaW5kb3c6bmlsXTsKICAgICBOU1N0cmluZyAqcmVzdWx0OwpAQCAt
MTc2LDYgKzIwMiw5IEBAIC0gKE5TU3RyaW5nICopd2ViVmlldzogKFdlYlZpZXcgKil3diBydW5K
YXZhU2NyaXB0VGV4dElucHV0UGFuZWxXaXRoUHJvbXB0OihOU1N0CiAgICAgW1twYW5lbCB3aW5k
b3ddIGNsb3NlXTsKICAgICBbcGFuZWwgcmVsZWFzZV07CiAgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiAtICh2b2lkKXdlYlZpZXc6IChXZWJW
aWV3ICopd3YgcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhSZXN1bHRMaXN0ZW5lcjooaWQ8
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+KXJlc3VsdExpc3RlbmVyCkBAIC0xODgsNiArMjE3
LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHByaW50RnJhbWVWaWV3OihX
ZWJGcmFtZVZpZXcgKilmcmFtZVZpZXcKIH0KIAogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKEJP
T0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQmVnaW5EcmFnRm9yRWxlbWVudDoo
TlNEaWN0aW9uYXJ5ICopZWxlbWVudCBkcmFnSW1hZ2U6KE5TSW1hZ2UgKilkcmFnSW1hZ2UgbW91
c2VEb3duRXZlbnQ6KE5TRXZlbnQgKiltb3VzZURvd25FdmVudCBtb3VzZURyYWdnZWRFdmVudDoo
TlNFdmVudCAqKW1vdXNlRHJhZ2dlZEV2ZW50CiB7CiAgICAgcmV0dXJuIFlFUzsKQEAgLTIxMCw2
ICsyNDAsNyBAQCAtIChOU1VJbnRlZ2VyKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRyYWdT
b3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQ6KE5TUG9pbnQpcAogLSAodm9pZCl3ZWJWaWV3OihXZWJW
aWV3ICopd2ViVmlldyB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb246KFdlYkRyYWdTb3VyY2VB
Y3Rpb24pYWN0aW9uIGZyb21Qb2ludDooTlNQb2ludClwb2ludCB3aXRoUGFzdGVib2FyZDooTlNQ
YXN0ZWJvYXJkICopcGFzdGVib2FyZAogewogfQorI2VuZGlmCiAKIC0gKHZvaWQpd2ViVmlldzoo
V2ViVmlldyAqKXNlbmRlciBkaWREcmF3UmVjdDooTlNSZWN0KXJlY3QKIHsKQEAgLTIxOSw2ICsy
NTAsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkU2Nyb2xsRG9jdW1l
bnRJbkZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZgogewogfQogCisjaWYgIVBMQVRGT1JNKElP
UykKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciB3aWxsUG9wdXBNZW51OihOU01l
bnUgKiltZW51CiB7CiB9CkBAIC0yMjYsNiArMjU4LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJW
aWV3ICopc2VuZGVyIHdpbGxQb3B1cE1lbnU6KE5TTWVudSAqKW1lbnUKIC0gKHZvaWQpd2ViVmll
dzooV2ViVmlldyAqKXNlbmRlciBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZDooTlNNZW51SXRlbSAq
KWl0ZW0gZm9yRWxlbWVudDooTlNEaWN0aW9uYXJ5ICopZWxlbWVudAogewogfQorI2VuZGlmCiAK
IC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBleGNlZWRlZEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YUZvclNlY3VyaXR5T3JpZ2luOihXZWJTZWN1cml0eU9yaWdpbiAqKW9yaWdp
biB0b3RhbFNwYWNlTmVlZGVkOihOU1VJbnRlZ2VyKXRvdGFsU3BhY2VOZWVkZWQKIHsKQEAgLTI0
MSw0ICsyNzQsMTAgQEAgLSAoTlNTdHJpbmcgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGdl
bmVyYXRlUmVwbGFjZW1lbnRGaWxlOihOU1N0cmluZyAqKXBhdGgKICAgICByZXR1cm4gbmlsOwog
fQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAodm9pZCl3ZWJWaWV3U3VwcG9ydGVkT3JpZW50YXRp
b25zVXBkYXRlZDooV2ViVmlldyAqKXNlbmRlcgoreworfQorI2VuZGlmCisKIEBlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KaW5kZXggNGJl
ZmU2Njk2N2YwYTU0NDM3M2Y3NTUzMWJjNDNjMDEzN2FkZWVkNy4uZjA4ODdhMmUzM2VkMWMwNWI5
NmM1ZTVjZDEzNWJhMmVkNGMzZWY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlz
dG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9y
eS9XZWJCYWNrRm9yd2FyZExpc3QubW0KQEAgLTEwMyw5ICsxMDMsMTEgQEAgQGltcGxlbWVudGF0
aW9uIFdlYkJhY2tGb3J3YXJkTGlzdAogCiArICh2b2lkKWluaXRpYWxpemUKIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5p
dGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6aW5p
dGlhbGl6ZU1haW5SdW5Mb29wKCk7CisjZW5kaWYKICAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25N
YWluVGhyZWFkKHNlbGYpOwogfQogCkBAIC0xNjQsNiArMTY2LDU1IEBAIC0gKHZvaWQpcmVtb3Zl
SXRlbTooV2ViSGlzdG9yeUl0ZW0gKilpdGVtCiAgICAgY29yZShzZWxmKS0+cmVtb3ZlSXRlbShj
b3JlKGl0ZW0pKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKworI2RlZmluZSBXZWJCYWNrRm9y
d2FyZExpc3REaWN0aW9uYXJ5RW50cmllc0tleSBAImVudHJpZXMiCisjZGVmaW5lIFdlYkJhY2tG
b3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleSBAImNhcGFjaXR5IgorI2RlZmluZSBXZWJC
YWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q3VycmVudEtleSBAImN1cnJlbnQiCisKKy0gKE5TRGlj
dGlvbmFyeSAqKWRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbgoreworICAgIEJhY2tGb3J3YXJkTGlz
dCAqY29yZUJGTGlzdCA9IGNvcmUoc2VsZik7CisgICAgCisgICAgSGlzdG9yeUl0ZW1WZWN0b3Ig
aGlzdG9yeUl0ZW1zID0gY29yZUJGTGlzdC0+ZW50cmllcygpOworICAgIE5TTXV0YWJsZUFycmF5
ICplbnRyaWVzQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBIaXN0
b3J5SXRlbVZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBoaXN0b3J5SXRlbXMuYmVnaW4oKTsKKyAgICB3
aGlsZSAoaXQgIT0gaGlzdG9yeUl0ZW1zLmVuZCgpKSB7CisgICAgICAgIFtlbnRyaWVzQXJyYXkg
YWRkT2JqZWN0OlsoV2ViSGlzdG9yeUl0ZW0gKilraXQoKCppdCkuZ2V0KCkpIGRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkluY2x1ZGluZ0NoaWxkcmVuOk5PXV07CisgICAgICAgIGl0Kys7CisgICAg
fQorICAgIAorICAgIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgZW50cmllc0FycmF5LCBXZWJCYWNr
Rm9yd2FyZExpc3REaWN0aW9uYXJ5RW50cmllc0tleSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhVbnNpZ25lZEludDpjb3JlQkZMaXN0LT5jdXJyZW50KCldLCBXZWJCYWNrRm9yd2FyZExp
c3REaWN0aW9uYXJ5Q3VycmVudEtleSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
Y29yZUJGTGlzdC0+Y2FwYWNpdHkoKV0sIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDYXBh
Y2l0eUtleSwKKyAgICAgICAgbmlsXTsKKyAgICAgICAgCisgICAgW2VudHJpZXNBcnJheSByZWxl
YXNlXTsKKyAgICAKKyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworLSAodm9pZClzZXRUb01h
dGNoRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uOihOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Cit7
CisgICAgQmFja0ZvcndhcmRMaXN0ICpjb3JlQkZMaXN0ID0gY29yZShzZWxmKTsKKyAgICAKKyAg
ICBjb3JlQkZMaXN0LT5zZXRDYXBhY2l0eShbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYkJh
Y2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleV0gaW50VmFsdWVdKTsKKyAgICAKKyAg
ICBmb3IgKE5TRGljdGlvbmFyeSAqaXRlbURpY3Rpb25hcnkgaW4gW2RpY3Rpb25hcnkgb2JqZWN0
Rm9yS2V5OldlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVzS2V5XSkgeworICAgICAg
ICBXZWJIaXN0b3J5SXRlbSAqaXRlbSA9IFtbV2ViSGlzdG9yeUl0ZW0gYWxsb2NdIGluaXRGcm9t
RGljdGlvbmFyeVJlcHJlc2VudGF0aW9uOml0ZW1EaWN0aW9uYXJ5XTsKKyAgICAgICAgY29yZUJG
TGlzdC0+YWRkSXRlbShjb3JlKGl0ZW0pKTsKKyAgICAgICAgW2l0ZW0gcmVsZWFzZV07CisgICAg
fQorCisgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTpXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q3VycmVudEtleV0gdW5zaWduZWRJbnRWYWx1
ZV07CisgICAgc2l6ZV90IGxpc3RTaXplID0gY29yZUJGTGlzdC0+ZW50cmllcygpLnNpemUoKTsK
KyAgICBpZiAoY3VycmVudEluZGV4ID49IGxpc3RTaXplKQorICAgICAgICBjdXJyZW50SW5kZXgg
PSBsaXN0U2l6ZSAtIDE7CisgICAgY29yZUJGTGlzdC0+c2V0Q3VycmVudChjdXJyZW50SW5kZXgp
OworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogLSAoQk9PTCljb250YWluc0l0ZW06KFdl
Ykhpc3RvcnlJdGVtICopaXRlbQogewogICAgIHJldHVybiBjb3JlKHNlbGYpLT5jb250YWluc0l0
ZW0oY29yZShpdGVtKSk7CkBAIC0yMTEsMTAgKzI2MiwxNCBAQCBzdGF0aWMgTlNBcnJheSogdmVj
dG9yVG9OU0FycmF5KEhpc3RvcnlJdGVtVmVjdG9yJiBsaXN0KQogCiBzdGF0aWMgYm9vbCBidW1w
ZXJDYXJCYWNrRm9yd2FyZEhhY2tOZWVkZWQoKSAKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IHN0YXRpYyBib29sIGhhY2tOZWVkZWQgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJ
ZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uZnJlZXZlcnNlLmJ1bXBlcmNhciJdICYm
IAogICAgICAgICAhV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJ
VEhPVVRfQlVNUEVSQ0FSX0JBQ0tfRk9SV0FSRF9RVUlSSyk7CiAKICAgICByZXR1cm4gaGFja05l
ZWRlZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIC0gKE5TQXJyYXkg
KiliYWNrTGlzdFdpdGhMaW1pdDooaW50KWxpbWl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dl
Ykhpc3RvcnkubW0KaW5kZXggZWFiMDhiNjU2YmQzZmRmY2Y1MzNmZTliYmRiNTIzYjFkMzdhZDRm
Ni4uOTllOWRmYjA4NGM0Y2FiYTUyYzc4MzYyNDIwZTgyZDI0NWM0NmE5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQpAQCAtMzYsNiArMzYsMTAgQEAKICNpbXBvcnQg
PFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdl
Lmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHR5cGVkZWYgaW50NjRf
dCBXZWJIaXN0b3J5RGF0ZUtleTsKQEAgLTE1MCw3ICsxNTQsNyBAQCAtICh2b2lkKWZpbmFsaXpl
CiAKIHN0YXRpYyB2b2lkIGdldERheUJvdW5kYXJpZXMoTlNUaW1lSW50ZXJ2YWwgaW50ZXJ2YWws
IE5TVGltZUludGVydmFsJiBiZWdpbm5pbmdPZkRheSwgTlNUaW1lSW50ZXJ2YWwmIGJlZ2lubmlu
Z09mTmV4dERheSkKIHsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAogICAgIE5TRGF0ZSAqZGF0ZSA9IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGU6aW50ZXJ2YWxdOwogICAgIAogICAgIE5TQ2FsZW5kYXIgKmNhbGVu
ZGFyID0gW05TQ2FsZW5kYXIgY2FsZW5kYXJXaXRoSWRlbnRpZmllcjpOU0NhbGVuZGFySWRlbnRp
ZmllckdyZWdvcmlhbl07CkBAIC0zMzUsNiArMzM5LDcgQEAgLSAoQk9PTClhZGRJdGVtOihXZWJI
aXN0b3J5SXRlbSAqKWVudHJ5IGRpc2NhcmREdXBsaWNhdGU6KEJPT0wpZGlzY2FyZER1cGxpY2F0
ZQogCiAgICAgTlNTdHJpbmcgKlVSTFN0cmluZyA9IFtlbnRyeSBVUkxTdHJpbmddOwogCisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBXZWJIaXN0b3J5SXRlbSAqb2xkRW50cnkgPSBbX2VudHJpZXNC
eVVSTCBvYmplY3RGb3JLZXk6VVJMU3RyaW5nXTsKICAgICBpZiAob2xkRW50cnkpIHsKICAgICAg
ICAgaWYgKGRpc2NhcmREdXBsaWNhdGUpCkBAIC0zNTMsNiArMzU4LDM0IEBAIC0gKEJPT0wpYWRk
SXRlbTooV2ViSGlzdG9yeUl0ZW0gKillbnRyeSBkaXNjYXJkRHVwbGljYXRlOihCT09MKWRpc2Nh
cmREdXBsaWNhdGUKIAogICAgIFtzZWxmIGFkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOwogICAg
IFtfZW50cmllc0J5VVJMIHNldE9iamVjdDplbnRyeSBmb3JLZXk6VVJMU3RyaW5nXTsKKyNlbHNl
CisgICAgV2ViSGlzdG9yeUl0ZW0gKm90aGVyRW50cnk9IFtfZW50cmllc0J5VVJMIG9iamVjdEZv
cktleTpVUkxTdHJpbmddOworICAgIGlmIChvdGhlckVudHJ5KSB7CisgICAgICAgIGlmIChkaXNj
YXJkRHVwbGljYXRlKQorICAgICAgICAgICAgcmV0dXJuIE5POworCisgICAgICAgIGlmIChbb3Ro
ZXJFbnRyeSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbF08W2VudHJ5IGxhc3RWaXNpdGVkVGltZUlu
dGVydmFsXSkgeworICAgICAgICAgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIG9sZEVudHJ5
IG1pZ2h0IGJlIHRoaXMgZGljdGlvbmFyeSwgc28gd2UgaG9sZCBvbnRvIGEgcmVmZXJlbmNlCisg
ICAgICAgICAgICAvLyB1bnRpbCB3ZSdyZSBkb25lIHdpdGggb2xkRW50cnkuCisgICAgICAgICAg
ICBbb3RoZXJFbnRyeSByZXRhaW5dOworICAgICAgICAgICAgW3NlbGYgcmVtb3ZlSXRlbUZvclVS
TFN0cmluZzpVUkxTdHJpbmddOworCisgICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUg
YW4gaXRlbSB3aXRoIHRoaXMgVVJMLCB3ZSBuZWVkIHRvIG1lcmdlIGluZm8gdGhhdCBkcml2ZXMg
dGhlCisgICAgICAgICAgICAvLyBVUkwgYXV0b2NvbXBsZXRlIGhldXJpc3RpY3MgZnJvbSB0aGF0
IGl0ZW0gaW50byB0aGUgbmV3IG9uZS4KKyAgICAgICAgICAgIFtlbnRyeSBfbWVyZ2VBdXRvQ29t
cGxldGVIaW50czpvdGhlckVudHJ5XTsKKyAgICAgICAgICAgIFtvdGhlckVudHJ5IHJlbGVhc2Vd
OworICAgICAgICAgICAgCisgICAgICAgICAgICBbc2VsZiBhZGRJdGVtVG9EYXRlQ2FjaGVzOmVu
dHJ5XTsKKyAgICAgICAgICAgIFtfZW50cmllc0J5VVJMIHNldE9iamVjdDplbnRyeSBmb3JLZXk6
VVJMU3RyaW5nXTsKKyAgICAgICAgfQorICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIG1lcmdl
cyB3aGVuIG5ldyBpdGVtcyBtYXkgYmUgb2xkZXIgdGhhbiBwcmUtZXhpc3RpbmcgZW50cmllcy4K
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5POworICAgIH0gZWxzZSB7CisgICAg
ICAgIFtzZWxmIGFkZEl0ZW1Ub0RhdGVDYWNoZXM6ZW50cnldOworICAgICAgICBbX2VudHJpZXNC
eVVSTCBzZXRPYmplY3Q6ZW50cnkgZm9yS2V5OlVSTFN0cmluZ107CisgICAgfQorI2VuZGlmCiAg
ICAgCiAgICAgcmV0dXJuIFlFUzsKIH0KQEAgLTc0OCw4ICs3ODEsMTIgQEAgLSAodm9pZClmaW5h
bGl6ZQogLSAodm9pZClfc2VuZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKiluYW1lIGVudHJpZXM6
KE5TQXJyYXkgKillbnRyaWVzCiB7CiAgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czplbnRyaWVzLCBXZWJIaXN0b3J5
SXRlbXNLZXksIG5pbF07CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdlYlRocmVhZFBvc3ROb3Rp
ZmljYXRpb24obmFtZSwgc2VsZiwgdXNlckluZm8pOworI2Vsc2UgICAgCiAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXQogICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFt
ZTpuYW1lIG9iamVjdDpzZWxmIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyNlbmRpZgogfQogCiAtICh2
b2lkKXJlbW92ZUl0ZW1zOihOU0FycmF5ICopZW50cmllcwpAQCAtODEzLDkgKzg1MCwxMyBAQCAt
IChCT09MKWxvYWRGcm9tVVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgog
ICAgICAgICByZXR1cm4gTk87CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdlYlRo
cmVhZFBvc3ROb3RpZmljYXRpb24oV2ViSGlzdG9yeUxvYWRlZE5vdGlmaWNhdGlvbiwgc2VsZiwg
bmlsKTsKKyNlbHNlICAgICAgICAKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdCiAgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldlYkhpc3RvcnlMb2FkZWROb3Rp
ZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6c2VsZl07CisjZW5kaWYKIAog
ICAgIGlmIChbZGlzY2FyZGVkSXRlbXMgY291bnRdKQogICAgICAgICBbc2VsZiBfc2VuZE5vdGlm
aWNhdGlvbjpXZWJIaXN0b3J5SXRlbXNEaXNjYXJkZWRXaGlsZUxvYWRpbmdOb3RpZmljYXRpb24g
ZW50cmllczpkaXNjYXJkZWRJdGVtc107CkBAIC04MjgsOSArODY5LDEzIEBAIC0gKEJPT0wpc2F2
ZVRvVVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJvciAqKillcnJvcgogewogICAgIGlmICgh
W19oaXN0b3J5UHJpdmF0ZSBzYXZlVG9VUkw6VVJMIGVycm9yOmVycm9yXSkKICAgICAgICAgcmV0
dXJuIE5POworI2lmIFBMQVRGT1JNKElPUykKKyAgICBXZWJUaHJlYWRQb3N0Tm90aWZpY2F0aW9u
KFdlYkhpc3RvcnlTYXZlZE5vdGlmaWNhdGlvbiwgc2VsZiwgbmlsKTsKKyNlbHNlICAgICAgICAK
ICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCiAgICAgICAgIHBvc3RO
b3RpZmljYXRpb25OYW1lOldlYkhpc3RvcnlTYXZlZE5vdGlmaWNhdGlvbgogICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdDpzZWxmXTsKKyNlbmRpZgogICAgIHJldHVybiBZRVM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tCmluZGV4IGE0ZDg2NmM1
ZDc5MzUwNjY4NmM2Mzg0NDFhOTIwMDY2YWZjMWY0YjUuLmIxMjIzY2E0YWUwZmU0NjA0NDg4MjM4
ZDc5NzU5MGYwYzU5NjQ3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3Rvcnkv
V2ViSGlzdG9yeUl0ZW0ubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0
b3J5SXRlbS5tbQpAQCAtNTYsNiArNTYsMjYgQEAKICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQor
I2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oPgorCitOU1N0cmluZyAqV2Vi
Vmlld3BvcnRJbml0aWFsU2NhbGVLZXkgPSBAImluaXRpYWwtc2NhbGUiOworTlNTdHJpbmcgKldl
YlZpZXdwb3J0TWluaW11bVNjYWxlS2V5ID0gQCJtaW5pbXVtLXNjYWxlIjsKK05TU3RyaW5nICpX
ZWJWaWV3cG9ydE1heGltdW1TY2FsZUtleSA9IEAibWF4aW11bS1zY2FsZSI7CitOU1N0cmluZyAq
V2ViVmlld3BvcnRVc2VyU2NhbGFibGVLZXkgPSBAInVzZXItc2NhbGFibGUiOworTlNTdHJpbmcg
KldlYlZpZXdwb3J0V2lkdGhLZXkgICAgICAgID0gQCJ3aWR0aCI7CitOU1N0cmluZyAqV2ViVmll
d3BvcnRIZWlnaHRLZXkgICAgICAgPSBAImhlaWdodCI7CitOU1N0cmluZyAqV2ViVmlld3BvcnRN
aW5pbWFsVUlLZXkgICAgPSBAIm1pbmltYWwtdWkiOworCitzdGF0aWMgTlNTdHJpbmcgKnNjYWxl
S2V5ID0gQCJzY2FsZSI7CitzdGF0aWMgTlNTdHJpbmcgKnNjYWxlSXNJbml0aWFsS2V5ID0gQCJz
Y2FsZUlzSW5pdGlhbCI7CitzdGF0aWMgTlNTdHJpbmcgKnNjcm9sbFBvaW50WEtleSA9IEAic2Ny
b2xsUG9pbnRYIjsKK3N0YXRpYyBOU1N0cmluZyAqc2Nyb2xsUG9pbnRZS2V5ID0gQCJzY3JvbGxQ
b2ludFkiOworCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBib29rbWFya0lES2V5ID0gQCJib29r
bWFya0lEIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHNoYXJlZExpbmtVbmlxdWVJZGVudGlm
aWVyS2V5ID0gQCJzaGFyZWRMaW5rVW5pcXVlSWRlbnRpZmllciI7CisjZW5kaWYKKwogLy8gUHJp
dmF0ZSBrZXlzIHVzZWQgaW4gdGhlIFdlYkhpc3RvcnlJdGVtJ3MgZGljdGlvbmFyeSByZXByZXNl
bnRhdGlvbi4KIC8vIHNlZSAzMjQ1NzkzIGZvciBleHBsYW5hdGlvbiBvZiAibGFzdFZpc2l0ZWRE
YXRlIgogc3RhdGljIE5TU3RyaW5nICpsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbEtleSA9IEAibGFz
dFZpc2l0ZWREYXRlIjsKQEAgLTg3LDE3ICsxMDcsMjMgQEAgc3RhdGljIEhpc3RvcnlJdGVtTWFw
JiBoaXN0b3J5SXRlbVdyYXBwZXJzKCkKIAogdm9pZCBXS05vdGlmeUhpc3RvcnlJdGVtQ2hhbmdl
ZChIaXN0b3J5SXRlbSopCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCiAgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldl
Ykhpc3RvcnlJdGVtQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsIHVzZXJJbmZvOm5pbF07
CisjZWxzZQorICAgIFdlYlRocmVhZFBvc3ROb3RpZmljYXRpb24oV2ViSGlzdG9yeUl0ZW1DaGFu
Z2VkTm90aWZpY2F0aW9uLCBuaWwsIG5pbCk7CisjZW5kaWYKIH0KIAogQGltcGxlbWVudGF0aW9u
IFdlYkhpc3RvcnlJdGVtCiAKICsgKHZvaWQpaW5pdGlhbGl6ZQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXpl
TWFpblRocmVhZFRvUHJvY2Vzc01haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXpl
TWFpblJ1bkxvb3AoKTsKKyNlbmRpZgogICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJl
YWQoc2VsZik7CiB9CiAKQEAgLTE3OSwxMCArMjA1LDEyIEBAIC0gKE5TU3RyaW5nICopYWx0ZXJu
YXRlVGl0bGUKICAgICByZXR1cm4gbnNTdHJpbmdOaWxJZkVtcHR5KGNvcmUoX3ByaXZhdGUpLT5h
bHRlcm5hdGVUaXRsZSgpKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChOU0ltYWdlICop
aWNvbgogewogICAgIHJldHVybiBbW1dlYkljb25EYXRhYmFzZSBzaGFyZWRJY29uRGF0YWJhc2Vd
IGljb25Gb3JVUkw6W3NlbGYgVVJMU3RyaW5nXSB3aXRoU2l6ZTpXZWJJY29uU21hbGxTaXplXTsK
IH0KKyNlbmRpZgogCiAtIChOU1RpbWVJbnRlcnZhbClsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbAog
ewpAQCAtMzkwLDYgKzQxOCwyOSBAQCAtIChpZClpbml0RnJvbURpY3Rpb25hcnlSZXByZXNlbnRh
dGlvbjooTlNEaWN0aW9uYXJ5ICopZGljdAogICAgICAgICB9CiAgICAgfQogCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIE5TTnVtYmVyICpzY2FsZVZhbHVlID0gW2RpY3Qgb2JqZWN0Rm9yS2V5OnNj
YWxlS2V5XTsKKyAgICBOU051bWJlciAqc2NhbGVJc0luaXRpYWxWYWx1ZSA9IFtkaWN0IG9iamVj
dEZvcktleTpzY2FsZUlzSW5pdGlhbEtleV07CisgICAgaWYgKHNjYWxlVmFsdWUgJiYgc2NhbGVJ
c0luaXRpYWxWYWx1ZSkKKyAgICAgICAgY29yZShfcHJpdmF0ZSktPnNldFNjYWxlKFtzY2FsZVZh
bHVlIGZsb2F0VmFsdWVdLCBbc2NhbGVJc0luaXRpYWxWYWx1ZSBib29sVmFsdWVdKTsKKworICAg
IGlmIChpZCB2aWV3cG9ydEFyZ3VtZW50cyA9IFtkaWN0IG9iamVjdEZvcktleTpAIldlYlZpZXdw
b3J0QXJndW1lbnRzIl0pCisgICAgICAgIFtzZWxmIF9zZXRWaWV3cG9ydEFyZ3VtZW50czp2aWV3
cG9ydEFyZ3VtZW50c107CisKKyAgICBOU051bWJlciAqc2Nyb2xsUG9pbnRYVmFsdWUgPSBbZGlj
dCBvYmplY3RGb3JLZXk6c2Nyb2xsUG9pbnRYS2V5XTsKKyAgICBOU051bWJlciAqc2Nyb2xsUG9p
bnRZVmFsdWUgPSBbZGljdCBvYmplY3RGb3JLZXk6c2Nyb2xsUG9pbnRZS2V5XTsKKyAgICBpZiAo
c2Nyb2xsUG9pbnRYVmFsdWUgJiYgc2Nyb2xsUG9pbnRZVmFsdWUpCisgICAgICAgIGNvcmUoX3By
aXZhdGUpLT5zZXRTY3JvbGxQb2ludChJbnRQb2ludChbc2Nyb2xsUG9pbnRYVmFsdWUgaW50VmFs
dWVdLCBbc2Nyb2xsUG9pbnRZVmFsdWUgaW50VmFsdWVdKSk7CisKKyAgICB1aW50MzJfdCBib29r
bWFya0lEVmFsdWUgPSBbW2RpY3Qgb2JqZWN0Rm9yS2V5OmJvb2ttYXJrSURLZXldIHVuc2lnbmVk
SW50VmFsdWVdOworICAgIGlmIChib29rbWFya0lEVmFsdWUpCisgICAgICAgIGNvcmUoX3ByaXZh
dGUpLT5zZXRCb29rbWFya0lEKGJvb2ttYXJrSURWYWx1ZSk7CisKKyAgICBOU1N0cmluZyAqc2hh
cmVkTGlua1VuaXF1ZUlkZW50aWZpZXJWYWx1ZSA9IFtkaWN0IG9iamVjdEZvcktleTpzaGFyZWRM
aW5rVW5pcXVlSWRlbnRpZmllcktleV07CisgICAgaWYgKHNoYXJlZExpbmtVbmlxdWVJZGVudGlm
aWVyVmFsdWUpCisgICAgICAgIGNvcmUoX3ByaXZhdGUpLT5zZXRTaGFyZWRMaW5rVW5pcXVlSWRl
bnRpZmllcihzaGFyZWRMaW5rVW5pcXVlSWRlbnRpZmllclZhbHVlKTsKKyNlbmRpZgorCiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKQEAgLTQxOCw4ICs0NjksMTcgQEAgLSAoaWQpaW5pdFdpdGhVUkw6
KE5TVVJMICopVVJMIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlCiAgICAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoVVJMU3RyaW5nOltVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ10gdGl0bGU6dGl0
bGUgbGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6MF07CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCiAt
IChOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24KIHsKKyAgICByZXR1cm4g
W3NlbGYgZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uSW5jbHVkaW5nQ2hpbGRyZW46WUVTXTsKK30K
KworLSAoTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uSW5jbHVkaW5nQ2hp
bGRyZW46KEJPT0wpaW5jbHVkZXNDaGlsZHJlbgorI2Vsc2UKKy0gKE5TRGljdGlvbmFyeSAqKWRp
Y3Rpb25hcnlSZXByZXNlbnRhdGlvbgorI2VuZGlmCit7CiAgICAgQVNTRVJUX01BSU5fVEhSRUFE
KCk7CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdCA9IFtOU011dGFibGVEaWN0aW9uYXJ5
IGRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6OF07CiAKQEAgLTQ3MSw4ICs1MzEsMTIgQEAgLSAoTlNE
aWN0aW9uYXJ5ICopZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uCiAgICAgICAgIFtkaWN0IHNldE9i
amVjdDphcnJheSBmb3JLZXk6d2Vla2x5VmlzaXRDb3VudEtleV07CiAgICAgICAgIFthcnJheSBy
ZWxlYXNlXTsKICAgICB9ICAgIAotICAgIAorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChp
bmNsdWRlc0NoaWxkcmVuICYmIGNvcmVJdGVtLT5jaGlsZHJlbigpLnNpemUoKSkgeworI2Vsc2UK
ICAgICBpZiAoY29yZUl0ZW0tPmNoaWxkcmVuKCkuc2l6ZSgpKSB7CisjZW5kaWYKICAgICAgICAg
Y29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkcmVuID0gY29yZUl0ZW0tPmNoaWxkcmVuKCk7
CiAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpjaGlsZERpY3RzID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5OmNoaWxkcmVuLnNpemUoKV07CiAgICAgICAgIApAQCAtNDgxLDYgKzU0
NSwyOCBAQCAtIChOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24KICAgICAg
ICAgW2RpY3Qgc2V0T2JqZWN0OiBjaGlsZERpY3RzIGZvcktleTpjaGlsZHJlbktleV07CiAgICAg
fQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFtkaWN0IHNldE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OmNvcmUoX3ByaXZhdGUpLT5zY2FsZSgpXSBmb3JLZXk6c2NhbGVLZXldOwor
ICAgIFtkaWN0IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Y29yZShfcHJpdmF0
ZSktPnNjYWxlSXNJbml0aWFsKCldIGZvcktleTpzY2FsZUlzSW5pdGlhbEtleV07CisKKyAgICBO
U0RpY3Rpb25hcnkgKnZpZXdwb3J0QXJndW1lbnRzID0gW3NlbGYgX3ZpZXdwb3J0QXJndW1lbnRz
XTsKKyAgICBpZiAodmlld3BvcnRBcmd1bWVudHMpIHsKKyAgICAgICAgW2RpY3Qgc2V0T2JqZWN0
OnZpZXdwb3J0QXJndW1lbnRzIGZvcktleTpAIldlYlZpZXdwb3J0QXJndW1lbnRzIl07CisgICAg
fQorCisgICAgSW50UG9pbnQgc2Nyb2xsUG9pbnQgPSBjb3JlKF9wcml2YXRlKS0+c2Nyb2xsUG9p
bnQoKTsKKyAgICBbZGljdCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2Nyb2xs
UG9pbnQueCgpXSBmb3JLZXk6c2Nyb2xsUG9pbnRYS2V5XTsKKyAgICBbZGljdCBzZXRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2Nyb2xsUG9pbnQueSgpXSBmb3JLZXk6c2Nyb2xsUG9p
bnRZS2V5XTsKKworICAgIHVpbnQzMl90IGJvb2ttYXJrSUQgPSBjb3JlKF9wcml2YXRlKS0+Ym9v
a21hcmtJRCgpOworICAgIGlmIChib29rbWFya0lEKQorICAgICAgICBbZGljdCBzZXRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpib29rbWFya0lEXSBmb3JLZXk6Ym9va21h
cmtJREtleV07CisKKyAgICBOU1N0cmluZyAqc2hhcmVkTGlua1VuaXF1ZUlkZW50aWZpZXIgPSBb
c2VsZiBfc2hhcmVkTGlua1VuaXF1ZUlkZW50aWZpZXJdOworICAgIGlmIChzaGFyZWRMaW5rVW5p
cXVlSWRlbnRpZmllcikKKyAgICAgICAgW2RpY3Qgc2V0T2JqZWN0OnNoYXJlZExpbmtVbmlxdWVJ
ZGVudGlmaWVyIGZvcktleTpzaGFyZWRMaW5rVW5pcXVlSWRlbnRpZmllcktleV07CisjZW5kaWYK
KwogICAgIHJldHVybiBkaWN0OwogfQogCkBAIC01NTQsOSArNjQwLDExIEBAIC0gKFdlYkhpc3Rv
cnlJdGVtICopdGFyZ2V0SXRlbQogICAgIHJldHVybiBraXQoY29yZShfcHJpdmF0ZSktPnRhcmdl
dEl0ZW0oKSk7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogKyAodm9pZClfcmVsZWFzZUFsbFBl
bmRpbmdQYWdlQ2FjaGVzCiB7CiB9CisjZW5kaWYKIAogLSAoaWQpX3RyYW5zaWVudFByb3BlcnR5
Rm9yS2V5OihOU1N0cmluZyAqKWtleQogewpAQCAtNjExLDYgKzY5OSw4MCBAQCAtIChzaXplX3Qp
X2dldFdlZWtseVZpc2l0Q291bnRzOihjb25zdCBpbnQqKiljb3VudHMKICAgICByZXR1cm4gY29y
ZUl0ZW0tPndlZWtseVZpc2l0Q291bnRzKCkuc2l6ZSgpOwogfQogCisjaWYgUExBVEZPUk0oSU9T
KQorLSAodm9pZClfc2V0U2NhbGU6KGZsb2F0KXNjYWxlIGlzSW5pdGlhbDooQk9PTClhRmxhZwor
eworICAgIGNvcmUoX3ByaXZhdGUpLT5zZXRTY2FsZShzY2FsZSwgYUZsYWcpOworfQorCistIChm
bG9hdClfc2NhbGUKK3sKKyAgICByZXR1cm4gY29yZShfcHJpdmF0ZSktPnNjYWxlKCk7Cit9CisK
Ky0gKEJPT0wpX3NjYWxlSXNJbml0aWFsCit7CisgICAgcmV0dXJuIGNvcmUoX3ByaXZhdGUpLT5z
Y2FsZUlzSW5pdGlhbCgpOworfQorCistIChOU0RpY3Rpb25hcnkgKilfdmlld3BvcnRBcmd1bWVu
dHMKK3sKKyAgICBjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYgdmlld3BvcnRBcmd1bWVudHMgPSBj
b3JlKF9wcml2YXRlKS0+dmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICphcmd1bWVudHNEaWN0aW9uYXJ5ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFy
eV07CisgICAgW2FyZ3VtZW50c0RpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6dmlld3BvcnRBcmd1bWVudHMuem9vbV0gZm9yS2V5OldlYlZpZXdwb3J0SW5pdGlh
bFNjYWxlS2V5XTsKKyAgICBbYXJndW1lbnRzRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDp2aWV3cG9ydEFyZ3VtZW50cy5taW5ab29tXSBmb3JLZXk6V2ViVmll
d3BvcnRNaW5pbXVtU2NhbGVLZXldOworICAgIFthcmd1bWVudHNEaWN0aW9uYXJ5IHNldE9iamVj
dDpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnZpZXdwb3J0QXJndW1lbnRzLm1heFpvb21dIGZv
cktleTpXZWJWaWV3cG9ydE1heGltdW1TY2FsZUtleV07CisgICAgW2FyZ3VtZW50c0RpY3Rpb25h
cnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6dmlld3BvcnRBcmd1bWVudHMu
d2lkdGhdIGZvcktleTpXZWJWaWV3cG9ydFdpZHRoS2V5XTsKKyAgICBbYXJndW1lbnRzRGljdGlv
bmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDp2aWV3cG9ydEFyZ3VtZW50
cy5oZWlnaHRdIGZvcktleTpXZWJWaWV3cG9ydEhlaWdodEtleV07CisgICAgW2FyZ3VtZW50c0Rp
Y3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6dmlld3BvcnRBcmd1
bWVudHMudXNlclpvb21dIGZvcktleTpXZWJWaWV3cG9ydFVzZXJTY2FsYWJsZUtleV07CisgICAg
W2FyZ3VtZW50c0RpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDp2
aWV3cG9ydEFyZ3VtZW50cy5taW5pbWFsVUldIGZvcktleTpXZWJWaWV3cG9ydE1pbmltYWxVSUtl
eV07CisgICAgcmV0dXJuIGFyZ3VtZW50c0RpY3Rpb25hcnk7Cit9CisKKy0gKHZvaWQpX3NldFZp
ZXdwb3J0QXJndW1lbnRzOihOU0RpY3Rpb25hcnkgKilhcmd1bWVudHMKK3sKKyAgICBWaWV3cG9y
dEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50czsKKyAgICB2aWV3cG9ydEFyZ3VtZW50cy56b29t
ID0gW1thcmd1bWVudHMgb2JqZWN0Rm9yS2V5OldlYlZpZXdwb3J0SW5pdGlhbFNjYWxlS2V5XSBm
bG9hdFZhbHVlXTsKKyAgICB2aWV3cG9ydEFyZ3VtZW50cy5taW5ab29tID0gW1thcmd1bWVudHMg
b2JqZWN0Rm9yS2V5OldlYlZpZXdwb3J0TWluaW11bVNjYWxlS2V5XSBmbG9hdFZhbHVlXTsKKyAg
ICB2aWV3cG9ydEFyZ3VtZW50cy5tYXhab29tID0gW1thcmd1bWVudHMgb2JqZWN0Rm9yS2V5Oldl
YlZpZXdwb3J0TWF4aW11bVNjYWxlS2V5XSBmbG9hdFZhbHVlXTsKKyAgICB2aWV3cG9ydEFyZ3Vt
ZW50cy53aWR0aCA9IFtbYXJndW1lbnRzIG9iamVjdEZvcktleTpXZWJWaWV3cG9ydFdpZHRoS2V5
XSBmbG9hdFZhbHVlXTsKKyAgICB2aWV3cG9ydEFyZ3VtZW50cy5oZWlnaHQgPSBbW2FyZ3VtZW50
cyBvYmplY3RGb3JLZXk6V2ViVmlld3BvcnRIZWlnaHRLZXldIGZsb2F0VmFsdWVdOworICAgIHZp
ZXdwb3J0QXJndW1lbnRzLnVzZXJab29tID0gW1thcmd1bWVudHMgb2JqZWN0Rm9yS2V5OldlYlZp
ZXdwb3J0VXNlclNjYWxhYmxlS2V5XSBmbG9hdFZhbHVlXTsKKyAgICB2aWV3cG9ydEFyZ3VtZW50
cy5taW5pbWFsVUkgPSBbW2FyZ3VtZW50cyBvYmplY3RGb3JLZXk6V2ViVmlld3BvcnRNaW5pbWFs
VUlLZXldIGJvb2xWYWx1ZV07CisgICAgY29yZShfcHJpdmF0ZSktPnNldFZpZXdwb3J0QXJndW1l
bnRzKHZpZXdwb3J0QXJndW1lbnRzKTsKK30KKworLSAoQ0dQb2ludClfc2Nyb2xsUG9pbnQKK3sK
KyAgICByZXR1cm4gY29yZShfcHJpdmF0ZSktPnNjcm9sbFBvaW50KCk7Cit9CisKKy0gKHZvaWQp
X3NldFNjcm9sbFBvaW50OihDR1BvaW50KXNjcm9sbFBvaW50Cit7CisgICAgY29yZShfcHJpdmF0
ZSktPnNldFNjcm9sbFBvaW50KEludFBvaW50KHNjcm9sbFBvaW50KSk7Cit9CisKKy0gKHVpbnQz
Ml90KV9ib29rbWFya0lECit7CisgICAgcmV0dXJuIGNvcmUoX3ByaXZhdGUpLT5ib29rbWFya0lE
KCk7Cit9CisKKy0gKHZvaWQpX3NldEJvb2ttYXJrSUQ6KHVpbnQzMl90KWJvb2ttYXJrSUQKK3sK
KyAgICBjb3JlKF9wcml2YXRlKS0+c2V0Qm9va21hcmtJRChib29rbWFya0lEKTsKK30KKworLSAo
TlNTdHJpbmcgKilfc2hhcmVkTGlua1VuaXF1ZUlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gbnNT
dHJpbmdOaWxJZkVtcHR5KGNvcmUoX3ByaXZhdGUpLT5zaGFyZWRMaW5rVW5pcXVlSWRlbnRpZmll
cigpKTsKK30KKworLSAodm9pZClfc2V0U2hhcmVkTGlua1VuaXF1ZUlkZW50aWZpZXI6KE5TU3Ry
aW5nICopaWRlbnRpZmllcgoreworICAgIGNvcmUoX3ByaXZhdGUpLT5zZXRTaGFyZWRMaW5rVW5p
cXVlSWRlbnRpZmllcihpZGVudGlmaWVyKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisK
IC0gKEJPT0wpX2lzSW5QYWdlQ2FjaGUKIHsKICAgICByZXR1cm4gY29yZShfcHJpdmF0ZSktPmlz
SW5QYWdlQ2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2Vi
VVJMc1dpdGhUaXRsZXMubSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViVVJMc1dpdGhU
aXRsZXMubQppbmRleCBkZjllZjc1NTZkNGE5MjdhOGMzYjFhMzYyNGJjNGVmMDg3MjVhZDFmLi4w
OTY4ZGUyYWU3YjM2ODRiMmNhYmYwNmRlMmYwNTZiZTg1YTYzOTAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYlVSTHNXaXRoVGl0bGVzLm0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvSGlzdG9yeS9XZWJVUkxzV2l0aFRpdGxlcy5tCkBAIC0yNiw2ICsyNiw4IEBACiAg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJXZWJVUkxz
V2l0aFRpdGxlcy5oIgogCiAjaW1wb3J0IDxXZWJLaXQvV2ViTlNVUkxFeHRyYXMuaD4KQEAgLTEw
NSwzICsxMDcsNSBAQCArKE5TQXJyYXkgKilVUkxzRnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQKIH0KIAogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCmluZGV4IDc2NTE4NzY1NzJlMTc3M2VjNDBkODg2OTc1
MzU1ODYwZTVjODA2YWIuLmE3ZTMwMmM3YWUzMjk5MDE3YTU4ZGIwNTVjOTgyMWY4OTNhMjhjNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpAQCAtMzcsMTMgKzM3LDI1IEBACiAjaW1w
b3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAorI2lmIFBM
QVRGT1JNKElPUykKKyNpbXBvcnQgIk1lbW9yeU1lYXN1cmUuaCIKKyNpbXBvcnQgIldlYkZyYW1l
SW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkSW1hZ2UuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQ3JlZGVudGlhbFN0b3JhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUGFnZUNhY2hlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRSdW4uaD4KKyNlbmRpZgorCiBAaW1wbGVtZW50YXRpb24gV2ViQ2FjaGUKIAogKyAodm9pZClp
bml0aWFsaXplCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBKU0M6OmluaXRpYWxpemVUaHJl
YWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVh
ZCgpOwogICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOworI2VuZGlmCiAgICAg
SW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UoKTsgICAKIH0KIApAQCAtMTQxLDYgKzE1Myw5MyBA
QCArICh2b2lkKWVtcHR5CiAgICAgV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZTo6c2hhcmVkKCkuZW1wdHkoKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKysgKHZvaWQp
ZW1wdHlJbk1lbW9yeVJlc291cmNlcworeworICAgIC8vIFRoaXMgbWV0aG9kIGdldHMgY2FsbGVk
IGZyb20gTW9iaWxlU2FmYXJpIGFmdGVyIGl0IGNhbGxzIFtXZWJWaWV3CisgICAgLy8gX2Nsb3Nl
XS4gW1dlYlZpZXcgX2Nsb3NlXSBzY2hlZHVsZXMgaXRzIHdvcmsgb24gdGhlIFdlYlRocmVhZC4g
U28gd2UKKyAgICAvLyBzY2hlZHVsZSB0aGlzIG1ldGhvZCBvbiB0aGUgV2ViVGhyZWFkIGFzIHdl
bGwgc28gYXMgdG8gcGljayB1cCBhbGwgdGhlCisgICAgLy8gZGVhZCByZXNvdXJjZXMgbGVmdCBi
ZWhpbmQgYWZ0ZXIgY2xvc2luZyB0aGUgV2ViVmlld3MKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAg
ICAgICAgV2ViS2l0OjpNZW1vcnlNZWFzdXJlIG1lYXN1cmVyKCJbV2ViQ2FjaGUgZW1wdHlJbk1l
bW9yeVJlc291cmNlc10iKTsKKworICAgICAgICAvLyBUb2dnbGluZyB0aGUgY2FjaGUgbW9kZWwg
bGlrZSB0aGlzIGZvcmNlcyB0aGUgY2FjaGUgdG8gZXZpY3QgYWxsIGl0cyBpbi1tZW1vcnkgcmVz
b3VyY2VzLgorICAgICAgICBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwgPSBbV2ViVmlldyBfY2Fj
aGVNb2RlbF07CisgICAgICAgIFtXZWJWaWV3IF9zZXRDYWNoZU1vZGVsOldlYkNhY2hlTW9kZWxE
b2N1bWVudFZpZXdlcl07CisgICAgICAgIFtXZWJWaWV3IF9zZXRDYWNoZU1vZGVsOmNhY2hlTW9k
ZWxdOworCisgICAgICAgIFdlYkNvcmU6Om1lbW9yeUNhY2hlKCktPnBydW5lTGl2ZVJlc291cmNl
cyh0cnVlKTsKKyAgICB9KTsKK30KKworKyAodm9pZClzaXplT2ZEZWFkUmVzb3VyY2VzOihpbnQg
KilyZXNvdXJjZXMKK3sKKyAgICBXZWJDb3JlOjpNZW1vcnlDYWNoZTo6U3RhdGlzdGljcyBzdGF0
cyA9IFdlYkNvcmU6Om1lbW9yeUNhY2hlKCktPmdldFN0YXRpc3RpY3MoKTsKKyAgICBpZiAocmVz
b3VyY2VzKSB7CisgICAgICAgICpyZXNvdXJjZXMgPSAoc3RhdHMuaW1hZ2VzLnNpemUgLSBzdGF0
cy5pbWFnZXMubGl2ZVNpemUpCisgICAgICAgICAgICAgICAgICAgICArIChzdGF0cy5jc3NTdHls
ZVNoZWV0cy5zaXplIC0gc3RhdHMuY3NzU3R5bGVTaGVldHMubGl2ZVNpemUpCisjaWYgRU5BQkxF
KFhTTFQpCisgICAgICAgICAgICAgICAgICAgICArIChzdGF0cy54c2xTdHlsZVNoZWV0cy5zaXpl
IC0gc3RhdHMueHNsU3R5bGVTaGVldHMubGl2ZVNpemUpCisjZW5kaWYKKyAgICAgICAgICAgICAg
ICAgICAgICsgKHN0YXRzLnNjcmlwdHMuc2l6ZSAtIHN0YXRzLnNjcmlwdHMubGl2ZVNpemUpOwor
ICAgIH0KK30KKworKyAodm9pZCljbGVhckNhY2hlZENyZWRlbnRpYWxzCit7CisgICAgV2ViQ29y
ZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OmNsZWFyQ3JlZGVudGlhbHMoKTsKK30KKworKyAoYm9vbClh
ZGRJbWFnZVRvQ2FjaGU6KENHSW1hZ2VSZWYpaW1hZ2UgZm9yVVJMOihOU1VSTCAqKXVybAorewor
ICAgIHJldHVybiBbV2ViQ2FjaGUgYWRkSW1hZ2VUb0NhY2hlOmltYWdlIGZvclVSTDp1cmwgZm9y
RnJhbWU6bmlsXTsKK30KKworKyAoYm9vbClhZGRJbWFnZVRvQ2FjaGU6KENHSW1hZ2VSZWYpaW1h
Z2UgZm9yVVJMOihOU1VSTCAqKXVybCBmb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworICAg
IGlmICghaW1hZ2UgfHwgIXVybCB8fCAhW1t1cmwgYWJzb2x1dGVTdHJpbmddIGxlbmd0aF0pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogdG9wT3Jp
Z2luID0gMDsKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIGlmIChmcmFtZSkK
KyAgICAgICAgdG9wT3JpZ2luID0gY29yZShmcmFtZSktPmRvY3VtZW50KCktPnRvcE9yaWdpbigp
OworI2VuZGlmCisgICAgcmV0dXJuIFdlYkNvcmU6Om1lbW9yeUNhY2hlKCktPmFkZEltYWdlVG9D
YWNoZShpbWFnZSwgdXJsLCB0b3BPcmlnaW4gPyB0b3BPcmlnaW4tPmNhY2hlUGFydGl0aW9uKCkg
OiBlbXB0eVN0cmluZygpKTsKK30KKworKyAodm9pZClyZW1vdmVJbWFnZUZyb21DYWNoZUZvclVS
TDooTlNVUkwgKil1cmwKK3sKKyAgICBbV2ViQ2FjaGUgcmVtb3ZlSW1hZ2VGcm9tQ2FjaGVGb3JV
Ukw6dXJsIGZvckZyYW1lOm5pbF07Cit9CisKKysgKHZvaWQpcmVtb3ZlSW1hZ2VGcm9tQ2FjaGVG
b3JVUkw6KE5TVVJMICopdXJsIGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgaWYg
KCF1cmwpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogdG9w
T3JpZ2luID0gMDsKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIGlmIChmcmFt
ZSkKKyAgICAgICAgdG9wT3JpZ2luID0gY29yZShmcmFtZSktPmRvY3VtZW50KCktPnRvcE9yaWdp
bigpOworI2VuZGlmCisgICAgV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS0+cmVtb3ZlSW1hZ2VGcm9t
Q2FjaGUodXJsLCB0b3BPcmlnaW4gPyB0b3BPcmlnaW4tPmNhY2hlUGFydGl0aW9uKCkgOiBlbXB0
eVN0cmluZygpKTsKK30KKworKyAoQ0dJbWFnZVJlZilpbWFnZUZvclVSTDooTlNVUkwgKil1cmwK
K3sKKyAgICBpZiAoIXVybCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS0+
cmVzb3VyY2VGb3JVUkwodXJsKTsKKyAgICBpZiAoIWNhY2hlZFJlc291cmNlIHx8IGNhY2hlZFJl
c291cmNlLT50eXBlKCkgIT0gV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2Up
CisgICAgICAgIHJldHVybiAwOworICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlKiBjYWNoZWRJbWFn
ZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNhY2hlZEltYWdlKj4oY2FjaGVkUmVzb3VyY2UpOwor
ICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5oYXNJbWFnZSgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2FjaGVkSW1hZ2UtPmltYWdlKCktPmdldENHSW1hZ2VS
ZWYoKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogKyAodm9pZClzZXREaXNhYmxl
ZDooQk9PTClkaXNhYmxlZAogewogICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkRvd25sb2FkLm1tIGIvU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJEb3dubG9hZC5tbQppbmRleCA0NGE0NjFlNzllNGIyMzNiNjY2ZTY0YTE2
YTAwMmEzNjE2YzA5MThkLi45OWZhNGJhNzc3YTc3NzBlODVjYzQ2ZDBkMTA4NzIxNDkwMTFmMjAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkRvd25sb2FkLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViRG93bmxvYWQubW0KQEAgLTEyNSw2ICsxMjUsNyBA
QCAtIChOU1VSTFJlcXVlc3QgKilkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkIHdp
bGxTZW5kUmVxdWVzdDooTlNVUkxSZXF1ZQogCiAtICh2b2lkKWRvd25sb2FkOihOU1VSTERvd25s
b2FkICopZG93bmxvYWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlCiB7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICAvLyBUcnkgcHJldmlvdXNseSBzdG9yZWQgY3JlZGVudGlhbCBmaXJzdC4KICAgICBpZiAo
IVtjaGFsbGVuZ2UgcHJldmlvdXNGYWlsdXJlQ291bnRdKSB7CiAgICAgICAgIE5TVVJMQ3JlZGVu
dGlhbCAqY3JlZGVudGlhbCA9IG1hYyhDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KGNvcmUoW2NoYWxs
ZW5nZSBwcm90ZWN0aW9uU3BhY2VdKSkpOwpAQCAtMTQ0LDE1ICsxNDUsMTggQEAgLSAodm9pZClk
b3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTooTlMKIAogICAgICAgICBbW1dlYlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVy
IHNoYXJlZEhhbmRsZXJdIHN0YXJ0QXV0aGVudGljYXRpb246Y2hhbGxlbmdlIHdpbmRvdzp3aW5k
b3ddOwogICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKWRvd25sb2FkOihOU1VSTERvd25sb2Fk
ICopZG93bmxvYWQgZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IGlmIChbcmVhbERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZG93bmxvYWQ6
ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KV0pIHsKICAgICAgICAgW3JlYWxEZWxl
Z2F0ZSBkb3dubG9hZDpkb3dubG9hZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpj
aGFsbGVuZ2VdOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFtbV2ViUGFuZWxBdXRoZW50aWNhdGlv
bkhhbmRsZXIgc2hhcmVkSGFuZGxlcl0gY2FuY2VsQXV0aGVudGljYXRpb246Y2hhbGxlbmdlXTsK
ICAgICB9CisjZW5kaWYKIH0KIAogLSAodm9pZClkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRv
d25sb2FkIGRpZFJlY2VpdmVSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQppbmRleCA5MDk0
YTM4YjI2ZDlhODJmNjU3NjU2MTgxNWY4MTQ0MTJmOTdlMGVjLi40NDdmNmE1YjhkNzQ4OTI5ODdm
ZWY0MDgxMzY0YjQ0OTVjMTUwNDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
RWxlbWVudERpY3Rpb25hcnkubW0KQEAgLTY1LDkgKzY1LDExIEBAIEBpbXBsZW1lbnRhdGlvbiBX
ZWJFbGVtZW50RGljdGlvbmFyeQogCiArICh2b2lkKWluaXRpYWxpemUKIHsKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlh
bGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6aW5pdGlh
bGl6ZU1haW5SdW5Mb29wKCk7CisjZW5kaWYKICAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25NYWlu
VGhyZWFkKHNlbGYpOwogfQogCkBAIC0yMTAsOCArMjEyLDEyIEBAIC0gKE5TSW1hZ2UgKilfaW1h
Z2UKIAogLSAoTlNWYWx1ZSAqKV9pbWFnZVJlY3QKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IEludFJlY3QgcmVjdCA9IF9yZXN1bHQtPmltYWdlUmVjdCgpOwogICAgIHJldHVybiByZWN0Lmlz
RW1wdHkoKSA/IG5pbCA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CisjZWxzZQorICAg
IHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAogLSAoTlNVUkwgKilfYWJzb2x1dGVJbWFnZVVSTApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJJY29uRGF0YWJhc2UubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkljb25EYXRhYmFzZS5tbQppbmRleCAxZTM5OTFiMGM5
ZWU3NzQzZGUxNTlmNTU5MDI4NzQ2MmU5MzIzNmI1Li40ZjM5NDYzZDE2OTFhNjA2OTk4MjRkM2Nl
YTZkMGIzMGJmM2E3MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYklj
b25EYXRhYmFzZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkljb25EYXRhYmFz
ZS5tbQpAQCAtMjYsNiArMjYsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JN
KElPUykKKwogI2ltcG9ydCAiV2ViSWNvbkRhdGFiYXNlSW50ZXJuYWwuaCIKIAogI2ltcG9ydCAi
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmgiCkBAIC00OTIsMyArNDk0LDUgQEAgTlNJbWFnZSAqd2Vi
R2V0TlNJbWFnZShJbWFnZSogaW1hZ2UsIE5TU2l6ZSBzaXplKQogICAgIH0KICAgICByZXR1cm4g
bnNJbWFnZTsKIH0KKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9NaXNjL1dlYkljb25EYXRhYmFzZUludGVybmFsLmggYi9Tb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkljb25EYXRhYmFzZUludGVybmFsLmgKaW5kZXggNDk4ZmE3NTU2OTM0
YjBkNGUwYmFjYzYwOTU5ODFhNWE3Njc3MzAyMC4uMjQxOWMxZDFlOTVmMmU0NDkwOWI2ZGRmNzk2
NWIzNWYxYjRmNzlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJJY29u
RGF0YWJhc2VJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViSWNvbkRh
dGFiYXNlSW50ZXJuYWwuaApAQCAtMjYsNiArMjYsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisj
aWYgIVBMQVRGT1JNKElPUykKKwogI2ltcG9ydCAiV2ViSWNvbkRhdGFiYXNlUHJpdmF0ZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OCwzICs1MCw1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIEBlbmQKIAogTlNJbWFnZSAqd2ViR2V0TlNJbWFnZShXZWJDb3JlOjpJbWFnZSosIE5TU2l6
ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXRO
U1N0cmluZ0V4dHJhcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdF
eHRyYXMubW0KaW5kZXggMDhmOGU2YWZmMWIyOTk2MzY1ZTIwZjc2Mzg2OGJkOGE0OTAyZWNkMi4u
MDMzMGYxNTdhZWI4YjVjNzM1NzYyMzUyMGNlOWQ1NWZkMzZlMTMyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCkBAIC0zOCwxOSArMzgsMzAg
QEAKICNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KICNpbXBvcnQgPHN5cy9wYXJhbS5oPgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8V2ViQ29yZS9XQUtWaWV3UHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViS2l0L0RPTS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+CisjaW1wb3J0
IDxXZWJLaXQvV2ViRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUu
aD4KKyNlbmRpZgorCiBOU1N0cmluZyAqV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5ID0gQCJX
ZWJLaXRMb2NhbENhY2hlIjsKIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgaW5saW5lIENH
RmxvYXQgd2Via2l0X0NHQ2VpbGluZyhDR0Zsb2F0IHZhbHVlKQogewogICAgIGlmIChzaXplb2Yo
dmFsdWUpID09IHNpemVvZihmbG9hdCkpCiAgICAgICAgIHJldHVybiBjZWlsZih2YWx1ZSk7CiAg
ICAgcmV0dXJuIGNlaWwodmFsdWUpOwogfQorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKFdlYktpdEV4dHJhcykKIAorI2lmICFQ
TEFURk9STShJT1MpCiBzdGF0aWMgQk9PTCBjYW5Vc2VGYXN0UmVuZGVyZXIoY29uc3QgVW5pQ2hh
ciAqYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgdW5zaWduZWQgaTsKQEAgLTE0OCw2
ICsxNTksNyBAQCAtIChmbG9hdClfd2ViX3dpZHRoV2l0aEZvbnQ6KE5TRm9udCAqKWZvbnQKIAog
ICAgIHJldHVybiBbc2VsZiBzaXplV2l0aEF0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOmZvbnQsIE5TRm9udEF0dHJpYnV0ZU5hbWUsIG5pbF1dLndp
ZHRoOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIC0gKE5TU3RyaW5nICopX3dlYl9z
dHJpbmdCeUFiYnJldmlhdGluZ1dpdGhUaWxkZUluUGF0aAogewpAQCAtMTcyLDEwICsxODQsMTIg
QEAgLSAoTlNTdHJpbmcgKilfd2ViX3N0cmluZ0J5U3RyaXBwaW5nUmV0dXJuQ2hhcmFjdGVycwog
ICAgIHJldHVybiBuZXdTdHJpbmc7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogKyAoTlNTdHJp
bmdFbmNvZGluZylfd2ViX2VuY29kaW5nRm9yUmVzb3VyY2U6KEhhbmRsZSlyZXNvdXJjZQogewog
ICAgIHJldHVybiBDRlN0cmluZ0NvbnZlcnRFbmNvZGluZ1RvTlNTdHJpbmdFbmNvZGluZyhzdHJp
bmdFbmNvZGluZ0ZvclJlc291cmNlKHJlc291cmNlKSk7CiB9CisjZW5kaWYKIAogLSAoQk9PTClf
d2Via2l0X2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmcK
IHsKQEAgLTI4NSw2ICsyOTksNyBAQCAtIChOU1N0cmluZyAqKV93ZWJraXRfc3RyaW5nQnlDb2xs
YXBzaW5nV2hpdGVzcGFjZUNoYXJhY3RlcnMKICAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVsZWFz
ZV07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLShOU1N0cmluZyAqKV93ZWJraXRfZml4ZWRD
YXJib25QT1NJWFBhdGgKIHsKICAgICBOU0ZpbGVNYW5hZ2VyICpmaWxlTWFuYWdlciA9IFtOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKQEAgLTMyNiw2ICszNDEsMTQgQEAgLShOU1N0cmlu
ZyAqKV93ZWJraXRfZml4ZWRDYXJib25QT1NJWFBhdGgKIAogICAgIHJldHVybiBwYXRoOwogfQor
I2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNpZiBQTEFURk9STShJT1MpCisrIChOU1N0cmlu
ZyAqKV93ZWJfc3RyaW5nV2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgdGV4dEVuY29kaW5nTmFtZToo
TlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lCit7CisgICAgcmV0dXJuIFtXZWJGcmFtZSBzdHJp
bmdXaXRoRGF0YTpkYXRhIHRleHRFbmNvZGluZ05hbWU6dGV4dEVuY29kaW5nTmFtZV07Cit9Cisj
ZW5kaWYKIAogKyAoTlNTdHJpbmcgKilfd2Via2l0X2xvY2FsQ2FjaGVEaXJlY3RvcnlXaXRoQnVu
ZGxlSWRlbnRpZmllcjooTlNTdHJpbmcqKWJ1bmRsZUlkZW50aWZpZXIKIHsKQEAgLTMzMywxMSAr
MzU2LDE1IEBAICsgKE5TU3RyaW5nICopX3dlYmtpdF9sb2NhbENhY2hlRGlyZWN0b3J5V2l0aEJ1
bmRsZUlkZW50aWZpZXI6KE5TU3RyaW5nKilidW5kbGVJCiAgICAgTlNTdHJpbmcgKmNhY2hlRGly
ID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpXZWJLaXRMb2NhbENhY2hlRGVmYXVsdHNLZXldOwog
CiAgICAgaWYgKCFjYWNoZURpciB8fCAhW2NhY2hlRGlyIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5n
IGNsYXNzXV0pIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGNhY2hlRGlyID0gW05TSG9t
ZURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkxpYnJhcnkvQ2Fj
aGVzIl07CisjZWxzZQogICAgICAgICBjaGFyIGNhY2hlRGlyZWN0b3J5W01BWFBBVEhMRU5dOwog
ICAgICAgICBzaXplX3QgY2FjaGVEaXJlY3RvcnlMZW4gPSBjb25mc3RyKF9DU19EQVJXSU5fVVNF
Ul9DQUNIRV9ESVIsIGNhY2hlRGlyZWN0b3J5LCBNQVhQQVRITEVOKTsKICAgICAKICAgICAgICAg
aWYgKGNhY2hlRGlyZWN0b3J5TGVuKQogICAgICAgICAgICAgY2FjaGVEaXIgPSBbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246
Y2FjaGVEaXJlY3RvcnkgbGVuZ3RoOmNhY2hlRGlyZWN0b3J5TGVuIC0gMV07CisjZW5kaWYKICAg
ICB9CiAKICAgICByZXR1cm4gW2NhY2hlRGlyIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpidW5kbGVJZGVudGlmaWVyXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViS2l0U3lzdGVtQml0cy5tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXRTeXN0ZW1C
aXRzLm0KaW5kZXggZDY0ZjJkZTk4OWFjYjQ3N2JhMTU0MGRkOWEwZWUxMThmYWJmNzA1NC4uYzg5
YjVjMWU2MWFhOGI1MTcxYjJlZDFmYWU1YjMwOGIwNmJjOWE0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJLaXRTeXN0ZW1CaXRzLm0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJLaXRTeXN0ZW1CaXRzLm0KQEAgLTU3LDggKzU3LDE4IEBAIHN0YXRpYyB2b2lk
IGluaXRDYXBhYmlsaXRpZXModm9pZCkKIAogdWludDY0X3QgV2ViTWVtb3J5U2l6ZSh2b2lkKQog
eworI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAgLy8gUHJldGVuZCB3ZSBoYXZlIDUx
Mk1CIG9mIG1lbW9yeSB0byBtYWtlIGNhY2hlIHNpemVzIGJlaGF2ZSBsaWtlIG9uIGRldmljZQor
ICAgIHJldHVybiA1MTIgKiAxMDI0ICogMTAyNDsKKyNlbmRpZgogICAgIHB0aHJlYWRfb25jZSgm
aW5pdENvbnRyb2wsIGluaXRDYXBhYmlsaXRpZXMpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBPbiBpT1MsIHJvdW5kIHVwIHRoZSBtZW1vcnkgc2l6ZSB0byBhIHBvd2VyIG9mIDIgYmVjYXVz
ZSBtYXhfbWVtIG1heSBub3QgYmUgZXhhY3RseSAyNTZNQgorICAgIC8vIChmb3IgZXhhbXBsZSkg
YW5kIHdlIGhhdmUgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhvc2UgYm91bmRhcmllcy4KKyAgICBy
ZXR1cm4gcG93ZigyLjAsIGNlaWxmKGxvZzJmKGdIb3N0QmFzaWNJbmZvLm1heF9tZW0pKSk7Cisj
ZWxzZQogICAgIHJldHVybiBnSG9zdEJhc2ljSW5mby5tYXhfbWVtOworI2VuZGlmCiB9CiAKIGlu
dCBXZWJOdW1iZXJPZkNQVXModm9pZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViS2l0VmVyc2lvbkNoZWNrcy5oIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXRW
ZXJzaW9uQ2hlY2tzLmgKaW5kZXggMjRiNjQ3YTM0Y2FjMzBjZTE4NzA5YWJjZTBmNDI4MzVjMTIz
NWZjMC4uMWMxNmVlNmNhZWNlODA2OWE1MmUyMzQzNGE2NjMxMTdkNTk5ZmQwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXRWZXJzaW9uQ2hlY2tzLmgKKysrIGIvU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXRWZXJzaW9uQ2hlY2tzLmgKQEAgLTM2LDYgKzM2LDcg
QEAKICAgICB3aGVuIGFkZGluZyBhIG5ldyB2ZXJzaW9uIGNvbnN0YW50LgogKi8KIAorI2lmICFQ
TEFURk9STShJT1MpCiAjZGVmaW5lIFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhfM18wX0NPTlRF
WFRfTUVOVV9UQUdTIDB4MDIwQTAwMDAgLy8gNTIyLjAuMAogI2RlZmluZSBXRUJLSVRfRklSU1Rf
VkVSU0lPTl9XSVRIX0xPQ0FMX1JFU09VUkNFX1NFQ1VSSVRZX1JFU1RSSUNUSU9OIDB4MDIwQTAw
MDAgLy8gNTIyLjAuMAogI2RlZmluZSBXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0FQRVJU
VVJFX1FVSVJLIDB4MDIwQTAwMDAgLy8gNTIyLjAuMApAQCAtNTgsNiArNTksMjEgQEAKICNkZWZp
bmUgV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9HRVRfTUFUQ0hFRF9DU1NfUlVMRVNfUkVTVFJJ
Q1RJT05TIDB4MDIxNjBCMDAgLy8gNTM0LjExLjAKICNkZWZpbmUgV0VCS0lUX0ZJUlNUX1ZFUlNJ
T05fV0lUSF9DU1NfQVRUUklCVVRFX1NFVFRFUlNfSUdOT1JJTkdfUFJJT1JJVFkgMHgwMjE3MEQw
MCAvLyA1MzUuMTMuMAogI2RlZmluZSBXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0xFR0FD
WV9CQUNLR1JPVU5EU0laRV9TSE9SVEhBTkRfQkVIQVZJT1IgMHgwMjE5MDEwMCAvLyA1MzcuMS4w
CisjZWxzZQorLy8gPHJkYXI6Ly9wcm9ibGVtLzY2Mjc3NTg+IE5lZWQgdG8gaW1wbGVtZW50IFdl
YktpdExpbmtlZE9uT3JBZnRlcgorLy8gQWN0dWFsbHkgVUlLaXQgdmVyc2lvbiBudW1iZXJzLCBz
aW5jZSBhcHBsaWNhdGlvbnMgZG9uJ3QgbGluayBhZ2FpbnN0IFdlYktpdAorI2RlZmluZSBXRUJL
SVRfRklSU1RfVkVSU0lPTl9XSVRIX0xPQ0FMX1JFU09VUkNFX1NFQ1VSSVRZX1JFU1RSSUNUSU9O
IDIyOSAvLyBpT1MgMi4wCisjZGVmaW5lIFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhfTU9SRV9T
VFJJQ1RfTE9DQUxfUkVTT1VSQ0VfU0VDVVJJVFlfUkVTVFJJQ1RJT04gODE4IC8vIGlPUyAzLjAK
KyNkZWZpbmUgV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9GTElQUEVEX1NIQURPV1MgMTEwMCAv
LyBpT1MgMy4yCisjZGVmaW5lIFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfTVVMVElQTEVf
SUZSQU1FX1RPVUNIX0VWRU5UX0RJU1BBVENIIDE0MDAgLy8gaU9TIDQuMgorI2RlZmluZSBXRUJL
SVRfRklSU1RfVkVSU0lPTl9XSVRIX0NTU19UUkFOU0ZPUk1TX0FGRkVDVElOR19PVkVSRkxPVyAx
NjAwIC8vIGlPUyA1LjAKKyNkZWZpbmUgV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9IVE1MNV9Q
QVJTRVIgMTYwMCAvLyBpT1MgNS4wCisjZGVmaW5lIFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhf
V0lORE9XX09OX0VSUk9SIDE2MDAgLy8gaU9TIDUuMAorI2RlZmluZSBXRUJLSVRfRklSU1RfVkVS
U0lPTl9XSVRIX0RFTEVHQVRFX0NBTExTX0lOX0NPTU1PTl9SVU5MT09QX01PREVTIDE2MDAgLy8g
aU9TIDUuMAorI2RlZmluZSBXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIX0NTU19BVFRSSUJVVEVf
U0VUVEVSU19JR05PUklOR19QUklPUklUWSAyMjM5IC8vIGlPUyA2LjAKKyNkZWZpbmUgV0VCS0lU
X0ZJUlNUX1ZFUlNJT05fV0lUSF9ZT1VUVUJFX0VNQkVEX0lGUkFNRV9UUkFOU0ZPUk0gMjIzOSAv
LyBpT1MgNi4wCisjZGVmaW5lIFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfTEVHQUNZX0JB
Q0tHUk9VTkRTSVpFX1NIT1JUSEFORF9CRUhBVklPUiAyNjY1IC8vIGlPUyA3LjAKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdFZlcnNpb25DaGVja3MubSBiL1Nv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0VmVyc2lvbkNoZWNrcy5tCmluZGV4IGE2M2UxMGIz
NjdmODY3OTA1OTUwODBhZGExMWM2MzgyNmNlYTNhOTAuLmViYmM2ZWI1YmI4ZjRmM2E5ODYxOTRl
MzAyN2MyOTJkZjgyZTIxNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
S2l0VmVyc2lvbkNoZWNrcy5tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0VmVy
c2lvbkNoZWNrcy5tCkBAIC0zNCw3ICszNCwxOCBAQAogCiBCT09MIFdlYktpdExpbmtlZE9uT3JB
ZnRlcihpbnQgdmVyc2lvbikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiAoV2Vi
S2l0TGlua1RpbWVWZXJzaW9uKCkgPj0gdmVyc2lvbik7CisjZWxzZQorICAgIGludDMyX3QgbGlu
a1RpbWVWZXJzaW9uID0gV2ViS2l0TGlua1RpbWVWZXJzaW9uKCk7CisgICAgaW50MzJfdCBtYWpv
clZlcnNpb24gPSBsaW5rVGltZVZlcnNpb24gPj4gMTYgJiAweDAwMDBGRkZGOworICAgIAorICAg
IC8vIFRoZSBhcHBsaWNhdGlvbiB3YXMgbm90IGxpbmtlZCBhZ2FpbnN0IFVJS2l0IHNvIGFzc3Vt
ZSBtb3N0IHJlY2VudCBXZWJLaXQKKyAgICBpZiAobGlua1RpbWVWZXJzaW9uID09IC0xKQorICAg
ICAgICByZXR1cm4gWUVTOworICAgIAorICAgIHJldHVybiAobWFqb3JWZXJzaW9uID49IHZlcnNp
b24pOworI2VuZGlmCiB9CiAKIHZvaWQgc2V0V2ViS2l0TGlua1RpbWVWZXJzaW9uKGludCB2ZXJz
aW9uKQpAQCAtNDcsNSArNTgsMTEgQEAgc3RhdGljIGludCBXZWJLaXRMaW5rVGltZVZlcnNpb24o
dm9pZCkKICAgICBpZiAob3ZlcnJpZGVuV2ViS2l0TGlua1RpbWVWZXJzaW9uKQogICAgICAgICBy
ZXR1cm4gb3ZlcnJpZGVuV2ViS2l0TGlua1RpbWVWZXJzaW9uOwogCisjaWYgIVBMQVRGT1JNKElP
UykKICAgICByZXR1cm4gTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIldlYktpdCIpOworI2Vs
c2UKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjYyNzc1OD4gTmVlZCB0byBpbXBsZW1lbnQgV2Vi
S2l0TGlua2VkT25PckFmdGVyCisgICAgLy8gVGhpcmQgcGFydHkgYXBwbGljYXRpb25zIGRvIG5v
dCBsaW5rIGFnYWluc3QgV2ViS2l0LCBidXQgcmF0aGVyIGFnYWluc3QgVUlLaXQuCisgICAgcmV0
dXJuIE5TVmVyc2lvbk9mTGlua1RpbWVMaWJyYXJ5KCJVSUtpdCIpOworI2VuZGlmCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkxvY2FsaXphYmxlU3RyaW5ncy5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTG9jYWxpemFibGVTdHJpbmdzLm1tCmluZGV4IDUw
NmNiNWMyZjY3ODEyZGIwMGJlZDMyMzk2ZmQ0YzY5MmViZGM0ZjYuLmQ0YzQ5YzBlYzAzY2ZmYzEy
NGMwYjIyYjhkYzQ4MGE1MjlmY2JkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViTG9jYWxpemFibGVTdHJpbmdzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViTG9jYWxpemFibGVTdHJpbmdzLm1tCkBAIC0zMSw2ICszMSwxMSBAQAogI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaW1wb3J0ICJXZWJMb2NhbGl6YWJsZVN0cmluZ3NJbnRlcm5hbC5oIgorI2ltcG9y
dCA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNlbmRpZgorCiBXZWJMb2NhbGl6YWJsZVN0cmluZ3NC
dW5kbGUgV2ViS2l0TG9jYWxpemFibGVTdHJpbmdzQnVuZGxlID0geyAiY29tLmFwcGxlLldlYktp
dCIsIDAgfTsKIAogTlNTdHJpbmcgKldlYkxvY2FsaXplZFN0cmluZyhXZWJMb2NhbGl6YWJsZVN0
cmluZ3NCdW5kbGUgKnN0cmluZ3NCdW5kbGUsIGNvbnN0IGNoYXIgKmtleSkKQEAgLTM5LDcgKzQ0
LDkgQEAgTlNTdHJpbmcgKldlYkxvY2FsaXplZFN0cmluZyhXZWJMb2NhbGl6YWJsZVN0cmluZ3NC
dW5kbGUgKnN0cmluZ3NCdW5kbGUsIGNvbnN0IGMKICAgICAvLyBhbmQgaXRzIHVzZSBvZiBbTlNC
dW5kbGUgbG9jYWxpemVkU3RyaW5nRm9yS2V5Ojo6XSwgd2hpY2ggaXMgbm90IGd1YXJhbnRlZWQg
dG8gYmUgdGhyZWFkLXNhZmUuIElmCiAgICAgLy8gd2UgZGVjaWRlIHdlIG5lZWQgdG8gdXNlIHRo
aXMgb24gYmFja2dyb3VuZCB0aHJlYWRzLCB3ZSdsbCBuZWVkIHRvIGFkZCBsb2NraW5nIGhlcmUg
YW5kIG1ha2Ugc3VyZQogICAgIC8vIGl0IGRvZXNuJ3QgYWZmZWN0IHBlcmZvcm1hbmNlLgorI2lm
ICFQTEFURk9STShJT1MpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyNlbmRpZgogCiAg
ICAgTlNCdW5kbGUgKmJ1bmRsZTsKICAgICBpZiAoc3RyaW5nc0J1bmRsZSA9PSBOVUxMKSB7CkBA
IC02NSwzICs3MiwyMCBAQCBOU1N0cmluZyAqV2ViTG9jYWxpemVkU3RyaW5nKFdlYkxvY2FsaXph
YmxlU3RyaW5nc0J1bmRsZSAqc3RyaW5nc0J1bmRsZSwgY29uc3QgYwogICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UocmVzdWx0ICE9IG5vdEZvdW5kLCAiY291bGQgbm90IGZpbmQgbG9jYWxpemFibGUg
c3RyaW5nICVzIGluIGJ1bmRsZSIsIGtleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKworI2lm
IFBMQVRGT1JNKElPUykKKy8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNzkwMjQ3Mz4gT3B0aW1pemUg
V2ViTG9jYWxpemVkU3RyaW5nIGZvciB3aHkgd2UgZG8gdGhpcyBvbiBhIGJhY2tncm91bmQgdGhy
ZWFkIG9uIGEgdGltZXIgY2FsbGJhY2sKK3N0YXRpYyB2b2lkIExvYWRXZWJMb2NhbGl6ZWRTdHJp
bmdzVGltZXJDYWxsYmFjayhDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCAqaW5mbykKK3sK
KyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FV
RVVFX1BSSU9SSVRZX0xPVywgMCksIF57IAorICAgICAgICBVSV9TVFJJTkdfS0VZX0lOVEVSTkFM
KCJUeXBpbmciLCAiVHlwaW5nIChVbmRvIGFjdGlvbiBuYW1lKSIsICJXZSBkb24ndCBjYXJlIGlm
IHdlIGZpbmQgdGhpcyBzdHJpbmcsIGJ1dCBzZWFyY2hpbmcgZm9yIGl0IHdpbGwgbG9hZCB0aGUg
cGxpc3QgYW5kIHNhdmUgdGhlIHJlc3VsdHMuIik7CisgICAgfSk7Cit9CisKK3ZvaWQgTG9hZFdl
YkxvY2FsaXplZFN0cmluZ3Modm9pZCkKK3sKKyAgICBDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciA9
IENGUnVuTG9vcFRpbWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIENGQWJzb2x1dGVUaW1l
R2V0Q3VycmVudCgpLCAwLCAwLCAwLCAmTG9hZFdlYkxvY2FsaXplZFN0cmluZ3NUaW1lckNhbGxi
YWNrLCBOVUxMKTsKKyAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCks
IHRpbWVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGUmVsZWFzZSh0aW1lcik7Cit9
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNBcnJheUV4
dHJhcy5oIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0FycmF5RXh0cmFzLmgKaW5kZXgg
YTY5YTY5NDU0NTg2ZjI1MjRjYmRiNGUwZDAzYTU3MGU0Mjk3ZDAxNS4uNjRjNWFlZGMzMjg0OTc3
MGU1MGNhMjBlNTQyNGQ4MzUyOGI5MWVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJOU0FycmF5RXh0cmFzLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJO
U0FycmF5RXh0cmFzLmgKQEAgLTI3LDcgKzI3LDYgQEAKICAqLwogCiAjaW1wb3J0ICJXZWJUeXBl
c0ludGVybmFsLmgiCi0jaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgogCiBAaW50ZXJmYWNlIE5TQXJy
YXkgKFdlYk5TQXJyYXlFeHRyYXMpCiAKQEAgLTM2LDggKzM1LDEwIEBACiAKIEBlbmQKIAorI2lm
ICFQTEFURk9STShJT1MpCiBAaW50ZXJmYWNlIE5TTXV0YWJsZUFycmF5IChXZWJOU0FycmF5RXh0
cmFzKQogCiAtICh2b2lkKV93ZWJraXRfcmVtb3ZlVXNlbGVzc01lbnVJdGVtU2VwYXJhdG9yczsK
IAogQGVuZAorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5T
QXJyYXlFeHRyYXMubSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNBcnJheUV4dHJhcy5t
CmluZGV4IDYzNzcwMTBlNWEwZjUyYTlmODQ1MWM4ODViN2NlZDY3OTRiOWZiMWEuLjU0MDE5NmEw
MDJkZTRkM2I0YTkxOWY0OTRjYjI2YWMwNTQ3M2ExZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL01pc2MvV2ViTlNBcnJheUV4dHJhcy5tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViTlNBcnJheUV4dHJhcy5tCkBAIC00Niw2ICs0Niw3IEBAIC0oTlNTdHJpbmcgKilfd2Vi
a2l0X3N0cmluZ0F0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKIAogQGVuZAogCisjaWYgIVBMQVRG
T1JNKElPUykKIEBpbXBsZW1lbnRhdGlvbiBOU011dGFibGVBcnJheSAoV2ViTlNBcnJheUV4dHJh
cykKIAogLSAodm9pZClfd2Via2l0X3JlbW92ZVVzZWxlc3NNZW51SXRlbVNlcGFyYXRvcnMKQEAg
LTcyLDMgKzczLDQgQEAgLSAodm9pZClfd2Via2l0X3JlbW92ZVVzZWxlc3NNZW51SXRlbVNlcGFy
YXRvcnMKIH0KIAogQGVuZAorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9N
aXNjL1dlYk5TQ29udHJvbEV4dHJhcy5oIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0Nv
bnRyb2xFeHRyYXMuaAppbmRleCBjZjRjZmE2YjNjNWY3YTAzYWFiYzA3YWE4MzMzMjc3NmMzNzkx
ZjM1Li42Mzk0YWEyZmQ3NjJmMTNlN2VmMGQ5ZWRkZDMyMTFkZTNjODk3MDQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TQ29udHJvbEV4dHJhcy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNDb250cm9sRXh0cmFzLmgKQEAgLTI2LDggKzI2LDEyIEBA
CiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0IDxDb2Nv
YS9Db2NvYS5oPgogCiBAaW50ZXJmYWNlIE5TQ29udHJvbCAoV2ViRXh0cmFzKQogLSAodm9pZClz
aXplVG9GaXRBbmRBZGp1c3RXaW5kb3dIZWlnaHQ7CiBAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0NvbnRyb2xFeHRyYXMubSBiL1NvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViTlNDb250cm9sRXh0cmFzLm0KaW5kZXggMmE0Yzk5OTViZTQ4MmFj
ZDdhZWMyY2VlNWRkNDM5MGY1ZWZmMTI0Zi4uYmM1MzBiZWJmM2E3MDcwZTAwZDdlNzhjYjU1ZWMx
MDYzNzdmZjc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0NvbnRy
b2xFeHRyYXMubQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TQ29udHJvbEV4dHJh
cy5tCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQorCiAjaW1wb3J0ICJXZWJOU0NvbnRyb2xFeHRyYXMuaCIKIAogQGltcGxlbWVudGF0aW9u
IE5TQ29udHJvbCAoV2ViRXh0cmFzKQpAQCAtNTMsMyArNTUsNSBAQCAtICh2b2lkKXNpemVUb0Zp
dEFuZEFkanVzdFdpbmRvd0hlaWdodAogfQogCiBAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCBiL1NvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmgKaW5kZXggOTI4Njc5YWYxZWRm
MGM2ZGQwZjZmYmVhOTQxZGFjNmI3Y2M1MWExYS4uMmM1NTlhNDJhNzk4MmFlZmQyZWJkNGEyYmY2
OWY4ZjI4MzZjMDE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0Rp
Y3Rpb25hcnlFeHRyYXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TRGljdGlv
bmFyeUV4dHJhcy5oCkBAIC00NCw0ICs0NCw3IEBACiAtICh2b2lkKV93ZWJraXRfc2V0Qm9vbDoo
Qk9PTCl2YWx1ZSBmb3JLZXk6KGlkKWtleTsKIC0gKHZvaWQpX3dlYmtpdF9zZXRMb25nTG9uZzoo
bG9uZyBsb25nKXZhbHVlIGZvcktleTooaWQpa2V5OwogLSAodm9pZClfd2Via2l0X3NldFVuc2ln
bmVkTG9uZ0xvbmc6KHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSBmb3JLZXk6KGlkKWtleTsKKyNp
ZiBQTEFURk9STShJT1MpCistICh2b2lkKV93ZWJraXRfc2V0VW5zaWduZWRJbnQ6KHVuc2lnbmVk
KXZhbHVlIGZvcktleTooaWQpa2V5OworI2VuZGlmCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYk5TRGljdGlvbmFyeUV4dHJhcy5tIGIvU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJOU0RpY3Rpb25hcnlFeHRyYXMubQppbmRleCA2NDVhMDgxZTU2YzFmYWY4MmVk
ZmI1N2JhMTFlY2RkNjY3ZTk2ZGJkLi4yODlhYjk1YmZiZDIyNTdlYjdiMDViYjYyOGMwNWEzNTFk
MTNkMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TRGljdGlvbmFy
eUV4dHJhcy5tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNEaWN0aW9uYXJ5RXh0
cmFzLm0KQEAgLTExOCw1ICsxMTgsMTQgQEAgLSAodm9pZClfd2Via2l0X3NldFVuc2lnbmVkTG9u
Z0xvbmc6KHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSBmb3JLZXk6KGlkKWtleQogICAgIFtvYmpl
Y3QgcmVsZWFzZV07CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCistICh2b2lkKV93ZWJraXRfc2V0
VW5zaWduZWRJbnQ6KHVuc2lnbmVkKXZhbHVlIGZvcktleTooaWQpa2V5Cit7CisgICAgTlNOdW1i
ZXIgKm9iamVjdCA9IFtbTlNOdW1iZXIgYWxsb2NdIGluaXRXaXRoVW5zaWduZWRJbnQ6dmFsdWVd
OworICAgIFtzZWxmIHNldE9iamVjdDpvYmplY3QgZm9yS2V5OmtleV07CisgICAgW29iamVjdCBy
ZWxlYXNlXTsKK30KKyNlbmRpZgorCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViTlNFdmVudEV4dHJhcy5tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJO
U0V2ZW50RXh0cmFzLm0KaW5kZXggNjBmYjNjZmI5ZDkzNDZlMTNmYTgwYzAxNzc4ZWY4ZDlmYTZi
MGI0ZS4uZmU1Y2MzNjJlOGZjNTNmMjZlZjQ3YTFjNTlmMWViNDljOGMxMWExMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0V2ZW50RXh0cmFzLm0KKysrIGIvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJOU0V2ZW50RXh0cmFzLm0KQEAgLTI2LDYgKzI2LDggQEAKICAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbXBvcnQgPFdlYktpdC9X
ZWJOU0V2ZW50RXh0cmFzLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBOU0V2ZW50IChXZWJFeHRyYXMp
CkBAIC04MCwzICs4Miw1IEBAIC0gKEJPT0wpX3dlYl9pc1RhYktleUV2ZW50CiB9CiAKIEBlbmQK
KworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYk5TRmlsZU1hbmFnZXJFeHRyYXMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYk5TRmlsZU1hbmFnZXJFeHRyYXMubW0KaW5kZXggYzg0MmViYmFjM2Y1ZTVkYmQ5ZGFkYzNk
M2M5NGEwZGNkMTkyOGI4Ni4uZGY5ODg2YzRjMGZkOTc5Y2E3ZDZkM2IwZmE4NzkyZDlhNGZhMThh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0ZpbGVNYW5hZ2VyRXh0
cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNGaWxlTWFuYWdlckV4dHJh
cy5tbQpAQCAtMzYsOCArMzYsMTMgQEAKICNpbXBvcnQgPHd0Zi9PYmpjUnVudGltZUV4dHJhcy5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9y
dCA8V2ViQ29yZS9GaWxlU3lzdGVtSU9TLmg+CisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIE5T
RmlsZU1hbmFnZXIgKFdlYk5TRmlsZU1hbmFnZXJFeHRyYXMpCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogCiB0eXBlZGVmIHN0cnVjdCBNZXRhRGF0YUluZm8KIHsKQEAgLTk5LDYgKzEwNCw4IEBAIC0g
KE5TU3RyaW5nICopX3dlYmtpdF9zdGFydHVwVm9sdW1lTmFtZQogICAgIHJldHVybiBbWyhOU1N0
cmluZyAqKUNGRGljdGlvbmFyeUdldFZhbHVlKGFkb3B0Q0YoREFEaXNrQ29weURlc2NyaXB0aW9u
KGRpc2suZ2V0KCkpKS5nZXQoKSwga0RBRGlza0Rlc2NyaXB0aW9uVm9sdW1lTmFtZUtleSkgY29w
eV0gYXV0b3JlbGVhc2VdOwogfQogCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwogLy8gLVtO
U0ZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6XSByZXR1cm5zIE5PIGlmIHRoZXJlIGlzIGEg
YnJva2VuIHN5bWxpbmsgYXQgdGhlIHBhdGguCiAvLyBTbyB3ZSB1c2UgdGhpcyBmdW5jdGlvbiBp
bnN0ZWFkLCB3aGljaCByZXR1cm5zIFlFUyBpZiB0aGVyZSBpcyBhbnl0aGluZyB0aGVyZSwgaW5j
bHVkaW5nCiAvLyBhIGJyb2tlbiBzeW1saW5rLgpAQCAtMTQwLDUgKzE0NywxMiBAQCAtIChOU1N0
cmluZyAqKV93ZWJraXRfcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGg6KE5TU3RyaW5nICop
cGF0aAogICAgIHJldHVybiBwYXRoOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAoTlNTdHJp
bmcgKilfd2Via2l0X2NyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeVdpdGhUZW1wbGF0ZVByZWZpeDoo
TlNTdHJpbmcgKilwcmVmaXgKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlVGVtcG9yYXJ5
RGlyZWN0b3J5KHByZWZpeCk7Cit9CisjZW5kaWYKKwogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TSW1hZ2VFeHRyYXMuaCBiL1NvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViTlNJbWFnZUV4dHJhcy5oCmluZGV4IGI4YWM1YjU1NzA4NmYxOGYzOGRlNmQ1NzM5
NjMwMTI3NjM0Y2JiNGEuLmIxNGFhZWFjODE5ODM4M2E3Y2IyNjNmNTlkMTVjNWM4N2MzMTNiODQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNJbWFnZUV4dHJhcy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNJbWFnZUV4dHJhcy5oCkBAIC0yNiw2ICsy
Niw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0
IDxDb2NvYS9Db2NvYS5oPgogCiBAaW50ZXJmYWNlIE5TSW1hZ2UgKFdlYkV4dHJhcykKQEAgLTM4
LDMgKzQwLDUgQEAKIC0gKHZvaWQpX3dlYl9zYXZlQW5kT3BlbjsKIAogQGVuZAorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNJbWFnZUV4dHJhcy5tIGIv
U291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0ltYWdlRXh0cmFzLm0KaW5kZXggMmIwNmZmNjg1
NmZjNjJlYWU2YTgzYjdiM2RjODJiMGY2YjFlZWNkNS4uNGY3MjlkYWFjMTJkNWI1NjBmOTgyYzhm
ZDM5NzBiZjMyZWU1NTI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJO
U0ltYWdlRXh0cmFzLm0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0ltYWdlRXh0
cmFzLm0KQEAgLTI2LDYgKzI2LDggQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmICFQTEFURk9S
TShJT1MpCisKICNpbXBvcnQgPFdlYktpdC9XZWJOU0ltYWdlRXh0cmFzLmg+CiAKICNpbXBvcnQg
PFdlYktpdC9XZWJLaXRMb2dnaW5nLmg+CkBAIC0xMDQsMyArMTA2LDUgQEAgLSAodm9pZClfd2Vi
X3NhdmVBbmRPcGVuCiB9CiAKIEBlbmQKKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TUGFzdGVib2FyZEV4dHJhcy5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tCmluZGV4IGE0
YWY5MzVkYjY5YTc0ZGE0ZjFjNmQwNGRiMTczMTI1YTVmZTJkZTcuLjQwZGI2ZGMzMzAwYWJjMzlk
OTY5NjIxOGFlZTc4NjA4MTZiNzhlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJXZWJOU1Bhc3RlYm9hcmRFeHRy
YXMuaCIKIAogI2ltcG9ydCAiRE9NRWxlbWVudEludGVybmFsLmgiCkBAIC0yOTMsMyArMjk1LDUg
QEAgLSAoaWQpX3dlYl9kZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2VGb3JFbGVtZW50OihET01FbGVt
ZW50ICopZWxlbWVudAogfQogCiBAZW5kCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1ByaW50T3BlcmF0aW9uRXh0cmFz
LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TUHJpbnRPcGVyYXRpb25FeHRyYXMuaApp
bmRleCAzNTM1MzY5OTVjZmFkNmRkN2U3MGJkYmRiMDI4MjQ4MTQzYzI3NzIyLi5iMDVmMjFkZjU3
N2IwOWU2MWVjZWJhM2I4YmQ4MjdlMmMzMzkzMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYk5TUHJpbnRPcGVyYXRpb25FeHRyYXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYk5TUHJpbnRPcGVyYXRpb25FeHRyYXMuaApAQCAtMjYsNiArMjYsOCBAQAog
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2ltcG9ydCA8Q29jb2Ev
Q29jb2EuaD4KIAogQGludGVyZmFjZSBOU1ByaW50T3BlcmF0aW9uIChXZWJLaXRFeHRyYXMpCkBA
IC0zNSwzICszNyw1IEBACiAtIChmbG9hdClfd2ViX2F2YWlsYWJsZVBhcGVySGVpZ2h0OwogCiBA
ZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1By
aW50T3BlcmF0aW9uRXh0cmFzLm0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TUHJpbnRP
cGVyYXRpb25FeHRyYXMubQppbmRleCAwOTgyYjk2NGI1M2M4ODk0NTliZTRjYzI3Y2VkNWU5ODQz
ZGQ5ZmJiLi45YzY5Yjc2MGMxZTI4YmVmYjZkYjk5Zjg5YzY0YTRiMDgxZmQ1YjFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TUHJpbnRPcGVyYXRpb25FeHRyYXMubQor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TUHJpbnRPcGVyYXRpb25FeHRyYXMubQpA
QCAtMjYsNiArMjYsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykK
KwogI2ltcG9ydCAiV2ViTlNQcmludE9wZXJhdGlvbkV4dHJhcy5oIgogCiBAaW1wbGVtZW50YXRp
b24gTlNQcmludE9wZXJhdGlvbiAoV2ViS2l0RXh0cmFzKQpAQCAtNDgsMyArNTAsNSBAQCAtIChm
bG9hdClfd2ViX2F2YWlsYWJsZVBhcGVySGVpZ2h0CiB9CiAKIEBlbmQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tIGIvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQppbmRleCAwNzcxMDE1MGY0NTM5Y2Iw
MGU2YjljYTllYWE3NTFhMDVmMDhmNDBiLi4yZmNiZDRjMDBkYjBjMmY3OWZiZTdlYzI3NzBhZWMx
YzRmNmVhYjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJMRXh0
cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMubW0KQEAg
LTQzLDkgKzQzLDE4IEBACiAjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CiAjaW1wb3J0IDx1bmlj
b2RlL3VzY3JpcHQuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPEZvdW5kYXRpb24v
TlNTdHJpbmdfTlNVUkxFeHRyYXMuaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKKyNpZiBQTEFURk9STShJT1MpCisvLyBGYWtlIFVS
TCBzY2hlbWUuCisjZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNjaGVtZSBAIndlYmtpdC1mYWtlLXVy
bCIKKyNlbmRpZgorCiAjZGVmaW5lIFVSTF9CWVRFU19CVUZGRVJfTEVOR1RIIDIwNDgKIAogQGlt
cGxlbWVudGF0aW9uIE5TVVJMIChXZWJOU1VSTEV4dHJhcykKQEAgLTI4MCw2ICsyODksMTEzIEBA
IC0gKE5TVVJMICopX3dlYmtpdF9VUkxGcm9tVVJMT3JTY2hlbWVsZXNzRmlsZVVSTAogICAgIHJl
dHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpbQCJmaWxlOiIgc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6W3NlbGYgYWJzb2x1dGVTdHJpbmddXV07CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0
aWMgaW5saW5lIE5TVVJMICpjcmVhdGVZb3VUdWJlVVJMKE5TU3RyaW5nICp2aWRlb0lELCBOU1N0
cmluZyAqdGltZUlEKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSB5b3V0dWJlOiBV
UkwsIHdoaWNoIGlzIGFuIGludGVybmFsIGZvcm1hdCB0aGF0IGlzIHBhc3NlZCB0byBZb3VUdWJl
LmFwcC4KKyAgICAvLyBJZiB0aGUgZm9ybWF0IG9mIHRoZXNlIGludGVybmFsIGxpbmtzIGlzIGNo
YW5nZWQgYmVsb3csIHRoZW4gdGhlIGFwcCBwcm9iYWJseSBuZWVkcyB0byBiZSB1cGRhdGVkIGFz
IHdlbGwuCisKKyAgICBBU1NFUlQodmlkZW9JRCAmJiBbdmlkZW9JRCBsZW5ndGhdID4gMCAmJiAh
W3ZpZGVvSUQgaXNFcXVhbFRvU3RyaW5nOkAiLyJdKTsKKyAgICAKKyAgICBpZiAoW3RpbWVJRCBs
ZW5ndGhdKQorICAgICAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJ5b3V0dWJlOiVAP3Q9JUAiLCB2aWRlb0lELCB0aW1lSURdXTsKKyAg
ICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJ5b3V0dWJlOiVAIiwgdmlkZW9JRF1dOworfQorCistIChOU1VSTCAqKV93ZWJraXRfeW91VHVi
ZVVSTAoreworICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHdlIGFyZW4ndCBldmVuIG9uIHd3dy55
b3V0dWJlLmNvbSBvciB5b3V0dWJlLmNvbS4KKyAgICBOU1N0cmluZyAqc2NoZW1lID0gW1tzZWxm
IHNjaGVtZV0gbG93ZXJjYXNlU3RyaW5nXTsKKyAgICBpZiAoIVtzY2hlbWUgaXNFcXVhbFRvU3Ry
aW5nOkAiaHR0cCJdICYmICFbc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHBzIl0pCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBOU1N0cmluZyAqaG9zdE5hbWUgPSBbW3NlbGYgaG9zdF0g
bG93ZXJjYXNlU3RyaW5nXTsKKyAgICBCT09MIGlzWW91VHViZU1vYmlsZVdlYkFwcFVSTCA9IFto
b3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJtLnlvdXR1YmUuY29tIl07CisgICAgQk9PTCBpc1lv
dVR1YmVTaG9ydGVuZWRVUkwgPSBbaG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAieW91dHUuYmUi
XTsKKyAgICBpZiAoIWlzWW91VHViZU1vYmlsZVdlYkFwcFVSTAorICAgICAgICAmJiAhaXNZb3VU
dWJlU2hvcnRlbmVkVVJMCisgICAgICAgICYmICFbaG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAi
d3d3LnlvdXR1YmUuY29tIl0KKyAgICAgICAgJiYgIVtob3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6
QCJ5b3V0dWJlLmNvbSJdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNTdHJpbmcgKnBh
dGggPSBbc2VsZiBwYXRoXTsKKworICAgIC8vIFNob3J0IFVSTCBvZiB0aGUgZm9ybTogaHR0cDov
L3lvdXR1LmJlL3YxZDMwMUQKKyAgICBpZiAoaXNZb3VUdWJlU2hvcnRlbmVkVVJMKSB7CisgICAg
ICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW3BhdGggbGFzdFBhdGhDb21wb25lbnRdOworICAgICAg
ICBpZiAodmlkZW9JRCAmJiAhW3ZpZGVvSUQgaXNFcXVhbFRvU3RyaW5nOkAiLyJdKQorICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgbmlsKTsKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICB9CisKKyAgICBOU1N0cmluZyAqcXVlcnkgPSBbc2VsZiBxdWVyeV07Cisg
ICAgTlNTdHJpbmcgKmZyYWdtZW50ID0gW3NlbGYgZnJhZ21lbnRdOworCisgICAgLy8gT24gdGhl
IFlvdVR1YmUgbW9iaWxlIHdlYiBhcHAsIHRoZSBwYXRoIGFuZCBxdWVyeSBzdHJpbmcgYXJlIHB1
dCBpbnRvIHRoZQorICAgIC8vIGZyYWdtZW50IHNvIHRoYXQgb25lIHdlYiBwYWdlIGlzIG9ubHkg
ZXZlciBsb2FkZWQgKHNlZSA8cmRhcjovL3Byb2JsZW0vOTU1MDYzOT4pLgorICAgIGlmIChpc1lv
dVR1YmVNb2JpbGVXZWJBcHBVUkwpIHsKKyAgICAgICAgTlNSYW5nZSByYW5nZSA9IFtmcmFnbWVu
dCByYW5nZU9mU3RyaW5nOkAiPyJdOworICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNO
b3RGb3VuZCkgeworICAgICAgICAgICAgcGF0aCA9IGZyYWdtZW50OworICAgICAgICAgICAgcXVl
cnkgPSBuaWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXRoID0gW2ZyYWdtZW50
IHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2UubG9jYXRpb25dOworICAgICAgICAgICAgcXVlcnkgPSBb
ZnJhZ21lbnQgc3Vic3RyaW5nRnJvbUluZGV4OihyYW5nZS5sb2NhdGlvbiArIDEpXTsKKyAgICAg
ICAgfQorICAgICAgICBmcmFnbWVudCA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAoW1twYXRoIGxv
d2VyY2FzZVN0cmluZ10gaXNFcXVhbFRvU3RyaW5nOkAiL3dhdGNoIl0pIHsKKyAgICAgICAgaWYg
KFtxdWVyeSBsZW5ndGhdKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtbcXVl
cnkgX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1ZXNdIG9iamVjdEZvcktleTpAInYiXTsKKyAgICAg
ICAgICAgIGlmICh2aWRlb0lEKSB7CisgICAgICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpmcmFn
bWVudERpY3QgPSBbW3NlbGYgZnJhZ21lbnRdIF93ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzXTsK
KyAgICAgICAgICAgICAgICBOU1N0cmluZyAqdGltZUlEID0gW2ZyYWdtZW50RGljdCBvYmplY3RG
b3JLZXk6QCJ0Il07CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlk
ZW9JRCwgdGltZUlEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE1h
eSBiZSBhIG5ldy1zdHlsZSBsaW5rIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzc3MzM2OTI+KS4KKyAg
ICAgICAgaWYgKFtmcmFnbWVudCBoYXNQcmVmaXg6QCIhIl0pIHsKKyAgICAgICAgICAgIHF1ZXJ5
ID0gW2ZyYWdtZW50IHN1YnN0cmluZ0Zyb21JbmRleDoxXTsKKworICAgICAgICAgICAgaWYgKFtx
dWVyeSBsZW5ndGhdKSB7CisgICAgICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpxdWVyeURpY3Qg
PSBbcXVlcnkgX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1ZXNdOworICAgICAgICAgICAgICAgIE5T
U3RyaW5nICp2aWRlb0lEID0gW3F1ZXJ5RGljdCBvYmplY3RGb3JLZXk6QCJ2Il07CisgICAgICAg
ICAgICAgICAgaWYgKHZpZGVvSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnRp
bWVJRCA9IFtxdWVyeURpY3Qgb2JqZWN0Rm9yS2V5OkAidCJdOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCB0aW1lSUQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoW3BhdGggX3dl
Yl9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCIvdi8iXSB8fCBbcGF0aCBfd2ViX2hhc0Nhc2VJ
bnNlbnNpdGl2ZVByZWZpeDpAIi9lLyJdKSB7CisgICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0g
W3BhdGggbGFzdFBhdGhDb21wb25lbnRdOworCisgICAgICAgIC8vIFRoZXNlIFVSTHMgYXJlIGZ1
bm55IC0gdGhleSBkb24ndCBoYXZlIGEgPyBmb3IgdGhlIGZpcnN0IHF1ZXJ5IHBhcmFtZXRlci4K
KyAgICAgICAgLy8gU3RyaXAgYWxsIGNoYXJhY3RlcnMgYWZ0ZXIgYW5kIGluY2x1ZGluZyAnJicg
dG8gcmVtb3ZlIGV4dHJhbmVvdXMgcGFyYW1ldGVycyBhZnRlciB0aGUgdmlkZW8gSUQuCisgICAg
ICAgIE5TUmFuZ2UgYW1wZXJzYW5kID0gW3ZpZGVvSUQgcmFuZ2VPZlN0cmluZzpAIiYiXTsKKyAg
ICAgICAgaWYgKGFtcGVyc2FuZC5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQorICAgICAgICAgICAg
dmlkZW9JRCA9IFt2aWRlb0lEIHN1YnN0cmluZ1RvSW5kZXg6YW1wZXJzYW5kLmxvY2F0aW9uXTsK
KworICAgICAgICBpZiAodmlkZW9JRCkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVZb3VUdWJl
VVJMKHZpZGVvSUQsIG5pbCk7CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsKK30KKworKyAoTlNV
UkwgKil1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0OihOU1N0cmluZyAqKXJlbGF0aXZlUGFydAor
eworICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQpOworICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRl
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOworICAgIENGUmVsZWFzZShVVUlE
UmVmKTsKKyAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlE
U3RyaW5nLCByZWxhdGl2ZVBhcnRdXTsKKyAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7CisgICAg
CisgICAgcmV0dXJuIFVSTDsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIEBlbmQKIAog
QGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChXZWJOU1VSTEV4dHJhcykKQEAgLTM5MCw0ICs1MDYs
NzMgQEAgLSAoTlNTdHJpbmcgKilfd2Via2l0X1VSTEZyYWdtZW50CiAgICAgcmV0dXJuIFtzZWxm
IHN1YnN0cmluZ0Zyb21JbmRleDpmcmFnbWVudFJhbmdlLmxvY2F0aW9uICsgMV07CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCisKKy0gKE5TU3RyaW5nICopX3dlYmtpdF91bmVzY2FwZWRRdWVyeVZh
bHVlCit7CisgICAgTlNNdXRhYmxlU3RyaW5nICpzdHJpbmcgPSBbW1tzZWxmIHN0cmluZ0J5UmVw
bGFjaW5nUGVyY2VudEVzY2FwZXNVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBt
dXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOworICAgIGlmICghc3RyaW5nKSAvLyBJZiB3ZSBmYWls
ZWQgdG8gZGVjb2RlIHRoZSBVUkwgYXMgVVRGOCwgZmFsbCBiYWNrIHRvIExhdGluMQorICAgICAg
ICBzdHJpbmcgPSBbW1tzZWxmIHN0cmluZ0J5UmVwbGFjaW5nUGVyY2VudEVzY2FwZXNVc2luZ0Vu
Y29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddIG11dGFibGVDb3B5XSBhdXRvcmVsZWFz
ZV07CisgICAgW3N0cmluZyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpAIisiIHdpdGhTdHJp
bmc6QCIgIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpOU01ha2VSYW5nZSgwLCBbc3Ry
aW5nIGxlbmd0aF0pXTsKKyAgICByZXR1cm4gc3RyaW5nOworfQorCistIChOU0RpY3Rpb25hcnkg
Kilfd2Via2l0X3F1ZXJ5S2V5c0FuZFZhbHVlcworeworICAgIHVuc2lnbmVkIHF1ZXJ5TGVuZ3Ro
ID0gW3NlbGYgbGVuZ3RoXTsKKyAgICBpZiAocXVlcnlMZW5ndGggPT0gMCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpxdWVyeUtleXNBbmRWYWx1
ZXMgPSBuaWw7CisgICAgTlNSYW5nZSBlcXVhbFNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoMCwg
cXVlcnlMZW5ndGgpOworICAgIAorICAgIHdoaWxlIChlcXVhbFNlYXJjaFJhbmdlLmxvY2F0aW9u
IDwgcXVlcnlMZW5ndGggLSAxICYmIGVxdWFsU2VhcmNoUmFuZ2UubGVuZ3RoICE9IDApIHsKKyAg
ICAgICAgCisgICAgICAgIC8vIFNlYXJjaCBmb3IgIj0iLgorICAgICAgICBOU1JhbmdlIGVxdWFs
UmFuZ2UgPSBbc2VsZiByYW5nZU9mU3RyaW5nOkAiPSIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2gg
cmFuZ2U6ZXF1YWxTZWFyY2hSYW5nZV07CisgICAgICAgIGlmIChlcXVhbFJhbmdlLmxvY2F0aW9u
ID09IE5TTm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIGluZGV4QWZ0ZXJFcXVhbCA9IGVxdWFsUmFuZ2UubG9jYXRpb24gKyAxOworICAgICAg
ICBpZiAoaW5kZXhBZnRlckVxdWFsID4gcXVlcnlMZW5ndGggLSAxKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSBrZXkgYmVm
b3JlIHRoZSAiPSIuCisgICAgICAgIE5TUmFuZ2Uga2V5UmFuZ2UgPSBOU01ha2VSYW5nZShlcXVh
bFNlYXJjaFJhbmdlLmxvY2F0aW9uLCBlcXVhbFJhbmdlLmxvY2F0aW9uIC0gZXF1YWxTZWFyY2hS
YW5nZS5sb2NhdGlvbik7CisgICAgICAgIAorICAgICAgICAvLyBTZWFjaCBmb3IgdGhlIGFtcGVy
c2FuZC4KKyAgICAgICAgTlNSYW5nZSBhbXBlcnNhbmRTZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdl
KGluZGV4QWZ0ZXJFcXVhbCwgcXVlcnlMZW5ndGggLSBpbmRleEFmdGVyRXF1YWwpOworICAgICAg
ICBOU1JhbmdlIGFtcGVyc2FuZFJhbmdlID0gW3NlbGYgcmFuZ2VPZlN0cmluZzpAIiYiIG9wdGlv
bnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOmFtcGVyc2FuZFNlYXJjaFJhbmdlXTsKKyAgICAgICAg
CisgICAgICAgIC8vIEdldCB0aGUgdmFsdWUgYWZ0ZXIgdGhlICI9IiwgYmVmb3JlIHRoZSBhbXBl
cnNhbmQuCisgICAgICAgIE5TUmFuZ2UgdmFsdWVSYW5nZTsKKyAgICAgICAgaWYgKGFtcGVyc2Fu
ZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisgICAgICAgICAgICB2YWx1ZVJhbmdlID0g
TlNNYWtlUmFuZ2UoaW5kZXhBZnRlckVxdWFsLCBhbXBlcnNhbmRSYW5nZS5sb2NhdGlvbiAtIGlu
ZGV4QWZ0ZXJFcXVhbCk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICB2YWx1ZVJhbmdlID0g
TlNNYWtlUmFuZ2UoaW5kZXhBZnRlckVxdWFsLCBxdWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJFcXVh
bCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIC8vIFNhdmUgdGhlIGtleSBhbmQgdGhlIHZh
bHVlLgorICAgICAgICBpZiAoa2V5UmFuZ2UubGVuZ3RoICE9IDAgJiYgdmFsdWVSYW5nZS5sZW5n
dGggIT0gMCkgeworICAgICAgICAgICAgaWYgKHF1ZXJ5S2V5c0FuZFZhbHVlcyA9PSBuaWwpCisg
ICAgICAgICAgICAgICAgcXVlcnlLZXlzQW5kVmFsdWVzID0gW05TTXV0YWJsZURpY3Rpb25hcnkg
ZGljdGlvbmFyeV07CisgICAgICAgICAgICBOU1N0cmluZyAqa2V5ID0gW1tzZWxmIHN1YnN0cmlu
Z1dpdGhSYW5nZTprZXlSYW5nZV0gbG93ZXJjYXNlU3RyaW5nXTsKKyAgICAgICAgICAgIE5TU3Ry
aW5nICp2YWx1ZSA9IFtbc2VsZiBzdWJzdHJpbmdXaXRoUmFuZ2U6dmFsdWVSYW5nZV0gX3dlYmtp
dF91bmVzY2FwZWRRdWVyeVZhbHVlXTsKKyAgICAgICAgICAgIGlmIChba2V5IGxlbmd0aF0gIT0g
MCAmJiBbdmFsdWUgbGVuZ3RoXSAhPSAwKQorICAgICAgICAgICAgICAgIFtxdWVyeUtleXNBbmRW
YWx1ZXMgc2V0T2JqZWN0OnZhbHVlIGZvcktleTprZXldOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBBdCB0aGUgZW5kLgorICAgICAgICBpZiAoYW1wZXJzYW5kUmFuZ2UubG9jYXRp
b24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAg
Ly8gQ29udGludWUgc2VhcmNoaW5nIGFmdGVyIHRoZSBhbXBlcnNhbmQuCisgICAgICAgIHVuc2ln
bmVkIGluZGV4QWZ0ZXJBbXBlcnNhbmQgPSBhbXBlcnNhbmRSYW5nZS5sb2NhdGlvbiArIDE7Cisg
ICAgICAgIGVxdWFsU2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFmdGVyQW1wZXJzYW5k
LCBxdWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJBbXBlcnNhbmQpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gcXVlcnlLZXlzQW5kVmFsdWVzOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQor
CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TVmlld0V4dHJh
cy5tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1ZpZXdFeHRyYXMubQppbmRleCA5N2Yw
NWI0M2Y1MTI4NjcyMDA3ZTc5MDU3Zjg1NGNhMzQ2MTY5MzI5Li5lOTg1MWQ1YmUwNTZlZTk2M2Yz
MzQyNWUyNWJhM2QyMjBmNzM5ZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYk5TVmlld0V4dHJhcy5tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNWaWV3
RXh0cmFzLm0KQEAgLTM3LDYgKzM3LDExIEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViTlNVUkxFeHRy
YXMuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW1wb3J0IDxXZWJDb3JlL1dBS1ZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dBS1dp
bmRvdy5oPgorI2VuZGlmCisKICNkZWZpbmUgV2ViRHJhZ1N0YXJ0SHlzdGVyZXNpc1ggICAgICAg
ICAgICAgICAgIDUuMGYKICNkZWZpbmUgV2ViRHJhZ1N0YXJ0SHlzdGVyZXNpc1kgICAgICAgICAg
ICAgICAgIDUuMGYKICNkZWZpbmUgV2ViTWF4RHJhZ0ltYWdlU2l6ZSAgICAgICAgICAgICAgICAg
ICAgIE5TTWFrZVNpemUoNDAwLjBmLCA0MDAuMGYpCkBAIC01OSw2ICs2NCw3IEBAIC0gKFdlYkZy
YW1lVmlldyAqKV93ZWJfcGFyZW50V2ViRnJhbWVWaWV3CiAgICAgcmV0dXJuIChXZWJGcmFtZVZp
ZXcgKilbc2VsZiBfd2ViX3N1cGVydmlld09mQ2xhc3M6W1dlYkZyYW1lVmlldyBjbGFzc11dOwog
fQogCisjaWYgIVBMQVRGT1JNKElPUykKIC8vIEZJWE1FOiBNYWlsIGlzIHRoZSBvbmx5IGNsaWVu
dCBvZiBfd2ViVmlldywgcmVtb3ZlIHRoaXMgbWV0aG9kIG9uY2Ugbm8gdmVyc2lvbnMgb2YgTWFp
bCBuZWVkIGl0LgogLSAoV2ViVmlldyAqKV93ZWJWaWV3CiB7CkBAIC0yMDYsNiArMjEyLDcgQEAg
LSAodm9pZClfd2ViX0RyYWdJbWFnZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CiAg
ICAgW3NlbGYgZHJhZ0ltYWdlOmRyYWdJbWFnZSBhdDpvcmlnaW4gb2Zmc2V0Ok5TWmVyb1NpemUg
ZXZlbnQ6ZXZlbnQgcGFzdGVib2FyZDpwYXN0ZWJvYXJkIHNvdXJjZTpzb3VyY2Ugc2xpZGVCYWNr
OllFU107CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiB9CisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKIAogLSAoQk9PTClfd2ViX2ZpcnN0UmVzcG9uZGVySXNTZWxmT3JEZXNjZW5kYW50
VmlldwogewpAQCAtMjUwLDMgKzI1NywyMiBAQCAtIChOU1JlY3QpX3dlYl9jb252ZXJ0UmVjdDoo
TlNSZWN0KWFSZWN0IHRvVmlldzooTlNWaWV3ICopYVZpZXcKIH0KIAogQGVuZAorCisjaWYgUExB
VEZPUk0oSU9TKQorQGltcGxlbWVudGF0aW9uIE5TVmlldyAoV2ViRG9jdW1lbnRWaWV3RXh0cmFz
KQorCistIChXZWJGcmFtZSAqKV9mcmFtZQoreworICAgIFdlYkZyYW1lVmlldyAqd2ViRnJhbWVW
aWV3ID0gW3NlbGYgX3dlYl9wYXJlbnRXZWJGcmFtZVZpZXddOworICAgIHJldHVybiBbd2ViRnJh
bWVWaWV3IHdlYkZyYW1lXTsKK30KKworLSAoV2ViVmlldyAqKV93ZWJWaWV3Cit7CisgICAgLy8g
V2UgdXNlZCB0byB1c2UgdGhlIHZpZXcgaGllcmFyY2h5IGV4Y2x1c2l2ZWx5IGhlcmUsIGJ1dCB0
aGF0IHdvbid0IHdvcmsKKyAgICAvLyByaWdodCB3aGVuIHRoZSBmaXJzdCB2aWV3RGlkTW92ZVRv
U3VwZXJ2aWV3IGNhbGwgaXMgZG9uZSwgYW5kIHRoaXMgd2lsbC4KKyAgICByZXR1cm4gW1tzZWxm
IF9mcmFtZV0gd2ViVmlld107Cit9CisKK0BlbmQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJOU1dpbmRvd0V4dHJhcy5tIGIvU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJOU1dpbmRvd0V4dHJhcy5tCmluZGV4IGZkMjFjMjRmYzJmNzRjNWMwMGFhODViMmY5
YzI2NTM4OWNiMGMwZTguLmZjNjZjZWU1NTc1MjgxYjQ1OTg1ZjE5MDI5YWIyODBlZDhiNGI0MjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNXaW5kb3dFeHRyYXMubQor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TV2luZG93RXh0cmFzLm0KQEAgLTI2LDYg
KzI2LDggQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbXBv
cnQgIldlYk5TV2luZG93RXh0cmFzLmgiCiAKIEBpbXBsZW1lbnRhdGlvbiBOU1dpbmRvdyAoV2Vi
RXh0cmFzKQpAQCAtNTYsMyArNTgsNSBAQCAtICh2b2lkKW1ha2VSZXNwb25kZXI6KE5TUmVzcG9u
ZGVyICopcmVzcG9uZGVyIGZpcnN0UmVzcG9uZGVySWZEZXNjZW5kYW50T2ZWaWV3OgogfQogCiBA
ZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGFuZWxzL1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1BhbmVscy9XZWJBdXRoZW50
aWNhdGlvblBhbmVsLmgKaW5kZXggOGYwNGYxN2M1MDU0YzQ1Mjk0OTAxZTM4OTI4OTBlN2ViYzBm
MTk5NS4uMWUxMzcwZDI0ODBlOTdhZmI1ZWIxYTYyZWQ4ZTYyYzkxNDllNjU0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvUGFuZWxzL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9QYW5lbHMvV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC0y
Niw2ICsyNiw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAj
aW1wb3J0IDxDb2NvYS9Db2NvYS5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTENyZWRlbnRp
YWxTdG9yYWdlLmg+CiAKQEAgLTY3LDMgKzY5LDQgQEAKIEBpbnRlcmZhY2UgV2ViTm9uQmxvY2tp
bmdQYW5lbCA6IE5TUGFuZWwKIEBlbmQKIAorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QYW5lbHMvV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
IGIvU291cmNlL1dlYktpdC9tYWMvUGFuZWxzL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubQppbmRl
eCA3MTVlN2EyZGYwZTZkMTRlNzM0ZTFkNzI1ZThiOWE4YmFiM2ZlMmJmLi5iZWI0MjdlZWU4MDBl
YWE1MTNjNWU1ZmFhYmIyMWRmODRmODZlM2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9QYW5lbHMvV2ViQXV0aGVudGljYXRpb25QYW5lbC5tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1BhbmVscy9XZWJBdXRoZW50aWNhdGlvblBhbmVsLm0KQEAgLTI2LDYgKzI2LDggQEAKICAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbXBvcnQgPFdlYktpdC9XZWJB
dXRoZW50aWNhdGlvblBhbmVsLmg+CiAKICNpbXBvcnQgIldlYkxvY2FsaXphYmxlU3RyaW5nc0lu
dGVybmFsLmgiCkBAIC0zMDUsMyArMzA3LDUgQEAgLSAoQk9PTClfYmxvY2tzQWN0aW9uV2hlbk1v
ZGFsOihTRUwpdGhlQWN0aW9uCiB9CiAKIEBlbmQKKworI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QYW5lbHMvV2ViUGFuZWxBdXRoZW50aWNh
dGlvbkhhbmRsZXIubSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BhbmVscy9XZWJQYW5lbEF1dGhlbnRp
Y2F0aW9uSGFuZGxlci5tCmluZGV4IGVhMjU1ZjA4ZDk2MTNiNjRmYmM3YzQyMWJjYzhhZTY0N2Ex
ZmM1Y2YuLmY2ZDI2N2U2ZmM5MGUzMzdiMGE3YmIwNzg3MDNmNmFiNDU3YzI3NjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BhbmVscy9XZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxl
ci5tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BhbmVscy9XZWJQYW5lbEF1dGhlbnRpY2F0aW9u
SGFuZGxlci5tCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExB
VEZPUk0oSU9TKQorCiAjaW1wb3J0IDxXZWJLaXQvV2ViUGFuZWxBdXRoZW50aWNhdGlvbkhhbmRs
ZXIuaD4KIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Lmg+CkBAIC0xNjAsMyArMTYyLDUgQEAgLSh2b2lkKV9hdXRoZW50aWNhdGlvbkRvbmVXaXRoQ2hh
bGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmcKIH0KIAogQGVu
ZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5t
bQppbmRleCAxODFhYjcwNTkxMzNjZDUzZjYyMjEyYmJlMWM5NWRiNjc0YTVlZjQxLi43ZjU5MTFh
ZWZlMmI3ZTViNzNlNTY5MDhkZTdjMjg4MjM5MWUyZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCkBAIC03MSw5ICs3MSwxMSBAQCBAaW1wbGVtZW50YXRpb24gV2ViSG9zdGVkTmV0
c2NhcGVQbHVnaW5WaWV3CiAKICsgKHZvaWQpaW5pdGlhbGl6ZQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXpl
TWFpblRocmVhZFRvUHJvY2Vzc01haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXpl
TWFpblJ1bkxvb3AoKTsKKyNlbmRpZgogICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJl
YWQoc2VsZik7CiAgICAgV0tTZW5kVXNlckNoYW5nZU5vdGlmaWNhdGlvbnMoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UuaCBi
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UuaAppbmRleCBj
Zjg4NDY0MTA4YzNmOWNkMDhlNTdiZjUzMjljNDI4ZTg5MWQyMWI2Li4xYTk2MGJmZDAwODRlMmEx
MDAwMzkyMTMyZmQ2Yjk0MDViYmI0YTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5oCkBAIC0zNSw2ICszNSwxMCBAQAogdHlwZWRlZiB2
b2lkICgqQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsK
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8V2ViQ29yZS9XQUtBcHBLaXRT
dHVicy5oPgorI2VuZGlmCisKIEBjbGFzcyBXZWJQbHVnaW5EYXRhYmFzZTsKIAogQHByb3RvY29s
IFdlYlBsdWdpbk1hbnVhbExvYWRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViQmFzZVBsdWdpblBhY2thZ2UubW0KaW5kZXggZTA0YmJiN2RmZDJiNTVmOWY3MzE5YzgyODkw
MDkyODJjMWM5ZTBiMi4uZTdmOGI5YTU0NzMzYTU0YmFjZTU1YmVjNDllOTNhM2VhMjVhOWM1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2Fn
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdl
Lm1tCkBAIC02Niw5ICs2NiwxMSBAQCBAaW1wbGVtZW50YXRpb24gV2ViQmFzZVBsdWdpblBhY2th
Z2UKIAogKyAodm9pZClpbml0aWFsaXplCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBKU0M6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkVG9Q
cm9jZXNzTWFpblRocmVhZCgpOwogICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgp
OworI2VuZGlmCiAgICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFpblRocmVhZChzZWxmKTsKIH0K
IApAQCAtMTAyLDYgKzEwNCw3IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aEJ5UmVzb2x2aW5nU3lt
bGlua3NBbmRBbGlhc2VzKE5TU3RyaW5nICp0aGVQYXRoKQogewogICAgIE5TU3RyaW5nICpuZXdQ
YXRoID0gW3RoZVBhdGggc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aF07CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIEZTUmVmIGZyZWY7CiAgICAgT1NTdGF0dXMgZXJyOwogCkBAIC0x
MjAsNiArMTIzLDcgQEAgc3RhdGljIE5TU3RyaW5nICpwYXRoQnlSZXNvbHZpbmdTeW1saW5rc0Fu
ZEFsaWFzZXMoTlNTdHJpbmcgKnRoZVBhdGgpCiAgICAgICAgIG5ld1BhdGggPSBbKE5TVVJMICop
VVJMIHBhdGhdOwogICAgICAgICBDRlJlbGVhc2UoVVJMKTsKICAgICB9CisjZW5kaWYKIAogICAg
IHJldHVybiBuZXdQYXRoOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9XZWJKYXZhUGx1Z0luLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkphdmFQbHVn
SW4uaAppbmRleCA1YTFiZTZkYjRmMWM2NTFiNTE3NzdmMjJhNzg1OTQyYjQ2Nzc1ZDVkLi5jZDE1
OTE1NTY2N2YyNTRjNjI2Yzk5ZDQ4NmU2MzlhNDdjNTU1NjIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL1dlYkphdmFQbHVnSW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYkphdmFQbHVnSW4uaApAQCAtMjYsNiArMjYsOCBAQAogICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2ltcG9ydCA8SmF2YVZNL2puaS5oPgogCiAv
KiEKQEAgLTgzLDMgKzg1LDQgQEAgdHlwZWRlZiBlbnVtIHsKICAgICAgICBleGNlcHRpb25EZXNj
cmlwdGlvbjooTlNTdHJpbmcgKiopZXhjZXB0aW9uU3RyaW5nOwogCiBAZW5kCisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQ
bHVnaW5Db250YWluZXJDaGVjay5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1
Z2luQ29udGFpbmVyQ2hlY2subW0KaW5kZXggMjZiZWQ3YTQ1OTg0YjExMTcwNmVhYzRiOTc0MmFl
YjRkNzZjNWYwYi4uYzg1NmViMGE5MThmNzZjZjk2MDBmODZhYzZlODA5MjZjN2QyNjQ3NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250YWluZXJDaGVj
ay5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRhaW5lckNo
ZWNrLm1tCkBAIC00Nyw2ICs0NywxMiBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAor
I2lmIFBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgV2ViUGx1Z2luQ29udHJvbGxlciAoU2VjcmV0
c0lLbm93KQorLSAoV2ViRnJhbWUgKil3ZWJGcmFtZTsgLy8gRklYTUU6IFRoaXMgZmlsZSBjYWxs
cyAtW1dlYlBsdWdpbkNvbnRyb2xsZXIgd2ViRnJhbWVdLCB3aGljaCBpcyBub3QgZGVjbGFyZWQg
aW4gV2ViUGx1Z2luQ29udHJvbGxlci5oLiAgTWVyZ2UgaXNzdWU/ICBBcmUgdGhlIHBsdWctaW4g
ZmlsZXMgb3V0IG9mIGRhdGU/CitAZW5kCisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdlYlBs
dWdpbkNvbnRhaW5lckNoZWNrCiAKIC0gKGlkKWluaXRXaXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0
ICopcmVxdWVzdCB0YXJnZXQ6KE5TU3RyaW5nICopdGFyZ2V0IHJlc3VsdE9iamVjdDooaWQpb2Jq
IHNlbGVjdG9yOihTRUwpc2VsZWN0b3IgY29udHJvbGxlcjooaWQgPFdlYlBsdWdpbkNvbnRhaW5l
ckNoZWNrQ29udHJvbGxlcj4pY29udHJvbGxlciBjb250ZXh0SW5mbzooaWQpY29udGV4dEluZm8g
LypvcHRpb25hbCovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBs
dWdpbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29u
dHJvbGxlci5oCmluZGV4IGRjMWY0MTM3NGIzYmQ1ODFiNGVlZDNlNjY5YTVlYjgwNDcyNDVkMDku
LjRjMWY3NDNlNzM5ZmYwYTJlY2Y1MDVkMTRmYTNkM2IzN2YzNDRhZjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5oCkBAIC0zNCw2ICszNCw5
IEBACiBAY2xhc3MgV2ViUGx1Z2luUGFja2FnZTsKIEBjbGFzcyBXZWJWaWV3OwogQGNsYXNzIFdl
YkRhdGFTb3VyY2U7CisjaWYgUExBVEZPUk0oSU9TKQorQGNsYXNzIENBTGF5ZXI7CisjZW5kaWYK
IAogQGludGVyZmFjZSBXZWJQbHVnaW5Db250cm9sbGVyIDogTlNPYmplY3QgPFdlYlBsdWdpbk1h
bnVhbExvYWRlciwgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2tDb250cm9sbGVyPgogewpAQCAtNjEs
OSArNjQsMTggQEAKICsgKHZvaWQpcGx1Z2luVmlld0hpZGRlbjooTlNWaWV3ICopdmlldzsKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorKyAodm9pZClhZGRQbHVnSW5WaWV3OihOU1ZpZXcg
Kil2aWV3OworLSAoQk9PTClwbHVnSW5zQXJlUnVubmluZzsKKy0gKENBTGF5ZXIgKilzdXBlcmxh
eWVyRm9yUGx1Z2luVmlldzooTlNWaWV3ICopdmlldzsKKyNlbmRpZgogLSAodm9pZClzdGFydEFs
bFBsdWdpbnM7CiAtICh2b2lkKXN0b3BBbGxQbHVnaW5zOwogLSAodm9pZClkZXN0cm95QWxsUGx1
Z2luczsKKyNpZiBQTEFURk9STShJT1MpCistICh2b2lkKXN0b3BQbHVnaW5zRm9yUGFnZUNhY2hl
OworLSAodm9pZClyZXN0b3JlUGx1Z2luc0Zyb21DYWNoZTsKKyNlbmRpZgogCiAtIChXZWJGcmFt
ZSAqKXdlYkZyYW1lOwogLSAoV2ViVmlldyAqKXdlYlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KaW5kZXggZWE5YmE0ZDA0NDY5YTVi
MDJiZWVjMzU1OWMwODYwMDMwYWJkNmExMC4uYjc2NDg5NmYxMGM3ZTA0NjM3NDE2YmM5MTczNDgy
MjdhMTBhNGFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVn
aW5Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2lu
Q29udHJvbGxlci5tbQpAQCAtNjIsNiArNjIsMTcgQEAKICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViVUlLaXREZWxlZ2F0
ZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlu
a2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkUnVuLmg+CisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCkBA
IC02OSwxMCArODAsMTIgQEAgQGludGVyZmFjZSBOU1ZpZXcgKFBsdWdpblNlY3JldHMpCiAtICh2
b2lkKXNldENvbnRhaW5pbmdXaW5kb3c6KE5TV2luZG93ICopdzsKIEBlbmQKIAorI2lmICFQTEFU
Rk9STShJT1MpCiAvLyBGb3IgY29tcGF0aWJpbGl0eSBvbmx5LgogQGludGVyZmFjZSBOU09iamVj
dCAoT2xkUGx1Z2luQVBJKQogKyAoTlNWaWV3ICopcGx1Z2luVmlld1dpdGhBcmd1bWVudHM6KE5T
RGljdGlvbmFyeSAqKWFyZ3VtZW50czsKIEBlbmQKKyNlbmRpZgogCiBAaW50ZXJmYWNlIE5TVmll
dyAoT2xkUGx1Z2luQVBJKQogLSAodm9pZClwbHVnaW5Jbml0aWFsaXplOwpAQCAtODEsMjEgKzk0
LDQ5IEBAIC0gKHZvaWQpcGx1Z2luU3RvcDsKIC0gKHZvaWQpcGx1Z2luRGVzdHJveTsKIEBlbmQK
IAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgYm9vbCBpc0tpbmRPZkNsYXNzKGlkLCBOU1N0
cmluZyogY2xhc3NOYW1lKTsKIHN0YXRpYyB2b2lkIGluc3RhbGxGbGlwNE1hY1BsdWdJbldvcmth
cm91bmRJZk5lY2Vzc2FyeSgpOworI2VuZGlmCiAKIAogc3RhdGljIE5TTXV0YWJsZVNldCAqcGx1
Z2luVmlld3MgPSBuaWw7CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgdm9pZCBpbml0aWFs
aXplQXVkaW9TZXNzaW9uKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBhdWRpb1Nlc3Npb25XYXNJbml0
aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChhdWRpb1Nlc3Npb25XYXNJbml0aWFsaXplZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXVkaW9TZXNzaW9uV2FzSW5pdGlhbGl6ZWQgPSB0cnVlOwor
ICAgIGlmICghV2ViQ29yZTo6YXBwbGljYXRpb25Jc01vYmlsZVNhZmFyaSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zZXRDYXRlZ29yeShB
dWRpb1Nlc3Npb246Ok1lZGlhUGxheWJhY2spOworfQorI2VuZGlmCisKIEBpbXBsZW1lbnRhdGlv
biBXZWJQbHVnaW5Db250cm9sbGVyCiAKICsgKE5TVmlldyAqKXBsdWdJblZpZXdXaXRoQXJndW1l
bnRzOihOU0RpY3Rpb25hcnkgKilhcmd1bWVudHMgZnJvbVBsdWdpblBhY2thZ2U6KFdlYlBsdWdp
blBhY2thZ2UgKilwbHVnaW5QYWNrYWdlCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGluaXRp
YWxpemVBdWRpb1Nlc3Npb24oKTsKKyNlbmRpZgorCiAgICAgW3BsdWdpblBhY2thZ2UgbG9hZF07
CiAgICAgQ2xhc3Mgdmlld0ZhY3RvcnkgPSBbcGx1Z2luUGFja2FnZSB2aWV3RmFjdG9yeV07CiAg
ICAgCiAgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHsK
KyAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtfZG9jdW1lbnRWaWV3IF93ZWJWaWV3XTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgdmlldyA9IFtbd2ViVmlldyBfVUlLaXREZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmFyZ3Vt
ZW50cyBmcm9tUGx1Z0luUGFja2FnZTpwbHVnaW5QYWNrYWdlXTsKKyAgICB9CisjZWxzZQogICAg
IGlmIChbdmlld0ZhY3RvcnkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnSW5WaWV3
V2l0aEFyZ3VtZW50czopXSkgewogICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICB2aWV3ID0g
W3ZpZXdGYWN0b3J5IHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50c107CkBAIC0xMDMs
NiArMTQ0LDcgQEAgKyAoTlNWaWV3ICopcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KE5TRGljdGlv
bmFyeSAqKWFyZ3VtZW50cyBmcm9tUGx1Z2luUGFja2FnZToKICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
ICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9yeSBwbHVnaW5WaWV3V2l0aEFyZ3VtZW50czphcmd1
bWVudHNdOwogICAgIH0KKyNlbmRpZgogICAgIAogICAgIGlmICh2aWV3ID09IG5pbCkgewogICAg
ICAgICByZXR1cm4gbmlsOwpAQCAtMTE2LDYgKzE1OCwxNSBAQCArIChOU1ZpZXcgKilwbHVnSW5W
aWV3V2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5ICopYXJndW1lbnRzIGZyb21QbHVnaW5QYWNr
YWdlOgogICAgIHJldHVybiB2aWV3OwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorKyAodm9pZClh
ZGRQbHVnSW5WaWV3OihOU1ZpZXcgKil2aWV3Cit7CisgICAgaWYgKHBsdWdpblZpZXdzID09IG5p
bCkKKyAgICAgICAgcGx1Z2luVmlld3MgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdF07Cisg
ICAgW3BsdWdpblZpZXdzIGFkZE9iamVjdDp2aWV3XTsKK30KKyNlbmRpZgorCiArIChCT09MKWlz
UGx1Z0luVmlldzooTlNWaWV3ICopdmlldwogewogICAgIHJldHVybiBbcGx1Z2luVmlld3MgY29u
dGFpbnNPYmplY3Q6dmlld107CkBAIC0xNDcsNiArMTk4LDM2IEBAIC0gKHZvaWQpZGVhbGxvYwog
ICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKEJPT0wpcGx1
Z0luc0FyZVJ1bm5pbmcKK3sKKyAgICBOU1VJbnRlZ2VyIHBsdWdpblZpZXdDb3VudCA9IFtfdmll
d3MgY291bnRdOworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgIHBsdWdp
blZpZXdDb3VudCArPSBbX3ZpZXdzTm90SW5Eb2N1bWVudCBjb3VudF07CisjZW5kaWYKKyAgICBy
ZXR1cm4gX3N0YXJ0ZWQgJiYgcGx1Z2luVmlld0NvdW50OworfQorCistIChDQUxheWVyICopc3Vw
ZXJsYXllckZvclBsdWdpblZpZXc6KE5TVmlldyAqKXZpZXcKK3sKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJh
bWVdKTsKKyAgICBGcmFtZVZpZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lID8gY29yZUZyYW1lLT52
aWV3KCkgOiAwOworICAgIGlmICghY29yZVZpZXcpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICAvLyBHZXQgYSBHcmFwaGljc0xheWVyOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yV2lk
Z2V0ID0gY29yZVZpZXctPmdyYXBoaWNzTGF5ZXJGb3JQbGF0Zm9ybVdpZGdldCh2aWV3KTsKKyAg
ICBpZiAoIWxheWVyRm9yV2lkZ2V0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJl
dHVybiBsYXllckZvcldpZGdldC0+cGxhdGZvcm1MYXllcigpOworI2Vsc2UKKyAgICByZXR1cm4g
bmlsOworI2VuZGlmCit9CisjZW5kaWYKKwogLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1ZpZXcg
Kil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2Vi
UGx1Z0luU3RvcCldKSB7CkBAIC0xNTgsNiArMjM5LDE3IEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdp
bjooTlNWaWV3ICopdmlldwogICAgIH0KIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKHZvaWQp
c3RvcE9uZVBsdWdpbkZvclBhZ2VDYWNoZTooTlNWaWV3ICopdmlldworeworICAgIGlmIChbdmll
dyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0b3BGb3JQYWdlQ2FjaGUp
XSkgeworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9wRm9y
UGFnZUNhY2hlXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW3NlbGYgc3RvcE9uZVBsdWdpbjp2aWV3
XTsKK30KKyNlbmRpZgorCiAtICh2b2lkKWRlc3Ryb3lPbmVQbHVnaW46KE5TVmlldyAqKXZpZXcK
IHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5E
ZXN0cm95KV0pIHsKQEAgLTIxMyw2ICszMDUsNDcgQEAgLSAodm9pZClzdG9wQWxsUGx1Z2lucwog
ICAgIF9zdGFydGVkID0gTk87CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCistICh2b2lkKXN0b3BQ
bHVnaW5zRm9yUGFnZUNhY2hlCit7CisgICAgaWYgKCFfc3RhcnRlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTlNVSW50ZWdlciB2aWV3c0NvdW50ID0gW192aWV3cyBjb3VudF07CisgICAgaWYg
KHZpZXdzQ291bnQgPiAwKQorICAgICAgICBMT0coUGx1Z2lucywgInN0b3BwaW5nIFdlYktpdCBw
bHVnaW5zIGZvciBQYWdlQ2FjaGU6ICVAIiwgW192aWV3cyBkZXNjcmlwdGlvbl0pOworCisgICAg
Zm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgdmlld3NDb3VudDsgaSsrKQorICAgICAgICBbc2Vs
ZiBzdG9wT25lUGx1Z2luRm9yUGFnZUNhY2hlOltfdmlld3Mgb2JqZWN0QXRJbmRleDppXV07CisK
KyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICBOU1VJbnRlZ2VyIHZpZXdz
Tm90SW5Eb2N1bWVudENvdW50ID0gW192aWV3c05vdEluRG9jdW1lbnQgY291bnRdOworICAgIGZv
ciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IHZpZXdzTm90SW5Eb2N1bWVudENvdW50OyBpKyspCisg
ICAgICAgIFtzZWxmIHN0b3BPbmVQbHVnaW5Gb3JQYWdlQ2FjaGU6W192aWV3c05vdEluRG9jdW1l
bnQgb2JqZWN0QXRJbmRleDppXV07CisjZW5kaWYKKworICAgIF9zdGFydGVkID0gTk87Cit9CisK
Ky0gKHZvaWQpcmVzdG9yZVBsdWdpbnNGcm9tQ2FjaGUKK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3
ID0gW19kb2N1bWVudFZpZXcgX3dlYlZpZXddOworCisgICAgTlNVSW50ZWdlciB2aWV3c0NvdW50
ID0gW192aWV3cyBjb3VudF07CisgICAgaWYgKHZpZXdzQ291bnQgPiAwKQorICAgICAgICBMT0co
UGx1Z2lucywgInJlc3RvcmluZyBXZWJLaXQgcGx1Z2lucyBmcm9tIFBhZ2VDYWNoZTogJUAiLCBb
X3ZpZXdzIGRlc2NyaXB0aW9uXSk7CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCB2
aWV3c0NvdW50OyBpKyspCisgICAgICAgIFtbd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzp3ZWJWaWV3IHdpbGxBZGRQbHVnSW5WaWV3Oltfdmlld3Mgb2JqZWN0QXRJbmRl
eDppXV07CisKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICBOU1VJbnRl
Z2VyIHZpZXdzTm90SW5Eb2N1bWVudENvdW50ID0gW192aWV3c05vdEluRG9jdW1lbnQgY291bnRd
OworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IHZpZXdzTm90SW5Eb2N1bWVudENvdW50
OyBpKyspCisgICAgICAgIFtbd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzp3ZWJWaWV3IHdpbGxBZGRQbHVnSW5WaWV3Oltfdmlld3NOb3RJbkRvY3VtZW50IG9iamVjdEF0
SW5kZXg6aV1dOworI2VuZGlmCit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAtICh2b2lkKXBsdWdpblZpZXdDcmVhdGVkOihO
U1ZpZXcgKil2aWV3CiB7CkBAIC0yMzcsMTkgKzM3MCwyMyBAQCAtICh2b2lkKWFkZFBsdWdpbjoo
TlNWaWV3ICopdmlldwogICAgIAogICAgIGlmICghW192aWV3cyBjb250YWluc09iamVjdDp2aWV3
XSkgewogICAgICAgICBbX3ZpZXdzIGFkZE9iamVjdDp2aWV3XTsKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgICAgICBbW19kb2N1bWVudFZpZXcgX3dlYlZpZXddIGFkZFBsdWdpbkluc3RhbmNlVmll
dzp2aWV3XTsKKyNlbmRpZgogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAg
ICAgICAgIGlmIChbX3ZpZXdzTm90SW5Eb2N1bWVudCBjb250YWluc09iamVjdDp2aWV3XSkKICAg
ICAgICAgICAgIFtfdmlld3NOb3RJbkRvY3VtZW50IHJlbW92ZU9iamVjdDp2aWV3XTsKICNlbmRp
ZgogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgQk9PTCBvbGREZWZlcnNDYWxsYmFja3Mg
PSBbW3NlbGYgd2ViVmlld10gZGVmZXJzQ2FsbGJhY2tzXTsKICAgICAgICAgaWYgKCFvbGREZWZl
cnNDYWxsYmFja3MpCiAgICAgICAgICAgICBbW3NlbGYgd2ViVmlld10gc2V0RGVmZXJzQ2FsbGJh
Y2tzOllFU107CiAKICAgICAgICAgaWYgKGlzS2luZE9mQ2xhc3ModmlldywgQCJXbXZQbHVnaW4i
KSkKICAgICAgICAgICAgIGluc3RhbGxGbGlwNE1hY1BsdWdJbldvcmthcm91bmRJZk5lY2Vzc2Fy
eSgpOworI2VuZGlmCiAKICAgICAgICAgTE9HKFBsdWdpbnMsICJpbml0aWFsaXppbmcgcGx1Zy1p
biAlQCIsIHZpZXcpOwogICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJQbHVnSW5Jbml0aWFsaXplKV0pIHsKQEAgLTI2MCw4ICszOTcsMTAgQEAgLSAodm9p
ZClhZGRQbHVnaW46KE5TVmlldyAqKXZpZXcKICAgICAgICAgICAgIFt2aWV3IHBsdWdpbkluaXRp
YWxpemVdOwogICAgICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAoIW9s
ZERlZmVyc0NhbGxiYWNrcykKICAgICAgICAgICAgIFtbc2VsZiB3ZWJWaWV3XSBzZXREZWZlcnND
YWxsYmFja3M6Tk9dOworI2VuZGlmCiAgICAgICAgIAogICAgICAgICBpZiAoX3N0YXJ0ZWQpIHsK
ICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwpA
QCAtMjk4LDcgKzQzNyw5IEBAIC0gKHZvaWQpZGVzdHJveVBsdWdpbjooTlNWaWV3ICopdmlldwog
I2VuZGlmCiAgICAgICAgIAogICAgICAgICBbcGx1Z2luVmlld3MgcmVtb3ZlT2JqZWN0OnZpZXdd
OworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIFtbX2RvY3VtZW50VmlldyBfd2ViVmlld10g
cmVtb3ZlUGx1Z2luSW5zdGFuY2VWaWV3OnZpZXddOworI2VuZGlmCiAgICAgICAgIFtfdmlld3Mg
cmVtb3ZlT2JqZWN0OnZpZXddOwogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQog
ICAgICAgICBbX3ZpZXdzTm90SW5Eb2N1bWVudCByZW1vdmVPYmplY3Q6dmlld107CkBAIC0zNDcs
NyArNDg4LDkgQEAgLSAodm9pZClkZXN0cm95QWxsUGx1Z2lucwogI2VuZGlmCiAgICAgICAgIAog
ICAgICAgICBbcGx1Z2luVmlld3MgcmVtb3ZlT2JqZWN0OmFWaWV3XTsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgICAgICBbW19kb2N1bWVudFZpZXcgX3dlYlZpZXddIHJlbW92ZVBsdWdpbkluc3Rh
bmNlVmlldzphVmlld107CisjZW5kaWYKICAgICB9CiAKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZ
X0ZPUl9WSURFTykKQEAgLTM1NiwxMyArNDk5LDI0IEBAIC0gKHZvaWQpZGVzdHJveUFsbFBsdWdp
bnMKICAgICAgICAgW3NlbGYgZGVzdHJveU9uZVBsdWdpbjpbX3ZpZXdzTm90SW5Eb2N1bWVudCBv
YmplY3RBdEluZGV4OmldXTsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbX3Zp
ZXdzIG1ha2VPYmplY3RzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihyZW1vdmVGcm9tU3VwZXJ2
aWV3V2l0aG91dE5lZWRpbmdEaXNwbGF5KV07CisjZWxzZQorICAgIFtfdmlld3MgbWFrZU9iamVj
dHNQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHJlbW92ZUZyb21TdXBlcnZpZXcpXTsKKyNlbmRp
ZgogICAgIFtfdmlld3MgcmVsZWFzZV07CiAgICAgX3ZpZXdzID0gbmlsOwogCiAgICAgX2RvY3Vt
ZW50VmlldyA9IG5pbDsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKEJPT0wpcHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlCit7CisgICAgcmV0dXJuIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpOworfQorI2VuZGlmCisKIC0gKGlkKV93ZWJQbHVnaW5Db250YWluZXJDaGVj
a0lmQWxsb3dlZFRvTG9hZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgaW5GcmFtZToo
TlNTdHJpbmcgKil0YXJnZXQgcmVzdWx0T2JqZWN0OihpZClvYmogc2VsZWN0b3I6KFNFTClzZWxl
Y3RvcgogewogICAgIFdlYlBsdWdpbkNvbnRhaW5lckNoZWNrICpjaGVjayA9IFtXZWJQbHVnaW5D
b250YWluZXJDaGVjayBjaGVja1dpdGhSZXF1ZXN0OnJlcXVlc3QgdGFyZ2V0OnRhcmdldCByZXN1
bHRPYmplY3Q6b2JqIHNlbGVjdG9yOnNlbGVjdG9yIGNvbnRyb2xsZXI6c2VsZiBjb250ZXh0SW5m
bzpuaWxdOwpAQCAtNDA5LDYgKzU2MywyMCBAQCAtICh2b2lkKXdlYlBsdWdJbkNvbnRhaW5lckxv
YWRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IGluRnJhbWU6KE5TU3RyaW5nCiAgICAg
fQogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAodm9pZCl3ZWJQbHVnSW5Db250YWluZXJXaWxs
U2hvd0Z1bGxTY3JlZW5Gb3JWaWV3OihpZClwbHVnSW5WaWV3Cit7CisgICAgV2ViVmlldyAqd2Vi
VmlldyA9IFtfZGF0YVNvdXJjZSBfd2ViVmlld107CisgICAgW1t3ZWJWaWV3IF9VSUtpdERlbGVn
YXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgd2lsbFNob3dGdWxsU2NyZWVuRm9yUGx1Z0lu
VmlldzpwbHVnSW5WaWV3XTsKK30KKworLSAodm9pZCl3ZWJQbHVnSW5Db250YWluZXJEaWRIaWRl
RnVsbFNjcmVlbkZvclZpZXc6KGlkKXBsdWdJblZpZXcKK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3
ID0gW19kYXRhU291cmNlIF93ZWJWaWV3XTsKKyAgICBbW3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVG
b3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRIaWRlRnVsbFNjcmVlbkZvclBsdWdJblZpZXc6
cGx1Z0luVmlld107Cit9CisjZW5kaWYKKwogLSAodm9pZCl3ZWJQbHVnSW5Db250YWluZXJTaG93
U3RhdHVzOihOU1N0cmluZyAqKW1lc3NhZ2UKIHsKICAgICBpZiAoIW1lc3NhZ2UpCkBAIC00MjQs
NiArNTkyLDcgQEAgLSAodm9pZClzaG93U3RhdHVzOihOU1N0cmluZyAqKW1lc3NhZ2UKICAgICBb
c2VsZiB3ZWJQbHVnSW5Db250YWluZXJTaG93U3RhdHVzOm1lc3NhZ2VdOwogfQogCisjaWYgIVBM
QVRGT1JNKElPUykKIC0gKE5TQ29sb3IgKil3ZWJQbHVnSW5Db250YWluZXJTZWxlY3Rpb25Db2xv
cgogewogICAgIGJvb2wgcHJpbWFyeSA9IHRydWU7CkBAIC00MzcsNiArNjA2LDcgQEAgLSAoTlND
b2xvciAqKXNlbGVjdGlvbkNvbG9yCiB7CiAgICAgcmV0dXJuIFtzZWxmIHdlYlBsdWdJbkNvbnRh
aW5lclNlbGVjdGlvbkNvbG9yXTsKIH0KKyNlbmRpZgogCiAtIChXZWJGcmFtZSAqKXdlYkZyYW1l
CiB7CkBAIC01MDksMjEgKzY3OSwzNCBAQCBzdGF0aWMgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFQcm94eUNsaWVudChET01FbGVtZW50KiBlbGVtZW50KQogCiAtICh2b2lkKV93ZWJQ
bHVnaW5Db250YWluZXJTZXRNZWRpYVBsYXllclByb3h5OihXZWJNZWRpYVBsYXllclByb3h5ICop
cHJveHkgZm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgV2ViVGhyZWFkUnVuKF57CisjZW5kaWYKICAgICBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50KiBjbGllbnQgPSBtZWRpYVByb3h5Q2xpZW50KGVsZW1lbnQpOwogICAgIGlmIChjbGll
bnQpCiAgICAgICAgIGNsaWVudC0+c2V0TWVkaWFQbGF5ZXJQcm94eShwcm94eSk7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIH0pOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpX3dlYlBsdWdpbkNvbnRh
aW5lclBvc3RNZWRpYVBsYXllck5vdGlmaWNhdGlvbjooaW50KW5vdGlmaWNhdGlvbiBmb3JFbGVt
ZW50OihET01FbGVtZW50ICopZWxlbWVudAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBXZWJU
aHJlYWRSdW4oXnsKKyNlbmRpZgogICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGNsaWVu
dCA9IG1lZGlhUHJveHlDbGllbnQoZWxlbWVudCk7CiAgICAgaWYgKGNsaWVudCkKICAgICAgICAg
Y2xpZW50LT5kZWxpdmVyTm90aWZpY2F0aW9uKChNZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9u
VHlwZSlub3RpZmljYXRpb24pOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB9KTsKKyNlbmRpZgog
fQogI2VuZGlmCiAKIEBlbmQKIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgYm9vbCBpc0tp
bmRPZkNsYXNzKGlkIG9iamVjdCwgTlNTdHJpbmcgKmNsYXNzTmFtZSkKIHsKICAgICBDbGFzcyBj
bHMgPSBOU0NsYXNzRnJvbVN0cmluZyhjbGFzc05hbWUpOwpAQCAtNjA1LDMgKzc4OCw0IEBAIHN0
YXRpYyB2b2lkIGluc3RhbGxGbGlwNE1hY1BsdWdJbldvcmthcm91bmRJZk5lY2Vzc2FyeSgpCiAg
ICAgICAgIGhhc0luc3RhbGxlZEZsaXA0TWFjUGx1Z0luV29ya2Fyb3VuZCA9IHRydWU7CiAgICAg
fQogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJQbHVnaW5EYXRhYmFzZS5tbQppbmRleCAzYmUxZjEyYTc3ZmI4MDJjYzAxOWU3MWQ2
MTFhNjVmMjY3YjlmMTlkLi5jNWM1NTZhYjkxMjkwMjYxNTAzNWM0OWEwYzEzN2UwMGQ4Nzc2OGUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNl
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luRGF0YWJhc2UubW0K
QEAgLTQ1LDYgKzQ1LDEwIEBACiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNp
bXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJX
ZWJVSUtpdFN1cHBvcnQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
c3RhdGljIHZvaWQgY2hlY2tDYW5kaWRhdGUoV2ViQmFzZVBsdWdpblBhY2thZ2UgKipjdXJyZW50
UGx1Z2luLCBXZWJCYXNlUGx1Z2luUGFja2FnZSAqKmNhbmRpZGF0ZVBsdWdpbik7CkBAIC0zODYs
NiArMzkwLDcgQEAgQGltcGxlbWVudGF0aW9uIFdlYlBsdWdpbkRhdGFiYXNlIChJbnRlcm5hbCkK
IAogKyAoTlNBcnJheSAqKV9kZWZhdWx0UGx1Z0luUGF0aHMKIHsKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIC8vIFBsdWctaW5zIGFyZSBmb3VuZCBpbiBvcmRlciBvZiBwcmVjZWRlbmNlLgogICAg
IC8vIElmIHRoZXJlIGFyZSBkdXBsaWNhdGVzLCB0aGUgZmlyc3QgZm91bmQgcGx1Zy1pbiBpcyB1
c2VkLgogICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGVyZSBpcyBhIFF1aWNrVGltZS5wbHVnaW4g
aW4gdGhlIHVzZXJzJ3MgaG9tZSBkaXJlY3RvcnkKQEAgLTM5Niw2ICs0MDEsMTkgQEAgKyAoTlNB
cnJheSAqKV9kZWZhdWx0UGx1Z0luUGF0aHMKICAgICAgICAgQCIvTGlicmFyeS9JbnRlcm5ldCBQ
bHVnLUlucyIsCiAgICAgICAgIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVpbHRJblBsdWdJbnNQ
YXRoXSwKICAgICAgICAgbmlsXTsKKyNlbHNlCisgICAgLy8gaU9TIHBsdWctaW5zIGFyZSBhbGwg
bG9jYXRlZCBpbiAvU3lzdGVtL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMKKyNpZiAhUExBVEZP
Uk0oSU9TX1NJTVVMQVRPUikKKyAgICBOU0FycmF5ICpzeXN0ZW1MaWJyYXJ5ID0gTlNTZWFyY2hQ
YXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1N5c3RlbURv
bWFpbk1hc2ssIFlFUyk7CisgICAgaWYgKCFzeXN0ZW1MaWJyYXJ5IHx8IFtzeXN0ZW1MaWJyYXJ5
IGNvdW50XSA9PSAwKQorICAgICAgICByZXR1cm4gbmlsOworICAgIE5TU3RyaW5nICpzeXN0ZW1E
aXIgPSAoTlNTdHJpbmcqKVtzeXN0ZW1MaWJyYXJ5IG9iamVjdEF0SW5kZXg6MF07CisjZWxzZQor
ICAgIE5TU3RyaW5nKiBwbGF0Zm9ybVJvb3REaXIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6V2ViS2l0UGxhdGZvcm1TeXN0ZW1Sb290RGlyZWN0b3J5KCldOworICAgIE5TU3RyaW5n
ICpzeXN0ZW1EaXIgPSBbcGxhdGZvcm1Sb290RGlyIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIlN5c3RlbS9MaWJyYXJ5Il07CisjZW5kaWYKKyAgICByZXR1cm4gW05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0OltzeXN0ZW1EaXIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAi
SW50ZXJuZXQgUGx1Zy1JbnMiXV07CisjZW5kaWYKIH0KIAogLSAoTlNBcnJheSAqKV9wbHVnSW5Q
YXRocwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5QYWNr
YWdlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5QYWNrYWdlLm1tCmlu
ZGV4IDYwNzIxMjg0ZDRiMGZjNWQzNjEyOWY5MDIzM2Q2ZjM2MDJhMGVlZDQuLjVhOTE5N2VkOTIx
NzQ1ODBmZDZlMTk1NjRlYjAxNTE2ZGE5NDZlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViUGx1Z2luUGFja2FnZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYlBsdWdpblBhY2thZ2UubW0KQEAgLTYxLDYgKzYxLDcgQEAgLSAoaWQpaW5pdFdp
dGhQYXRoOihOU1N0cmluZyAqKXBsdWdpblBhdGgKICAgICAgICAgfQogICAgIH0KICAgICAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIE5TRmlsZUhhbmRsZSAqZXhlY3V0YWJsZUZpbGUgPSBbTlNG
aWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JSZWFkaW5nQXRQYXRoOltuc0J1bmRsZSBleGVjdXRhYmxl
UGF0aF1dOwogICAgIE5TRGF0YSAqZGF0YSA9IFtleGVjdXRhYmxlRmlsZSByZWFkRGF0YU9mTGVu
Z3RoOjUxMl07CiAgICAgW2V4ZWN1dGFibGVGaWxlIGNsb3NlRmlsZV07CkBAIC02OCw2ICs2OSw3
IEBAIC0gKGlkKWluaXRXaXRoUGF0aDooTlNTdHJpbmcgKilwbHVnaW5QYXRoCiAgICAgICAgIFtz
ZWxmIHJlbGVhc2VdOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KKyNlbmRpZgogCiAgICAg
aWYgKCFbc2VsZiBnZXRQbHVnaW5JbmZvRnJvbVBMaXN0c10pIHsKICAgICAgICAgW3NlbGYgcmVs
ZWFzZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbnNQ
cml2YXRlLm0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbnNQcml2YXRlLm0K
aW5kZXggNzk4OTZiNjZmNjU4ODUyZmZjOGRiMmUzZTYxYTNjMjYzMzBkMTRjZC4uMDg0YTYzZjJi
NTI0ZTk4OGZiMTZiNjU2YzRiNGFjMzVjOWI1ZWYyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5zUHJpdmF0ZS5tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvV2ViUGx1Z2luc1ByaXZhdGUubQpAQCAtMjYsNiArMjYsMTAgQEAKICAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbmNsdWRlICJXZWJQbHVnaW5zUHJp
dmF0ZS5oIgogCiBOU1N0cmluZyAqV2ViUGx1Z2luV2lsbFByZXNlbnROYXRpdmVVc2VySW50ZXJm
YWNlTm90aWZpY2F0aW9uID0gQCJXZWJQbHVnaW5XaWxsUHJlc2VudE5hdGl2ZVVzZXJJbnRlcmZh
Y2UiOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2Vi
RGF0YWJhc2VNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFz
ZU1hbmFnZXIubW0KaW5kZXggZWI1ODJkMDllNDU0OTlhNjk3NTRiZmUzNDNhODA0MGFhY2EzNGRk
Yy4uZTg5ZDQ4NTBhYjQ3MDY0ZjJmNjI2OWM1NDFkYTUxNTljNTRlOGM5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KQEAgLTM3LDYgKzM3
LDEyIEBACiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFiYXNlTWFuYWdlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TZWN1cml0eU9yaWdpbi5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiV2Vi
RGF0YWJhc2VNYW5hZ2VySW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGF0YWJhc2VUcmFj
a2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWQuaD4KKyNlbmRpZgorCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogTlNTdHJpbmcgKldlYkRhdGFiYXNlRGlyZWN0b3J5RGVm
YXVsdHNLZXkgPSBAIldlYkRhdGFiYXNlRGlyZWN0b3J5IjsKQEAgLTQ5LDYgKzU1LDEwIEBAIE5T
U3RyaW5nICpXZWJEYXRhYmFzZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiA9IEAiV2ViRGF0
YWJhc2VEaWRNb2RpZnlPcmlnaW5OCiBOU1N0cmluZyAqV2ViRGF0YWJhc2VEaWRNb2RpZnlEYXRh
YmFzZU5vdGlmaWNhdGlvbiA9IEAiV2ViRGF0YWJhc2VEaWRNb2RpZnlEYXRhYmFzZU5vdGlmaWNh
dGlvbiI7CiBOU1N0cmluZyAqV2ViRGF0YWJhc2VJZGVudGlmaWVyS2V5ID0gQCJXZWJEYXRhYmFz
ZUlkZW50aWZpZXJLZXkiOwogCisjaWYgUExBVEZPUk0oSU9TKQorQ0ZTdHJpbmdSZWYgV2ViRGF0
YWJhc2VPcmlnaW5zRGlkQ2hhbmdlTm90aWZpY2F0aW9uID0gQ0ZTVFIoIldlYkRhdGFiYXNlT3Jp
Z2luc0RpZENoYW5nZU5vdGlmaWNhdGlvbiIpOworI2VuZGlmCisKIHN0YXRpYyBOU1N0cmluZyAq
ZGF0YWJhc2VzRGlyZWN0b3J5UGF0aCgpOwogCiBAaW1wbGVtZW50YXRpb24gV2ViRGF0YWJhc2VN
YW5hZ2VyCkBAIC0xMjUsNiArMTM1LDExIEBAIC0gKE5TRGljdGlvbmFyeSAqKWRldGFpbHNGb3JE
YXRhYmFzZTooTlNTdHJpbmcgKilkYXRhYmFzZUlkZW50aWZpZXIgd2l0aE9yaWdpbjooCiAtICh2
b2lkKWRlbGV0ZUFsbERhdGFiYXNlcwogewogICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigp
LmRlbGV0ZUFsbERhdGFiYXNlcygpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTog
VGhpcyBuZWVkcyB0byBiZSByZW1vdmVkIG9uY2UgRGF0YWJhc2VUcmFja2VycyBpbiBtdWx0aXBs
ZSBwcm9jZXNzZXMKKyAgICAvLyBhcmUgaW4gc3luYzogPHJkYXI6Ly9wcm9ibGVtLzk1Njc1MDA+
IFJlbW92ZSBXZWJzaXRlIERhdGEgcGFuZSBpcyBub3Qga2VwdCBpbiBzeW5jIHdpdGggU2FmYXJp
CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRQYXRoOmRh
dGFiYXNlc0RpcmVjdG9yeVBhdGgoKSBlcnJvcjpOVUxMXTsKKyNlbmRpZgogfQogCiAtIChCT09M
KWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4KQEAgLTEzNyw4ICsxNTIs
MTUwIEBAIC0gKEJPT0wpZGVsZXRlRGF0YWJhc2U6KE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlm
aWVyIHdpdGhPcmlnaW46KFdlYlNlY3VyaXR5T3JpCiAgICAgcmV0dXJuIERhdGFiYXNlTWFuYWdl
cjo6bWFuYWdlcigpLmRlbGV0ZURhdGFiYXNlKFtvcmlnaW4gX2NvcmVdLCBkYXRhYmFzZUlkZW50
aWZpZXIpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wgaXNGaWxlSGlkZGVu
KE5TU3RyaW5nICpmaWxlKQoreworICAgIEFTU0VSVChbZmlsZSBsZW5ndGhdKTsKKyAgICByZXR1
cm4gW2ZpbGUgY2hhcmFjdGVyQXRJbmRleDowXSA9PSAnLic7Cit9CisKKysgKHZvaWQpcmVtb3Zl
RW1wdHlEYXRhYmFzZUZpbGVzCit7CisgICAgTlNTdHJpbmcgKmRhdGFiYXNlc0RpcmVjdG9yeSA9
IGRhdGFiYXNlc0RpcmVjdG9yeVBhdGgoKTsKKyAgICBOU0ZpbGVNYW5hZ2VyICpmaWxlTWFuYWdl
ciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBOU0FycmF5ICphcnJheSA9
IFtmaWxlTWFuYWdlciBjb250ZW50c09mRGlyZWN0b3J5QXRQYXRoOmRhdGFiYXNlc0RpcmVjdG9y
eSBlcnJvcjowXTsKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
TlNVSW50ZWdlciBjb3VudCA9IFthcnJheSBjb3VudF07CisgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU1N0cmluZyAqZmlsZU5hbWUgPSBbYXJy
YXkgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgLy8gU2tpcCBoaWRkZW4gZmlsZXMuCisgICAg
ICAgIGlmICghW2ZpbGVOYW1lIGxlbmd0aF0gfHwgaXNGaWxlSGlkZGVuKGZpbGVOYW1lKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgTlNTdHJpbmcgKnBhdGggPSBb
ZGF0YWJhc2VzRGlyZWN0b3J5IHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlTmFt
ZV07CisgICAgICAgIC8vIExvb2sgZm9yIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBkYXRhYmFz
ZSBmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgb3JpZ2lucy4KKyAgICAgICAgQk9PTCBpc0Rp
cmVjdG9yeTsKKyAgICAgICAgaWYgKCFbZmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpwYXRo
IGlzRGlyZWN0b3J5OiZpc0RpcmVjdG9yeV0gfHwgIWlzRGlyZWN0b3J5KQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBp
cyBub3QgYSBzeW1ib2xpYyBsaW5rIHRoYXQgcG9pbnRzIHRvIHNvbWV0aGluZyBlbHNlLgorICAg
ICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbZmlsZU1hbmFnZXIgYXR0cmlidXRlc09m
SXRlbUF0UGF0aDpwYXRoIGVycm9yOjBdOworICAgICAgICBpZiAoW2F0dHJpYnV0ZXMgZmlsZVR5
cGVdID09IE5TRmlsZVR5cGVTeW1ib2xpY0xpbmspCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIE5TQXJyYXkgKmRhdGFiYXNlRmlsZXNJbk9yaWdpbiA9IFtmaWxlTWFu
YWdlciBjb250ZW50c09mRGlyZWN0b3J5QXRQYXRoOnBhdGggZXJyb3I6MF07CisgICAgICAgIE5T
VUludGVnZXIgZGF0YWJhc2VGaWxlQ291bnQgPSBbZGF0YWJhc2VGaWxlc0luT3JpZ2luIGNvdW50
XTsKKyAgICAgICAgTlNVSW50ZWdlciBkZWxldGVkRGF0YWJhc2VGaWxlQ291bnQgPSAwOworICAg
ICAgICBmb3IgKE5TVUludGVnZXIgaiA9IDA7IGogPCBkYXRhYmFzZUZpbGVDb3VudDsgKytqKSB7
CisgICAgICAgICAgICBOU1N0cmluZyAqZGJGaWxlTmFtZSA9IFtkYXRhYmFzZUZpbGVzSW5Pcmln
aW4gb2JqZWN0QXRJbmRleDpqXTsKKyAgICAgICAgICAgIC8vIFNraXAgaGlkZGVuIGZpbGVzLgor
ICAgICAgICAgICAgaWYgKCFbZGJGaWxlTmFtZSBsZW5ndGhdIHx8IGlzRmlsZUhpZGRlbihkYkZp
bGVOYW1lKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTlNTdHJpbmcgKmRiRmlsZVBhdGggPSBbcGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhD
b21wb25lbnQ6ZGJGaWxlTmFtZV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZXJl
IHNob3VsZG4ndCBiZSBhbnkgZGlyZWN0b3JpZXMgaW4gdGhpcyBmb2xkZXIgLSBidXQgY2hlY2sg
Zm9yIGl0IGFueXdheS4KKyAgICAgICAgICAgIGlmICghW2ZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNB
dFBhdGg6ZGJGaWxlUGF0aCBpc0RpcmVjdG9yeTomaXNEaXJlY3RvcnldIHx8IGlzRGlyZWN0b3J5
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGVJZkVtcHR5KGRiRmlsZVBhdGgp
KQorICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZUZpbGVDb3VudCsrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBoYXZlIHJlbW92ZWQgZXZlcnkgZGF0YWJhc2Ug
ZmlsZSBmb3IgdGhpcyBvcmlnaW4sIGRlbGV0ZSB0aGUgZm9sZGVyIGZvciB0aGlzIG9yaWdpbi4K
KyAgICAgICAgaWYgKGRhdGFiYXNlRmlsZUNvdW50ID09IGRlbGV0ZWREYXRhYmFzZUZpbGVDb3Vu
dCkgeworICAgICAgICAgICAgLy8gVXNlIHJtZGlyIC0gd2UgZG9uJ3Qgd2FudCB0aGUgZGVsZXRp
b24gdG8gaGFwcGVuIGlmIHRoZSBmb2xkZXIgaXMgbm90IGVtcHR5LgorICAgICAgICAgICAgcm1k
aXIoW3BhdGggZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKKysgKHZvaWQpc2NoZWR1bGVFbXB0eURhdGFiYXNlUmVtb3ZhbAoreworICAgIERhdGFiYXNl
VHJhY2tlcjo6ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3ZhbFRhc2tXaWxsQmVTY2hlZHVsZWQoKTsK
KyAgICAKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKDAsIDAp
LCBeeworICAgICAgICBbV2ViRGF0YWJhc2VNYW5hZ2VyIHJlbW92ZUVtcHR5RGF0YWJhc2VGaWxl
c107CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3ZhbFRh
c2tEaWRGaW5pc2goKTsKKyAgICB9KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKK0Bl
bmQKKworI2lmIFBMQVRGT1JNKElPUykKK0BpbXBsZW1lbnRhdGlvbiBXZWJEYXRhYmFzZU1hbmFn
ZXIgKFdlYkRhdGFiYXNlTWFuYWdlckludGVybmFsKQorCitzdGF0aWMgTXV0ZXgmIHRyYW5zYWN0
aW9uQmFja2dyb3VuZFRhc2tJZGVudGlmaWVyTG9jaygpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChNdXRleCwgbXV0ZXgsICgpKTsKKyAgICByZXR1cm4gbXV0ZXg7Cit9CisKK3N0YXRpYyBX
ZWJCYWNrZ3JvdW5kVGFza0lkZW50aWZpZXIgdHJhbnNhY3Rpb25CYWNrZ3JvdW5kVGFza0lkZW50
aWZpZXI7CisKK3N0YXRpYyB2b2lkIHNldFRyYW5zYWN0aW9uQmFja2dyb3VuZFRhc2tJZGVudGlm
aWVyKFdlYkJhY2tncm91bmRUYXNrSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHRyYW5z
YWN0aW9uQmFja2dyb3VuZFRhc2tJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKK30KKworc3RhdGlj
IFdlYkJhY2tncm91bmRUYXNrSWRlbnRpZmllciBnZXRUcmFuc2FjdGlvbkJhY2tncm91bmRUYXNr
SWRlbnRpZmllcigpCit7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBwcmVkOworICAgIGRp
c3BhdGNoX29uY2UoJnByZWQsIF57CisgICAgICAgIHNldFRyYW5zYWN0aW9uQmFja2dyb3VuZFRh
c2tJZGVudGlmaWVyKGludmFsaWRXZWJCYWNrZ3JvdW5kVGFza0lkZW50aWZpZXIoKSk7CisgICAg
fSk7CisgICAgCisgICAgcmV0dXJuIHRyYW5zYWN0aW9uQmFja2dyb3VuZFRhc2tJZGVudGlmaWVy
OworfQorCisrICh2b2lkKXdpbGxCZWdpbkZpcnN0VHJhbnNhY3Rpb24KK3sKKyAgICBbc2VsZiBz
dGFydEJhY2tncm91bmRUYXNrXTsKK30KKworKyAodm9pZClkaWRGaW5pc2hMYXN0VHJhbnNhY3Rp
b24KK3sKKyAgICBbc2VsZiBlbmRCYWNrZ3JvdW5kVGFza107Cit9CisKKysgKHZvaWQpc3RhcnRC
YWNrZ3JvdW5kVGFzaworeworICAgIE11dGV4TG9ja2VyIGxvY2sodHJhbnNhY3Rpb25CYWNrZ3Jv
dW5kVGFza0lkZW50aWZpZXJMb2NrKCkpOworCisgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5IGFu
IGV4aXN0aW5nIGJhY2tncm91bmQgdGFzayBnb2luZyBvbiwgdGhlcmUncyBubyBuZWVkIHRvIHN0
YXJ0IGEgbmV3IG9uZS4KKyAgICBpZiAoZ2V0VHJhbnNhY3Rpb25CYWNrZ3JvdW5kVGFza0lkZW50
aWZpZXIoKSAhPSBpbnZhbGlkV2ViQmFja2dyb3VuZFRhc2tJZGVudGlmaWVyKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBzZXRUcmFuc2FjdGlvbkJhY2tncm91bmRUYXNrSWRlbnRpZmll
cihzdGFydEJhY2tncm91bmRUYXNrKF4geyBbV2ViRGF0YWJhc2VNYW5hZ2VyIGVuZEJhY2tncm91
bmRUYXNrXTsgfSkpOworfQorCisrICh2b2lkKWVuZEJhY2tncm91bmRUYXNrCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9jayh0cmFuc2FjdGlvbkJhY2tncm91bmRUYXNrSWRlbnRpZmllckxvY2soKSk7
CisKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHN0YXJ0IHRo
ZSBiYWNrZ3JvdW5kIHRhc2sgd2hlbiB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gYmVnYW4uCisgICAg
Ly8gRG9uJ3QgdHJ5IHRvIGVuZCB0aGUgdGFzayBpbiB0aGF0IGNhc2UuCisgICAgLy8gSXQgaXMg
YWxzbyBwb3NzaWJsZSB3ZSBmaW5hbGx5IGZpbmlzaCB0aGUgbGFzdCB0cmFuc2FjdGlvbiByaWdo
dCB3aGVuIHRoZSBiYWNrZ3JvdW5kIHRhc2sgZXhwaXJlcworICAgIC8vIGFuZCB0aGlzIHdpbGwg
ZW5kIHVwIGJlaW5nIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgYmFja2dyb3VuZCB0YXNrLiAg
dHJhbnNhY3Rpb25CYWNrZ3JvdW5kVGFza0lkZW50aWZpZXIKKyAgICAvLyB3aWxsIGJlIGludmFs
aWQgZm9yIHRoZSBzZWNvbmQgY2FsbGVyLgorICAgIGlmIChnZXRUcmFuc2FjdGlvbkJhY2tncm91
bmRUYXNrSWRlbnRpZmllcigpID09IGludmFsaWRXZWJCYWNrZ3JvdW5kVGFza0lkZW50aWZpZXIo
KSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBlbmRCYWNrZ3JvdW5kVGFzayhnZXRU
cmFuc2FjdGlvbkJhY2tncm91bmRUYXNrSWRlbnRpZmllcigpKTsKKyAgICBzZXRUcmFuc2FjdGlv
bkJhY2tncm91bmRUYXNrSWRlbnRpZmllcihpbnZhbGlkV2ViQmFja2dyb3VuZFRhc2tJZGVudGlm
aWVyKCkpOworfQorCiBAZW5kCiAKK3ZvaWQgV2ViS2l0U2V0V2ViRGF0YWJhc2VQYXVzZWQoYm9v
bCBwYXVzZWQpCit7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2Vz
UGF1c2VkKHBhdXNlZCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiBzdGF0aWMgTlNT
dHJpbmcgKmRhdGFiYXNlc0RpcmVjdG9yeVBhdGgoKQogewogICAgIE5TVXNlckRlZmF1bHRzICpk
ZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlckNsaWVudC5o
IGIvU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQuaApp
bmRleCAyOGY4NDI4MTc3NDQ2MTI2ZjBlOWVhNDU5MzAxYWY4MGY2ZTU5NTdkLi42N2MwOGRlNTRh
YWQxMDViMDdlOGZjODIzYWQ3NzQ3NzE4NTYwMzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50LmgKQEAgLTM0LDggKzM0LDI1
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4qKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiosIGNvbnN0IFdURjo6U3RyaW5nJiBkYXRhYmFzZUlkZW50aWZp
ZXIpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRBZGRO
ZXdPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWREZWxldGVEYXRhYmFzZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZERlbGV0ZURhdGFiYXNlT3JpZ2luKCkgT1ZFUlJJREU7CisgICAgdm9p
ZCBuZXdEYXRhYmFzZU9yaWdpbldhc0FkZGVkKCk7CisgICAgdm9pZCBkYXRhYmFzZVdhc0RlbGV0
ZWQoKTsKKyAgICB2b2lkIGRhdGFiYXNlT3JpZ2luV2FzRGVsZXRlZCgpOworI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50KCk7CisKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgdm9pZCBkYXRhYmFzZU9yaWdpbnNEaWRDaGFuZ2UoKTsKKworICAgIGJvb2wgbV9p
c0hhbmRsaW5nTmV3RGF0YWJhc2VPcmlnaW5Ob3RpZmljYXRpb247CisgICAgYm9vbCBtX2lzSGFu
ZGxpbmdEZWxldGVEYXRhYmFzZU5vdGlmaWNhdGlvbjsKKyAgICBib29sIG1faXNIYW5kbGluZ0Rl
bGV0ZURhdGFiYXNlT3JpZ2luTm90aWZpY2F0aW9uOworI2VuZGlmCiB9OwogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyQ2xp
ZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJDbGll
bnQubW0KaW5kZXggMDJlNzNmM2NiMTQ5MzBhZTQyMWQ4ZWVmMzkwNzE2MzhiYWQwZjM4Yi4uYzUz
NjM4ZWUyMjA0MGZmMGFjMmJmODJjMzk0NGQxYzgyZDJmM2M5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQubW0KQEAgLTMz
LDIwICszMyw3MCBAQAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9TZWN1cml0eU9yaWdpbi5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8V2ViQ29y
ZS9XZWJDb3JlVGhyZWFkLmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
KyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgQ0ZTdHJpbmdSZWYgV2ViRGF0YWJhc2VPcmlnaW5X
YXNBZGRlZE5vdGlmaWNhdGlvbiA9IENGU1RSKCJjb20uYXBwbGUuTW9iaWxlU2FmYXJpU2V0dGlu
Z3MuV2ViRGF0YWJhc2VPcmlnaW5XYXNBZGRlZE5vdGlmaWNhdGlvbiIpOworc3RhdGljIENGU3Ry
aW5nUmVmIFdlYkRhdGFiYXNlV2FzRGVsZXRlZE5vdGlmaWNhdGlvbiA9IENGU1RSKCJjb20uYXBw
bGUuTW9iaWxlU2FmYXJpU2V0dGluZ3MuV2ViRGF0YWJhc2VXYXNEZWxldGVkTm90aWZpY2F0aW9u
Iik7CitzdGF0aWMgQ0ZTdHJpbmdSZWYgV2ViRGF0YWJhc2VPcmlnaW5XYXNEZWxldGVkTm90aWZp
Y2F0aW9uID0gQ0ZTVFIoImNvbS5hcHBsZS5Nb2JpbGVTYWZhcmlTZXR0aW5ncy5XZWJEYXRhYmFz
ZU9yaWdpbldhc0RlbGV0ZWROb3RpZmljYXRpb24iKTsKKyNlbmRpZgorCiBXZWJEYXRhYmFzZU1h
bmFnZXJDbGllbnQqIFdlYkRhdGFiYXNlTWFuYWdlckNsaWVudDo6c2hhcmVkV2ViRGF0YWJhc2VN
YW5hZ2VyQ2xpZW50KCkKIHsKICAgICBzdGF0aWMgV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50KiBz
aGFyZWRDbGllbnQgPSBuZXcgV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50KCk7CiAgICAgcmV0dXJu
IHNoYXJlZENsaWVudDsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyB2b2lkIG9uTmV3
RGF0YWJhc2VPcmlnaW5BZGRlZChDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCogb2JzZXJ2
ZXIsIENGU3RyaW5nUmVmLCBjb25zdCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmKQoreworICAgIEFT
U0VSVChvYnNlcnZlcik7CisgICAgCisgICAgV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50KiBjbGll
bnQgPSByZWludGVycHJldF9jYXN0PFdlYkRhdGFiYXNlTWFuYWdlckNsaWVudCo+KG9ic2VydmVy
KTsKKyAgICBjbGllbnQtPm5ld0RhdGFiYXNlT3JpZ2luV2FzQWRkZWQoKTsKK30KKworc3RhdGlj
IHZvaWQgb25EYXRhYmFzZURlbGV0ZWQoQ0ZOb3RpZmljYXRpb25DZW50ZXJSZWYsIHZvaWQqIG9i
c2VydmVyLCBDRlN0cmluZ1JlZiwgY29uc3Qgdm9pZCosIENGRGljdGlvbmFyeVJlZikKK3sKKyAg
ICBBU1NFUlQob2JzZXJ2ZXIpOworICAgIAorICAgIFdlYkRhdGFiYXNlTWFuYWdlckNsaWVudCog
Y2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQqPihvYnNl
cnZlcik7CisgICAgY2xpZW50LT5kYXRhYmFzZVdhc0RlbGV0ZWQoKTsKK30KKworc3RhdGljIHZv
aWQgb25EYXRhYmFzZU9yaWdpbkRlbGV0ZWQoQ0ZOb3RpZmljYXRpb25DZW50ZXJSZWYsIHZvaWQq
IG9ic2VydmVyLCBDRlN0cmluZ1JlZiwgY29uc3Qgdm9pZCosIENGRGljdGlvbmFyeVJlZikKK3sK
KyAgICBBU1NFUlQob2JzZXJ2ZXIpOworICAgIAorICAgIFdlYkRhdGFiYXNlTWFuYWdlckNsaWVu
dCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQqPihv
YnNlcnZlcik7CisgICAgY2xpZW50LT5kYXRhYmFzZU9yaWdpbldhc0RlbGV0ZWQoKTsKK30KKyNl
bmRpZgorCiBXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQ6OldlYkRhdGFiYXNlTWFuYWdlckNsaWVu
dCgpCisjaWYgUExBVEZPUk0oSU9TKQorICAgIDogbV9pc0hhbmRsaW5nTmV3RGF0YWJhc2VPcmln
aW5Ob3RpZmljYXRpb24oZmFsc2UpCisgICAgLCBtX2lzSGFuZGxpbmdEZWxldGVEYXRhYmFzZU5v
dGlmaWNhdGlvbihmYWxzZSkKKyAgICAsIG1faXNIYW5kbGluZ0RlbGV0ZURhdGFiYXNlT3JpZ2lu
Tm90aWZpY2F0aW9uKGZhbHNlKQorI2VuZGlmCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENG
Tm90aWZpY2F0aW9uQ2VudGVyUmVmIGNlbnRlciA9IENGTm90aWZpY2F0aW9uQ2VudGVyR2V0RGFy
d2luTm90aWZ5Q2VudGVyKCk7IAorICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIo
Y2VudGVyLCB0aGlzLCBvbk5ld0RhdGFiYXNlT3JpZ2luQWRkZWQsIFdlYkRhdGFiYXNlT3JpZ2lu
V2FzQWRkZWROb3RpZmljYXRpb24sIDAsIENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9y
RGVsaXZlckltbWVkaWF0ZWx5KTsKKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVy
KGNlbnRlciwgdGhpcywgb25EYXRhYmFzZURlbGV0ZWQsIFdlYkRhdGFiYXNlV2FzRGVsZXRlZE5v
dGlmaWNhdGlvbiwgMCwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1t
ZWRpYXRlbHkpOworICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoY2VudGVyLCB0
aGlzLCBvbkRhdGFiYXNlT3JpZ2luRGVsZXRlZCwgV2ViRGF0YWJhc2VPcmlnaW5XYXNEZWxldGVk
Tm90aWZpY2F0aW9uLCAwLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2ZXJJ
bW1lZGlhdGVseSk7ICAgIAorI2VuZGlmCiB9CiAKIFdlYkRhdGFiYXNlTWFuYWdlckNsaWVudDo6
fldlYkRhdGFiYXNlTWFuYWdlckNsaWVudCgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENG
Tm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRE
YXJ3aW5Ob3RpZnlDZW50ZXIoKSwgdGhpcywgMCwgMCk7CisjZW5kaWYKIH0KIAogY2xhc3MgRGlk
TW9kaWZ5T3JpZ2luRGF0YSB7CkBAIC0xMDYsNCArMTU2LDgwIEBAIHZvaWQgV2ViRGF0YWJhc2VN
YW5hZ2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2VySW5mbzp1c2VySW5mby5nZXQoKV07CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2
b2lkIFdlYkRhdGFiYXNlTWFuYWdlckNsaWVudDo6ZGlzcGF0Y2hEaWRBZGROZXdPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4qKQoreyAgICAKKyAgICBtX2lzSGFuZGxpbmdOZXdEYXRhYmFzZU9yaWdpbk5v
dGlmaWNhdGlvbiA9IHRydWU7CisgICAgLy8gU2VuZCBhIG5vdGlmaWNhdGlvbiB0byBhbGwgYXBw
cyB0aGF0IGEgbmV3IG9yaWdpbiBoYXMgYmVlbiBhZGRlZCwgc28gb3RoZXIgYXBwcyB3aXRoIG9w
ZW5lZCBkYXRhYmFzZSBjYW4gcmVmcmVzaCB0aGVpciBvcmlnaW4gbWFwcy4KKyAgICBDRk5vdGlm
aWNhdGlvbkNlbnRlclBvc3ROb3RpZmljYXRpb24oQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXREYXJ3
aW5Ob3RpZnlDZW50ZXIoKSwgV2ViRGF0YWJhc2VPcmlnaW5XYXNBZGRlZE5vdGlmaWNhdGlvbiwg
MCwgMCwgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50OjpkaXNwYXRj
aERpZERlbGV0ZURhdGFiYXNlKCkKK3sKKyAgICBtX2lzSGFuZGxpbmdEZWxldGVEYXRhYmFzZU5v
dGlmaWNhdGlvbiA9IHRydWU7CisgICAgLy8gU2VuZCBhIG5vdGlmaWNhdGlvbiB0byBhbGwgYXBw
cyB0aGF0IGEgZGF0YWJhc2UgaGFzIGJlZW4gZGVsZXRlZCwgc28gb3RoZXIgYXBwcyB3aXRoIHRo
ZSBkZWxldGVkIGRhdGFiYXNlIG9wZW4gd2lsbCBjbG9zZSBpdCBwcm9wZXJseS4KKyAgICBDRk5v
dGlmaWNhdGlvbkNlbnRlclBvc3ROb3RpZmljYXRpb24oQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRE
YXJ3aW5Ob3RpZnlDZW50ZXIoKSwgV2ViRGF0YWJhc2VXYXNEZWxldGVkTm90aWZpY2F0aW9uLCAw
LCAwLCB0cnVlKTsKK30KKwordm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQ6OmRpc3BhdGNo
RGlkRGVsZXRlRGF0YWJhc2VPcmlnaW4oKQoreworICAgIG1faXNIYW5kbGluZ0RlbGV0ZURhdGFi
YXNlT3JpZ2luTm90aWZpY2F0aW9uID0gdHJ1ZTsKKyAgICAvLyBTZW5kIGEgbm90aWZpY2F0aW9u
IHRvIGFsbCBhcHBzIHRoYXQgYW4gb3JpZ2luIGhhcyBiZWVuIGRlbGV0ZWQsIHNvIG90aGVyIGFw
cHMgY2FuIHVwZGF0ZSB0aGVpciBvcmlnaW4gbWFwcy4KKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRl
clBvc3ROb3RpZmljYXRpb24oQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXREYXJ3aW5Ob3RpZnlDZW50
ZXIoKSwgV2ViRGF0YWJhc2VPcmlnaW5XYXNEZWxldGVkTm90aWZpY2F0aW9uLCAwLCAwLCB0cnVl
KTsKK30KKwordm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQ6Om5ld0RhdGFiYXNlT3JpZ2lu
V2FzQWRkZWQoKQoreworICAgIC8vIExvY2tzIHRoZSBXZWJUaHJlYWQgZm9yIHRoZSByZXN0IG9m
IHRoZSBydW4gbG9vcC4KKyAgICBXZWJUaHJlYWRMb2NrKCk7CisKKyAgICAvLyBJZiB0aGlzIGlz
IHRoZSBwcm9jZXNzIHRoYXQgYWRkZWQgdGhlIG5ldyBvcmlnaW4sIGl0cyBxdW90YSBtYXAgc2hv
dWxkIGhhdmUgYmVlbiB1cGRhdGVkCisgICAgLy8gYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgaW52
YWxpZGF0ZWQuCisgICAgaWYgKG1faXNIYW5kbGluZ05ld0RhdGFiYXNlT3JpZ2luTm90aWZpY2F0
aW9uKSB7CisgICAgICAgIG1faXNIYW5kbGluZ05ld0RhdGFiYXNlT3JpZ2luTm90aWZpY2F0aW9u
ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZGF0YWJhc2VPcmln
aW5zRGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50OjpkYXRh
YmFzZVdhc0RlbGV0ZWQoKQoreworICAgIC8vIExvY2tzIHRoZSBXZWJUaHJlYWQgZm9yIHRoZSBy
ZXN0IG9mIHRoZSBydW4gbG9vcC4KKyAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAgCisgICAgLy8g
SWYgdGhpcyBpcyB0aGUgcHJvY2VzcyB0aGF0IGFkZGVkIHRoZSBuZXcgb3JpZ2luLCBpdHMgcXVv
dGEgbWFwIHNob3VsZCBoYXZlIGJlZW4gdXBkYXRlZAorICAgIC8vIGFuZCBkb2VzIG5vdCBuZWVk
IHRvIGJlIGludmFsaWRhdGVkLgorICAgIGlmIChtX2lzSGFuZGxpbmdEZWxldGVEYXRhYmFzZU5v
dGlmaWNhdGlvbikgeworICAgICAgICBtX2lzSGFuZGxpbmdEZWxldGVEYXRhYmFzZU5vdGlmaWNh
dGlvbiA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMoKTsKK30KKwor
dm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQ6OmRhdGFiYXNlT3JpZ2luV2FzRGVsZXRlZCgp
Cit7CisgICAgLy8gTG9ja3MgdGhlIFdlYlRocmVhZCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJ1biBs
b29wLgorICAgIFdlYlRocmVhZExvY2soKTsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIHRoZSBw
cm9jZXNzIHRoYXQgYWRkZWQgdGhlIG5ldyBvcmlnaW4sIGl0cyBxdW90YSBtYXAgc2hvdWxkIGhh
dmUgYmVlbiB1cGRhdGVkCisgICAgLy8gYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgaW52YWxpZGF0
ZWQuCisgICAgaWYgKG1faXNIYW5kbGluZ0RlbGV0ZURhdGFiYXNlT3JpZ2luTm90aWZpY2F0aW9u
KSB7CisgICAgICAgIG1faXNIYW5kbGluZ0RlbGV0ZURhdGFiYXNlT3JpZ2luTm90aWZpY2F0aW9u
ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkYXRhYmFzZU9yaWdpbnNE
aWRDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQ6OmRhdGFiYXNl
T3JpZ2luc0RpZENoYW5nZSgpCit7CisgICAgLy8gU2VuZCBhIG5vdGlmaWNhdGlvbiAod2l0aGlu
IHRoZSBhcHApIGFib3V0IHRoZSBvcmlnaW5zIGNoYW5nZS4gIElmIGFuIGFwcCBuZWVkcyB0byB1
cGRhdGUgaXRzIFVJIHdoZW4gdGhlIG9yaWdpbnMgY2hhbmdlCisgICAgLy8gKHN1Y2ggYXMgU2Fm
YXJpIFNldHRpbmdzKSwgaXQgY2FuIGxpc3RlbiBmb3IgdGhhdCBub3RpZmljYXRpb24uCisgICAg
Q0ZOb3RpZmljYXRpb25DZW50ZXJQb3N0Tm90aWZpY2F0aW9uKENGTm90aWZpY2F0aW9uQ2VudGVy
R2V0TG9jYWxDZW50ZXIoKSwgV2ViRGF0YWJhc2VPcmlnaW5zRGlkQ2hhbmdlTm90aWZpY2F0aW9u
LCAwLCAwLCB0cnVlKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlcklu
dGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlcklu
dGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc4Njg3NWRjNGFmZGQyMTJjNzU2ZjhmMmIzNzNlMDFhZmVk
YjlhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0
YWJhc2VNYW5hZ2VySW50ZXJuYWwuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViRGF0
YWJhc2VNYW5hZ2VyUHJpdmF0ZS5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lm
IFBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgV2ViRGF0YWJhc2VNYW5hZ2VyIChXZWJEYXRhYmFz
ZU1hbmFnZXJJbnRlcm5hbCkKKysgKHZvaWQpd2lsbEJlZ2luRmlyc3RUcmFuc2FjdGlvbjsKKysg
KHZvaWQpZGlkRmluaXNoTGFzdFRyYW5zYWN0aW9uOworKyAodm9pZClzdGFydEJhY2tncm91bmRU
YXNrOworKyAodm9pZCllbmRCYWNrZ3JvdW5kVGFzazsKK0BlbmQKKwordm9pZCBXZWJLaXRTZXRX
ZWJEYXRhYmFzZVBhdXNlZChib29sKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCmluZGV4IDEzMDg4MGNiYTBhMjVj
YWI3ZGQ4NmE5ZGJjMWJlMTBmNWZkOGU5NmEuLmJmMGU5MTIzZjE1OTU4ODNmMTMxM2ExOWFhMTE4
ZWY4Y2Q3OGYxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3Rv
cmFnZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdl
TWFuYWdlci5tbQpAQCAtNTAsNiArNTAsMTggQEAgKyAoV2ViU3RvcmFnZU1hbmFnZXIgKilzaGFy
ZWRXZWJTdG9yYWdlTWFuYWdlcgogICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOwogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorLSAoaWQpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFdlYktpdEluaXRpYWxpemVTdG9y
YWdlSWZOZWNlc3NhcnkoKTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKyNlbmRpZgorCiAt
IChOU0FycmF5ICopb3JpZ2lucwogewogICAgIFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
PiBjb3JlT3JpZ2luczsKQEAgLTcwLDYgKzgyLDExIEBAIC0gKE5TQXJyYXkgKilvcmlnaW5zCiAt
ICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnMKIHsKICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigp
LmRlbGV0ZUFsbE9yaWdpbnMoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFRo
aXMgbmVlZHMgdG8gYmUgcmVtb3ZlZCBvbmNlIFN0b3JhZ2VUcmFja2VycyBpbiBtdWx0aXBsZSBw
cm9jZXNzZXMKKyAgICAvLyBhcmUgaW4gc3luYzogPHJkYXI6Ly9wcm9ibGVtLzk1Njc1MDA+IFJl
bW92ZSBXZWJzaXRlIERhdGEgcGFuZSBpcyBub3Qga2VwdCBpbiBzeW5jIHdpdGggU2FmYXJpCisg
ICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRQYXRoOltXZWJT
dG9yYWdlTWFuYWdlciBfc3RvcmFnZURpcmVjdG9yeVBhdGhdIGVycm9yOk5VTExdOworI2VuZGlm
CiB9CiAKIC0gKHZvaWQpZGVsZXRlT3JpZ2luOihXZWJTZWN1cml0eU9yaWdpbiAqKW9yaWdpbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBh
bmVsLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwu
aAppbmRleCBjZjZjMmU0NDhhN2ViN2FkYzI3MjdjMWE3MTg4Y2Y1MmJiNDJiOWQyLi44OTNlNTc3
MDJkZDQ3OTAzOTNkOWM5NWU3NDE2ZTNhYzM5MDNkMjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaApAQCAtMjYsMTIgKzI2LDEy
IEBACiAjaWZuZGVmIENvcnJlY3Rpb25QYW5lbF9oCiAjZGVmaW5lIENvcnJlY3Rpb25QYW5lbF9o
CiAKKyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCisKICNpbXBvcnQgPEFwcEtpdC9OU1Nw
ZWxsQ2hlY2tlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRDbGllbnQuaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5F
TCkKLQogQGNsYXNzIFdlYlZpZXc7CiAKIGNsYXNzIENvcnJlY3Rpb25QYW5lbCB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBbHRlcm5hdGl2ZVRleHRD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFsdGVybmF0aXZl
VGV4dENsaWVudC5oCmluZGV4IDIyNmQxNWIwNmM0NWQ1MzhmNjA0NjBkNzM5OGMyOGRjYjk1YTAz
OTMuLmNlNGNjNzkzZGE1YTViM2NjMzFmMjM5Y2U2YzUxMWFkZTA3N2Y0NDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFsdGVybmF0aXZlVGV4dENsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFsdGVybmF0aXZl
VGV4dENsaWVudC5oCkBAIC00OSw3ICs0OSwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWZWN0
b3I8U3RyaW5nPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4
dCkgT1ZFUlJJREU7CiAjZW5kaWYKIHByaXZhdGU6CisjaWYgUExBVEZPUk0oSU9TKQorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNpZiBkZWZpbmVkKF9faGFzX3dhcm5pbmcpICYmIF9f
aGFzX3dhcm5pbmcoIi1XdW51c2VkLXByaXZhdGUtZmllbGQiKQorI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXByaXZhdGUtZmllbGQiCisjZW5kaWYKKyNlbmRpZgog
ICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKyNpZiBQTEFURk9STShJT1MpCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcG9wCisjZW5kaWYKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCiAg
ICAgQ29ycmVjdGlvblBhbmVsIG1fY29ycmVjdGlvblBhbmVsOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1t
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5t
bQppbmRleCA1OGE5ZDA2ZDkyNDlhOTY4YjI5OTgyYzlmZTRiMTY5ZWYzOTg1ZjlmLi40NGQ3ZWRh
MmNjNjM0OGUxYmU2ZmNkZTJkNzM4NjBiNjlkMDg1OTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0KQEAgLTMx
LDEwICszMSwzNCBAQAogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiV2ViS2l0
TlNTdHJpbmdFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVu
dC5oIgorI2ltcG9ydCA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuaD4KKyNlbmRpZgor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGltcGxlbWVudGF0aW9uIFdlYkFwcGxpY2F0
aW9uQ2FjaGUKIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBUaGlzIHdpbGwgYmUgcmVt
b3ZlZCB3aGVuIFdlYktpdEluaXRpYWxpemVBcHBsaWNhdGlvbkNhY2hlUGF0aElmTmVjZXNzYXJ5
KCkKKy8vIGlzIG1vdmVkIGZyb20gV2ViVmlldy5tbSB0byBXZWJLaXRJbml0aWFsaXplQXBwbGlj
YXRpb25DYWNoZUlmTmVjZXNzYXJ5KCkgaW4gdGhpcyBmaWxlLgorLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTY3IAorKyAodm9pZClpbml0aWFsaXplV2l0aEJ1
bmRsZUlkZW50aWZpZXI6KE5TU3RyaW5nICopYnVuZGxlSWRlbnRpZmllcgoreworICAgIHN0YXRp
YyBCT09MIGluaXRpYWxpemVkID0gTk87CisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQoV2ViU1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnQoKSk7CisKKyAgICBjYWNoZVN0b3JhZ2UoKS5zZXRDYWNoZURpcmVjdG9yeShbTlNTdHJp
bmcgX3dlYmtpdF9sb2NhbENhY2hlRGlyZWN0b3J5V2l0aEJ1bmRsZUlkZW50aWZpZXI6YnVuZGxl
SWRlbnRpZmllcl0pOworICAgIAorICAgIGluaXRpYWxpemVkID0gWUVTOworfQorI2VuZGlmCisK
ICsgKGxvbmcgbG9uZyltYXhpbXVtU2l6ZQogewogICAgIHJldHVybiBjYWNoZVN0b3JhZ2UoKS5t
YXhpbXVtU2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAppbmRleCA0NWRhOGViZjRmNjgwYmZmNTNiODIyMjdhYTQ1MmYwYzIx
MjQwMWI5Li43MDY2Y2RiNmU1ZjZmNTFlNWM0ZjUyMzYxN2U3ODliNGMyYTI5MzVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApA
QCAtMzEsNiArMzEsMTUgQEAKICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNEaXJlY3Rpb24uaD4KICNp
bXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDx3dGYv
UGxhdGZvcm0uaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9DaHJvbWUuaD4KKwordXNpbmcgV2ViQ29yZTo6TWVzc2FnZUxldmVsOwordXNpbmcgV2Vi
Q29yZTo6TWVzc2FnZVNvdXJjZTsKKyNlbmRpZgorCiBAY2xhc3MgV2ViVmlldzsKIAogY2xhc3Mg
V2ViQ2hyb21lQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNocm9tZUNsaWVudCB7CkBAIC0xMjMs
OCArMTMyLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdlYkNv
cmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmlu
Zz4mLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRlciopIE9WRVJSSURFOwogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYp
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCkgT1ZFUlJJREU7CisjZW5kaWYKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0KSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSos
IGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGJveFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgbGluZVJlY3QsIGJvb2wgYmVoaW5k
VGV4dCwgYm9vbCBlbnRpcmVMaW5lKSBPVkVSUklERTsKQEAgLTE2MywxMSArMTc0LDE0IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIFZpZGVvVHJpZ2dlciB8CiAgICAgICAgICAgICBQbHVnaW5Ucmln
Z2VyfCAKICAgICAgICAgICAgIENhbnZhc1RyaWdnZXIgfAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgICAgIEFuaW1hdGVkT3BhY2l0eVRyaWdnZXIgfCAvLyBBbGxvdyBvcGFjaXR5IGFuaW1h
dGlvbnMgdG8gdHJpZ2dlciBjb21wb3NpdGluZyBtb2RlIGZvciBpT1M6IDxyZGFyOi8vcHJvYmxl
bS83ODMwNjc3PgorI2VuZGlmCiAgICAgICAgICAgICBBbmltYXRpb25UcmlnZ2VyKTsKICAgICB9
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoVklERU8pICYmICFQTEFU
Rk9STShJT1MpCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29u
c3QgV2ViQ29yZTo6Tm9kZSopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxz
Y3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKSBPVkVSUklERTsKQEAgLTE4OCw3
ICsyMDIsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG51bVdoZWVsRXZlbnRIYW5k
bGVyc0NoYW5nZWQodW5zaWduZWQpIE9WRVJSSURFIHsgfQogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KKyNlbHNl
CiAgICAgV2ViVmlldyogd2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldzsgfQorI2VuZGlmCiAK
IHByaXZhdGU6CiAgICAgV2ViVmlldyAqbV93ZWJWaWV3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IDBlOTk2YWQ0NGJl
ZmI4MTg3YzNmY2RiYmQ2ZWVhY2UyZGY3ZWY1YjYuLjgzZWQ3OGU5YmFkMjUwYzhkYjYyZTc1MmEz
MjgyNGM2YTUzZjRmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTkyLDYgKzkyLDE3IEBACiAjaW1wb3J0ICJOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykgJiYg
RU5BQkxFKEdFT0xPQ0FUSU9OKQorI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbi5oPgorI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxXZWJDb3JlL0NvbnNvbGUuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvV0FLQ2xpcFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV0FLV2luZG93
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+CisjZW5kaWYKKwog
TlNTdHJpbmcgKldlYkNvbnNvbGVNZXNzYWdlWE1MTWVzc2FnZVNvdXJjZSA9IEAiWE1MTWVzc2Fn
ZVNvdXJjZSI7CiBOU1N0cmluZyAqV2ViQ29uc29sZU1lc3NhZ2VKU01lc3NhZ2VTb3VyY2UgPSBA
IkpTTWVzc2FnZVNvdXJjZSI7CiBOU1N0cmluZyAqV2ViQ29uc29sZU1lc3NhZ2VOZXR3b3JrTWVz
c2FnZVNvdXJjZSA9IEAiTmV0d29ya01lc3NhZ2VTb3VyY2UiOwpAQCAtMTA5LDkgKzEyMCwxMSBA
QCBOU1N0cmluZyAqV2ViQ29uc29sZU1lc3NhZ2VXYXJuaW5nTWVzc2FnZUxldmVsID0gQCJXYXJu
aW5nTWVzc2FnZUxldmVsIjsKIE5TU3RyaW5nICpXZWJDb25zb2xlTWVzc2FnZUVycm9yTWVzc2Fn
ZUxldmVsID0gQCJFcnJvck1lc3NhZ2VMZXZlbCI7CiAKIAorI2lmICFQTEFURk9STShJT1MpCiBA
aW50ZXJmYWNlIE5TQXBwbGljYXRpb24gKFdlYk5TQXBwbGljYXRpb25EZXRhaWxzKQogLSAoTlND
dXJzb3IgKilfY3Vyc29yUmVjdEN1cnNvcjsKIEBlbmQKKyNlbmRpZgogCiBAaW50ZXJmYWNlIE5T
VmlldyAoV2ViTlNWaWV3RGV0YWlscykKIC0gKE5TVmlldyAqKV9maW5kTGFzdFZpZXdJbktleVZp
ZXdMb29wOwpAQCAtMTIyLDkgKzEzNSwxMSBAQCBAaW50ZXJmYWNlIE5TVmlldyAoV2ViT2xkV2Vi
S2l0UGx1Z0luRGV0YWlscykKIC0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClpc1NlbGVjdGVk
OwogQGVuZAogCisjaWYgIVBMQVRGT1JNKElPUykKIEBpbnRlcmZhY2UgTlNXaW5kb3cgKEFwcEtp
dFNlY3JldHNJS25vd0Fib3V0KQogLSAoTlNSZWN0KV9ncm93Qm94UmVjdDsKIEBlbmQKKyNlbmRp
ZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CkBAIC0xNDQsMTQgKzE1OSwyMCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJv
eWVkKCkKIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNSZWN0IHdpbmRvd1JlY3Qg
PSB0b0RldmljZVNwYWNlKHJlY3QsIFttX3dlYlZpZXcgd2luZG93XSk7CiAgICAgW1ttX3dlYlZp
ZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNldEZyYW1lOndpbmRv
d1JlY3RdOworI2VuZGlmCiB9CiAKIEZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1Jl
Y3QoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBbW21f
d2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlld0ZyYW1lOm1fd2ViVmlld107CiAg
ICAgcmV0dXJuIHRvVXNlclNwYWNlKHdpbmRvd1JlY3QsIFttX3dlYlZpZXcgd2luZG93XSk7Cisj
ZWxzZQorICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyNlbmRpZgogfQogCiAvLyBGSVhNRTogV2Ug
bmVlZCB0byBhZGQgQVBJIGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoaXMuCkBAIC0xNzksNiAr
MjAwLDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OmNhblRha2VGb2N1cyhGb2N1c0RpcmVjdGlv
bikKIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24pCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoZGlyZWN0aW9uID09IEZvY3Vz
RGlyZWN0aW9uRm9yd2FyZCkgewogICAgICAgICAvLyBTaW5jZSB3ZSdyZSB0cnlpbmcgdG8gbW92
ZSBmb2N1cyBvdXQgb2YgbV93ZWJWaWV3LCBhbmQgYmVjYXVzZQogICAgICAgICAvLyBtX3dlYlZp
ZXcgbWF5IGNvbnRhaW4gc3Vidmlld3Mgd2l0aGluIGl0LCB3ZSBhc2sgaXQgZm9yIHRoZSBuZXh0
IGtleQpAQCAtMTk1LDYgKzIxNyw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp0YWtlRm9jdXMo
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBb
W21fd2ViVmlldyB3aW5kb3ddIHNlbGVjdEtleVZpZXdQcmVjZWRpbmdWaWV3Om1fd2ViVmlld107
CiAgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVu
dENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKQEAgLTM5Myw3ICs0MTYsMTggQEAgaW5saW5lIHN0
YXRpYyBOU1N0cmluZyAqc3RyaW5nRm9yTWVzc2FnZUxldmVsKE1lc3NhZ2VMZXZlbCBsZXZlbCkK
IAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNp
Z25lZCBpbnQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlkIGRlbGVnYXRlID0gW21f
d2ViVmlldyBVSURlbGVnYXRlXTsKKyNlbHNlCisgICAgaWYgKCFbbV93ZWJWaWV3IF9hbGxvd3NN
ZXNzYWdpbmddKQorICAgICAgICByZXR1cm47CisKKyAgICBpZCBkZWxlZ2F0ZSA9IFttX3dlYlZp
ZXcgX1VJS2l0RGVsZWdhdGVdOworICAgIC8vIE5vIGRlbGVnYXRlIG1lYW5zIG5vdGhpbmcgdG8g
c2VuZCB0aGlzIGRhdGEgdG8gc28gYmFpbC4KKyAgICBpZiAoIWRlbGVnYXRlKQorICAgICAgICBy
ZXR1cm47CisjZW5kaWYKKwogICAgIEJPT0wgcmVzcG9uZHNUb05ld1NlbGVjdG9yID0gTk87CiAK
ICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViVmlldzphZGRNZXNzYWdlVG9Db25zb2xl
OndpdGhTb3VyY2U6KTsKQEAgLTQxOCwxMCArNDUyLDE0IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50
OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwg
bGV2CiAgICAgICAgIHN0cmluZ0Zvck1lc3NhZ2VMZXZlbChsZXZlbCksIEAiTWVzc2FnZUxldmVs
IiwKICAgICAgICAgTlVMTF07CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgW1tbbV93ZWJWaWV3
IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBhc3luY0ZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZp
ZXcgYWRkTWVzc2FnZVRvQ29uc29sZTpkaWN0aW9uYXJ5IHdpdGhTb3VyY2U6bWVzc2FnZVNvdXJj
ZV07CisjZWxzZQogICAgIGlmIChyZXNwb25kc1RvTmV3U2VsZWN0b3IpCiAgICAgICAgIENhbGxV
SURlbGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IsIGRpY3Rpb25hcnksIG1lc3NhZ2VTb3VyY2Up
OwogICAgIGVsc2UKICAgICAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBzZWxlY3Rvciwg
ZGljdGlvbmFyeSk7CisjZW5kaWYKIAogICAgIFtkaWN0aW9uYXJ5IHJlbGVhc2VdOwogfQpAQCAt
NTI1LDcgKzU2MywxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0U3RhdHVzYmFyVGV4dChj
b25zdCBTdHJpbmcmIHN0YXR1cykKIAogSW50UmVjdCBXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1Jl
c2l6ZXJSZWN0KCkgY29uc3QKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KFtbbV93ZWJWaWV3IHdpbmRvd10gX2dyb3dCb3hSZWN0XSk7CisjZWxzZQor
ICAgIHJldHVybiBJbnRSZWN0KCk7CisjZW5kaWYKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6
OnN1cHBvcnRzSW1tZWRpYXRlSW52YWxpZGF0aW9uKCkKQEAgLTUzNSwxMCArNTc3LDE0IEBAIGJv
b2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c0ltbWVkaWF0ZUludmFsaWRhdGlvbigpCiAKIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlUm9vdFZpZXcoY29uc3QgSW50UmVjdCYsIGJv
b2wgaW1tZWRpYXRlKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKGltbWVkaWF0ZSkg
ewogICAgICAgICBbW21fd2ViVmlldyB3aW5kb3ddIGRpc3BsYXlJZk5lZWRlZF07CiAgICAgICAg
IFtbbV93ZWJWaWV3IHdpbmRvd10gZmx1c2hXaW5kb3dJZk5lZWRlZF07CiAgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oaW1tZWRpYXRlKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgcmVj
dCwgYm9vbCBpbW1lZGlhdGUpCkBAIC02MzgsMTEgKzY4NCwxMyBAQCB2b2lkIFdlYkNocm9tZUNs
aWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIFdlYlNlY3Vy
aXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdp
dGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46ZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCldOworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdvcmth
cm91bmQgb25jZSBzaGlwcGluZyBTYWZhcmkgaGFzIHRoZSBuZWNlc3NhcnkgZGVsZWdhdGUgaW1w
bGVtZW50ZWQuCiAgICAgaWYgKFdLQXBwVmVyc2lvbkNoZWNrTGVzc1RoYW4oQCJjb20uYXBwbGUu
U2FmYXJpIiwgLTEsIDMuMSkpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRl
ZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsgLy8gNSBtZWdhYnl0ZXMgc2hvdWxkIGhvcGVm
dWxseSBiZSBlbm91Z2ggdG8gdGVzdCBzdG9yYWdlIHN1cHBvcnQuCiAgICAgICAgIFtbd2ViT3Jp
Z2luIGRhdGFiYXNlUXVvdGFNYW5hZ2VyXSBzZXRRdW90YTpkZWZhdWx0UXVvdGFdOwogICAgIH0g
ZWxzZQorI2VuZGlmCiAgICAgICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9y
KHdlYlZpZXc6ZnJhbWU6ZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46ZGF0
YWJhc2U6KSwga2l0KGZyYW1lKSwgd2ViT3JpZ2luLCAoTlNTdHJpbmcgKilkYXRhYmFzZU5hbWUp
OwogICAgIFt3ZWJPcmlnaW4gcmVsZWFzZV07CiAKQEAgLTc1Nyw2ICs4MDUsNyBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6bG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzLCBGaWxlSWNvbgogICAgIGljb25Mb2FkZXItPm5vdGlmeUZpbmlzaGVkKEljb246OmNy
ZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiB2
b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vy
c29yKQogewogICAgIGlmIChbTlNBcHAgX2N1cnNvclJlY3RDdXJzb3JdKQpAQCAtNzcyLDYgKzgy
MSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCiB7CiAgICAgW05TQ3Vyc29yIHNldEhpZGRl
blVudGlsTW91c2VNb3ZlczpoaWRkZW5VbnRpbE1vdXNlTW92ZXNdOwogfQorI2VuZGlmCiAKIEtl
eWJvYXJkVUlNb2RlIFdlYkNocm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUoKQogewpAQCAtODAw
LDEyICs4NTAsMTYgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1ha2VGaXJzdFJlc3BvbmRlcihO
U1Jlc3BvbmRlciAqcmVzcG9uZGVyKQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZW5hYmxlU3Vk
ZGVuVGVybWluYXRpb24oKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgW1tOU1Byb2Nlc3NJ
bmZvIHByb2Nlc3NJbmZvXSBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbl07CisjZW5kaWYKIH0KIAog
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpCiB7CisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGRpc2FibGVT
dWRkZW5UZXJtaW5hdGlvbl07CisjZW5kaWYKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNo
b3VsZFJlcGxhY2VXaXRoR2VuZXJhdGVkRmlsZUZvclVwbG9hZChjb25zdCBTdHJpbmcmIHBhdGgs
IFN0cmluZyYgZ2VuZXJhdGVkRmlsZW5hbWUpCkBAIC04NTAsMTggKzkwNCwzMCBAQCBib29sIFdl
YkNocm9tZUNsaWVudDo6aGFzT3BlbmVkUG9wdXAoKSBjb25zdAogCiBQYXNzUmVmUHRyPFdlYkNv
cmU6OlBvcHVwTWVudT4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVQb3B1cE1lbnUoV2ViQ29yZTo6
UG9wdXBNZW51Q2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBvcHVwTWVudU1hYyhjbGllbnQpKTsKKyNlbHNlCisgICAg
cmV0dXJuIDA7CisjZW5kaWYKIH0KIAogUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1cE1l
bnU+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVw
TWVudUNsaWVudCogY2xpZW50KSBjb25zdAogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hQb3B1cE1lbnVNYWMoY2xpZW50KSk7CisjZWxzZQorICAg
IHJldHVybiAwOworI2VuZGlmCiB9CiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRQYWlu
dEVudGlyZUNvbnRlbnRzKCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IGZhbHNlOworI2Vsc2UKICAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbW21fd2ViVmlldyBt
YWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICByZXR1cm4gW2RvY3VtZW50
VmlldyBsYXllcl07CisjZW5kaWYKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKQEAgLTkwMSw3ICs5NjcsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKQogCiAjZW5kaWYKIAotI2lmIEVOQUJMRShWSURFTykKKyNpZiBF
TkFCTEUoVklERU8pICYmICFQTEFURk9STShJT1MpCiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojpz
dXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7CkBAIC05MzEsNyAr
OTk3LDExIEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVt
ZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wKICAgICBTRUwgc2VsZWN0b3IgPSBAc2Vs
ZWN0b3Iod2ViVmlldzpzdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVtZW50OndpdGhLZXlib2FyZDop
OwogICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6c2Vs
ZWN0b3JdKQogICAgICAgICByZXR1cm4gQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKGZh
bHNlLCBtX3dlYlZpZXcsIHNlbGVjdG9yLCBraXQoY29uc3RfY2FzdDxXZWJDb3JlOjpFbGVtZW50
Kj4oZWxlbWVudCkpLCB3aXRoS2V5Ym9hcmQpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0
dXJuIFttX3dlYlZpZXcgX3N1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQ6Y29uc3RfY2FzdDxX
ZWJDb3JlOjpFbGVtZW50Kj4oZWxlbWVudCkgd2l0aEtleWJvYXJkOndpdGhLZXlib2FyZF07Cisj
ZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6
ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQpAQCAtOTQxLDggKzEw
MTEsMTEgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCkKICAgICAgICAgV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyKiBsaXN0
ZW5lciA9IFtbV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyIGFsbG9jXSBpbml0V2l0aEVsZW1lbnQ6
ZWxlbWVudF07CiAgICAgICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IsIGtp
dChlbGVtZW50KSwgbGlzdGVuZXIpOwogICAgICAgICBbbGlzdGVuZXIgcmVsZWFzZV07Ci0gICAg
fSBlbHNlCisgICAgfQorI2lmICFQTEFURk9STShJT1MpCisgICAgZWxzZQogICAgICAgICBbbV93
ZWJWaWV3IF9lbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50OmVsZW1lbnRdOworI2VuZGlmCiB9CiAK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKQEAgLTk1Miw4ICsxMDI1LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0
RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgV2ViS2l0RnVs
bFNjcmVlbkxpc3RlbmVyKiBsaXN0ZW5lciA9IFtbV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyIGFs
bG9jXSBpbml0V2l0aEVsZW1lbnQ6ZWxlbWVudF07CiAgICAgICAgIENhbGxVSURlbGVnYXRlKG1f
d2ViVmlldywgc2VsZWN0b3IsIGtpdChlbGVtZW50KSwgbGlzdGVuZXIpOwogICAgICAgICBbbGlz
dGVuZXIgcmVsZWFzZV07Ci0gICAgfSBlbHNlCisgICAgfQorI2lmICFQTEFURk9STShJT1MpCisg
ICAgZWxzZQogICAgICAgICBbbV93ZWJWaWV3IF9leGl0RnVsbFNjcmVlbkZvckVsZW1lbnQ6ZWxl
bWVudF07CisjZW5kaWYKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmZ1bGxTY3JlZW5SZW5k
ZXJlckNoYW5nZWQoUmVuZGVyQm94KiByZW5kZXJlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggYjgz
MmU4ODIzNjY5ZWI5ODRjMjQ0Yzk1Y2QzMmMxOWFiOWRjODJhYy4uODViYTllYTBlZWI4M2RiNDY4
OTdkODhiNmI4YzRjMmQyNjVmZWVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTI2LDYgKzI2LDgg
QEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbXBvcnQgIldl
YkNvbnRleHRNZW51Q2xpZW50LmgiCiAKICNpbXBvcnQgIldlYkRlbGVnYXRlSW1wbGVtZW50YXRp
b25DYWNoaW5nLmgiCkBAIC0zNzEsMyArMzczLDUgQEAgdm9pZCBXZWJDb250ZXh0TWVudUNsaWVu
dDo6c2hvd0NvbnRleHRNZW51KCkKICAgICBpZiAobnNNZW51KQogICAgICAgICBbTlNNZW51IHBv
cFVwQ29udGV4dE1lbnU6bnNNZW51IHdpdGhFdmVudDpldmVudCBmb3JWaWV3OnZpZXddOwogfQor
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggYzk2MDcxYzc3ZTI0ZmU1YTEyZWFm
MmVhMTZkNzg4MThiZTdhM2RjMy4uYzczMDU5MDk3NDFlOGM1YzRmM2Y1Nzk5MDFiZGJjNjNiOGNi
YmE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgKQEAgLTQyLDExICs0MiwyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vi
RWRpdG9yQ2xpZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKSBPVkVSUklE
RTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCBib29sIGlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVHcmFtbWFyQ2hl
Y2tpbmcoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGludW91
c1NwZWxsQ2hlY2tpbmcoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGludCBzcGVsbENoZWNrZXJE
b2N1bWVudFRhZygpIE9WRVJSSURFOworI2Vsc2UKKyAgICB2aXJ0dWFsIGJvb2wgaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgT1ZFUlJJREUgeyB9CisgICAgLy8gTm90ZTog
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBpcyBpbXBsZW1lbnRlZC4KKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKSBPVkVSUklE
RSB7IH0KKyAgICB2aXJ0dWFsIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIE9WRVJSSURF
IHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoKSBPVkVSUklERTsKQEAgLTEyNyw3ICsxMzYsMjMgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoV2ViQ29yZTo6
RWxlbWVudCosIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHZvaWQgdGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChXZWJDb3JlOjpFbGVtZW50KikgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKFdlYkNvcmU6
OkVsZW1lbnQqKSBPVkVSUklERTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIHZv
aWQgc3VwcHJlc3NTZWxlY3Rpb25Ob3RpZmljYXRpb25zKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHJlc3RvcmVTZWxlY3Rpb25Ob3RpZmljYXRpb25zKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHN0YXJ0RGVsYXlpbmdBbmRDb2FsZXNjaW5nQ29udGVudENoYW5nZU5vdGlmaWNh
dGlvbnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcERlbGF5aW5nQW5kQ29hbGVz
Y2luZ0NvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb25zKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHdyaXRlRGF0YVRvUGFzdGVib2FyZChOU0RpY3Rpb25hcnkqKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIE5TQXJyYXkqIHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rp
b24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE5TQXJyYXkqIHJlYWREYXRhRnJvbVBhc3RlYm9h
cmQoTlNTdHJpbmcqIHR5cGUsIGludCBpbmRleCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGhhc1JpY2hseUVkaXRhYmxlU2VsZWN0aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQg
Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkRvY3VtZW50RnJhZ21lbnQqIGRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaW50IGluZGV4
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybXNUd29TdGVwUGFzdGUoV2ViQ29y
ZTo6RG9jdW1lbnRGcmFnbWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHBhc3RlYm9h
cmRDaGFuZ2VDb3VudCgpIE9WRVJSSURFOworI2VuZGlmCiAgICAgCisjaWYgIVBMQVRGT1JNKElP
UykKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rp
b24oV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZSkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV1RGOjpTdHJpbmcmKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFdURjo6U3RyaW5nJikgT1ZF
UlJJREU7CkBAIC0xNDAsNiArMTY1LDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2hv
d1NwZWxsaW5nVUkoYm9vbCBzaG93KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc3BlbGxp
bmdVSUlzU2hvd2luZygpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9y
V29yZChjb25zdCBXVEY6OlN0cmluZyYgd29yZCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRleHQs
IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3NlcykgT1ZFUlJJREU7CisjZWxzZQorICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV1RGOjpTdHJp
bmcmKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFdURjo6
U3RyaW5nJikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0
cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwg
aW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBXVEY6OlN0
cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBXVEY6
OlN0cmluZyYpIE9WRVJSSURFIHsgcmV0dXJuICIiOyB9CisgICAgdmlydHVhbCB2b2lkIGNoZWNr
R3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgV1RGOjpWZWN0b3I8V2Vi
Q29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRH
cmFtbWFyTGVuZ3RoKSBPVkVSUklERSB7IH0KKyAgICAvLyBOb3RlOiBjaGVja1RleHRPZlBhcmFn
cmFwaCgpIGlzIGltcGxlbWVudGVkLiAKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFdURjo6VmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdD4mIHJlc3VsdHMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXZWJDb3Jl
OjpHcmFtbWFyRGV0YWlsJikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgV1RGOjpTdHJpbmcmKSBPVkVSUklERSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBPVkVSUklERSB7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIE9WRVJSSURFIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFdU
Rjo6U3RyaW5nJiB3b3JkLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGV4dCwgV1RGOjpWZWN0b3I8
V1RGOjpTdHJpbmc+JiBndWVzc2VzKSBPVkVSUklERSB7IH0KKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0
cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PikgT1ZFUlJJREU7CkBAIC0xNTQsNCArMTk0
LDkgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8V2ViRWRpdG9yVW5kb1RhcmdldD4gbV91bmRv
VGFyZ2V0OwogICAgIGJvb2wgbV9oYXZlVW5kb1JlZG9PcGVyYXRpb25zOwogICAgIFJlZlB0cjxX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiBtX3RleHRDaGVja2luZ1JlcXVlc3Q7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIGludCBtX3NlbGVjdGlvbk5vdGlmaWNhdGlvblN1cHByZXNzaW9u
czsKKyAgICBib29sIG1fZGVsYXlpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0aW9uczsKKyAgICBi
b29sIG1faGFzRGVsYXllZENvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb247CisjZW5kaWYKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0KaW5kZXggZjA4NjdjMWYyMTYwY2NhMzBlZGQ0YTI0MTIyOWRlMjU1Nzc4NDljOC4uYjJiNTE1
NWE2YjJkZDI0MjY1YWU5ZWExMzRmMGM2MjY2ZjgwODVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtNzMsMTMgKzcz
LDIyIEBACiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRNZXNzYWdlLmg+CisjaW1wb3J0ICJET01FbGVtZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldl
YkZyYW1lVmlldy5oIgorI2ltcG9ydCAiV2ViVUlLaXREZWxlZ2F0ZS5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCisj
aWYgIVBMQVRGT1JNKElPUykKIEBpbnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKFdlYk5TU3BlbGxD
aGVja2VyRGV0YWlscykKIC0gKE5TU3RyaW5nICopbGFuZ3VhZ2VGb3JXb3JkUmFuZ2U6KE5TUmFu
Z2UpcmFuZ2UgaW5TdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG9ydGhvZ3JhcGh5OihOU09ydGhv
Z3JhcGh5ICopb3J0aG9ncmFwaHk7CiBAZW5kCisjZW5kaWYKIAogQGludGVyZmFjZSBOU0F0dHJp
YnV0ZWRTdHJpbmcgKFdlYk5TQXR0cmlidXRlZFN0cmluZ0RldGFpbHMpCiAtIChpZClfaW5pdFdp
dGhET01SYW5nZTooRE9NUmFuZ2UqKXJhbmdlOwpAQCAtMTA1LDkgKzExNCwxMSBAQCBAaW1wbGVt
ZW50YXRpb24gV2ViVW5kb1N0ZXAKIAogKyAodm9pZClpbml0aWFsaXplCiB7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBXVEY6OmluaXRp
YWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZCgpOwogICAgIFJ1bkxvb3A6OmluaXRp
YWxpemVNYWluUnVuTG9vcCgpOworI2VuZGlmCiAgICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFp
blRocmVhZChzZWxmKTsKIH0KIApAQCAtMTgyLDYgKzE5MywxMSBAQCBXZWJFZGl0b3JDbGllbnQ6
OldlYkVkaXRvckNsaWVudChXZWJWaWV3ICp3ZWJWaWV3KQogICAgIDogbV93ZWJWaWV3KHdlYlZp
ZXcpCiAgICAgLCBtX3VuZG9UYXJnZXQoW1tbV2ViRWRpdG9yVW5kb1RhcmdldCBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdKQogICAgICwgbV9oYXZlVW5kb1JlZG9PcGVyYXRpb25zKGZhbHNlKQor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2VsZWN0aW9uTm90aWZpY2F0aW9uU3VwcHJlc3Np
b25zKDApCisgICAgLCBtX2RlbGF5aW5nQ29udGVudENoYW5nZU5vdGlmaWNhdGlvbnMoMCkKKyAg
ICAsIG1faGFzRGVsYXllZENvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb24oMCkKKyNlbmRpZgogewog
fQogCkBAIC0xOTQsNiArMjEwLDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKICAgICByZXR1cm4gW21fd2ViVmlldyBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZF07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKIHsKICAgICBb
bV93ZWJWaWV3IHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nOm5pbF07CkBAIC0yMTMsNiAr
MjMwLDcgQEAgaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKQog
ewogICAgIHJldHVybiBbbV93ZWJWaWV3IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnXTsKIH0KKyNl
bmRpZgogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJh
bmdlKQogewpAQCAtMjg0LDE1ICszMDIsNDQgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2UKIAog
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZygpCiB7CisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3Rp
ZmljYXRpb25OYW1lOldlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24gb2JqZWN0Om1f
d2ViVmlld107CisjZWxzZQorICAgIFdlYlRocmVhZFBvc3ROb3RpZmljYXRpb24oV2ViVmlld0Rp
ZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbiwgbV93ZWJWaWV3LCBuaWwpOworI2VuZGlmCiB9CiAK
KyNpZiBQTEFURk9STShJT1MpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6c3RhcnREZWxheWluZ0Fu
ZENvYWxlc2NpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0aW9ucygpCit7CisgICAgbV9kZWxheWlu
Z0NvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb25zID0gdHJ1ZTsKK30KKwordm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnN0b3BEZWxheWluZ0FuZENvYWxlc2NpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0aW9u
cygpCit7CisgICAgbV9kZWxheWluZ0NvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb25zID0gZmFsc2U7
CisgICAgCisgICAgaWYgKG1faGFzRGVsYXllZENvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb24pCisg
ICAgICAgIHRoaXMtPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOworICAgIAorICAgIG1faGFz
RGVsYXllZENvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb24gPSBmYWxzZTsKK30KKyNlbmRpZgorCiB2
b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKIHsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqdmlldyA9IFtbW21f
d2ViVmlldyBzZWxlY3RlZEZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgaWYg
KFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCiAgICAgICAgIFsoV2Vi
SFRNTFZpZXcgKil2aWV3IF91cGRhdGVGb250UGFuZWxdOwogICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViVmlld0RpZENoYW5n
ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV93ZWJWaWV3XTsgICAgCisjZWxzZQorICAgIGlmIChtX2Rl
bGF5aW5nQ29udGVudENoYW5nZU5vdGlmaWNhdGlvbnMpIHsKKyAgICAgICAgbV9oYXNEZWxheWVk
Q29udGVudENoYW5nZU5vdGlmaWNhdGlvbiA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
V2ViVGhyZWFkUG9zdE5vdGlmaWNhdGlvbihXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uLCBt
X3dlYlZpZXcsIG5pbCk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKQEAgLTMwMSwyMSArMzQ4
LDM0IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKEZy
YW1lKiBmcmFtZSkKICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1M
VmlldyBjbGFzc11dKQogICAgICAgICBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9zZWxl
Y3Rpb25DaGFuZ2VkXTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6IFRoaXMg
cXVpcmsgaXMgbmVlZGVkIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vNTAwOTYyNT4gLSBXZSBjYW4g
cGhhc2UgaXQgb3V0IG9uY2UgQXBlcnR1cmUgY2FuIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igb24g
dGhlaXIgZW5kCiAgICAgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZF
UlNJT05fV0lUSE9VVF9BUEVSVFVSRV9RVUlSSykgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
YnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLkFwZXJ0dXJlIl0p
CiAgICAgICAgIHJldHVybjsKIAogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlm
aWNhdGlvbiBvYmplY3Q6bV93ZWJWaWV3XTsKKyNlbHNlCisgICAgLy8gU2VsZWN0aW9uIGNhbiBi
ZSBjaGFuZ2VkIHdoaWxlIGRlYWxsb2NhdGluZyBkb3duIHRoZSBXZWJWaWV3IC8gRnJhbWUgLyBF
ZGl0b3IuICBEbyBub3QgcG9zdCBpbiB0aGF0IGNhc2UgYmVjYXVzZSBpdCdzIGFscmVhZHkgdG9v
IGxhdGUKKyAgICAvLyBmb3IgdGhlIE5TSW52b2NhdGlvbiB0byByZXRhaW4gdGhlIFdlYlZpZXcu
CisgICAgaWYgKCFbbV93ZWJWaWV3IF9pc0Nsb3NpbmddICYmIG1fc2VsZWN0aW9uTm90aWZpY2F0
aW9uU3VwcHJlc3Npb25zID09IDApCisgICAgICAgIFdlYlRocmVhZFBvc3ROb3RpZmljYXRpb24o
V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbiwgbV93ZWJWaWV3LCBuaWwpOwor
I2VuZGlmCiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb24g
b2JqZWN0Om1fd2ViVmlld107CisjZWxzZQorICAgIFdlYlRocmVhZFBvc3ROb3RpZmljYXRpb24o
V2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb24sIG1fd2ViVmlldywgbmlsKTsKKyNlbmRp
ZgogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxl
Z2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF1dOworI2VuZGlmCiB9CiAKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29y
ZTo6UmFuZ2UqKQpAQCAtMzYzLDYgKzQyMywxMCBAQCBzdGF0aWMgTlNBcnJheSAqY3JlYXRlRXhj
bHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkKICAgICByZXR1cm4g
ZWxlbWVudHM7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgTlNTdHJpbmcgKk5TRXhj
bHVkZWRFbGVtZW50c0RvY3VtZW50QXR0cmlidXRlID0gQCJFeGNsdWRlZEVsZW1lbnRzIjsKKyNl
bmRpZgorCiBEb2N1bWVudEZyYWdtZW50KiBXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21l
bnRGcm9tQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9y
PFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+PiYgcmVzb3VyY2VzKQogewogICAgIHN0YXRpYyBOU0Fy
cmF5ICpleGNsdWRlZEVsZW1lbnRzID0gY3JlYXRlRXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0
ZWRTdHJpbmdDb252ZXJzaW9uKCk7CkBAIC0zODIsOCArNDQ2LDEwIEBAIERvY3VtZW50RnJhZ21l
bnQqIFdlYkVkaXRvckNsaWVudDo6ZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5n
KE5TQXR0cmliCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJbnNlcnRpb25QYXN0ZWJvYXJk
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCkgPyBu
aWwgOiBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpwYXN0ZWJvYXJkTmFtZV07CiAg
ICAgW21fd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyNlbmRp
ZgogfQogCiAjaWYgVVNFKEFQUEtJVCkKQEAgLTUyMSw2ICs1ODcsMTAgQEAgc3RhdGljIE5TU3Ry
aW5nKiB1bmRvTmFtZUZvckVkaXRBY3Rpb24oRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQogICAgICAg
ICBjYXNlIEVkaXRBY3Rpb25PdXRkZW50OiByZXR1cm4gVUlfU1RSSU5HX0tFWV9JTlRFUk5BTCgi
T3V0ZGVudCIsICJPdXRkZW50IChVbmRvIGFjdGlvbiBuYW1lKSIsICJVbmRvIGFjdGlvbiBuYW1l
Iik7CiAgICAgICAgIGNhc2UgRWRpdEFjdGlvbkJvbGQ6IHJldHVybiBVSV9TVFJJTkdfS0VZX0lO
VEVSTkFMKCJCb2xkIiwgIkJvbGQgKFVuZG8gYWN0aW9uIG5hbWUpIiwgIlVuZG8gYWN0aW9uIG5h
bWUiKTsKICAgICAgICAgY2FzZSBFZGl0QWN0aW9uSXRhbGljczogcmV0dXJuIFVJX1NUUklOR19L
RVlfSU5URVJOQUwoIkl0YWxpY3MiLCAiSXRhbGljcyAoVW5kbyBhY3Rpb24gbmFtZSkiLCAiVW5k
byBhY3Rpb24gbmFtZSIpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgY2FzZSBFZGl0QWN0
aW9uRGVsZXRlOiByZXR1cm4gVUlfU1RSSU5HX0tFWV9JTlRFUk5BTCgiRGVsZXRlIiwgIkRlbGV0
ZSAoVW5kbyBhY3Rpb24gbmFtZSkiLCAiVW5kbyBhY3Rpb24gbmFtZSAoVXNlZCBvbmx5IGJ5IFBM
QVRGT1JNKElPUykgY29kZSkiKTsKKyAgICAgICAgY2FzZSBFZGl0QWN0aW9uRGljdGF0aW9uOiBy
ZXR1cm4gVUlfU1RSSU5HX0tFWV9JTlRFUk5BTCgiRGljdGF0aW9uIiwgIkRpY3RhdGlvbiAoVW5k
byBhY3Rpb24gbmFtZSkiLCAiVW5kbyBhY3Rpb24gbmFtZSAoVXNlZCBvbmx5IGJ5IFBMQVRGT1JN
KElPUykgY29kZSkiKTsKKyNlbmRpZgogICAgIH0KICAgICByZXR1cm4gbmlsOwogfQpAQCAtNTMw
LDYgKzYwMCwxMyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvT3JSZWRvU3Rl
cChQYXNzUmVmUHRyPFVuZG9TdGVwPiBzdGVwLCBib29sIGlzUgogICAgIEFTU0VSVChzdGVwKTsK
ICAgICAKICAgICBOU1VuZG9NYW5hZ2VyICp1bmRvTWFuYWdlciA9IFttX3dlYlZpZXcgdW5kb01h
bmFnZXJdOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBXaGlsZSB3ZSBhcmUgdW5kb2luZywg
d2Ugc2hvdWxkbid0IGJlIGFza2VkIHRvIHJlZ2lzdGVyIGFub3RoZXIgVW5kbyBvcGVyYXRpb24s
IHdlIHNob3VsZG4ndCBldmVuIGJlIHRvdWNoaW5nIHRoZSBET00uICBCdXQKKyAgICAvLyBqdXN0
IGluIGNhc2UgdGhpcyBoYXBwZW5zLCByZXR1cm4gdG8gYXZvaWQgcHV0dGluZyB0aGUgdW5kbyBt
YW5hZ2VyIGludG8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiAgU2FtZSBmb3IgYmVpbmcKKyAgICAv
LyBhc2tlZCB0byByZWdpc3RlciBhIFJlZG8gb3BlcmF0aW9uIGluIHRoZSBtaWRzdCBvZiBhbm90
aGVyIFJlZG8uCisgICAgaWYgKChbdW5kb01hbmFnZXIgaXNVbmRvaW5nXSAmJiAhaXNSZWRvKSB8
fCAoW3VuZG9NYW5hZ2VyIGlzUmVkb2luZ10gJiYgaXNSZWRvKSkKKyAgICAgICAgcmV0dXJuOwor
I2VuZGlmCiAgICAgTlNTdHJpbmcgKmFjdGlvbk5hbWUgPSB1bmRvTmFtZUZvckVkaXRBY3Rpb24o
c3RlcC0+ZWRpdGluZ0FjdGlvbigpKTsKICAgICBXZWJVbmRvU3RlcCAqd2ViRW50cnkgPSBbV2Vi
VW5kb1N0ZXAgc3RlcFdpdGhVbmRvU3RlcDpzdGVwXTsKICAgICBbdW5kb01hbmFnZXIgcmVnaXN0
ZXJVbmRvV2l0aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0KCkgc2VsZWN0b3I6KGlzUmVkbyA/IEBz
ZWxlY3RvcihyZWRvRWRpdGluZzopIDogQHNlbGVjdG9yKHVuZG9FZGl0aW5nOikpIG9iamVjdDp3
ZWJFbnRyeV07CkBAIC02MDMsMTcgKzY4MCwyNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVk
bygpCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50KiBldmVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9k
ZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBXZWJIVE1M
VmlldyAqd2ViSFRNTFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXdd
OwogICAgIGlmIChbd2ViSFRNTFZpZXcgX2ludGVycHJldEtleUV2ZW50OmV2ZW50IHNhdmluZ0Nv
bW1hbmRzOk5PXSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisjZWxzZQor
ICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKVtba2l0KGZyYW1l
KSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYgKFt3ZWJIVE1MVmlldyBfaGFuZGxl
RWRpdGluZ0tleUV2ZW50OmV2ZW50XSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9k
S2V5ZG93bihLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IEZyYW1lKiBmcmFtZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCktPmRvY3VtZW50KCkuZnJh
bWUoKTsKICAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVW
aWV3XSBkb2N1bWVudFZpZXddOwogICAgIGlmIChbd2ViSFRNTFZpZXcgX2ludGVycHJldEtleUV2
ZW50OmV2ZW50IHNhdmluZ0NvbW1hbmRzOllFU10pCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworI2Vsc2UKKyAgICAvLyBpT1MgZG9lcyBub3QgdXNlIGlucHV0IG1hbmFnZXIg
dGhpcyB3YXkKKyNlbmRpZgogfQogCiAjZGVmaW5lIEZvcm1EZWxlZ2F0ZUxvZyhjdHJsKSAgTE9H
KEZvcm1EZWxlZ2F0ZSwgImNvbnRyb2w9JUAiLCBjdHJsKQpAQCAtNjQzLDggKzczMCwxMCBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVs
ZW1lbnQpCiAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJl
dHVybjsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFVc2VyVHlwaW5nR2VzdHVyZUlu
ZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJUeXBpbmdHZXN0dXJlKCkgfHwgVXNlclR5cGluZ0dlc3R1
cmVJbmRpY2F0b3I6OmZvY3VzZWRFbGVtZW50QXRHZXN0dXJlU3RhcnQoKSAhPSBlbGVtZW50KQog
ICAgICAgICByZXR1cm47CisjZW5kaWYKIAogICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IGtpdCh0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpOwogICAgIEZvcm1EZWxl
Z2F0ZUxvZyhpbnB1dEVsZW1lbnQpOwpAQCAtNzA3LDYgKzc5NiwxMDMgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAg
Q2FsbEZvcm1EZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih0ZXh0RGlkQ2hhbmdlSW5UZXh0
QXJlYTppbkZyYW1lOiksIHRleHRBcmVhRWxlbWVudCwga2l0KGVsZW1lbnQtPmRvY3VtZW50KCku
ZnJhbWUoKSkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnN1cHByZXNzU2VsZWN0aW9uTm90aWZpY2F0aW9ucygpIAoreworICAgIG1fc2VsZWN0aW9uTm90
aWZpY2F0aW9uU3VwcHJlc3Npb25zKys7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXN0
b3JlU2VsZWN0aW9uTm90aWZpY2F0aW9ucygpIAoreworICAgIG1fc2VsZWN0aW9uTm90aWZpY2F0
aW9uU3VwcHJlc3Npb25zLS07CisgICAgaWYgKG1fc2VsZWN0aW9uTm90aWZpY2F0aW9uU3VwcHJl
c3Npb25zIDwgMCkKKyAgICAgICAgbV9zZWxlY3Rpb25Ob3RpZmljYXRpb25TdXBwcmVzc2lvbnMg
PSAwOworfQorCit2b2lkIFdlYkVkaXRvckNsaWVudDo6d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKE5T
RGljdGlvbmFyeSogcmVwcmVzZW50YXRpb24pCit7CisgICAgaWYgKFtbbV93ZWJWaWV3IF9VSUtp
dERlbGVnYXRlRm9yd2FyZGVyXSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdyaXRlRGF0
YVRvUGFzdGVib2FyZDopXSkKKyAgICAgICAgW1ttX3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3
YXJkZXJdIHdyaXRlRGF0YVRvUGFzdGVib2FyZDpyZXByZXNlbnRhdGlvbl07Cit9CisKK05TQXJy
YXkqIFdlYkVkaXRvckNsaWVudDo6c3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzRm9yQ3VycmVudFNl
bGVjdGlvbigpIAoreworICAgIGlmIChbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRl
cl0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzdXBwb3J0ZWRQYXN0ZWJvYXJkVHlwZXNG
b3JDdXJyZW50U2VsZWN0aW9uKV0pIAorICAgICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX1VJS2l0
RGVsZWdhdGVGb3J3YXJkZXJdIHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxl
Y3Rpb25dOyAKKworICAgIHJldHVybiBuaWw7IAorfQorCitOU0FycmF5KiBXZWJFZGl0b3JDbGll
bnQ6OnJlYWREYXRhRnJvbVBhc3RlYm9hcmQoTlNTdHJpbmcqIHR5cGUsIGludCBpbmRleCkKK3sK
KyAgICBpZiAoW1ttX3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IocmVhZERhdGFGcm9tUGFzdGVib2FyZDp3aXRoSW5kZXg6KV0pCisg
ICAgICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gcmVhZERh
dGFGcm9tUGFzdGVib2FyZDp0eXBlIHdpdGhJbmRleDppbmRleF07CisgICAgCisgICAgcmV0dXJu
IG5pbDsKK30KKworYm9vbCBXZWJFZGl0b3JDbGllbnQ6Omhhc1JpY2hseUVkaXRhYmxlU2VsZWN0
aW9uKCkKK3sKKyAgICBpZiAoW1ttX3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24pXSkK
KyAgICAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBoYXNS
aWNobHlFZGl0YWJsZVNlbGVjdGlvbl07CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitp
bnQgV2ViRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpCit7CisgICAgaWYg
KFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGdldFBhc3RlYm9hcmRJdGVtc0NvdW50KV0pCisgICAgICAgIHJldHVybiBbW21f
d2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gZ2V0UGFzdGVib2FyZEl0ZW1zQ291bnRd
OworICAgIAorICAgIHJldHVybiAwOworfQorCitXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBX
ZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaW50IGluZGV4KQor
eworICAgIGlmIChbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJkSXRlbUF0
SW5kZXg6KV0pIHsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnRGcm9tRGVs
ZWdhdGUgPSBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSBkb2N1bWVudEZy
YWdtZW50Rm9yUGFzdGVib2FyZEl0ZW1BdEluZGV4OmluZGV4XTsKKyAgICAgICAgaWYgKGZyYWdt
ZW50RnJvbURlbGVnYXRlKQorICAgICAgICAgICAgcmV0dXJuIGNvcmUoZnJhZ21lbnRGcm9tRGVs
ZWdhdGUpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnBlcmZvcm1zVHdvU3RlcFBhc3RlKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGZy
YWdtZW50KQoreworICAgIGlmIChbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0g
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwZXJmb3Jtc1R3b1N0ZXBQYXN0ZTopXSkKKyAg
ICAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBwZXJmb3Jt
c1R3b1N0ZXBQYXN0ZTpraXQoZnJhZ21lbnQpXTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
aW50IFdlYkVkaXRvckNsaWVudDo6cGFzdGVib2FyZENoYW5nZUNvdW50KCkKK3sKKyAgICBpZiAo
W1ttX3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50KV0pCisgICAgICAgIHJldHVybiBbW21f
d2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50
XTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cykKK3sKKyAgICBBU1NFUlQoY2hlY2tpbmdUeXBlcyAmIE5TVGV4dENoZWNraW5nVHlwZVNw
ZWxsaW5nKTsKKyAgICBOU1N0cmluZyAqdGV4dFN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0PFVDaGFyKj4odGV4dCkgbGVuZ3RoOmxl
bmd0aCBmcmVlV2hlbkRvbmU6Tk9dOworICAgIE5TQXJyYXkgKmluY29taW5nUmVzdWx0cyA9IFtb
bV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBjaGVja1NwZWxsaW5nT2ZTdHJpbmc6
dGV4dFN0cmluZ107CisgICAgW3RleHRTdHJpbmcgcmVsZWFzZV07CisgICAgZm9yIChOU1ZhbHVl
ICppbmNvbWluZ1Jlc3VsdCBpbiBpbmNvbWluZ1Jlc3VsdHMpIHsKKyAgICAgICAgTlNSYW5nZSBy
ZXN1bHRSYW5nZSA9IFtpbmNvbWluZ1Jlc3VsdCByYW5nZVZhbHVlXTsKKyAgICAgICAgQVNTRVJU
KHJlc3VsdFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQgJiYgcmVzdWx0UmFuZ2UubGVuZ3Ro
ID4gMCk7CisgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOworICAgICAgICByZXN1bHQubG9jYXRp
b24gPSByZXN1bHRSYW5nZS5sb2NhdGlvbjsKKyAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IHJlc3Vs
dFJhbmdlLmxlbmd0aDsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICB9Cit9
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCisjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0
Q2hlY2tpbmdUeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBwcmV2ZW50cyBlcmFzaW5n
IHNwZWxsaW5nIG1hcmtlcnMgb24gT1MgWCBMaW9uIG9yIGxhdGVyIHRvIG1hdGNoIEFwcEtpdCBv
biB0aGVzZSBNYWMgT1MgWCB2ZXJzaW9ucy4KQEAgLTkxNiw2ICsxMTAyLDcgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3Qg
U3RyaW5nJiBjb250ZXgKICAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKHN0cmluZyk7CiAgICAg
fQogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3
aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpCiB7CkBAIC05MjUsNiArMTExMiw3IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wpCiB7CiB9CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogQGludGVyZmFjZSBXZWJFZGl0b3JTcGVsbENoZWNrUmVzcG9uZGVyIDogTlNP
YmplY3QKIHsKICAgICBXZWJFZGl0b3JDbGllbnQqIF9jbGllbnQ7CkBAIC05NjAsOSArMTE0OCwx
MSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQ2hlY2tTdWNjZWVkKGludCBzZXF1ZW5jZSwg
TlNBcnJheSogcmVzdWx0cykKICAgICBtX3RleHRDaGVja2luZ1JlcXVlc3QtPmRpZFN1Y2NlZWQo
Y29yZShyZXN1bHRzLCBtX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEoKS5tYXNrKCkpKTsKICAg
ICBtX3RleHRDaGVja2luZ1JlcXVlc3QuY2xlYXIoKTsKIH0KKyNlbmRpZgogCiB2b2lkIFdlYkVk
aXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0KQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAg
QVNTRVJUKCFtX3RleHRDaGVja2luZ1JlcXVlc3QpOwogICAgIG1fdGV4dENoZWNraW5nUmVxdWVz
dCA9IHJlcXVlc3Q7CiAKQEAgLTk3NSw0ICsxMTY1LDUgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5n
UmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6W1tbV2ViRWRpdG9y
U3BlbGxDaGVja1Jlc3BvbmRlciBhbGxvY10gaW5pdFdpdGhDbGllbnQ6dGhpcyBzZXF1ZW5jZTpz
ZXF1ZW5jZSByZXN1bHRzOnJlc3VsdHNdIGF1dG9yZWxlYXNlXQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudDpuaWwgb3JkZXI6MCBtb2RlczpbTlNBcnJheSBhcnJheVdp
dGhPYmplY3Q6TlNEZWZhdWx0UnVuTG9vcE1vZGVdXTsKICAgICAgICAgfV07CisjZW5kaWYKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5oCmluZGV4IDExYzc0NmRkZTQzYWExMjgxNDcyY2NiYTJlMzU0ZGZjNjI1Y2Q1
NzkuLjhhZjdjODdjNDRiYzNlMmQxMzlkMjlkMjdkZGQ0NWYxZGU2NzdmNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuaApAQCAtNjMsNiArNjMsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBtYWtlUmVw
cmVzZW50YXRpb24oV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIGJvb2wgaGFzSFRNTFZpZXcoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
Zm9yY2VMYXlvdXQoKSBPVkVSUklERTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2
b2lkIGZvcmNlTGF5b3V0V2l0aG91dFJlY2FsY3VsYXRpbmdTdHlsZXMoKSBPVkVSUklERTsKKyNl
bmRpZgogICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dEZvck5vbkhUTUwoKSBPVkVSUklERTsK
IAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb3BpZXNPblNjcm9sbCgpIE9WRVJSSURFOwpAQCAtODEs
NiArODQsMTEgQEAgcHJpdmF0ZToKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExC
QUNLKQogICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKSBPVkVSUklERTsKICNlbmRpZgorCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29u
bmVjdGlvblByb3BlcnRpZXMoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIpIE9WRVJSSURFOworI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChXZWJD
b3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGRhdGFM
ZW5ndGgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRp
bmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpIE9W
RVJSSURFOwpAQCAtMTI2LDExICsxMzQsMTcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TWFpbkRvY3VtZW50RXJyb3IoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYsIGludCBsZW5ndGgpIE9WRVJSSURFOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZUVzdGltYXRlZFByb2dyZXNzKCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUVzdGltYXRlZFByb2dyZXNzKCkgT1ZFUlJJREU7Cisj
ZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigp
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWRO
b3RpZmljYXRpb24oKSBPVkVSUklERTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHZpcnR1YWwg
dm9pZCBwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpIE9WRVJSSURFOworI2Vsc2UK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKSBPVkVS
UklERSB7IH0KKyNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRnJhbWVEb2N1
bWVudFJlYWR5KGJvb2wpIE9WRVJSSURFOwogCkBAIC0xNjcsNiArMTgxLDkgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoV2Vi
Q29yZTo6Q2FjaGVkRnJhbWUqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlv
blRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKikgT1ZFUlJJ
REU7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZXN0b3JlRnJhbWVI
aWVyYXJjaHlGb3JDYWNoZWRGcmFtZSgpIE9WRVJSSURFOworI2VuZGlmCiAgICAgdmlydHVhbCB2
b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKSBPVkVSUklERTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKSBPVkVSUklERTsKQEAgLTIxNiw2ICsyMzMs
MTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmlj
YXRpb24oYm9vbCBsaXN0ZW4pIE9WRVJSSURFOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRMb2FkTWVkaWFFbGVtZW50VVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYp
IGNvbnN0IE9WRVJSSURFOworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVh
bCBSZW1vdGVBWE9iamVjdFJlZiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkgT1ZFUlJJREUg
eyByZXR1cm4gMDsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IDZlNzhhMWNhYTk1NTU1
ZGI3NWY0NWY2MTRjZTUyMzVmOTU2Nzk4Y2QuLmM3NGJhNDQwYjcyZDI3YTU1ZWI0ODkzNGViZTE3
YzBjMjA5NGUwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCkBAIC0xMzgsOSArMTM4LDI3IEBACiAjaW1w
b3J0ICJXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaCIKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oSU9TKQorI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1dBS0NsaXBWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dBS1Njcm9sbFZp
ZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV0FLVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvV0FLV2luZG93Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+
CisjaW1wb3J0ICJXZWJLaXRWZXJzaW9uQ2hlY2tzLmgiCisjaW1wb3J0ICJXZWJNYWlsRGVsZWdh
dGUuaCIKKyNpbXBvcnQgIldlYlVJS2l0RGVsZWdhdGUuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKKyNpZiBQTEFURk9S
TShJT1MpCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChJbml0KQorLSAoaWQpaW5pdFdpdGhGcmFt
ZTooQ0dSZWN0KWZyYW1lOworQGVuZAorI2VuZGlmCisKIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0
aWJpbGl0eSB3aXRoIG9sZGVyIFdlYktpdCBwbHVnLWlucy4KIE5TU3RyaW5nICpXZWJQbHVnaW5C
YXNlVVJMS2V5ID0gQCJXZWJQbHVnaW5CYXNlVVJMIjsKIE5TU3RyaW5nICpXZWJQbHVnaW5BdHRy
aWJ1dGVzS2V5ID0gQCJXZWJQbHVnaW5BdHRyaWJ1dGVzIjsKQEAgLTE2MSw2ICsxNzksNyBAQCBz
dGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlcikKICAgICByZXR1cm4gbG9hZGVyID8gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXJN
YWMqPihsb2FkZXIpLT5kYXRhU291cmNlKCkgOiBuaWw7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogLy8gUXVpcmsgZm9yIHRoZSBBcHBsZSBEaWN0aW9uYXJ5IGFwcGxpY2F0aW9uLgogLy8KIC8v
IElmIGEgdG9wIGxldmVsIGZyYW1lIGhhcyBhIDxzY3JpcHQ+IGVsZW1lbnQgaW4gaXRzIDxoZWFk
PiBmb3IgYSBzY3JpcHQgbmFtZWQgTWFpblBhZ2VKYXZhU2NyaXB0LmpzLApAQCAtMTkzLDE0ICsy
MTIsMTcgQEAgc3RhdGljIHZvaWQgYXBwbHlBcHBsZURpY3Rpb25hcnlBcHBsaWNhdGlvblF1aXJr
Tm9uSW5saW5lUGFydChXZWJGcmFtZUxvYWRlckNsaWUKICAgICAgICAgfQogICAgIH0KIH0KKyNl
bmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlBcHBsZURpY3Rpb25hcnlBcHBsaWNhdGlv
blF1aXJrKFdlYkZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFVzZSBhIG9uZS10aW1l
LWluaXRpYWxpemVkIGdsb2JhbCB2YXJpYWJsZSBzbyB3ZSBjYW4gcXVpY2tseSBkZXRlcm1pbmUg
dGhlcmUncyBub3RoaW5nIHRvIGRvIGluCiAgICAgLy8gYWxsIGFwcGxpY2F0aW9ucyBvdGhlciB0
aGFuIEFwcGxlIERpY3Rpb25hcnkuCiAgICAgc3RhdGljIGJvb2wgaXNBcHBsZURpY3Rpb25hcnkg
PSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJp
bmc6QCJjb20uYXBwbGUuRGljdGlvbmFyeSJdOwogICAgIGlmIChpc0FwcGxlRGljdGlvbmFyeSkK
ICAgICAgICAgYXBwbHlBcHBsZURpY3Rpb25hcnlBcHBsaWNhdGlvblF1aXJrTm9uSW5saW5lUGFy
dChjbGllbnQsIHJlcXVlc3QpOworI2VuZGlmCiB9CiAKIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpX
ZWJGcmFtZUxvYWRlckNsaWVudChXZWJGcmFtZSAqd2ViRnJhbWUpCkBAIC0yMzMsOSArMjU1LDQy
IEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Omhhc0hUTUxWaWV3KCkgY29uc3QKIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZvcmNlTGF5b3V0KCkKIHsKICAgICBOU1ZpZXcgPFdlYkRv
Y3VtZW50Vmlldz4gKnZpZXcgPSBbbV93ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyBk
b2N1bWVudFZpZXddOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVk
IHRvIGxheSBvdXQgYSBwYWdlIHJlc3RvcmVkIGZyb20gdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8g
VG8gd29yayBhcm91bmQgdGltaW5nIHByb2JsZW1zIHdpdGggVUlLaXQsIHJlc3RvcmUgZml4ZWQg
CisgICAgLy8gbGF5b3V0IHNldHRpbmdzIGhlcmUuCisgICAgV2ViVmlldyogd2ViVmlldyA9IGdl
dFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgYm9vbCBpc01haW5GcmFtZSA9IFt3ZWJW
aWV3IG1haW5GcmFtZV0gPT0gbV93ZWJGcmFtZS5nZXQoKTsKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShtX3dlYkZyYW1lLmdldCgpKTsKKyAgICBpZiAoaXNNYWluRnJhbWUgJiYgY29yZUZy
YW1lLT52aWV3KCkpIHsKKyAgICAgICAgSW50U2l6ZSBuZXdTaXplKFt3ZWJWaWV3IF9maXhlZExh
eW91dFNpemVdKTsKKyAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnNldEZpeGVkTGF5b3V0U2l6
ZShuZXdTaXplKTsKKyAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnNldFVzZUZpeGVkTGF5b3V0
KCFuZXdTaXplLmlzRW1wdHkoKSk7IAorICAgIH0KKyNlbmRpZgorICAgIFt2aWV3IHNldE5lZWRz
TGF5b3V0OllFU107CisgICAgW3ZpZXcgbGF5b3V0XTsKK30KKworI2lmIFBMQVRGT1JNKElPUykK
K3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZvcmNlTGF5b3V0V2l0aG91dFJlY2FsY3VsYXRp
bmdTdHlsZXMoKQoreworICAgIE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqdmlldyA9IFttX3dl
YkZyYW1lLT5fcHJpdmF0ZS0+d2ViRnJhbWVWaWV3IGRvY3VtZW50Vmlld107CisgICAgLy8gVGhp
cyBnZXRzIGNhbGxlZCB0byBsYXkgb3V0IGEgcGFnZSByZXN0b3JlZCBmcm9tIHRoZSBwYWdlIGNh
Y2hlLgorICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRpbWluZyBwcm9ibGVtcyB3aXRoIFVJS2l0LCBy
ZXN0b3JlIGZpeGVkIAorICAgIC8vIGxheW91dCBzZXR0aW5ncyBoZXJlLgorICAgIFdlYlZpZXcq
IHdlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIGJvb2wgaXNNYWlu
RnJhbWUgPSBbd2ViVmlldyBtYWluRnJhbWVdID09IG1fd2ViRnJhbWUuZ2V0KCk7CisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgaWYgKGlzTWFpbkZy
YW1lICYmIGNvcmVGcmFtZS0+dmlldygpKSB7CisgICAgICAgIEludFNpemUgbmV3U2l6ZShbd2Vi
VmlldyBfZml4ZWRMYXlvdXRTaXplXSk7CisgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zZXRG
aXhlZExheW91dFNpemUobmV3U2l6ZSk7CisgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zZXRV
c2VGaXhlZExheW91dCghbmV3U2l6ZS5pc0VtcHR5KCkpOworICAgIH0KICAgICBbdmlldyBzZXRO
ZWVkc0xheW91dDpZRVNdOwogICAgIFt2aWV3IGxheW91dF07CiB9CisjZW5kaWYKIAogdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Zm9yY2VMYXlvdXRGb3JOb25IVE1MKCkKIHsKQEAgLTI2MSw3
ICszMTYsOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkZXRhY2hlZEZyb21QYXJlbnQy
KCkKIHsKICAgICAvL3JlbW92ZSBhbnkgTmV0U2NhcGUgcGx1Z2lucyB0aGF0IGFyZSBjaGlsZHJl
biBvZiB0aGlzIGZyYW1lIGJlY2F1c2UgdGhleSBhcmUgYWJvdXQgdG8gYmUgZGV0YWNoZWQKICAg
ICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIFt3ZWJWaWV3IHJlbW92ZVBsdWdpbkluc3RhbmNlVmlld3NGb3I6
KG1fd2ViRnJhbWUuZ2V0KCkpXTsKKyNlbmRpZgogICAgIFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+
d2ViRnJhbWVWaWV3IF9zZXRXZWJGcmFtZTpuaWxdOyAvLyBuZWVkZWQgZm9yIG5vdyB0byBiZSBj
b21wYXRpYmxlIHcvIG9sZCBiZWhhdmlvcgogCiAgICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBs
ZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVs
ZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CkBAIC0zMTUsNiArMzcyLDEyIEBAIGJvb2wg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNh
Y2hlKERvY3VtZW50TG9hZGVyCiAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyht
X3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25D
YWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVnYXRlSW1w
bGVtZW50YXRpb25zKHdlYlZpZXcpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoaW1wbGVt
ZW50YXRpb25zLT53ZWJUaHJlYWREaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVGdW5jKSB7
CisgICAgICAgIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZUluV2ViVGhyZWFkKGltcGxlbWVudGF0
aW9ucy0+d2ViVGhyZWFkRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlRnVuYywgd2ViVmll
dywgQHNlbGVjdG9yKHdlYlRocmVhZFdlYlZpZXc6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNh
Y2hlOnJlc3BvbnNlOmxlbmd0aDpmcm9tRGF0YVNvdXJjZTopLCByZXF1ZXN0Lm5zVVJMUmVxdWVz
dChVcGRhdGVIVFRQQm9keSksIHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSwgbGVuZ3RoLCBkYXRh
U291cmNlKGxvYWRlcikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorI2VuZGlmCiAg
ICAgaWYgKCFpbXBsZW1lbnRhdGlvbnMtPmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUZ1
bmMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzI5LDYgKzM5MiwxMSBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50Ojphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aQogCiAgICAgaWQgb2JqZWN0ID0gbmlsOwogICAgIEJPT0wgc2hvdWxk
UmVsZWFzZSA9IE5POworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoaW1wbGVtZW50YXRpb25z
LT53ZWJUaHJlYWRJZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmMpIHsKKyAgICAgICAgb2JqZWN0ID0g
Q2FsbFJlc291cmNlTG9hZERlbGVnYXRlSW5XZWJUaHJlYWQoaW1wbGVtZW50YXRpb25zLT53ZWJU
aHJlYWRJZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJUaHJl
YWRXZWJWaWV3OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdDpmcm9tRGF0YVNvdXJjZTopLCBy
ZXF1ZXN0Lm5zVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9keSksIGRhdGFTb3VyY2UobG9hZGVyKSk7
CisgICAgfSBlbHNlCisjZW5kaWYKICAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5pZGVudGlmaWVy
Rm9yUmVxdWVzdEZ1bmMpCiAgICAgICAgIG9iamVjdCA9IENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0
ZShpbXBsZW1lbnRhdGlvbnMtPmlkZW50aWZpZXJGb3JSZXF1ZXN0RnVuYywgd2ViVmlldywgQHNl
bGVjdG9yKHdlYlZpZXc6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0OmZyb21EYXRhU291cmNl
OiksIHJlcXVlc3QubnNVUkxSZXF1ZXN0KFVwZGF0ZUhUVFBCb2R5KSwgZGF0YVNvdXJjZShsb2Fk
ZXIpKTsKICAgICBlbHNlIHsKQEAgLTM1NCwxMSArNDIyLDIwIEBAIHZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiBsb2FkZXIs
IHVuc2lnCiAKICAgICBOU1VSTFJlcXVlc3QgKmN1cnJlbnRVUkxSZXF1ZXN0ID0gcmVxdWVzdC5u
c1VSTFJlcXVlc3QoVXBkYXRlSFRUUEJvZHkpOwogICAgIE5TVVJMUmVxdWVzdCAqbmV3VVJMUmVx
dWVzdCA9IGN1cnJlbnRVUkxSZXF1ZXN0OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGlz
TWFpblJlc291cmNlUmVxdWVzdCA9IHJlcXVlc3QuaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCk7Cisg
ICAgaWYgKGltcGxlbWVudGF0aW9ucy0+d2ViVGhyZWFkV2lsbFNlbmRSZXF1ZXN0RnVuYykgewor
ICAgICAgICBuZXdVUkxSZXF1ZXN0ID0gKE5TVVJMUmVxdWVzdCAqKUNhbGxSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZUluV2ViVGhyZWFkKGltcGxlbWVudGF0aW9ucy0+d2ViVGhyZWFkV2lsbFNlbmRSZXF1
ZXN0RnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlRocmVhZFdlYlZpZXc6cmVzb3VyY2U6d2ls
bFNlbmRSZXF1ZXN0OnJlZGlyZWN0UmVzcG9uc2U6ZnJvbURhdGFTb3VyY2U6KSwgW3dlYlZpZXcg
X29iamVjdEZvcklkZW50aWZpZXI6aWRlbnRpZmllcl0sIGN1cnJlbnRVUkxSZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSwgZGF0YVNvdXJjZShsb2FkZXIpKTsKKyAgICB9
IGVsc2UKKyNlbmRpZgogICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPndpbGxTZW5kUmVxdWVzdEZ1
bmMpCiAgICAgICAgIG5ld1VSTFJlcXVlc3QgPSAoTlNVUkxSZXF1ZXN0ICopQ2FsbFJlc291cmNl
TG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+d2lsbFNlbmRSZXF1ZXN0RnVuYywgd2ViVmll
dywgQHNlbGVjdG9yKHdlYlZpZXc6cmVzb3VyY2U6d2lsbFNlbmRSZXF1ZXN0OnJlZGlyZWN0UmVz
cG9uc2U6ZnJvbURhdGFTb3VyY2U6KSwgW3dlYlZpZXcgX29iamVjdEZvcklkZW50aWZpZXI6aWRl
bnRpZmllcl0sIGN1cnJlbnRVUkxSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLm5zVVJMUmVzcG9u
c2UoKSwgZGF0YVNvdXJjZShsb2FkZXIpKTsKIAogICAgIGlmIChuZXdVUkxSZXF1ZXN0ICE9IGN1
cnJlbnRVUkxSZXF1ZXN0KQogICAgICAgICByZXF1ZXN0ID0gbmV3VVJMUmVxdWVzdDsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgcmVxdWVzdC5zZXRNYWluUmVzb3VyY2VSZXF1ZXN0KGlzTWFpblJl
c291cmNlUmVxdWVzdCk7CisjZW5kaWYKIH0KIAogYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKQpAQCAtMzg4LDggKzQ2NSwxMCBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1
bWVudExvYQogICAgICAgICB9CiAgICAgfQogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1dp
bmRvdyAqd2luZG93ID0gW3dlYlZpZXcgaG9zdFdpbmRvd10gPyBbd2ViVmlldyBob3N0V2luZG93
XSA6IFt3ZWJWaWV3IHdpbmRvd107CiAgICAgW1tXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxl
ciBzaGFyZWRIYW5kbGVyXSBzdGFydEF1dGhlbnRpY2F0aW9uOndlYkNoYWxsZW5nZSB3aW5kb3c6
d2luZG93XTsKKyNlbmRpZgogfQogCiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxM
QkFDSykKQEAgLTQwNywxMiArNDg2LDI4IEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoRG9jdW1lbnRMb2FkZXIqCiAgICAg
fQogCiAgICAgLy8gSWYgb3VyIHJlc291cmNlIGxvYWQgZGVsZWdhdGUgZG9lc24ndCBoYW5kbGUg
dGhlIHF1ZXN0aW9uLCB0aGVuIG9ubHkgc2VuZCBhdXRoZW50aWNhdGlvbgotICAgIC8vIGNoYWxs
ZW5nZXMgZm9yIHByZS0xMC42IHByb3RlY3Rpb24gc3BhY2VzLiAgVGhpcyBpcyB0aGUgc2FtZSBh
cyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGNoYWxsZW5nZXMgZm9yIHByZS1p
T1MtMy4wLCBwcmUtMTAuNiBwcm90ZWN0aW9uIHNwYWNlcy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMg
dGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KICAgICAvLyBpbiBDRk5ldHdvcmsuCiAgICAgcmV0
dXJuIChwcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA8IFByb3RlY3Rpb25T
cGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lQ2xpZW50Q2VydGlmaWNhdGVSZXF1ZXN0ZWQpOwogfQog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCitSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Y29ubmVjdGlvblByb3BlcnRpZXMoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIGlkIHJlc291cmNlID0gW3dl
YlZpZXcgX29iamVjdEZvcklkZW50aWZpZXI6aWRlbnRpZmllcl07CisgICAgaWYgKCFyZXNvdXJj
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1w
bGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9h
ZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOworICAgIGlmIChpbXBsZW1lbnRhdGlv
bnMtPmNvbm5lY3Rpb25Qcm9wZXJ0aWVzRnVuYykKKyAgICAgICAgcmV0dXJuIChDRkRpY3Rpb25h
cnlSZWYpQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+Y29ubmVjdGlv
blByb3BlcnRpZXNGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpjb25uZWN0aW9uUHJv
cGVydGllc0ZvclJlc291cmNlOmRhdGFTb3VyY2U6KSwgcmVzb3VyY2UsIGRhdGFTb3VyY2UobG9h
ZGVyKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyNlbmRpZgorCiBib29sIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpzaG91bGRQYWludEJyb2tlbkltYWdlKGNvbnN0IFVSTCYgaW1hZ2VVUkwp
IGNvbnN0CiB7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5n
ZXQoKSk7CkBAIC00MzgsMTMgKzUzMywyMyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZAogICAg
ICAgICB9CiAgICAgfQogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbKFdlYlBhbmVsQXV0aGVu
dGljYXRpb25IYW5kbGVyICopW1dlYlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVyIHNoYXJlZEhh
bmRsZXJdIGNhbmNlbEF1dGhlbnRpY2F0aW9uOndlYkNoYWxsZW5nZV07CisjZW5kaWYKIH0KIAog
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2Vi
VmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlm
IChpbXBsZW1lbnRhdGlvbnMtPndlYlRocmVhZERpZFJlY2VpdmVSZXNwb25zZUZ1bmMpIHsKKyAg
ICAgICAgaWYgKGlkIHJlc291cmNlID0gW3dlYlZpZXcgX29iamVjdEZvcklkZW50aWZpZXI6aWRl
bnRpZmllcl0pCisgICAgICAgICAgICBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGVJbldlYlRocmVh
ZChpbXBsZW1lbnRhdGlvbnMtPndlYlRocmVhZERpZFJlY2VpdmVSZXNwb25zZUZ1bmMsIHdlYlZp
ZXcsIEBzZWxlY3Rvcih3ZWJUaHJlYWRXZWJWaWV3OnJlc291cmNlOmRpZFJlY2VpdmVSZXNwb25z
ZTpmcm9tRGF0YVNvdXJjZTopLCByZXNvdXJjZSwgcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpLCBk
YXRhU291cmNlKGxvYWRlcikpOworICAgICAgICAKKyAgICB9IGVsc2UKKyNlbmRpZgogICAgIGlm
IChpbXBsZW1lbnRhdGlvbnMtPmRpZFJlY2VpdmVSZXNwb25zZUZ1bmMpIHsKICAgICAgICAgaWYg
KGlkIHJlc291cmNlID0gW3dlYlZpZXcgX29iamVjdEZvcklkZW50aWZpZXI6aWRlbnRpZmllcl0p
CiAgICAgICAgICAgICBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5k
aWRSZWNlaXZlUmVzcG9uc2VGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpyZXNvdXJj
ZTpkaWRSZWNlaXZlUmVzcG9uc2U6ZnJvbURhdGFTb3VyY2U6KSwgcmVzb3VyY2UsIHJlc3BvbnNl
Lm5zVVJMUmVzcG9uc2UoKSwgZGF0YVNvdXJjZShsb2FkZXIpKTsKQEAgLTQ1Niw2ICs1NjEsMTMg
QEAgTlNDYWNoZWRVUkxSZXNwb25zZSogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndpbGxDYWNoZVJl
c3BvbnNlKERvY3VtZW50TG9hZGVyKiBsb2EKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2Vi
VmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlm
IChpbXBsZW1lbnRhdGlvbnMtPndlYlRocmVhZFdpbGxDYWNoZVJlc3BvbnNlRnVuYykgeworICAg
ICAgICBpZiAoaWQgcmVzb3VyY2UgPSBbd2ViVmlldyBfb2JqZWN0Rm9ySWRlbnRpZmllcjppZGVu
dGlmaWVyXSkKKyAgICAgICAgICAgIHJldHVybiBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGVJbldl
YlRocmVhZChpbXBsZW1lbnRhdGlvbnMtPndlYlRocmVhZFdpbGxDYWNoZVJlc3BvbnNlRnVuYywg
d2ViVmlldywgQHNlbGVjdG9yKHdlYlRocmVhZFdlYlZpZXc6cmVzb3VyY2U6d2lsbENhY2hlUmVz
cG9uc2U6ZnJvbURhdGFTb3VyY2U6KSwgcmVzb3VyY2UsIHJlc3BvbnNlLCBkYXRhU291cmNlKGxv
YWRlcikpOworICAgICAgICAKKyAgICB9IGVsc2UKKyNlbmRpZgogICAgIGlmIChpbXBsZW1lbnRh
dGlvbnMtPndpbGxDYWNoZVJlc3BvbnNlRnVuYykgewogICAgICAgICBpZiAoaWQgcmVzb3VyY2Ug
PSBbd2ViVmlldyBfb2JqZWN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyXSkKICAgICAgICAgICAg
IHJldHVybiBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT53aWxsQ2Fj
aGVSZXNwb25zZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OnJlc291cmNlOndpbGxD
YWNoZVJlc3BvbnNlOmZyb21EYXRhU291cmNlOiksIHJlc291cmNlLCByZXNwb25zZSwgZGF0YVNv
dXJjZShsb2FkZXIpKTsKQEAgLTQ2OCw2ICs1ODAsMTIgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciogbG9h
ZGUKIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgp
KTsKICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50
YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdl
YlZpZXcpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoaW1wbGVtZW50YXRpb25zLT53ZWJU
aHJlYWREaWRSZWNlaXZlQ29udGVudExlbmd0aEZ1bmMpIHsKKyAgICAgICAgaWYgKGlkIHJlc291
cmNlID0gW3dlYlZpZXcgX29iamVjdEZvcklkZW50aWZpZXI6aWRlbnRpZmllcl0pCisgICAgICAg
ICAgICBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGVJbldlYlRocmVhZChpbXBsZW1lbnRhdGlvbnMt
PndlYlRocmVhZERpZFJlY2VpdmVDb250ZW50TGVuZ3RoRnVuYywgd2ViVmlldywgQHNlbGVjdG9y
KHdlYlRocmVhZFdlYlZpZXc6cmVzb3VyY2U6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGg6ZnJvbURh
dGFTb3VyY2U6KSwgcmVzb3VyY2UsIChOU0ludGVnZXIpZGF0YUxlbmd0aCwgZGF0YVNvdXJjZShs
b2FkZXIpKTsKKyAgICB9IGVsc2UKKyNlbmRpZgogICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPmRp
ZFJlY2VpdmVDb250ZW50TGVuZ3RoRnVuYykgewogICAgICAgICBpZiAoaWQgcmVzb3VyY2UgPSBb
d2ViVmlldyBfb2JqZWN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyXSkKICAgICAgICAgICAgIENh
bGxSZXNvdXJjZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZFJlY2VpdmVDb250ZW50
TGVuZ3RoRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6cmVzb3VyY2U6ZGlkUmVjZWl2
ZUNvbnRlbnRMZW5ndGg6ZnJvbURhdGFTb3VyY2U6KSwgcmVzb3VyY2UsIChOU0ludGVnZXIpZGF0
YUxlbmd0aCwgZGF0YVNvdXJjZShsb2FkZXIpKTsKQEAgLTQ3OSw2ICs1OTcsMTMgQEAgdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIsIHVuc2kKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dl
YkZyYW1lLmdldCgpKTsKICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNo
ZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpb25zKHdlYlZpZXcpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChpbXBsZW1l
bnRhdGlvbnMtPndlYlRocmVhZERpZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNvdXJjZUZ1bmMpIHsK
KyAgICAgICAgaWYgKGlkIHJlc291cmNlID0gW3dlYlZpZXcgX29iamVjdEZvcklkZW50aWZpZXI6
aWRlbnRpZmllcl0pCisgICAgICAgICAgICBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGVJbldlYlRo
cmVhZChpbXBsZW1lbnRhdGlvbnMtPndlYlRocmVhZERpZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNv
dXJjZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJUaHJlYWRXZWJWaWV3OnJlc291cmNlOmRp
ZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNvdXJjZTopLCByZXNvdXJjZSwgZGF0YVNvdXJjZShsb2Fk
ZXIpKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorCiAgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlk
RmluaXNoTG9hZGluZ0Zyb21EYXRhU291cmNlRnVuYykgewogICAgICAgICBpZiAoaWQgcmVzb3Vy
Y2UgPSBbd2ViVmlldyBfb2JqZWN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyXSkKICAgICAgICAg
ICAgIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZEZpbmlzaExv
YWRpbmdGcm9tRGF0YVNvdXJjZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OnJlc291
cmNlOmRpZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNvdXJjZTopLCByZXNvdXJjZSwgZGF0YVNvdXJj
ZShsb2FkZXIpKTsKQEAgLTQ5NCw2ICs2MTksMTIgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ24K
ICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAg
ICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25z
ID0gV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcp
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPndlYlRocmVh
ZERpZEZhaWxMb2FkaW5nV2l0aEVycm9yRnJvbURhdGFTb3VyY2VGdW5jKSB7CisgICAgICAgIGlm
IChpZCByZXNvdXJjZSA9IFt3ZWJWaWV3IF9vYmplY3RGb3JJZGVudGlmaWVyOmlkZW50aWZpZXJd
KQorICAgICAgICAgICAgQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlSW5XZWJUaHJlYWQoaW1wbGVt
ZW50YXRpb25zLT53ZWJUaHJlYWREaWRGYWlsTG9hZGluZ1dpdGhFcnJvckZyb21EYXRhU291cmNl
RnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlRocmVhZFdlYlZpZXc6cmVzb3VyY2U6ZGlkRmFp
bExvYWRpbmdXaXRoRXJyb3I6ZnJvbURhdGFTb3VyY2U6KSwgcmVzb3VyY2UsIChOU0Vycm9yICop
ZXJyb3IsIGRhdGFTb3VyY2UobG9hZGVyKSk7CisgICAgfSBlbHNlCisjZW5kaWYKICAgICBpZiAo
aW1wbGVtZW50YXRpb25zLT5kaWRGYWlsTG9hZGluZ1dpdGhFcnJvckZyb21EYXRhU291cmNlRnVu
YykgewogICAgICAgICBpZiAoaWQgcmVzb3VyY2UgPSBbd2ViVmlldyBfb2JqZWN0Rm9ySWRlbnRp
ZmllcjppZGVudGlmaWVyXSkKICAgICAgICAgICAgIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZShp
bXBsZW1lbnRhdGlvbnMtPmRpZEZhaWxMb2FkaW5nV2l0aEVycm9yRnJvbURhdGFTb3VyY2VGdW5j
LCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpyZXNvdXJjZTpkaWRGYWlsTG9hZGluZ1dpdGhF
cnJvcjpmcm9tRGF0YVNvdXJjZTopLCByZXNvdXJjZSwgKE5TRXJyb3IgKillcnJvciwgZGF0YVNv
dXJjZShsb2FkZXIpKTsKQEAgLTU0OCw2ICs2NzksOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgpCiAgICAgV2ViRnJhbWVM
b2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3
R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CiAgICAgaWYgKGlt
cGxlbWVudGF0aW9ucy0+ZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWVGdW5jKQog
ICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRDaGFuZ2VM
b2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3
OmRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZUZvckZyYW1lOiksIG1fd2ViRnJhbWUuZ2V0KCkp
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBbW3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZTpt
X3dlYkZyYW1lLmdldCgpXTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZFB1c2hTdGF0ZVdpdGhpblBhZ2UoKQpAQCAtNTg2LDYgKzcyMCw5IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbENsb3NlKCkKICAgICBXZWJGcmFt
ZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZp
ZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKICAgICBpZiAo
aW1wbGVtZW50YXRpb25zLT53aWxsQ2xvc2VGcmFtZUZ1bmMpCiAgICAgICAgIENhbGxGcmFtZUxv
YWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPndpbGxDbG9zZUZyYW1lRnVuYywgd2ViVmlldywg
QHNlbGVjdG9yKHdlYlZpZXc6d2lsbENsb3NlRnJhbWU6KSwgbV93ZWJGcmFtZS5nZXQoKSk7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIFtbd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzp3ZWJWaWV3IHdpbGxDbG9zZUZyYW1lOm1fd2ViRnJhbWUuZ2V0KCldOworI2VuZGlm
CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24o
KQpAQCAtNjAzLDcgKzc0MCwxMyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkKICAgICBtX3dlYkZyYW1lLT5fcHJpdmF0ZS0+cHJv
dmlzaW9uYWxVUkwgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS5wcm92aXNpb25h
bERvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpOwogCiAgICAgV2ViVmlldyAqd2ViVmll
dyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBbd2ViVmlldyBfZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZTptX3dlYkZyYW1lLmdl
dCgpXTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFtbd2ViVmlldyBfVUlLaXRE
ZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWU6bV93ZWJGcmFtZS5nZXQoKV07CisjZW5kaWYKIAogICAgIFdlYkZyYW1lTG9hZERl
bGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEZy
YW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwogICAgIGlmIChpbXBsZW1l
bnRhdGlvbnMtPmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVGdW5jKQpAQCAtNjM1LDYg
Kzc3OCwxMCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExv
YWQoKQogICAgIG1fd2ViRnJhbWUtPl9wcml2YXRlLT51cmwgPSBtX3dlYkZyYW1lLT5fcHJpdmF0
ZS0+cHJvdmlzaW9uYWxVUkw7CiAgICAgbV93ZWJGcmFtZS0+X3ByaXZhdGUtPnByb3Zpc2lvbmFs
VVJMID0gbnVsbHB0cjsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBbW3dlYlZpZXcgX1VJS2l0
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRDb21taXRMb2FkRm9yRnJhbWU6
bV93ZWJGcmFtZS5nZXQoKV07CisjZW5kaWYKKyAgICAKICAgICBXZWJGcmFtZUxvYWREZWxlZ2F0
ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRGcmFtZUxv
YWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKICAgICBpZiAoaW1wbGVtZW50YXRp
b25zLT5kaWRDb21taXRMb2FkRm9yRnJhbWVGdW5jKQogICAgICAgICBDYWxsRnJhbWVMb2FkRGVs
ZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRDb21taXRMb2FkRm9yRnJhbWVGdW5jLCB3ZWJWaWV3
LCBAc2VsZWN0b3Iod2ViVmlldzpkaWRDb21taXRMb2FkRm9yRnJhbWU6KSwgbV93ZWJGcmFtZS5n
ZXQoKSk7CkBAIC02NDUsNyArNzkyLDkgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGUKICAgICBt
X3dlYkZyYW1lLT5fcHJpdmF0ZS0+cHJvdmlzaW9uYWxVUkwgPSBudWxscHRyOwogCiAgICAgV2Vi
VmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBbd2ViVmlldyBfZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcjpl
cnJvciBmb3JGcmFtZTptX3dlYkZyYW1lLmdldCgpXTsKKyNlbmRpZgogCiAgICAgV2ViRnJhbWVM
b2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3
R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CiAgICAgaWYgKGlt
cGxlbWVudGF0aW9ucy0+ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lRnVu
YykKQEAgLTY1OSwxMSArODA4LDE2IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAgQVNTRVJUKCFt
X3dlYkZyYW1lLT5fcHJpdmF0ZS0+cHJvdmlzaW9uYWxVUkwpOwogCiAgICAgV2ViVmlldyAqd2Vi
VmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBbd2ViVmlldyBfZGlkRmFpbExvYWRXaXRoRXJyb3I6ZXJyb3IgZm9yRnJhbWU6bV93ZWJG
cmFtZS5nZXQoKV07CisjZW5kaWYKIAogICAgIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRl
SW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwogICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPmRpZEZh
aWxMb2FkV2l0aEVycm9yRm9yRnJhbWVGdW5jKQogICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdh
dGUoaW1wbGVtZW50YXRpb25zLT5kaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lRnVuYywgd2Vi
VmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkRmFpbExvYWRXaXRoRXJyb3I6Zm9yRnJhbWU6KSwg
KE5TRXJyb3IgKillcnJvciwgbV93ZWJGcmFtZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFtbd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRp
ZEZhaWxMb2FkV2l0aEVycm9yOigoTlNFcnJvciAqKWVycm9yKSBmb3JGcmFtZTptX3dlYkZyYW1l
LmdldCgpXTsKKyNlbmRpZgogCiAgICAgW21fd2ViRnJhbWUtPl9wcml2YXRlLT5pbnRlcm5hbExv
YWREZWxlZ2F0ZSB3ZWJGcmFtZTptX3dlYkZyYW1lLmdldCgpIGRpZEZpbmlzaExvYWRXaXRoRXJy
b3I6ZXJyb3JdOwogfQpAQCAtNjcxLDYgKzgyNSwxNCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQog
ewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwor
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlkIHdlYlRocmVhZERlbCA9IFt3ZWJWaWV3IF93ZWJN
YWlsRGVsZWdhdGVdOworICAgIGlmIChbd2ViVGhyZWFkRGVsIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYnRocmVhZF93ZWJWaWV3OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1l
OildKSB7CisgICAgICAgIFt3ZWJUaHJlYWREZWwgX3dlYnRocmVhZF93ZWJWaWV3OndlYlZpZXcg
ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWU6bV93ZWJGcmFtZS5nZXQoKV07CisgICAgfQor
I2VuZGlmCisKICAgICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGlt
cGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9u
cyh3ZWJWaWV3KTsKICAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRGaW5pc2hEb2N1bWVudExv
YWRGb3JGcmFtZUZ1bmMpCiAgICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRh
dGlvbnMtPmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVj
dG9yKHdlYlZpZXc6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWU6KSwgbV93ZWJGcmFtZS5n
ZXQoKSk7CkBAIC02ODEsNyArODQzLDE2IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkRmluaXNoTG9hZCgpCiAgICAgQVNTRVJUKCFtX3dlYkZyYW1lLT5fcHJpdmF0ZS0+
cHJvdmlzaW9uYWxVUkwpOwogCiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93
ZWJGcmFtZS5nZXQoKSk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbd2ViVmlldyBfZGlkRmlu
aXNoTG9hZEZvckZyYW1lOm1fd2ViRnJhbWUuZ2V0KCldOworI2Vsc2UKKyAgICBbW3dlYlZpZXcg
X1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRGaW5pc2hMb2FkRm9y
RnJhbWU6bV93ZWJGcmFtZS5nZXQoKV07CisKKyAgICBpZCB3ZWJUaHJlYWREZWwgPSBbd2ViVmll
dyBfd2ViTWFpbERlbGVnYXRlXTsKKyAgICBpZiAoW3dlYlRocmVhZERlbCByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKF93ZWJ0aHJlYWRfd2ViVmlldzpkaWRGaW5pc2hMb2FkRm9yRnJhbWU6
KV0pIHsKKyAgICAgICAgW3dlYlRocmVhZERlbCBfd2VidGhyZWFkX3dlYlZpZXc6d2ViVmlldyBk
aWRGaW5pc2hMb2FkRm9yRnJhbWU6bV93ZWJGcmFtZS5nZXQoKV07CisgICAgfQorI2VuZGlmCiAK
ICAgICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0
aW9ucyA9IFdlYlZpZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3
KTsKICAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRGaW5pc2hMb2FkRm9yRnJhbWVGdW5jKQpA
QCAtNjk1LDggKzg2NiwxMyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZExheW91dChMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCiAgICAgV2ViVmlldyAqd2ViVmll
dyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CiAgICAgV2ViRnJhbWVMb2FkRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVM
b2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CiAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+d2ViVGhyZWFkRGlkTGF5b3V0RnVuYykKKyAgICAg
ICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlSW5XZWJUaHJlYWQoaW1wbGVtZW50YXRpb25zLT53ZWJU
aHJlYWREaWRMYXlvdXRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVGhyZWFkV2ViVmlldzpk
aWRMYXlvdXQ6KSwga2l0TGF5b3V0TWlsZXN0b25lcyhtaWxlc3RvbmVzKSk7CisjZWxzZQogICAg
IGlmIChpbXBsZW1lbnRhdGlvbnMtPmRpZExheW91dEZ1bmMpCiAgICAgICAgIENhbGxGcmFtZUxv
YWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZExheW91dEZ1bmMsIHdlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJWaWV3OmRpZExheW91dDopLCBraXRMYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMp
KTsKKyNlbmRpZgogCiAgICAgaWYgKG1pbGVzdG9uZXMgJiBEaWRGaXJzdExheW91dCkgewogICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBvbGQgZGlkRmly
c3RMYXlvdXQgQVBJIHNpbmNlIHRoaXMgaXMgZG9pbmcgZG91YmxlIGR1dHkgd2l0aCB0aGUKQEAg
LTcwNCwxMiArODgwLDE4IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
TGF5b3V0KExheW91dE1pbGVzdG9uZXMgbWlsZXN0b25lcykKICAgICAgICAgaWYgKGltcGxlbWVu
dGF0aW9ucy0+ZGlkRmlyc3RMYXlvdXRJbkZyYW1lRnVuYykKICAgICAgICAgICAgIENhbGxGcmFt
ZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZEZpcnN0TGF5b3V0SW5GcmFtZUZ1bmMs
IHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZEZpcnN0TGF5b3V0SW5GcmFtZTopLCBtX3dl
YkZyYW1lLmdldCgpKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgW1t3ZWJWaWV3IF9V
SUtpdERlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZGlkRmlyc3RMYXlvdXRJbkZy
YW1lOm1fd2ViRnJhbWUuZ2V0KCldOworI2VuZGlmCisgCiAgICAgICAgIC8vIFNlZSBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZC4KICAgICAgICAgV2ViRHluYW1p
Y1Njcm9sbEJhcnNWaWV3ICpzY3JvbGxWaWV3ID0gW21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJG
cmFtZVZpZXcgX3Njcm9sbFZpZXddOwogICAgICAgICBpZiAoW2dldFdlYlZpZXcobV93ZWJGcmFt
ZS5nZXQoKSkgZHJhd3NCYWNrZ3JvdW5kXSkKICAgICAgICAgICAgIFtzY3JvbGxWaWV3IHNldERy
YXdzQmFja2dyb3VuZDpZRVNdOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIFtzY3JvbGxW
aWV3IHNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eTpOU1Njcm9sbEVsYXN0aWNpdHlBdXRvbWF0
aWNdOwogICAgICAgICBbc2Nyb2xsVmlldyBzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTpO
U1Njcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWNdOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKG1p
bGVzdG9uZXMgJiBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpIHsKQEAgLTcxNyw2ICs4
OTksMTAgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMYXlvdXQoTGF5
b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQogICAgICAgICAvLyBkb3VibGUgZHV0eSB3aXRoIHRo
ZSBuZXcgZGlkTGF5b3V0IEFQSS4KICAgICAgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkRmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0SW5GcmFtZUZ1bmMpCiAgICAgICAgICAgICBDYWxsRnJh
bWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRJbkZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0SW5GcmFtZTopLCBtX3dlYkZyYW1lLmdldCgpKTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIGlmIChbd2ViVmlldyBtYWluRnJhbWVdID09IG1fd2ViRnJhbWUu
Z2V0KCkpCisgICAgICAgICAgICBbW3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6d2ViVmlldyBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRJbkZyYW1lOm1fd2Vi
RnJhbWUuZ2V0KCldOworI2VuZGlmCiAgICAgfQogfQogCkBAIC04MzAsNiArMTAxNiw3IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIsIGNvbnN0IFJlCiAgICAgW2RhdGFTb3VyY2UobG9hZGVyKSBfc2V0TWFpbkRv
Y3VtZW50RXJyb3I6ZXJyb3JdOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OndpbGxDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpCiB7CiAgICAgW2dl
dFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSkgX3dpbGxDaGFuZ2VWYWx1ZUZvcktleTpfV2ViRXN0
aW1hdGVkUHJvZ3Jlc3NLZXldOwpAQCAtODM5LDIxICsxMDI2LDQ0IEBAIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpZENoYW5nZUVzdGltYXRlZFByb2dyZXNzKCkKIHsKICAgICBbZ2V0V2Vi
VmlldyhtX3dlYkZyYW1lLmdldCgpKSBfZGlkQ2hhbmdlVmFsdWVGb3JLZXk6X1dlYkVzdGltYXRl
ZFByb2dyZXNzS2V5XTsKIH0KKyNlbmRpZgogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpw
b3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlv
bk5hbWU6V2ViVmlld1Byb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbiBvYmplY3Q6Z2V0V2ViVmll
dyhtX3dlYkZyYW1lLmdldCgpKV07CisjZWxzZQorICAgIFdlYlRocmVhZFBvc3ROb3RpZmljYXRp
b24oV2ViVmlld1Byb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbiwgZ2V0V2ViVmlldyhtX3dlYkZy
YW1lLmdldCgpKSwgbmlsKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQogeworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0
Tm90aWZpY2F0aW9uTmFtZTpXZWJWaWV3UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRp
b24gb2JqZWN0OmdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSldOworI2Vsc2UKKyAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKKyAgICBOU051bWJl
ciAqcHJvZ3Jlc3MgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Olt3ZWJWaWV3IGVzdGltYXRl
ZFByb2dyZXNzXV07CisgICAgQ0dDb2xvclJlZiBib2R5QmFja2dyb3VuZENvbG9yID0gW1t3ZWJW
aWV3IG1haW5GcmFtZV0gX2JvZHlCYWNrZ3JvdW5kQ29sb3JdOworCisgICAgLy8gVXNlIGEgQ0ZE
aWN0aW9uYXJ5IHNvIHdlIGNhbiBhZGQgdGhlIENHQ29sb3JSZWYgd2l0aG91dCBjb21waWxlIGVy
cm9ycy4gQW5kIHRoZW4gdGhhbmtzIHRvCisgICAgLy8gdG9sbC1mcmVlIGJyaWRnaW5nIHdlIGNh
biBwYXNzIHRoZSBDRkRpY3Rpb25hcnkgYXMgYW4gTlNEaWN0aW9uYXJ5IHRvIHBvc3ROb3RpZmlj
YXRpb24uCisgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiB1c2VySW5mbyA9IENGRGljdGlvbmFy
eUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMiwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUodXNlckluZm8sIFdlYlZpZXdQcm9ncmVzc0VzdGltYXRlZFByb2dy
ZXNzS2V5LCBwcm9ncmVzcyk7CisgICAgaWYgKGJvZHlCYWNrZ3JvdW5kQ29sb3IpCisgICAgICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKHVzZXJJbmZvLCBXZWJWaWV3UHJvZ3Jlc3NCYWNrZ3JvdW5k
Q29sb3JLZXksIGJvZHlCYWNrZ3JvdW5kQ29sb3IpOworCisgICAgV2ViVGhyZWFkUG9zdE5vdGlm
aWNhdGlvbihXZWJWaWV3UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24sIHdlYlZp
ZXcsIChOU0RpY3Rpb25hcnkgKikgdXNlckluZm8pOworICAgIENGUmVsZWFzZSh1c2VySW5mbyk7
CisjZW5kaWYKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiB7CiAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJWaWV3
UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbiBvYmplY3Q6Z2V0V2ViVmlldyhtX3dlYkZyYW1l
LmdldCgpKV07CiB9CisjZW5kaWYKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFp
bkZyYW1lRG9jdW1lbnRSZWFkeShib29sIHJlYWR5KQogewpAQCAtODY4LDE0ICsxMDc4LDE4IEBA
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Ondp
bGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciogbG9hZGVyKQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgLy8gRklYTUU6IFNob3VsZCBkbyB0aGlzIG9ubHkgaW4gbWFpbiBmcmFtZSBjYXNl
LCByaWdodD8KICAgICBbZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKSBfd2lsbENoYW5nZVZh
bHVlRm9yS2V5Ol9XZWJNYWluRnJhbWVUaXRsZUtleV07CisjZW5kaWYKIH0KIAogdm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikK
IHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gdGhpcyBvbmx5
IGluIG1haW4gZnJhbWUgY2FzZSwgcmlnaHQ/CiAgICAgW2dldFdlYlZpZXcobV93ZWJGcmFtZS5n
ZXQoKSkgX2RpZENoYW5nZVZhbHVlRm9yS2V5Ol9XZWJNYWluRnJhbWVUaXRsZUtleV07CisjZW5k
aWYKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVu
dExvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQpAQCAtOTAxLDYg
KzExMTUsMTAgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9y
eSgpCiB7CiAgICAgV2ViVmlldyogdmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7
CiAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxv
YWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChsb2Fk
ZXItPnVybEZvckhpc3RvcnkoKSA9PSBibGFua1VSTCgpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKIAogICAgIGlmIChbdmlldyBoaXN0b3J5RGVsZWdhdGVdKSB7CiAgICAgICAgIFdlYkhpc3Rv
cnlEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdH
ZXRIaXN0b3J5RGVsZWdhdGVJbXBsZW1lbnRhdGlvbnModmlldyk7CkBAIC0xMDk2LDYgKzEzMTQs
MTYgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0
b3J5SXRlbSogaXRlbSkKIHsKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybjsKKworI2lm
IFBMQVRGT1JNKElPUykKKyAgICAvLyBMZXQgVUlLaXQgaGFuZGxlIHRoZSBzY3JvbGwgcG9pbnQg
Zm9yIHRoZSBtYWluIGZyYW1lLgorICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IG1fd2ViRnJhbWUu
Z2V0KCk7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcod2ViRnJhbWUpOyAgIAor
ICAgIGlmICh3ZWJGcmFtZSA9PSBbd2ViVmlldyBtYWluRnJhbWVdKSB7CisgICAgICAgIFtbd2Vi
VmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNhdmVTdGF0ZVRv
SGlzdG9yeUl0ZW06a2l0KGl0ZW0pIGZvckZyYW1lOndlYkZyYW1lXTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgCiAgICAgCiAgICAgTlNWaWV3IDxX
ZWJEb2N1bWVudFZpZXc+ICpkb2NWaWV3ID0gW21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFt
ZVZpZXcgZG9jdW1lbnRWaWV3XTsKIApAQCAtMTExNyw2ICsxMzQ1LDE2IEBAIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OnJlc3RvcmVWaWV3U3RhdGUoKQogICAgIC8vIHNvIHRoZXJlICppcyog
bm8gc2Nyb2xsIHN0YXRlIHRvIHJlc3RvcmUhCiAgICAgaWYgKCFjdXJyZW50SXRlbSkKICAgICAg
ICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIExldCBVSUtpdCBoYW5kbGUg
dGhlIHNjcm9sbCBwb2ludCBmb3IgdGhlIG1haW4gZnJhbWUuCisgICAgV2ViRnJhbWUgKndlYkZy
YW1lID0gbV93ZWJGcmFtZS5nZXQoKTsKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmll
dyh3ZWJGcmFtZSk7ICAgCisgICAgaWYgKHdlYkZyYW1lID09IFt3ZWJWaWV3IG1haW5GcmFtZV0p
IHsKKyAgICAgICAgW1t3ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ondl
YlZpZXcgcmVzdG9yZVN0YXRlRnJvbUhpc3RvcnlJdGVtOmtpdChjdXJyZW50SXRlbSkgZm9yRnJh
bWU6d2ViRnJhbWUgZm9yY2U6Tk9dOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmICAg
ICAgICAgICAgICAgICAgICAKICAgICAKICAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKmRv
Y1ZpZXcgPSBbbV93ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyBkb2N1bWVudFZpZXdd
OwogICAgIGlmIChbZG9jVmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKF9XZWJEb2N1
bWVudFZpZXdTdGF0ZSldKSB7ICAgICAgICAKQEAgLTExNDAsOCArMTM3OCwxMCBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50Ojpwcm92aXNpb25hbExvYWRTdGFydGVkKCkKIAogICAgIFdlYkR5
bmFtaWNTY3JvbGxCYXJzVmlldyAqc2Nyb2xsVmlldyA9IFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+
d2ViRnJhbWVWaWV3IF9zY3JvbGxWaWV3XTsKICAgICBbc2Nyb2xsVmlldyBzZXREcmF3c0JhY2tn
cm91bmQ6Tk9dOworI2lmICFQTEFURk9STShJT1MpCiAgICAgW3Njcm9sbFZpZXcgc2V0VmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5Ok5TU2Nyb2xsRWxhc3RpY2l0eU5vbmVdOwogICAgIFtzY3JvbGxW
aWV3IHNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5Ok5TU2Nyb2xsRWxhc3RpY2l0eU5vbmVd
OworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZEZpbmlzaExvYWQo
KQpAQCAtMTE1Niw2ICsxMzk2LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cHJlcGFy
ZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgd29yayB0aGF0
IGlzIHRyaWdnZXJlZCBieSByZXNpZ25pbmcgZmlyc3QgcmVwb25kZXIgY2FuIGdldCBkb25lLgog
ICAgIC8vIFRoZSBtYWluIGV4YW1wbGUgd2hlcmUgdGhpcyBjYW1lIHVwIGlzIHRoZSB0ZXh0RGlk
RW5kRWRpdGluZyB0aGF0IGlzIHNlbnQgdG8gdGhlCiAgICAgLy8gRm9ybXNEZWxlZ2F0ZSAoMzIy
MzQxMykuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgX2RldGFjaENoaWxkcmVuLCBzaW5jZSB0
aGF0IHdpbGwKQEAgLTExNzMsNiArMTQxNCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKQogICAgIE5TUmVzcG9uZGVyICpmaXJz
dFJlc3AgPSBbd2luZG93IGZpcnN0UmVzcG9uZGVyXTsKICAgICBpZiAoW2ZpcnN0UmVzcCBpc0tp
bmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSAmJiBbKE5TVmlldyAqKWZpcnN0UmVzcCBpc0Rlc2Nl
bmRhbnRPZjpmcmFtZVZpZXddKQogICAgICAgICBbd2luZG93IGVuZEVkaXRpbmdGb3I6Zmlyc3RS
ZXNwXTsKKyNlbmRpZgogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCkBAIC0xMjA1LDYg
KzE0NDcsMTAgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0VGl0bGUoY29uc3QgU3Ry
aW5nV2l0aERpcmVjdGlvbiYgdGl0bGUsIGNvbnN0IFVSTCYKICAgICBuc1VSTCA9IFtuc1VSTCBf
d2Via2l0X2Nhbm9uaWNhbGl6ZV07CiAgICAgaWYoIW5zVVJMKQogICAgICAgICByZXR1cm47Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChbW25zVVJMIGFic29sdXRlU3RyaW5nXSBpc0VxdWFs
VG9TdHJpbmc6QCJhYm91dDpibGFuayJdKQorICAgICAgICByZXR1cm47CisjZW5kaWYKICAgICBO
U1N0cmluZyAqdGl0bGVOU1N0cmluZyA9IHRpdGxlLnN0cmluZygpOwogICAgICAgIAogICAgIFtb
W1dlYkhpc3Rvcnkgb3B0aW9uYWxTaGFyZWRIaXN0b3J5XSBpdGVtRm9yVVJMOm5zVVJMXSBzZXRU
aXRsZTp0aXRsZU5TU3RyaW5nXTsKQEAgLTEyMTQsNiArMTQ2MCwxMiBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSog
Y2FjaGVkRnJhbQogewogICAgIE93blB0cjxXZWJDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YT4gd2Vi
UGxhdGZvcm1EYXRhID0gYWRvcHRQdHIobmV3IFdlYkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRhKFtt
X3dlYkZyYW1lLT5fcHJpdmF0ZS0+d2ViRnJhbWVWaWV3IGRvY3VtZW50Vmlld10pKTsKICAgICBj
YWNoZWRGcmFtZS0+c2V0Q2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEod2ViUGxhdGZvcm1EYXRhLnJl
bGVhc2UoKSk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBr
bm93IHRoaXMgZnJhbWUgaXMgZ29pbmcgdG8gYmUgY2FjaGVkLiBTdG9wIGFsbCBwbHVnaW5zLgor
ICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOworICAg
IFt3ZWJWaWV3IF9zdG9wQWxsUGx1Z0luc0ZvclBhZ2VDYWNoZV07CisjZW5kaWYKIH0KIAogdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZy
YW1lKENhY2hlZEZyYW1lKiBjYWNoZWRGcmFtZSkKQEAgLTEyMjQsMjUgKzE0NzYsNDkgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZy
YW1lKENhY2hlZEZyYW1lKiBjYWMKICAgICBBU1NFUlQoY2FjaGVkRnJhbWUtPmRvY3VtZW50TG9h
ZGVyKCkpOwogICAgIFtjYWNoZWRWaWV3IHNldERhdGFTb3VyY2U6ZGF0YVNvdXJjZShjYWNoZWRG
cmFtZS0+ZG9jdW1lbnRMb2FkZXIoKSldOwogICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAg
Ly8gY2xlYW4gdXAgd2Via2l0IHBsdWdpbiBpbnN0YW5jZXMgYmVmb3JlIFdlYkhUTUxWaWV3IGdl
dHMgZnJlZWQuCiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5n
ZXQoKSk7CiAgICAgW3dlYlZpZXcgcmVtb3ZlUGx1Z2luSW5zdGFuY2VWaWV3c0ZvcjoobV93ZWJG
cmFtZS5nZXQoKSldOworI2VuZGlmCiAgICAgCiAgICAgW21fd2ViRnJhbWUtPl9wcml2YXRlLT53
ZWJGcmFtZVZpZXcgX3NldERvY3VtZW50VmlldzpjYWNoZWRWaWV3XTsKIH0KIAorI2lmIFBMQVRG
T1JNKElPUykKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJlc3RvcmVGcmFtZUhpZXJh
cmNoeUZvckNhY2hlZEZyYW1lKCkKK3sKKyAgICAvLyBXaGVuIGVudGVyaW5nIHRoZSBQYWdlQ2Fj
aGUgdGhlIERvY3VtZW50IGlzIGRldGFjaGVkIGFuZCB0aGUgcGx1Z2luIHZpZXcgbWF5CisgICAg
Ly8gaGF2ZSBjbGVhbmVkIGl0c2VsZiB1cCAocmVtb3ZpbmcgaXRzIHdlYnZpZXcgYW5kIGxheWVy
IHJlZmVyZW5jZXMpLiBOb3csIHdoZW4KKyAgICAvLyByZXN0b3JpbmcgdGhlIHBhZ2Ugd2Ugd2Fu
dCB0byByZWNyZWF0ZSB3aGF0ZXZlciBpcyBuZWNlc3NhcnkuCisgICAgV2ViVmlldyAqd2ViVmll
dyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgW3dlYlZpZXcgX3Jlc3RvcmVQ
bHVnSW5zRnJvbUNhY2hlXTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKIHsKICAgICBXZWJWaWV3ICp3ZWJW
aWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJEYXRhU291cmNlICpk
YXRhU291cmNlID0gW21fd2ViRnJhbWUuZ2V0KCkgX2RhdGFTb3VyY2VdOwogCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIGJvb2wgd2lsbFByb2R1Y2VIVE1MVmlldzsKKyAgICAvLyBGYXN0IHBhdGgg
dGhhdCBza2lwcyBpbml0aWFsaXphdGlvbiBvZiBvYmpjIGNsYXNzIG9iamVjdHMuCisgICAgaWYg
KFtkYXRhU291cmNlIF9kb2N1bWVudExvYWRlcl0tPnJlc3BvbnNlTUlNRVR5cGUoKSA9PSAidGV4
dC9odG1sIikKKyAgICAgICAgd2lsbFByb2R1Y2VIVE1MVmlldyA9IHRydWU7CisgICAgZWxzZQor
ICAgICAgICB3aWxsUHJvZHVjZUhUTUxWaWV3ID0gW21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJG
cmFtZVZpZXcgX3ZpZXdDbGFzc0Zvck1JTUVUeXBlOltkYXRhU291cmNlIF9yZXNwb25zZU1JTUVU
eXBlXV0gPT0gW1dlYkhUTUxWaWV3IGNsYXNzXTsKKyNlbHNlCisgICAgLy8gRklYTUUgKFZpZXds
ZXNzKTogSSBhc3N1bWUgd2Ugd2FudCB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIG9wdGltaXphdGlv
biBmb3Igdmlld2xlc3MgbW9kZSB0b28uCiAgICAgYm9vbCB3aWxsUHJvZHVjZUhUTUxWaWV3ID0g
W21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFtZVZpZXcgX3ZpZXdDbGFzc0Zvck1JTUVUeXBl
OltkYXRhU291cmNlIF9yZXNwb25zZU1JTUVUeXBlXV0gPT0gW1dlYkhUTUxWaWV3IGNsYXNzXTsK
KyNlbmRpZgogICAgIGJvb2wgY2FuU2tpcENyZWF0aW9uID0gY29yZShtX3dlYkZyYW1lLmdldCgp
KS0+bG9hZGVyKCkuc3RhdGVNYWNoaW5lKCktPmNvbW1pdHRpbmdGaXJzdFJlYWxMb2FkKCkgJiYg
d2lsbFByb2R1Y2VIVE1MVmlldzsKICAgICBpZiAoY2FuU2tpcENyZWF0aW9uKSB7CiAgICAgICAg
IFtbbV93ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyBkb2N1bWVudFZpZXddIHNldERh
dGFTb3VyY2U6ZGF0YVNvdXJjZV07CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIC8vIERvbid0IHN1cHByZXNzIHNjcm9sbGJhcnMgYmVmb3JlIHRoZSB2
aWV3IGNyZWF0aW9uIGlmIHdlJ3JlIG1ha2luZyB0aGUgdmlldyBmb3IgYSBub24tSFRNTCB2aWV3
LgogICAgIGlmICghd2lsbFByb2R1Y2VIVE1MVmlldykKICAgICAgICAgW1ttX3dlYkZyYW1lLT5f
cHJpdmF0ZS0+d2ViRnJhbWVWaWV3IF9zY3JvbGxWaWV3XSBzZXRTY3JvbGxCYXJzU3VwcHJlc3Nl
ZDpOTyByZXBhaW50T25VbnN1cHByZXNzOk5PXTsKQEAgLTEyNTEsNiArMTUyNywxNyBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkK
ICAgICBbd2ViVmlldyByZW1vdmVQbHVnaW5JbnN0YW5jZVZpZXdzRm9yOihtX3dlYkZyYW1lLmdl
dCgpKV07CiAgICAgCiAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpkb2N1bWVudFZpZXcg
PSBbbV93ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyBfbWFrZURvY3VtZW50Vmlld0Zv
ckRhdGFTb3VyY2U6ZGF0YVNvdXJjZV07CisjZWxzZQorICAgIE5TVmlldyA8V2ViRG9jdW1lbnRW
aWV3PiAqZG9jdW1lbnRWaWV3ID0gbmlsOworCisgICAgLy8gRmFzdCBwYXRoIHRoYXQgc2tpcHMg
aW5pdGlhbGl6YXRpb24gb2Ygb2JqYyBjbGFzcyBvYmplY3RzLgorICAgIGlmICh3aWxsUHJvZHVj
ZUhUTUxWaWV3KSB7CisgICAgICAgIGRvY3VtZW50VmlldyA9IFtbV2ViSFRNTFZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6W21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFtZVZpZXcgYm91bmRz
XV07CisgICAgICAgIFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+d2ViRnJhbWVWaWV3IF9zZXREb2N1
bWVudFZpZXc6ZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgW2RvY3VtZW50VmlldyByZWxlYXNlXTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZG9jdW1lbnRWaWV3ID0gW21fd2ViRnJhbWUtPl9wcml2YXRl
LT53ZWJGcmFtZVZpZXcgX21ha2VEb2N1bWVudFZpZXdGb3JEYXRhU291cmNlOmRhdGFTb3VyY2Vd
OworI2VuZGlmCiAgICAgaWYgKCFkb2N1bWVudFZpZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTI2OSw4ICsxNTU2LDEyIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25U
b0NvbW1pdHRlZEZvck5ld1BhZ2UoKQogICAgIFttX3dlYkZyYW1lLmdldCgpIF91cGRhdGVCYWNr
Z3JvdW5kQW5kVXBkYXRlc1doaWxlT2Zmc2NyZWVuXTsKICAgICBbbV93ZWJGcmFtZS0+X3ByaXZh
dGUtPndlYkZyYW1lVmlldyBfaW5zdGFsbF07CiAKLSAgICBpZiAoaXNNYWluRnJhbWUpCisgICAg
aWYgKGlzTWFpbkZyYW1lKSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBjb3JlVmlldy0+
c2V0RGVsZWdhdGVzU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCiAgICAgICAgIGNvcmVWaWV3LT5z
ZXRQYXJlbnRWaXNpYmxlKHRydWUpOworICAgIH0KIAogICAgIC8vIENhbGwgc2V0RGF0YVNvdXJj
ZSBvbiB0aGUgZG9jdW1lbnQgdmlldyBhZnRlciBpdCBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlIHZp
ZXcgaGllcmFyY2h5LgogICAgIC8vIFRoaXMgd2hhdCB3ZSBmb3IgdGhlIHRvcC1sZXZlbCB2aWV3
LCBzbyBzaG91bGQgZG8gdGhpcyBmb3Igdmlld3MgaW4gc3ViZnJhbWVzIGFzIHdlbGwuCkBAIC0x
Mjk4LDYgKzE1ODksMTEgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkU2F2ZVRvUGFn
ZUNhY2hlKCkKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkUmVzdG9yZUZyb21QYWdl
Q2FjaGUoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0
V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKKyAgICBpZiAoW3dlYlZpZXcgbWFpbkZyYW1lXSA9
PSBtX3dlYkZyYW1lLmdldCgpKQorICAgICAgICBbW3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3
YXJkZXJdIHdlYlZpZXdEaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZTp3ZWJWaWV3XTsKKyNlbmRpZgog
fQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEJlY29tZUZyYW1lc2V0
KGJvb2wpCkBAIC0xMzQxLDYgKzE2MzcsNyBAQCBOU0RpY3Rpb25hcnkgKldlYkZyYW1lTG9hZGVy
Q2xpZW50OjphY3Rpb25EaWN0aW9uYXJ5KGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdAogewog
ICAgIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MgPSAwOwogICAgIGNvbnN0IEV2ZW50KiBldmVudCA9
IGFjdGlvbi5ldmVudCgpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKGNvbnN0IFVJRXZl
bnRXaXRoS2V5U3RhdGUqIGtleVN0YXRlRXZlbnQgPSBmaW5kRXZlbnRXaXRoS2V5U3RhdGUoY29u
c3RfY2FzdDxFdmVudCo+KGV2ZW50KSkpIHsKICAgICAgICAgaWYgKGtleVN0YXRlRXZlbnQtPmN0
cmxLZXkoKSkKICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3MgfD0gTlNDb250cm9sS2V5TWFzazsK
QEAgLTEzNTEsNiArMTY0OCwxMCBAQCBOU0RpY3Rpb25hcnkgKldlYkZyYW1lTG9hZGVyQ2xpZW50
OjphY3Rpb25EaWN0aW9uYXJ5KGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdAogICAgICAgICBp
ZiAoa2V5U3RhdGVFdmVudC0+bWV0YUtleSgpKQogICAgICAgICAgICAgbW9kaWZpZXJGbGFncyB8
PSBOU0NvbW1hbmRLZXlNYXNrOwogICAgIH0KKyNlbHNlCisgICAgLy8gTm8gbW9kaWZpZXIgZmxh
Z3Mgb24gaU9TIHJpZ2h0IG5vdworICAgIG1vZGlmaWVyRmxhZ3MgPSAwOworI2VuZGlmCiAKICAg
ICBOU1VSTCAqb3JpZ2luYWxVUkwgPSBhY3Rpb24udXJsKCk7CiAKQEAgLTE1NTUsNiArMTg1Niw1
MyBAQCBwcml2YXRlOgogICAgIH0KIH07CiAKKyNpZiBQTEFURk9STShJT1MpCitAaW50ZXJmYWNl
IFdBS1ZpZXcgKFVJS2l0U2VjcmV0c1dlYktpdEtub3dzQWJvdXRTZWVVSVdlYlBsdWdJblZpZXcp
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorLSAoUGxhdGZvcm1MYXllciAqKXBs
dWdpbkxheWVyOworLSAoQk9PTCl3aWxsUHJvdmlkZVBsdWdpbkxheWVyOworLSAodm9pZClhdHRh
Y2hQbHVnaW5MYXllcjsKKy0gKHZvaWQpZGV0YWNoUGx1Z2luTGF5ZXI7CisjZW5kaWYKK0BlbmQK
KworY2xhc3MgUGx1Z2luV2lkZ2V0SU9TIDogcHVibGljIFBsdWdpbldpZGdldCB7CitwdWJsaWM6
CisgICAgUGx1Z2luV2lkZ2V0SU9TKFdBS1ZpZXcgKnZpZXcpCisgICAgICAgIDogUGx1Z2luV2lk
Z2V0KHZpZXcpCisgICAgeworICAgIH0KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFbcGxhdGZvcm1XaWRnZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHBsdWdpbkxheWVyKV0pCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBy
ZXR1cm4gW3BsYXRmb3JtV2lkZ2V0KCkgcGx1Z2luTGF5ZXJdOyAgIAorICAgIH0KKworICAgIHZp
cnR1YWwgYm9vbCB3aWxsUHJvdmlkZVBsdWdpbkxheWVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBbcGxhdGZvcm1XaWRnZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdp
bGxQcm92aWRlUGx1Z2luTGF5ZXIpXQorICAgICAgICAgICAgJiYgW3BsYXRmb3JtV2lkZ2V0KCkg
d2lsbFByb3ZpZGVQbHVnaW5MYXllcl07CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFBsdWdpbkxheWVyKCkKKyAgICB7CisgICAgICAgIGlmIChbcGxhdGZvcm1XaWRnZXQoKSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGF0dGFjaFBsdWdpbkxheWVyKV0pCisgICAgICAgICAg
ICBbcGxhdGZvcm1XaWRnZXQoKSBhdHRhY2hQbHVnaW5MYXllcl07CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGRldGFjaFBsdWdpbkxheWVyKCkKKyAgICB7CisgICAgICAgIGlmIChbcGxhdGZv
cm1XaWRnZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGRldGFjaFBsdWdpbkxheWVy
KV0pCisgICAgICAgICAgICBbcGxhdGZvcm1XaWRnZXQoKSBkZXRhY2hQbHVnaW5MYXllcl07Cisg
ICAgfQorI2VuZGlmCit9OworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQogCiBjbGFzcyBOZXRzY2FwZVBsdWdpbldpZGdldCA6IHB1Ymxp
YyBQbHVnaW5XaWRnZXQgewpAQCAtMTY0NSw3ICsxOTkzLDkgQEAgUGFzc1JlZlB0cjxXaWRnZXQ+
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgc2l6ZSwg
SFRNTFAKICAgICBpbnQgZXJyb3JDb2RlID0gMDsKIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBn
ZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgU0VM
IHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYlZpZXc6cGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KTsK
KyNlbmRpZgogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZShtX3dlYkZyYW1lLmdldCgp
KS0+ZG9jdW1lbnQoKTsKICAgICBOU1VSTCAqYmFzZVVSTCA9IGRvY3VtZW50LT5iYXNlVVJMKCk7
CkBAIC0xNjU2LDggKzIwMDYsMTEgQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgc2l6ZSwgSFRNTFAKICAgICAvLyBl
bWJlZHMgaXRzIHBsdWctaW4uIFRoaXMgc2l0ZS1zcGVjaWZpYyBoYWNrIHdvcmtzIGFyb3VuZCB0
aGUgaXNzdWUgYnkKICAgICAvLyBjb252ZXJ0aW5nIHRoZSBwYXJhbWV0ZXIgbmFtZXMgdG8gbG93
ZXJjYXNlIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCiAgICAgLy8gcGx1Zy1pbi4KKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSk7
CisjZW5kaWYKICAgICBOU011dGFibGVBcnJheSAqYXR0cmlidXRlS2V5cyA9IGtpdChwYXJhbU5h
bWVzKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c2V0dGlu
Z3MoKS5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpICYmIGVxdWFsSWdub3JpbmdDYXNlKG1pbWVU
eXBlLCAiYXBwbGljYXRpb24veC1zbmtwIikpIHsKICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgW2F0dHJpYnV0ZUtleXMgY291bnRdOyArK2kpCiAgICAgICAgICAgICBbYXR0cmli
dXRlS2V5cyByZXBsYWNlT2JqZWN0QXRJbmRleDppIHdpdGhPYmplY3Q6W1thdHRyaWJ1dGVLZXlz
IG9iamVjdEF0SW5kZXg6aV0gbG93ZXJjYXNlU3RyaW5nXV07CkBAIC0xNjgyLDYgKzIwMzUsNyBA
QCBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihj
b25zdCBJbnRTaXplJiBzaXplLCBIVE1MUAogICAgICAgICBpZiAodmlldykKICAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luV2lkZ2V0KHZpZXcpKTsKICAgICB9CisjZW5kaWYK
IAogICAgIE5TU3RyaW5nICpNSU1FVHlwZTsKICAgICBXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGx1
Z2luUGFja2FnZTsKQEAgLTE2OTQsNyArMjA0OCwxMiBAQCBQYXNzUmVmUHRyPFdpZGdldD4gV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBzaXplLCBIVE1M
UAogICAgIH0KICAgICAKICAgICBOU1N0cmluZyAqZXh0ZW5zaW9uID0gW1twbHVnaW5VUkwgcGF0
aF0gcGF0aEV4dGVuc2lvbl07CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFwbHVnaW5Q
YWNrYWdlICYmIFtleHRlbnNpb24gbGVuZ3RoXSkgeworI2Vsc2UKICAgICBpZiAoIXBsdWdpblBh
Y2thZ2UgJiYgW2V4dGVuc2lvbiBsZW5ndGhdICYmICFbTUlNRVR5cGUgbGVuZ3RoXSkgeworI2Vu
ZGlmCiAgICAgICAgIHBsdWdpblBhY2thZ2UgPSBbd2ViVmlldyBfcGx1Z2luRm9yRXh0ZW5zaW9u
OmV4dGVuc2lvbl07CiAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7CiAgICAgICAgICAgICBO
U1N0cmluZyAqbmV3TUlNRVR5cGUgPSBbcGx1Z2luUGFja2FnZSBNSU1FVHlwZUZvckV4dGVuc2lv
bjpleHRlbnNpb25dOwpAQCAtMTc1MiwxMSArMjExMSw3NSBAQCBQYXNzUmVmUHRyPFdpZGdldD4g
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBzaXplLCBI
VE1MUAogICAgICAgICAgICAgW2Vycm9yIHJlbGVhc2VdOwogICAgICAgICB9CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIC8vIFNlZSBpZiB0aGlzIGlzIGEgWW91VHViZSBGbGFzaCBwbHVn
LWluCisgICAgICAgIGlmIChbTUlNRVR5cGUgaXNFcXVhbFRvU3RyaW5nOkAiYXBwbGljYXRpb24v
eC1zaG9ja3dhdmUtZmxhc2giXSkgeworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHM6a2l0KHBhcmFtVmFsdWVz
KSBmb3JLZXlzOmtpdChwYXJhbU5hbWVzKV07CisgICAgICAgICAgICBOU1N0cmluZyAqc3JjU3Ry
aW5nID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5OkAic3JjIl07CisgICAgICAgICAgICBpZiAo
c3JjU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgTlNVUkwgKnNyY1VSTCA9IFtOU1VSTCBVUkxX
aXRoU3RyaW5nOnNyY1N0cmluZ107CisgICAgICAgICAgICAgICAgTlNVUkwgKnlvdXR1YmVVUkwg
PSBbc3JjVVJMIF93ZWJraXRfeW91VHViZVVSTF07CisgICAgICAgICAgICAgICAgaWYgKHNyY1VS
TCAmJiB5b3V0dWJlVVJMKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUg
eW91dHViZVVSTCAoeW91dHViZTpWaWRlb0lEKSB0byBpZnJhbWUgZW1iZWQgdXJsIHdoaWNoIGhh
cyB0aGUgZm9ybWF0OiBodHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1ZpZGVvSUQKKyAgICAg
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKnNyY1BhdGggPSBbc3JjVVJMIHBhdGhdOworICAgICAg
ICAgICAgICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtbeW91dHViZVVSTCBhYnNvbHV0ZVN0
cmluZ10gc3Vic3RyaW5nRnJvbUluZGV4OltbeW91dHViZVVSTCBzY2hlbWVdIGxlbmd0aF0gKyAx
XTsKKyAgICAgICAgICAgICAgICAgICAgTlNSYW5nZSByYW5nZU9mVmlkZW9JREluUGF0aCA9IFtz
cmNQYXRoIHJhbmdlT2ZTdHJpbmc6dmlkZW9JRF07CisgICAgICAgICAgICAgICAgICAgIE5TU3Ry
aW5nICpzcmNVUkxQcmVmaXggPSBuaWw7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZU9m
VmlkZW9JREluUGF0aC5sb2NhdGlvbiA9PSBOU05vdEZvdW5kICYmICFXZWJLaXRMaW5rZWRPbk9y
QWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9ZT1VUVUJFX0VNQkVEX0lGUkFNRV9UUkFO
U0ZPUk0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmlkZW9JRCBpcyBu
b3QgaW5zaWRlIHNyY1BhdGgsIHRoZSBlbWJlZCBzcmMgdXJsIGlzIGluIHdyb25nIGZvcm1hdC4g
V2Ugc3RpbGwgd2FudCB0byBzdXBwb3J0IHRoZW0gZm9yIGFwcHMgYnVpbGQgYWdhaW5zdCA1LjEg
YW5kIG9sZGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVtYmVkIHNyYyBsaWtl
IGh0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1WaWRlb0lELCB3ZSBtYWtlIHNyY1VSTFBy
ZWZpeCAiaHR0cDovL3d3dy55b3V0dWJlLmNvbSIuCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBTZWU6IDxyZGFyOi8vcHJvYmxlbS8xMTUxNzUwMj4geW91dHViZSB2aWRlb3MgZG9uJ3Qgd29y
ayBpbiBGQU8gRm9yZXN0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY1VSTFByZWZpeCA9
IFtzcmNTdHJpbmcgc3Vic3RyaW5nVG9JbmRleDpbc3JjU3RyaW5nIHJhbmdlT2ZTdHJpbmc6c3Jj
UGF0aF0ubG9jYXRpb25dOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHJhbmdlT2ZWaWRlb0lESW5QYXRoLmxlbmd0aCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZyb20gdGhlIG9yaWdpbmFsIFVSTCwgd2UgbmVlZCB0
byBnZXQgdGhlIHBhcnQgYmVmb3JlIC9wYXRoL1ZpZGVvSWQuCisgICAgICAgICAgICAgICAgICAg
ICAgICBOU1JhbmdlIHJhbmdlT2ZQYXRoQmVmb3JlVmlkZW9JRCA9IFtzcmNTdHJpbmcgcmFuZ2VP
ZlN0cmluZzpbc3JjUGF0aCBzdWJzdHJpbmdUb0luZGV4OnJhbmdlT2ZWaWRlb0lESW5QYXRoLmxv
Y2F0aW9uXV07CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmFuZ2VPZlBhdGhCZWZv
cmVWaWRlb0lELmxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY1VSTFByZWZp
eCA9IFtzcmNTdHJpbmcgc3Vic3RyaW5nVG9JbmRleDpyYW5nZU9mUGF0aEJlZm9yZVZpZGVvSUQu
bG9jYXRpb25dOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIE5T
U3RyaW5nICpxdWVyeSA9IFtzcmNVUkwgcXVlcnldOworICAgICAgICAgICAgICAgICAgICAvLyBC
eSBkZWZhdWx0LCB0aGUgaWZyYW1lIHdpbGwgZGlzcGxheSBpbmZvcm1hdGlvbiBsaWtlIHRoZSB2
aWRlbyB0aXRsZSBhbmQgdXBsb2FkZXIgb24gdG9wIG9mIHRoZSB2aWRlby4gIERvbid0IGRpc3Bs
YXkKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlbSBpZiB0aGUgZW1iZWRpbmcgaHRtbCBkb2Vz
bid0IHNwZWNpZnkgaXQuCisgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeSAmJiBbcXVlcnkg
bGVuZ3RoXSAmJiBbcXVlcnkgcmFuZ2VPZlN0cmluZzpAInNob3dpbmZvIl0ubG9jYXRpb24gPT0g
TlNOb3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gW3F1ZXJ5IHN0cmlu
Z0J5QXBwZW5kaW5nRm9ybWF0OkAiJnNob3dpbmZvPTAiXTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBAInNob3dpbmZvPTAiOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcXVlcnkgc3RyaW5nIGlmIGl0IGlzIHZh
bGlkLiAgU29tZSBzaXRlcyBhcHBhcmVudGx5IGZvcmdldCB0byBhZGQgIj8iIGZvciB0aGUgcXVl
cnkgc3RyaW5nLCBpbiB0aGF0IGNhc2UsCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwg
ZGlzY2FyZCB0aGUgcGFyYW1ldGVycyBpbiB0aGUgdXJsLgorICAgICAgICAgICAgICAgICAgICAv
LyBTZWU6IDxyZGFyOi8vcHJvYmxlbS8xMTUzNTE1NT4gW0JpbmNvbXBhdF0gUmVncmVzc2lvbjog
U0MyQ2FzdHMgYXBwOiBWaWRlb3MgZG9uJ3QgcGxheSBpbiBTQzJDYXN0cworICAgICAgICAgICAg
ICAgICAgICBOU1N0cmluZyAqZW1iZWRTcmMgPSBxdWVyeSA/IFtzcmNVUkxQcmVmaXggc3RyaW5n
QnlBcHBlbmRpbmdGb3JtYXQ6QCIvZW1iZWQvJUA/JUAiLCB2aWRlb0lELCBxdWVyeV0gOiBbc3Jj
VVJMUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiL2VtYmVkLyVAIiwgdmlkZW9JRF07
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjplbWJlZFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHNoYWRvdyBzdWJ0cmVlIGZv
ciB0aGUgcGx1Z2luIGVsZW1lbnQsIHRoZSBpZnJhbWUgcGxheWVyIGlzIGluamVjdGVkIGluIHRo
ZSBzaGFkb3cgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQqIHBsdWdpbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
Kj4oZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5FbGVtZW50LT5jcmVh
dGVTaGFkb3dJRnJhbWVTdWJ0cmVlKGVtYmVkU3JjKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhpcyBpcyBhIFlvdVR1YmUgRmxhc2ggcGx1Zy1pbi4gIFdlIGRvbid0IGhhdmUgRmxh
c2guICBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXBwbGUncyBzcGVjaWFsIFlvdVR1YmUgcGx1Zy1p
biBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgIHBsdWdpblBhY2thZ2UgPSBbd2ViVmlldyBf
cGx1Z2luRm9yTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi94LWFwcGxlLWZha2UteW91dHViZS1wbHVn
aW4iXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZpZXcgPSBwbHVnaW5WaWV3KG1fd2ViRnJhbWUuZ2V0KCksIChXZWJQ
bHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZSwga2l0KHBhcmFtTmFtZXMpLCBraXQocGFyYW1W
YWx1ZXMpLCBiYXNlVVJMLCBraXQoZWxlbWVudCksIGxvYWRNYW51YWxseSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBsdWdpbldpZGdldElPUyh2aWV3KSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCisKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAg
IEFTU0VSVCh2aWV3KTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQbHVnaW5XaWRnZXRJT1ModmlldykpOworI2Vsc2UKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFBsdWdpbldpZGdldCh2aWV3KSk7CisjZW5kaWYKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CiAKQEAgLTE4NjEsNiArMjI4NCw3IEBAIFBhc3NSZWZQdHI8V2lkZ2V0PiBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXJQcm94eVBsdWdpbihjb25zdCBJbnRTCiAg
ICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CiAgICAg
TlNVUkwgKlVSTCA9IHVybDsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgU0VMIHNlbGVjdG9y
ID0gQHNlbGVjdG9yKHdlYlZpZXc6cGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KTsKIAogICAgIGlm
IChbW3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgewpA
QCAtMTg4MSw2ICsyMzA1LDcgQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVNZWRpYVBsYXllclByb3h5UGx1Z2luKGNvbnN0IEludFMKICAgICAgICAgaWYg
KHZpZXcpCiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbldpZGdldCh2aWV3
KSk7CiAgICAgfQorI2VuZGlmCiAKICAgICBXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGx1Z2luUGFj
a2FnZSA9IFt3ZWJWaWV3IF92aWRlb1Byb3h5UGx1Z2luRm9yTUlNRVR5cGU6bWltZVR5cGVdOwog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmRvY3VtZW50
KCk7CkBAIC0xOTA2LDcgKzIzMzEsMTEgQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpjcmVhdGVNZWRpYVBsYXllclByb3h5UGx1Z2luKGNvbnN0IEludFMKICAgICB9
CiAgICAgCiAgICAgQVNTRVJUKHZpZXcpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBsdWdpbldpZGdldElPUyh2aWV3KSk7CisjZWxzZQogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUGx1Z2luV2lkZ2V0KHZpZXcpKTsKKyNlbmRpZgogCiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTk5MywxMyArMjQyMiwyOCBAQCBQYXNzUmVmUHRyPEZy
YW1lTmV0d29ya2luZ0NvbnRleHQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3b3Jr
aW5nQ29udGV4dAogICAgIHJldHVybiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUo
Y29yZShtX3dlYkZyYW1lLmdldCgpKSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitib29sIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRMb2FkTWVkaWFFbGVtZW50VVJMKGNvbnN0IFVSTCYg
dXJsKSBjb25zdCAKK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZy
YW1lLmdldCgpKTsKKyAgICAKKyAgICBpZiAoaWQgcG9saWN5RGVsZWdhdGUgPSBbd2ViVmlldyBw
b2xpY3lEZWxlZ2F0ZV0pIHsKKyAgICAgICAgaWYgKFtwb2xpY3lEZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkTG9hZE1lZGlhVVJMOmluRnJhbWU6KV0p
CisgICAgICAgICAgICByZXR1cm4gW3BvbGljeURlbGVnYXRlIHdlYlZpZXc6d2ViVmlldyBzaG91
bGRMb2FkTWVkaWFVUkw6dXJsIGluRnJhbWU6bV93ZWJGcmFtZS5nZXQoKV07CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyCiAKICsgKHZvaWQpaW5pdGlhbGl6ZQogeworI2lmICFQTEFURk9STShJT1MpCiAg
ICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRo
cmVhZFRvUHJvY2Vzc01haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1
bkxvb3AoKTsKKyNlbmRpZgogICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2Vs
Zik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAppbmRleCA2NDcxOTIxMWU2NmRiM2M4NDVl
MGUwZWVjNzI5MjBlMWEwMDE0ODE3Li5lZTZkZGFiNGNhMTNjMjhlNDFmOTAwNDViYTI0MjI4ZTlk
MzI5NWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCkBAIC0zOCw2ICszOCwxMiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCk7CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgLy8gRklYTUU6IElmIE1vYmlsZVNhZmFyaSBldmVyIHN3aXRjaGVzIHRv
IHBlci10YWIgb3Igbm9uLXNoYXJlZCBwcml2YXRlIHN0b3JhZ2UsIHRoZW4gdGhpcyBjYW4gYmUg
cmVtb3ZlZC4KKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTAwNzU2NjU+IFN1Yi1UTEY6IFBlci10
YWIgcHJpdmF0ZSBicm93c2luZworICAgIHN0YXRpYyB2b2lkIGNsZWFyUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbkNvb2tpZVN0b3JhZ2UoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogCiAgICAgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dChXZWJDb3JlOjpGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5tbQppbmRleCBhYTk1NzI3YzdjZDE2NWFjY2M3MDc0ODRkY2RjNmM2ZTUyZDJjMDhi
Li4wZGI0ZjgwMWYxOGYzZTc3N2UzMjE5N2JiY2Q5YjAyMjMxMTAyMjJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQubW0KQEAgLTM0LDYgKzM0LDEyIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCisjaWYgUExBVEZPUk0o
SU9TKQorI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGSFRUUENvb2tpZXNQcml2Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1dlYkNvcmVUaHJlYWQuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZUxvYWREZWxl
Z2F0ZS5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4mIHByaXZhdGVTZXNzaW9uKCkKQEAg
LTU5LDYgKzY1LDE2IEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZGVzdHJveVBy
aXZhdGVCcm93c2luZ1Nlc3Npb24oKQogICAgIHByaXZhdGVTZXNzaW9uKCkgPSBudWxscHRyOwog
fQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpj
bGVhclByaXZhdGVCcm93c2luZ1Nlc3Npb25Db29raWVTdG9yYWdlKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChwcml2YXRlU2Vzc2lvbigpKTsKKworICAgIENG
SFRUUENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKHByaXZhdGVTZXNzaW9uKCktPmNvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSk7Cit9CisjZW5kaWYKKwogYm9vbCBXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0OjpuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZy
YW1lKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKS5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRp
b25DbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0
aW9uQ2xpZW50LmgKaW5kZXggNTQ0MzYyMmY5YTU0N2M2OWI1NjJlZGZmMjQwYTA3ZjcyMDc1Yzhl
Yy4uODBhNDM4OWI4ZjRlNDlhZTIzYzgyY2MzMjUyYjE0ZjhlMzcxYmY4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVu
dC5oCkBAIC00MCw3ICs0MCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0
aW9uRGVzdHJveWVkKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmco
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCkgT1ZFUlJJREU7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiB1bmlmeSB0aGlzIHdpdGggTWFjIG9uIE9w
ZW5Tb3VyY2UuCisgICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZUhpZ2hBY2N1cmFjeShib29sKSBP
VkVSUklERTsKKyNlbHNlCiAgICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZUhpZ2hBY2N1cmFjeShi
b29sKSBPVkVSUklERSB7IH0KKyNlbmRpZgogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpHZW9sb2Nh
dGlvblBvc2l0aW9uKiBsYXN0UG9zaXRpb24oKSBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5tbQpp
bmRleCAyN2U1YmFiZmU4ZDFkMGVjZDUwYjM4YjhiMDRhMDJkMGQxMGFmMzk2Li5kNTg0NjBlYTEy
OGZjOGQ2NzZhNGZmODhjMjgyZGJkYTViN2Q2NTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5tbQpAQCAtMzgs
MTQgKzM4LDM5IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0dlb2xvY2F0aW9uLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxXZWJDb3JlL1dB
S1Jlc3BvbmRlci5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkNvcmVUaHJlYWRSdW4uaD4KKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorI2lmICFQTEFURk9STShJT1MpCitAaW50
ZXJmYWNlIFdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIgOiBOU09iamVjdCA8V2ViQWxsb3dE
ZW55UG9saWN5TGlzdGVuZXI+Cit7CisgICAgUmVmUHRyPEdlb2xvY2F0aW9uPiBfZ2VvbG9jYXRp
b247Cit9CistIChpZClpbml0V2l0aEdlb2xvY2F0aW9uOihHZW9sb2NhdGlvbiopZ2VvbG9jYXRp
b247CitAZW5kCisjZWxzZQogQGludGVyZmFjZSBXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVy
IDogTlNPYmplY3QgPFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyPgogewogICAgIFJlZlB0cjxH
ZW9sb2NhdGlvbj4gX2dlb2xvY2F0aW9uOworICAgIFJldGFpblB0cjxXZWJWaWV3ICo+IF93ZWJW
aWV3OworICAgIFJldGFpblB0cjxpZDxXZWJHZW9sb2NhdGlvblByb3ZpZGVyPiA+IF9nZW9sb2Nh
dGlvblByb3ZpZGVyOworfQorLSAoaWQpaW5pdFdpdGhHZW9sb2NhdGlvbjooR2VvbG9jYXRpb24q
KWdlb2xvY2F0aW9uIGZvcldlYlZpZXc6KFdlYlZpZXcqKXdlYlZpZXcgcHJvdmlkZXI6KGlkPFdl
Ykdlb2xvY2F0aW9uUHJvdmlkZXI+KXByb3ZpZGVyOworQGVuZAorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShJT1MpCitAaW50ZXJmYWNlIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJbml0aWFsaXphdGlv
bkxpc3RlbmVyIDogTlNPYmplY3QgPFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJbml0aWFsaXphdGlv
bkxpc3RlbmVyPiB7CitAcHJpdmF0ZQorICAgIFJlZlB0cjxHZW9sb2NhdGlvbj4gbV9nZW9sb2Nh
dGlvbjsKIH0KIC0gKGlkKWluaXRXaXRoR2VvbG9jYXRpb246KEdlb2xvY2F0aW9uKilnZW9sb2Nh
dGlvbjsKIEBlbmQKKyNlbmRpZgogCiBXZWJHZW9sb2NhdGlvbkNsaWVudDo6V2ViR2VvbG9jYXRp
b25DbGllbnQoV2ViVmlldyAqd2ViVmlldykKICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQpAQCAt
NjcsNiArOTIsMTUgQEAgdm9pZCBXZWJHZW9sb2NhdGlvbkNsaWVudDo6c3RvcFVwZGF0aW5nKCkK
ICAgICBbW21fd2ViVmlldyBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gdW5yZWdpc3RlcldlYlZpZXc6
bV93ZWJWaWV3XTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgV2ViR2VvbG9jYXRpb25D
bGllbnQ6OnNldEVuYWJsZUhpZ2hBY2N1cmFjeShib29sIHdhbnRzSGlnaEFjY3VyYWN5KQorewor
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbW21fd2ViVmlldyBfZ2VvbG9j
YXRpb25Qcm92aWRlcl0gc2V0RW5hYmxlSGlnaEFjY3VyYWN5OndhbnRzSGlnaEFjY3VyYWN5XTsK
KyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorI2VuZGlmCisKIHZvaWQgV2ViR2Vv
bG9jYXRpb25DbGllbnQ6OnJlcXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlv
bikKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CkBAIC03Nyw2ICsxMTEsNyBA
QCB2b2lkIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpyZXF1ZXN0UGVybWlzc2lvbihHZW9sb2NhdGlv
biogZ2VvbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIEZyYW1lICpmcmFtZSA9IGdlb2xvY2F0aW9uLT5mcmFtZSgpOwogICAgIFdlYlNl
Y3VyaXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5p
dFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46ZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCldOwogICAgIFdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIqIGxpc3RlbmVyID0gW1tX
ZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyIGFsbG9jXSBpbml0V2l0aEdlb2xvY2F0aW9uOmdl
b2xvY2F0aW9uXTsKQEAgLTg1LDcgKzEyMCwxMCBAQCB2b2lkIFdlYkdlb2xvY2F0aW9uQ2xpZW50
OjpyZXF1ZXN0UGVybWlzc2lvbihHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCiAKICAgICBbd2Vi
T3JpZ2luIHJlbGVhc2VdOwogICAgIFtsaXN0ZW5lciByZWxlYXNlXTsKLQorI2Vsc2UKKyAgICBS
ZXRhaW5QdHI8V2ViR2VvbG9jYXRpb25Qcm92aWRlckluaXRpYWxpemF0aW9uTGlzdGVuZXI+IGxp
c3RlbmVyID0gYWRvcHROUyhbW1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJJbml0aWFsaXphdGlvbkxp
c3RlbmVyIGFsbG9jXSBpbml0V2l0aEdlb2xvY2F0aW9uOmdlb2xvY2F0aW9uXSk7CisgICAgW1tt
X3dlYlZpZXcgX2dlb2xvY2F0aW9uUHJvdmlkZXJdIGluaXRpYWxpemVHZW9sb2NhdGlvbkZvcldl
YlZpZXc6bV93ZWJWaWV3IGxpc3RlbmVyOmxpc3RlbmVyLmdldCgpXTsKKyNlbmRpZgogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKQEAgLTk0LDYgKzEzMiw3IEBAIEdlb2xvY2F0
aW9uUG9zaXRpb24qIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpsYXN0UG9zaXRpb24oKQogICAgIHJl
dHVybiBjb3JlKFtbbV93ZWJWaWV3IF9nZW9sb2NhdGlvblByb3ZpZGVyXSBsYXN0UG9zaXRpb25d
KTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBAaW1wbGVtZW50YXRpb24gV2ViR2VvbG9jYXRp
b25Qb2xpY3lMaXN0ZW5lcgogCiAtIChpZClpbml0V2l0aEdlb2xvY2F0aW9uOihHZW9sb2NhdGlv
biopZ2VvbG9jYXRpb24KQEAgLTExNiw0ICsxNTUsODYgQEAgLSAodm9pZClkZW55CiAKIEBlbmQK
IAorI2Vsc2UKK0BpbXBsZW1lbnRhdGlvbiBXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyCist
IChpZClpbml0V2l0aEdlb2xvY2F0aW9uOihHZW9sb2NhdGlvbiopZ2VvbG9jYXRpb24gZm9yV2Vi
VmlldzooV2ViVmlldyopd2ViVmlldyBwcm92aWRlcjooaWQ8V2ViR2VvbG9jYXRpb25Qcm92aWRl
cj4pcHJvdmlkZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbjsKKyAg
ICBfd2ViVmlldyA9IHdlYlZpZXc7CisgICAgX2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBwcm92aWRl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClhbGxvdworeworICAgIFdlYlRocmVh
ZFJ1biheeworICAgICAgICBfZ2VvbG9jYXRpb24tPnNldElzQWxsb3dlZCh0cnVlKTsKKyAgICB9
KTsKK30KKworLSAodm9pZClkZW55Cit7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIF9n
ZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2VkKGZhbHNlKTsKKyAgICAgICAgW19nZW9sb2NhdGlvblBy
b3ZpZGVyLmdldCgpIGNhbmNlbFdhcm1VcEZvcldlYlZpZXc6X3dlYlZpZXcuZ2V0KCldOworICAg
IH0pOworfQorCistICh2b2lkKWRlbnlPbmx5VGhpc1JlcXVlc3QKK3sKKyAgICBXZWJUaHJlYWRS
dW4oXnsKKyAgICAgICAgLy8gQSBzb2Z0IGRlbnkgZG9lcyBub3QgcHJldmVudCBzdWJzZXF1ZW50
IHJlcXVlc3QgZnJvbSB0aGUgR2VvbG9jYXRpb24gb2JqZWN0LgorICAgICAgICBbc2VsZiBkZW55
XTsKKyAgICAgICAgX2dlb2xvY2F0aW9uLT5yZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigp
OworICAgIH0pOworfQorCistIChCT09MKXNob3VsZENsZWFyQ2FjaGUKK3sKKyAgICAvLyBUaGVv
cmV0aWNhbGx5LCBXZWJWaWV3IGNvdWxkIGNoYW5nZXMgdGhlIFdlYlByZWZlcmVuY2VzIGFmdGVy
IHdlIGdldCB0aGUgcG9pbnRlci4KKyAgICAvLyBXZSBsb2NrIHRvIGJlIG9uIHRoZSBzYWZlIHNp
ZGUuCisgICAgV2ViVGhyZWFkTG9jaygpOworCisgICAgcmV0dXJuIFtbX3dlYlZpZXcuZ2V0KCkg
cHJlZmVyZW5jZXNdIF9hbHdheXNSZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uXTsKK30KK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJbml0aWFsaXphdGlv
bkxpc3RlbmVyCistIChpZClpbml0V2l0aEdlb2xvY2F0aW9uOihHZW9sb2NhdGlvbiopZ2VvbG9j
YXRpb24KK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmIChzZWxmKQorICAgICAg
ICBtX2dlb2xvY2F0aW9uID0gZ2VvbG9jYXRpb247CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpaW5pdGlhbGl6YXRpb25BbGxvd2VkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgcHJv
dmlkZXI6KGlkPFdlYkdlb2xvY2F0aW9uUHJvdmlkZXI+KXByb3ZpZGVyCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9nZW9sb2NhdGlv
bi0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgIFtwcm92aWRlciBjYW5jZWxX
YXJtVXBGb3JXZWJWaWV3OndlYlZpZXddOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFdl
YlNlY3VyaXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBf
aW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46ZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCldOworICAgIFdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIgKmxpc3RlbmVyID0g
W1tXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyIGFsbG9jXSBpbml0V2l0aEdlb2xvY2F0aW9u
Om1fZ2VvbG9jYXRpb24uZ2V0KCkgZm9yV2ViVmlldzp3ZWJWaWV3IHByb3ZpZGVyOnByb3ZpZGVy
XTsKKyAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViVmlldzpkZWNpZGVQb2xpY3lGb3JH
ZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOmZyYW1lOmxpc3RlbmVyOik7CisgICAgQ2FsbFVJ
RGVsZWdhdGUod2ViVmlldywgc2VsZWN0b3IsIHdlYk9yaWdpbiwga2l0KGZyYW1lKSwgbGlzdGVu
ZXIpOworICAgIFt3ZWJPcmlnaW4gcmVsZWFzZV07CisgICAgW2xpc3RlbmVyIHJlbGVhc2VdOwor
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworLSAodm9pZClpbml0aWFsaXph
dGlvbkRlbmllZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHByb3ZpZGVyOihpZDxXZWJHZW9s
b2NhdGlvblByb3ZpZGVyPilwcm92aWRlcgoreworICAgIG1fZ2VvbG9jYXRpb24tPnNldElzQWxs
b3dlZChmYWxzZSk7Cit9CitAZW5kCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjZW5kaWYg
Ly8gRU5BQkxFKEdFT0xPQ0FUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLm0gYi9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubQppbmRleCA0
NzI4YTZlNTI2MmM5MTY4YTM3MWNmYWRiOTFhN2IyZDMyN2Y2MjliLi5kZTlkMDQxOWMwOTAyMjBm
NTQ1NDFhNjViMzQyOWQ4OGM3MTdjYjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubQpA
QCAtMjYsNiArMjYsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykK
KwogI2ltcG9ydCAiV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLmgiCiAKICNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CkBAIC03MSwzICs3Myw1IEBAIC0gKElCQWN0aW9uKXByZXNzZWRPSzoo
aWQpc2VuZGVyCiB9CiAKIEBlbmQKKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLZXlHZW5lcmF0b3IubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLZXlHZW5lcmF0b3IubW0KaW5k
ZXggM2U1MzVlYTkzNDFjYjg1MDMzNWFmMTM0OWExYWZhZTQyNTk0MzNjNC4uODY0ZDk5MWFlYWZi
ZmRlZDU1ZjhkOTU1NjA2M2M1N2E3MmQzNDFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViS2V5R2VuZXJhdG9yLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYktleUdlbmVyYXRvci5tbQpAQCAtMjMsNiArMjMsOCBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQorCiAjaW1wb3J0IDxXZWJLaXQvV2ViS2V5R2VuZXJhdG9yLmg+CiAKICNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgpAQCAtNTksMyArNjEsNSBAQCAtIChXZWJDZXJ0aWZpY2F0
ZVBhcnNlUmVzdWx0KWFkZENlcnRpZmljYXRlc1RvS2V5Y2hhaW5Gcm9tRGF0YTooTlNEYXRhICop
ZGF0YQogfQogCiBAZW5kCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1t
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50
Lm1tCmluZGV4IDJkNGEwYTM2MTAwMTEzMzFhYjc0YjI0MjRjMGVlOGI0OTEzZGUxMGMuLmI0YTFj
M2Y5ZjUyN2RjMWE4ODBhOTkwOWNhYjUyNDE4NmYzODcxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0K
QEAgLTI4OCw1ICsyODgsMTggQEAgLSAodm9pZClkZW55CiAjZW5kaWYKIH0KIAorI2lmIFBMQVRG
T1JNKElPUykKKy0gKHZvaWQpZGVueU9ubHlUaGlzUmVxdWVzdAoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCistIChCT09MKXNob3VsZENsZWFyQ2FjaGUKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTk87Cit9CisjZW5kaWYKKwogQGVuZAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLm1tCmluZGV4IDIyOTVlMDczM2E0NDI3Yzk0M2UxYjc3
NzIxYzk4YWQ1MWVhNDU1ZTUuLmRlZGZlYzFlMDAwNjEzNjE3NjE1ZmUyODQ0YmNmMzM5NmMzMGQ1
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLm1tCkBAIC04OCw0ICs4OCwyOCBAQCAtICh2
b2lkKWNob29zZUZpbGVuYW1lczooTlNBcnJheSAqKWZpbGVuYW1lcwogICAgIF9jaG9vc2VyID0g
MDsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKHZvaWQpY2hvb3NlRmlsZW5hbWU6KE5TU3Ry
aW5nICopZmlsZW5hbWUgZGlzcGxheVN0cmluZzooTlNTdHJpbmcgKilkaXNwbGF5U3RyaW5nIGlj
b25JbWFnZTooQ0dJbWFnZVJlZilpbWFnZVJlZgoreworICAgIFtzZWxmIGNob29zZUZpbGVuYW1l
czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZmlsZW5hbWVdIGRpc3BsYXlTdHJpbmc6ZGlzcGxh
eVN0cmluZyBpY29uSW1hZ2U6aW1hZ2VSZWZdOworfQorCistICh2b2lkKWNob29zZUZpbGVuYW1l
czooTlNBcnJheSAqKWZpbGVuYW1lcyBkaXNwbGF5U3RyaW5nOihOU1N0cmluZyAqKWRpc3BsYXlT
dHJpbmcgaWNvbkltYWdlOihDR0ltYWdlUmVmKWltYWdlUmVmCit7CisgICAgQVNTRVJUKF9jaG9v
c2VyKTsKKyAgICBpZiAoIV9jaG9vc2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
SWNvbj4gaWNvbiA9IEljb246OmNyZWF0ZUljb25Gb3JJbWFnZShpbWFnZVJlZik7CisKKyAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gW2ZpbGVuYW1lcyBjb3VudF07CisgICAgVmVjdG9yPFN0cmluZz4g
bmFtZXMoY291bnQpOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgIG5hbWVzW2ldID0gW2ZpbGVuYW1lcyBvYmplY3RBdEluZGV4OmldOworICAgIF9j
aG9vc2VyLT5jaG9vc2VNZWRpYUZpbGVzKG5hbWVzLCBkaXNwbGF5U3RyaW5nLCBpY29uLmdldCgp
KTsKKyAgICBfY2hvb3Nlci0+ZGVyZWYoKTsKKyAgICBfY2hvb3NlciA9IDA7Cit9CisjZW5kaWYK
KwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
U2VjdXJpdHlPcmlnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJT
ZWN1cml0eU9yaWdpbi5tbQppbmRleCBhMTgwMDQ1OTc5ZmNiMDFjYmNmYjU2NWM5ZDQyZGI3MTM2
MjY2ODAyLi5hOGE3NTFmZWYwNTkxOGY4NmFlMjUyY2M5NTZhZDg1OTZjMjMzNjhlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdp
bi5tbQpAQCAtNjYsNiArNjYsMTMgQEAgLSAoTlNTdHJpbmcgKilkYXRhYmFzZUlkZW50aWZpZXIK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKS0+
ZGF0YWJhc2VJZGVudGlmaWVyKCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCistIChOU1N0cmlu
ZyAqKXRvU3RyaW5nCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmln
aW4qPihfcHJpdmF0ZSktPnRvU3RyaW5nKCk7Cit9CisjZW5kaWYKKwogLSAoTlNTdHJpbmcgKilz
dHJpbmdWYWx1ZQogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlY3VyaXR5T3JpZ2lu
Kj4oX3ByaXZhdGUpLT50b1N0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCmluZGV4IGYyMzExM2U3NDlmNWVh
NGNhMTYyMTgzYzY3ZTc4ZWJjNjcyNWFlOGIuLjE2NjA5MzU5YTQyZTQ2YWI1ZDkxZjViNTk1N2Rm
YTUyZTk2MmUyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlN5c3RlbUludGVyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KQEAgLTQyLDE1ICs0MiwxOSBAQCB2b2lkIEluaXRX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlKHZvaWQpCiAgICAgaWYgKGRpZEluaXQpCiAgICAgICAgIHJl
dHVybjsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgSU5JVChBZHZhbmNlRGVmYXVsdEJ1dHRv
blB1bHNlQW5pbWF0aW9uKTsKKyNlbmRpZgogICAgIElOSVQoQ0FMYXllckVudW1lcmF0ZVJlY3Rz
QmVpbmdEcmF3bldpdGhCbG9jayk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBJTklUKENHQ29u
dGV4dEdldFNob3VsZFNtb290aEZvbnRzKTsKKyNlbmRpZgogICAgIElOSVQoQ0dQYXR0ZXJuQ3Jl
YXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKTsKICAgICBJTklUKENHQ29udGV4dFJlc2V0Q2xpcCk7
Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCisjaWYgIVBMQVRG
T1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAg
SU5JVChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cyk7CiAjZW5kaWYKLSNp
ZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJ
T1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIElOSVQo
Q1RGb250VHJhbnNmb3JtR2x5cGhzKTsKICNlbmRpZgogICAgIElOSVQoQ29weUNGTG9jYWxpemF0
aW9uUHJlZmVycmVkTmFtZSk7CkBAIC02MCw2ICs2NCw3IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0
ZW1JbnRlcmZhY2Uodm9pZCkKICAgICBJTklUKENvcHlOU1VSTFJlc3BvbnNlQ2VydGlmaWNhdGVD
aGFpbik7CiAjZW5kaWYKICAgICBJTklUKENyZWF0ZUN1c3RvbUNGUmVhZFN0cmVhbSk7CisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBJTklUKERyYXdDYXBzTG9ja0luZGljYXRvcik7CiAgICAgSU5J
VChEcmF3QmV6ZWxlZFRleHRBcmVhKTsKICAgICBJTklUKERyYXdCZXplbGVkVGV4dEZpZWxkQ2Vs
bCk7CkBAIC03MSw5ICs3NiwxMSBAQCB2b2lkIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKHZv
aWQpCiAgICAgSU5JVChHZXRGb250SW5MYW5ndWFnZUZvckNoYXJhY3Rlcik7CiAgICAgSU5JVChH
ZXRGb250SW5MYW5ndWFnZUZvclJhbmdlKTsKICAgICBJTklUKEdldEdseXBoVHJhbnNmb3JtZWRB
ZHZhbmNlcyk7CisjZW5kaWYKICAgICBJTklUKEdldEhUVFBQaXBlbGluaW5nUHJpb3JpdHkpOwog
ICAgIElOSVQoR2V0TUlNRVR5cGVGb3JFeHRlbnNpb24pOwogICAgIElOSVQoR2V0TlNVUkxSZXNw
b25zZUxhc3RNb2RpZmllZERhdGUpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgSU5JVChTaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOwogICAgIElOSVQoR2V0UHJlZmVycmVkRXh0
ZW5zaW9uRm9yTUlNRVR5cGUpOwogICAgIElOSVQoR2V0V2hlZWxFdmVudERlbHRhcyk7CkBAIC04
MSwxOCArODgsMjMgQEAgdm9pZCBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSh2b2lkKQogICAg
IElOSVQoR2V0TlNFdmVudEtleUNoYXIpOwogI2VuZGlmCiAgICAgSU5JVChIaXRUZXN0TWVkaWFV
SVBhcnQpOworI2VuZGlmCiAgICAgSU5JVChJbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9u
Q291bnRQZXJIb3N0KTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIElOSVQoTWVhc3VyZU1lZGlh
VUlQYXJ0KTsKICAgICBJTklUKENyZWF0ZU1lZGlhVUlCYWNrZ3JvdW5kVmlldyk7CiAgICAgSU5J
VChDcmVhdGVNZWRpYVVJQ29udHJvbCk7CiAgICAgSU5JVChXaW5kb3dTZXRBbHBoYSk7CiAgICAg
SU5JVChXaW5kb3dTZXRTY2FsZWRGcmFtZSk7CiAgICAgSU5JVChQb3B1cE1lbnUpOwotICAgIElO
SVQoU2V0QmFzZUNUTSk7CiAgICAgSU5JVChTZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKTsKKyNlbmRp
ZgorICAgIElOSVQoU2V0QmFzZUNUTSk7CiAgICAgSU5JVChTZXRDT05ORUNUUHJveHlBdXRob3Jp
emF0aW9uRm9yU3RyZWFtKTsKICAgICBJTklUKFNldENPTk5FQ1RQcm94eUZvclN0cmVhbSk7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBJTklUKFNldERyYWdJbWFnZSk7CisjZW5kaWYKICAgICBJ
TklUKFNldEhUVFBQaXBlbGluaW5nTWF4aW11bVByaW9yaXR5KTsKICAgICBJTklUKFNldEhUVFBQ
aXBlbGluaW5nUHJpb3JpdHkpOwogICAgIElOSVQoU2V0SFRUUFBpcGVsaW5pbmdNaW5pbXVtRmFz
dExhbmVQcmlvcml0eSk7CkBAIC0xMDUsNiArMTE3LDcgQEAgdm9pZCBJbml0V2ViQ29yZVN5c3Rl
bUludGVyZmFjZSh2b2lkKQogICAgIElOSVQoU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kKTsKICAgICBJ
TklUKFNpZ25hbENGUmVhZFN0cmVhbUVycm9yKTsKICAgICBJTklUKFNpZ25hbENGUmVhZFN0cmVh
bUhhc0J5dGVzKTsKKyNpZiBFTkFCTEUoVklERU8pICYmICFQTEFURk9STShJT1MpCiAgICAgSU5J
VChRVEluY2x1ZGVPbmx5TW9kZXJuTWVkaWFGaWxlVHlwZXMpOwogICAgIElOSVQoUVRNb3ZpZURh
dGFSYXRlKTsKICAgICBJTklUKFFUTW92aWVEaXNhYmxlQ29tcG9uZW50KTsKQEAgLTEyMCwyMiAr
MTMzLDM2IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKICAgICBJTklU
KFFUR2V0U2l0ZXNJbk1lZGlhRG93bmxvYWRDYWNoZSk7CiAgICAgSU5JVChRVENsZWFyTWVkaWFE
b3dubG9hZENhY2hlRm9yU2l0ZSk7CiAgICAgSU5JVChRVENsZWFyTWVkaWFEb3dubG9hZENhY2hl
KTsKKyNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBJTklUKEdldEdseXBoc0ZvckNo
YXJhY3RlcnMpOworI2VuZGlmCiAgICAgSU5JVChHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3Rl
cnMpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBJTklUKEV4ZWN1dGFibGVXYXNMaW5rZWRPbk9y
QWZ0ZXJJT1NWZXJzaW9uKTsKKyAgICBJTklUKEdldERldmljZUNsYXNzKTsKKyAgICBJTklUKEdl
dFZpZXdwb3J0U2NyZWVuU2l6ZSk7CisgICAgSU5JVChHZXRTY3JlZW5TY2FsZUZhY3Rvcik7Cisg
ICAgSU5JVChJc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpOworI2VuZGlmCiAKICAgICBJTklU
KENyZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIpOwogCisjaWYgIVBMQVRGT1JNKElPU19T
SU1VTEFUT1IpCiAgICAgSU5JVChJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKTsKICAgICBJTklUKElP
U3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSk7CisjZW5kaWYKICAgICBJTklUKENyZWF0ZUNUVHlw
ZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKTsKICAgICBJTklUKENUUnVuR2V0
SW5pdGlhbEFkdmFuY2UpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgSU5JVChSZWNvbW1lbmRl
ZFNjcm9sbGVyU3R5bGUpOwogICAgIElOSVQoRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JCZWZvcmVT
bm93TGVvcGFyZCk7CiAgICAgSU5JVChTZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJ
bmZvcm1hdGlvbik7CiAgICAgSU5JVChDb3B5RGVmYXVsdFNlYXJjaFByb3ZpZGVyRGlzcGxheU5h
bWUpOwogICAgIElOSVQoQVZBc3NldFJlc29sdmVkVVJMKTsKICAgICBJTklUKEN1cnNvcik7Cisj
ZW5kaWYKIAogI2lmIFVTRShDRk5FVFdPUkspCiAgICAgSU5JVChHZXREZWZhdWx0SFRUUENvb2tp
ZVN0b3JhZ2UpOwpAQCAtMTQ2LDYgKzE3Myw3IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRl
cmZhY2Uodm9pZCkKICAgICBJTklUKFNldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbik7CiAjZW5kaWYK
IAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIElOSVQoU3BlZWNo
U3ludGhlc2lzR2V0Vm9pY2VJZGVudGlmaWVycyk7CiAgICAgSU5JVChTcGVlY2hTeW50aGVzaXNH
ZXREZWZhdWx0Vm9pY2VJZGVudGlmaWVyRm9yTG9jYWxlKTsKQEAgLTE2MCw2ICsxODgsNyBAQCB2
b2lkIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKHZvaWQpCiAgICAgSU5JVChBY2Nlc3NpYmls
aXR5SGFuZGxlRm9jdXNDaGFuZ2VkKTsKICAgICBJTklUKENyZWF0ZUFYVUlFbGVtZW50UmVmKTsK
ICAgICBJTklUKFVucmVnaXN0ZXJVbmlxdWVJZEZvckVsZW1lbnQpOworI2VuZGlmCiAgICAgSU5J
VChDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24pOwogICAgIElOSVQoQ29weVJlcXVlc3RXaXRo
U3RvcmFnZVNlc3Npb24pOwogICAgIElOSVQoQ29weUhUVFBDb29raWVTdG9yYWdlKTsKQEAgLTE4
MCwyMCArMjA5LDI0IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKICAg
ICBJTklUKENvcHlDRlVSTFJlc3BvbnNlU3VnZ2VzdGVkRmlsZW5hbWUpOwogICAgIElOSVQoU2V0
Q0ZVUkxSZXNwb25zZU1JTUVUeXBlKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgSU5JVChT
ZXRNZXRhZGF0YVVSTCk7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHN0b3AgdXNpbmcgdGhpcyBmaWxlIGluIENocm9taXVtLgogCiAgICAgSU5J
VChEZXN0cm95UmVuZGVyaW5nUmVzb3VyY2VzKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAg
SU5JVChDcmVhdGVWTVByZXNzdXJlRGlzcGF0Y2hPbk1haW5RdWV1ZSk7CisjZW5kaWYKIAotI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmICFQTEFURk9STShJ
T1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIElOSVQo
Q3JlYXRlTWVtb3J5U3RhdHVzUHJlc3N1cmVDcml0aWNhbERpc3BhdGNoT25NYWluUXVldWUpOwog
I2VuZGlmCiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNp
ZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
ODAKICAgICBJTklUKEV4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQmVmb3JlTGlvbik7CiAjZW5kaWYK
IApAQCAtMjA4LDYgKzI0MSw5IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9p
ZCkKICAgICBJTklUKEZpbHRlcklzQnVmZmVyaW5nKTsKICAgICBJTklUKEZpbHRlckFkZERhdGEp
OwogICAgIElOSVQoRmlsdGVyRGF0YUNvbXBsZXRlKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
SU5JVChGaWx0ZXJVbmJsb2NrV2l0aENvbXBsZXRpb24pOworI2VuZGlmCiAjZW5kaWYKIAogI2lm
ICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4
MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViS2l0UHJlZml4LmggYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJLaXRQcmVmaXguaAppbmRleCAwYWJkYWEwMjgzMjBkM2MzMGQwZTI3YWI1
ODYyNmNkNzIxMjBkMTI0Li5jNWQxN2IwYzI5ZDM1YzVjMWUzZGJjMDhiYzVlMzAxZDdhMGU2NmFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJLaXRQcmVmaXguaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJLaXRQcmVmaXguaApAQCAtMjYsNiArMjYsOCBAQAogICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1
cwogI2RlZmluZSBOVUxMIF9fbnVsbAogI2Vsc2UKQEAgLTU0LDYgKzU2LDcgQEAKIAogI2VuZGlm
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmg+CiAjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CiAKQEAgLTY1LDkg
KzY4LDE0IEBAIHR5cGVkZWYgZmxvYXQgQ0dGbG9hdDsKICNlbmRpZgogI2RlZmluZSBDR0ZMT0FU
X0RFRklORUQgMQogI2VuZGlmCisjZW5kaWYKIAogI2lmZGVmIF9fT0JKQ19fCisjaWYgIVBMQVRG
T1JNKElPUykKICNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjZWxzZQorI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisjZW5kaWYKICNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkFyY2hpdmUu
bW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkFyY2hpdmUubW0KaW5kZXggMzU3Mjk0
NWRmNzgzYjk2MDY0NzkyMjI5ZWNlNWFlYTRlZmU1OWYyOS4uNjcwYTI2OGUwNmEzZmE2NTNmODdj
MzYwNzdlZTQ3YTY2OTgxMzI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJBcmNoaXZlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViQXJjaGl2
ZS5tbQpAQCAtNjcsOSArNjcsMTEgQEAgQGltcGxlbWVudGF0aW9uIFdlYkFyY2hpdmVQcml2YXRl
CiAKICsgKHZvaWQpaW5pdGlhbGl6ZQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgSlNDOjpp
bml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZFRvUHJv
Y2Vzc01haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsK
KyNlbmRpZgogICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViQ2xpcFZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViQ2xpcFZpZXcuaAppbmRleCA5NjhkMmRlYjY1ZTM4
ZmRlYzkwYjI1MTM5OTljNmFmMzU4M2I3YTYyLi41MzgzOTgwYzFlZWEwMzZhZjI0Mjg5ZDNkYjlk
Nzc1MTgxY2QzMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkNs
aXBWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJDbGlwVmlldy5oCkBA
IC0yNiw2ICsyNiw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQor
CiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CiAKIEBpbnRlcmZhY2UgV2ViQ2xpcFZpZXcgOiBO
U0NsaXBWaWV3CkBAIC00MSwzICs0Myw1IEBACiAtIChOU1JlY3QpYWRkaXRpb25hbENsaXA7CiAK
IEBlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkRhdGFTb3VyY2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2Uu
bW0KaW5kZXggNmE5NjQ4MjYyMmY1NWNmYjc5NWI2OTY5OTA3NzNiNDIzOGJmMzMxYS4uOTI2N2U2
YjY0MTY3NmNjNWRkNjhjYWNlOTRkMzVkYzM3YjFmYWI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbQpAQCAtNjYsNiArNjYsMTAgQEAKICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAKKyNpZiBQTEFURk9STShJ
T1MpCisjaW1wb3J0ICJXZWJQREZWaWV3SU9TLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIGNsYXNzIFdlYkRhdGFTb3VyY2VQcml2YXRlCkBAIC03NSw2ICs3OSw5IEBA
IHB1YmxpYzoKICAgICAgICAgOiBsb2FkZXIobG9hZGVyKQogICAgICAgICAsIHJlcHJlc2VudGF0
aW9uRmluaXNoZWRMb2FkaW5nKE5PKQogICAgICAgICAsIGluY2x1ZGVkSW5XZWJLaXRTdGF0aXN0
aWNzKE5PKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLCBfZGF0YVNvdXJjZURlbGVnYXRl
KG5pbCkKKyNlbmRpZgogICAgIHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmxvYWRlcik7CiAgICAg
fQpAQCAtOTAsNiArOTcsOSBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPGlkPFdlYkRvY3VtZW50
UmVwcmVzZW50YXRpb24+ID4gcmVwcmVzZW50YXRpb247CiAgICAgQk9PTCByZXByZXNlbnRhdGlv
bkZpbmlzaGVkTG9hZGluZzsKICAgICBCT09MIGluY2x1ZGVkSW5XZWJLaXRTdGF0aXN0aWNzOwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBOU09iamVjdDxXZWJEYXRhU291cmNlUHJpdmF0ZURlbGVn
YXRlPiAqX2RhdGFTb3VyY2VEZWxlZ2F0ZTsKKyNlbmRpZgogfTsKIAogc3RhdGljIGlubGluZSBX
ZWJEYXRhU291cmNlUHJpdmF0ZSogdG9Qcml2YXRlKHZvaWQqIHByaXZhdGVBdHRyaWJ1dGUpCkBA
IC0xNDMsOSArMTUzLDExIEBAIEBpbXBsZW1lbnRhdGlvbiBXZWJEYXRhU291cmNlIChXZWJQcml2
YXRlKQogKyAodm9pZClpbml0aWFsaXplCiB7CiAgICAgaWYgKHNlbGYgPT0gW1dlYkRhdGFTb3Vy
Y2UgY2xhc3NdKSB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgSlNDOjppbml0aWFsaXpl
VGhyZWFkaW5nKCk7CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NN
YWluVGhyZWFkKCk7CiAgICAgICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwor
I2VuZGlmCiAgICAgICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7CiAg
ICAgfQogfQpAQCAtMTY0LDYgKzE3Niw3IEBAIC0gKHZvaWQpX2FkZFN1YmZyYW1lQXJjaGl2ZXM6
KE5TQXJyYXkgKilzdWJmcmFtZUFyY2hpdmVzCiAgICAgICAgIHRvUHJpdmF0ZShfcHJpdmF0ZSkt
PmxvYWRlci0+YWRkQWxsQXJjaGl2ZVJlc291cmNlcyhbYXJjaGl2ZSBfY29yZUxlZ2FjeVdlYkFy
Y2hpdmVdKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChOU0ZpbGVXcmFwcGVyICopX2Zp
bGVXcmFwcGVyRm9yVVJMOihOU1VSTCAqKVVSTAogewogICAgIGlmIChbVVJMIGlzRmlsZVVSTF0p
CkBAIC0xODIsNiArMTk1LDcgQEAgLSAoTlNGaWxlV3JhcHBlciAqKV9maWxlV3JhcHBlckZvclVS
TDooTlNVUkwgKilVUkwKICAgICAKICAgICByZXR1cm4gbmlsOwogfQorI2VuZGlmCiAKIC0gKE5T
U3RyaW5nICopX3Jlc3BvbnNlTUlNRVR5cGUKIHsKQEAgLTIwNiw2ICsyMjAsMTMgQEAgLSAodm9p
ZClfc2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZDooQk9PTClmbGFnCiAgICAgdG9Qcml2YXRl
KF9wcml2YXRlKS0+bG9hZGVyLT5zZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGZsYWcpOwog
fQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAodm9pZClfc2V0T3ZlcnJpZGVUZXh0RW5jb2RpbmdO
YW1lOihOU1N0cmluZyAqKWVuY29kaW5nCit7CisgICAgdG9Qcml2YXRlKF9wcml2YXRlKS0+bG9h
ZGVyLT5zZXRPdmVycmlkZUVuY29kaW5nKFtlbmNvZGluZyBVVEY4U3RyaW5nXSk7Cit9CisjZW5k
aWYKKwogLSAodm9pZClfc2V0QWxsb3dUb0JlTWVtb3J5TWFwcGVkCiB7CiAjaWYgRU5BQkxFKERJ
U0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKQEAgLTI5OCw3ICszMTksMTMgQEAgKyAo
TlNNdXRhYmxlRGljdGlvbmFyeSAqKV9yZXBUeXBlc0FsbG93SW1hZ2VUeXBlT21pc3Npb246KEJP
T0wpYWxsb3dJbWFnZVR5cGVPbWkKICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBhICJzZWNyZXQg
ZGVmYXVsdCIgd2UgZG9uJ3QgYm90aCByZWdpc3RlcmluZyBpdC4KICAgICAgICAgQk9PTCBvbWl0
UERGU3VwcG9ydCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xG
b3JLZXk6QCJXZWJLaXRPbWl0UERGU3VwcG9ydCJdOwogICAgICAgICBpZiAoIW9taXRQREZTdXBw
b3J0KQorI2lmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgV2ViUERGUmVwcmVzZW50YXRpb24gKFtX
ZWJWaWV3IF9nZXRQREZSZXByZXNlbnRhdGlvbkNsYXNzXSkKKyNlbmRpZgogICAgICAgICAgICAg
YWRkVHlwZXNGcm9tQ2xhc3MocmVwVHlwZXMsIFtXZWJQREZSZXByZXNlbnRhdGlvbiBjbGFzc10s
IFtXZWJQREZSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWRNSU1FVHlwZXNdKTsKKyNpZiBQTEFURk9S
TShJT1MpCisjdW5kZWYgV2ViUERGUmVwcmVzZW50YXRpb24KKyNlbmRpZgogICAgIH0KICAgICAK
ICAgICBpZiAoIWFkZGVkSW1hZ2VUeXBlcyAmJiAhYWxsb3dJbWFnZVR5cGVPbWlzc2lvbikgewpA
QCAtMzg5LDcgKzQxNiwxMiBAQCAtIChCT09MKV9pc0RvY3VtZW50SFRNTAogLSAodm9pZClfbWFr
ZVJlcHJlc2VudGF0aW9uCiB7CiAgICAgQ2xhc3MgcmVwQ2xhc3MgPSBbW3NlbGYgY2xhc3NdIF9y
ZXByZXNlbnRhdGlvbkNsYXNzRm9yTUlNRVR5cGU6W3NlbGYgX3Jlc3BvbnNlTUlNRVR5cGVdIGFs
bG93aW5nUGx1Z2luczpbW1tzZWxmIF93ZWJWaWV3XSBwcmVmZXJlbmNlc10gYXJlUGx1Z0luc0Vu
YWJsZWRdXTsKLSAgICAKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoW3JlcENsYXNzIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3JlcHJlc2VudGF0aW9uQ2xhc3NGb3JXZWJGcmFt
ZTopXSkKKyAgICAgICAgcmVwQ2xhc3MgPSBbcmVwQ2xhc3MgcGVyZm9ybVNlbGVjdG9yOkBzZWxl
Y3RvcihfcmVwcmVzZW50YXRpb25DbGFzc0ZvcldlYkZyYW1lOikgd2l0aE9iamVjdDpbc2VsZiB3
ZWJGcmFtZV1dOworI2VuZGlmCisKICAgICAvLyBDaGVjayBpZiB0aGUgZGF0YSBzb3VyY2Ugd2Fz
IGFscmVhZHkgYm91bmQ/CiAgICAgaWYgKCFbW3NlbGYgcmVwcmVzZW50YXRpb25dIGlzS2luZE9m
Q2xhc3M6cmVwQ2xhc3NdKSB7CiAgICAgICAgIGlkIG5ld1JlcCA9IHJlcENsYXNzICE9IG5pbCA/
IFtbcmVwQ2xhc3MgYWxsb2NdIGluaXRdIDogbmlsOwpAQCAtMzk5LDYgKzQzMSw5IEBAIC0gKHZv
aWQpX21ha2VSZXByZXNlbnRhdGlvbgogCiAgICAgaWQ8V2ViRG9jdW1lbnRSZXByZXNlbnRhdGlv
bj4gcmVwcmVzZW50YXRpb24gPSB0b1ByaXZhdGUoX3ByaXZhdGUpLT5yZXByZXNlbnRhdGlvbi5n
ZXQoKTsKICAgICBbcmVwcmVzZW50YXRpb24gc2V0RGF0YVNvdXJjZTpzZWxmXTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgdG9Qcml2YXRlKF9wcml2YXRlKS0+bG9hZGVyLT5zZXRSZXNwb25zZU1J
TUVUeXBlKFtzZWxmIF9yZXNwb25zZU1JTUVUeXBlXSk7CisjZW5kaWYKIH0KIAogLSAoRG9jdW1l
bnRMb2FkZXIqKV9kb2N1bWVudExvYWRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oCmluZGV4IDIw
MjllY2Y2NGFmMDdlMjJhODdmNGQyNmIwNGU1MDZmZDc4ZDAzMjguLjE4ODc2YmMxMmIwMzBhMGM0
OTA4NTAwMDEyNTMyYzE0M2FiZTVlMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgKQEAgLTMx
LDYgKzMxLDEwIEBACiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU0Jhc2UuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPFdlYktp
dC9XQUtBcHBLaXRTdHVicy5oPgorI2VuZGlmCisKIEBjbGFzcyBXZWJWaWV3OwogCiBzdHJ1Y3Qg
V2ViUmVzb3VyY2VEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUgewpAQCAtMzksNiArNDMsMTkg
QEAgc3RydWN0IFdlYlJlc291cmNlRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlIHsKICNpZiBV
U0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIElNUCBjYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlRnVuYzsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIElNUCBjb25uZWN0aW9uUHJvcGVydGllc0Z1bmM7CisgICAgSU1QIHdlYlRocmVhZERp
ZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNvdXJjZUZ1bmM7CisgICAgSU1QIHdlYlRocmVhZERpZEZh
aWxMb2FkaW5nV2l0aEVycm9yRnJvbURhdGFTb3VyY2VGdW5jOworICAgIElNUCB3ZWJUaHJlYWRJ
ZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmM7CisgICAgSU1QIHdlYlRocmVhZERpZExvYWRSZXNvdXJj
ZUZyb21NZW1vcnlDYWNoZUZ1bmM7CisgICAgSU1QIHdlYlRocmVhZFdpbGxTZW5kUmVxdWVzdEZ1
bmM7CisgICAgSU1QIHdlYlRocmVhZERpZFJlY2VpdmVSZXNwb25zZUZ1bmM7CisgICAgSU1QIHdl
YlRocmVhZERpZFJlY2VpdmVDb250ZW50TGVuZ3RoRnVuYzsKKyAgICBJTVAgd2ViVGhyZWFkV2ls
bENhY2hlUmVzcG9uc2VGdW5jOworI2VuZGlmCisKICAgICBJTVAgaWRlbnRpZmllckZvclJlcXVl
c3RGdW5jOwogICAgIElNUCB3aWxsU2VuZFJlcXVlc3RGdW5jOwogICAgIElNUCBkaWRSZWNlaXZl
UmVzcG9uc2VGdW5jOwpAQCAtODQsNiArMTAxLDkgQEAgc3RydWN0IFdlYkZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25DYWNoZSB7CiAgICAgSU1QIGRpZFJ1bkluc2VjdXJlQ29udGVudEZ1
bmM7CiAgICAgSU1QIGRpZERldGVjdFhTU0Z1bmM7CiAgICAgSU1QIGRpZFJlbW92ZUZyYW1lRnJv
bUhpZXJhcmNoeUZ1bmM7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIElNUCB3ZWJUaHJlYWREaWRM
YXlvdXRGdW5jOworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUlt
cGxlbWVudGF0aW9uQ2FjaGUgewpAQCAtMTI2LDYgKzE0Niw5IEBAIEJPT0wgQ2FsbFVJRGVsZWdh
dGVSZXR1cm5pbmdCb29sZWFuKEJPT0wsIFdlYlZpZXcgKiwgU0VMLCBpZCk7CiBCT09MIENhbGxV
SURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09MLCBXZWJWaWV3ICosIFNFTCwgaWQsIGlkKTsK
IEJPT0wgQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wsIFdlYlZpZXcgKiwgU0VM
LCBpZCwgQk9PTCk7CiBCT09MIENhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09MLCBX
ZWJWaWV3ICosIFNFTCwgaWQsIEJPT0wsIGlkKTsKKyNpZiBQTEFURk9STShJT1MpCitCT09MIENh
bGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09MLCBXZWJWaWV3ICosIFNFTCwgaWQsIGlk
LCBCT09MKTsKKyNlbmRpZgogCiBpZCBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoSU1QLCBXZWJWaWV3
ICosIFNFTCk7CiBpZCBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoSU1QLCBXZWJWaWV3ICosIFNFTCwg
TlNVSW50ZWdlcik7CkBAIC0xMzQsNiArMTU3LDEwIEBAIGlkIENhbGxGcmFtZUxvYWREZWxlZ2F0
ZShJTVAsIFdlYlZpZXcgKiwgU0VMLCBpZCwgaWQpOwogaWQgQ2FsbEZyYW1lTG9hZERlbGVnYXRl
KElNUCwgV2ViVmlldyAqLCBTRUwsIGlkLCBpZCwgaWQpOwogaWQgQ2FsbEZyYW1lTG9hZERlbGVn
YXRlKElNUCwgV2ViVmlldyAqLCBTRUwsIGlkLCBpZCwgaWQsIGlkKTsKIGlkIENhbGxGcmFtZUxv
YWREZWxlZ2F0ZShJTVAsIFdlYlZpZXcgKiwgU0VMLCBpZCwgTlNUaW1lSW50ZXJ2YWwsIGlkLCBp
ZCk7CisjaWYgUExBVEZPUk0oSU9TKQoraWQgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKElNUCwgV2Vi
VmlldyAqLCBTRUwsIGlkLCBkb3VibGUpOworaWQgQ2FsbEZyYW1lTG9hZERlbGVnYXRlSW5XZWJU
aHJlYWQoSU1QLCBXZWJWaWV3ICosIFNFTCwgTlNVSW50ZWdlcik7CisjZW5kaWYKIAogQk9PTCBD
YWxsRnJhbWVMb2FkRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wsIElNUCwgV2ViVmlldyAq
LCBTRUwpOwogCkBAIC0xNDIsNiArMTY5LDEzIEBAIGlkIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0
ZShJTVAsIFdlYlZpZXcgKiwgU0VMLCBpZCwgaWQsIGlkKTsKIGlkIENhbGxSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZShJTVAsIFdlYlZpZXcgKiwgU0VMLCBpZCwgaWQsIGlkLCBpZCk7CiBpZCBDYWxsUmVz
b3VyY2VMb2FkRGVsZWdhdGUoSU1QLCBXZWJWaWV3ICosIFNFTCwgaWQsIE5TSW50ZWdlciwgaWQp
OwogaWQgQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlKElNUCwgV2ViVmlldyAqLCBTRUwsIGlkLCBp
ZCwgTlNJbnRlZ2VyLCBpZCk7CisjaWYgUExBVEZPUk0oSU9TKQoraWQgQ2FsbFJlc291cmNlTG9h
ZERlbGVnYXRlSW5XZWJUaHJlYWQoSU1QLCBXZWJWaWV3ICosIFNFTCwgaWQsIGlkKTsKK2lkIENh
bGxSZXNvdXJjZUxvYWREZWxlZ2F0ZUluV2ViVGhyZWFkKElNUCwgV2ViVmlldyAqLCBTRUwsIGlk
LCBpZCwgaWQpOworaWQgQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlSW5XZWJUaHJlYWQoSU1QLCBX
ZWJWaWV3ICosIFNFTCwgaWQsIGlkLCBpZCwgaWQpOworaWQgQ2FsbFJlc291cmNlTG9hZERlbGVn
YXRlSW5XZWJUaHJlYWQoSU1QLCBXZWJWaWV3ICosIFNFTCwgaWQsIE5TSW50ZWdlciwgaWQpOwor
aWQgQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlSW5XZWJUaHJlYWQoSU1QLCBXZWJWaWV3ICosIFNF
TCwgaWQsIGlkLCBOU0ludGVnZXIsIGlkKTsKKyNlbmRpZgogCiBCT09MIENhbGxSZXNvdXJjZUxv
YWREZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oQk9PTCwgSU1QLCBXZWJWaWV3ICosIFNFTCwgaWQp
OwogQk9PTCBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wsIElN
UCwgV2ViVmlldyAqLCBTRUwsIGlkLCBpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLm1tIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5tbQppbmRl
eCA3MDg1YWM4MDdiOWIwMjgwYThkOTcxOTY5MDUxMjc2MDgyMjA4OWZkLi5kMDFjYjliYzVkZTVm
YmMxNmY4MTZmZDExNzJlOTNlYmU2MmRjMmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcubW0K
QEAgLTM0LDYgKzM0LDExIEBACiAjaW1wb3J0ICJXZWJWaWV3RGF0YS5oIgogI2ltcG9ydCA8d3Rm
L09iamNSdW50aW1lRXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXZWJW
aWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4K
KyNlbmRpZgorCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hpbmcpCiAKIFdlYlJlc291cmNlRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBX
ZWJWaWV3R2V0UmVzb3VyY2VMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMoV2ViVmlldyAqd2Vi
VmlldykKQEAgLTczLDE0ICs3OCwxNyBAQCBXZWJIaXN0b3J5RGVsZWdhdGVJbXBsZW1lbnRhdGlv
bkNhY2hlKiBXZWJWaWV3R2V0SGlzdG9yeURlbGVnYXRlSW1wbGVtZW50YXRpb25zKAogLy8gcHJl
dmVudGluZyBtb3JlIE9iakMgbWVzc2FnZSBkaXNwYXRjaCBhbmQgY29tcGVuc2F0aW5nIGZvciB0
aGUgZXhwZW5zZSBvZiB0aGUgQHRyeS9AY2F0Y2guCiAKIHR5cGVkZWYgZmxvYXQgKCpPYmpDTXNn
U2VuZEZQUmV0KShpZCwgU0VMLCAuLi4pOworI2lmICFQTEFURk9STShJT1MpCiAjaWYgZGVmaW5l
ZChfX2kzODZfXykKIHN0YXRpYyBjb25zdCBPYmpDTXNnU2VuZEZQUmV0IG9iamNfbXNnU2VuZF9m
bG9hdF9yZXR1cm4gPSByZWludGVycHJldF9jYXN0PE9iakNNc2dTZW5kRlBSZXQ+KG9iamNfbXNn
U2VuZF9mcHJldCk7CiAjZWxzZQogc3RhdGljIGNvbnN0IE9iakNNc2dTZW5kRlBSZXQgb2JqY19t
c2dTZW5kX2Zsb2F0X3JldHVybiA9IHJlaW50ZXJwcmV0X2Nhc3Q8T2JqQ01zZ1NlbmRGUFJldD4o
b2JqY19tc2dTZW5kKTsKICNlbmRpZgorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERl
bGVnYXRlKFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0b3IpCiB7CisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBpZiAoIWRlbGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOnNlbGVjdG9yXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBAdHJ5IHsKQEAg
LTg5LDEwICs5NywzMSBAQCBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShXZWJWaWV3ICpz
ZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yKQogICAgICAgICBSZXBvcnREaXNjYXJkZWRE
ZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAgcmV0dXJu
IG5pbDsKKyNlbHNlCisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhW2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU0ludm9jYXRp
b24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRlbGVnYXRlLCBzZWxl
Y3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnNlbGYgYXRJbmRleDoyXTsKKwor
ICAgIGlkIHJldHVyblZhbHVlOworICAgIEB0cnkgeworICAgICAgICBXZWJUaHJlYWRDYWxsRGVs
ZWdhdGUoaW52b2NhdGlvbik7CisgICAgICAgIGlmIChbW2ludm9jYXRpb24gbWV0aG9kU2lnbmF0
dXJlXSBtZXRob2RSZXR1cm5MZW5ndGhdID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7
CisgICAgICAgIH0KKyAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnJldHVyblZh
bHVlXTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0gQGNhdGNoKGlkIGV4Y2Vw
dGlvbikgeworICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3Rv
ciwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiBzdGF0
aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0VM
IHNlbGVjdG9yLCBpZCBvYmplY3QpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWRl
bGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICBAdHJ5IHsKQEAgLTEwMSwxMCArMTMwLDMyIEBAIHN0YXRpYyBp
bmxpbmUgaWQgQ2FsbERlbGVnYXRlKFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2Vs
ZWN0b3IsIGlkIG9iamVjCiAgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9u
KHNlbGVjdG9yLCBleGNlcHRpb24pOwogICAgIH0KICAgICByZXR1cm4gbmlsOworI2Vsc2UKKyAg
ICBpZiAoIWRlbGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9y
XSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9
IFdlYlRocmVhZE1ha2VOU0ludm9jYXRpb24oZGVsZWdhdGUsIHNlbGVjdG9yKTsKKyAgICBbaW52
b2NhdGlvbiBzZXRBcmd1bWVudDomc2VsZiBhdEluZGV4OjJdOworICAgIFtpbnZvY2F0aW9uIHNl
dEFyZ3VtZW50OiZvYmplY3QgYXRJbmRleDozXTsKKworICAgIGlkIHJldHVyblZhbHVlOworICAg
IEB0cnkgeworICAgICAgICBXZWJUaHJlYWRDYWxsRGVsZWdhdGUoaW52b2NhdGlvbik7CisgICAg
ICAgIGlmIChbW2ludm9jYXRpb24gbWV0aG9kU2lnbmF0dXJlXSBtZXRob2RSZXR1cm5MZW5ndGhd
ID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICAgICAgW2lu
dm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnJldHVyblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIHJl
dHVyblZhbHVlOworICAgIH0gQGNhdGNoKGlkIGV4Y2VwdGlvbikgeworICAgICAgICBSZXBvcnRE
aXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0
ZShXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBOU1JlY3QgcmVjdCkK
IHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghZGVsZWdhdGUgfHwgIVtkZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIEB0
cnkgewpAQCAtMTEzLDEwICsxNjQsMzIgQEAgc3RhdGljIGlubGluZSBpZCBDYWxsRGVsZWdhdGUo
V2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgTlNSZWN0IHIKICAgICAg
ICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNlcHRpb24oc2VsZWN0b3IsIGV4Y2VwdGlvbik7
CiAgICAgfQogICAgIHJldHVybiBuaWw7CisjZWxzZQorICAgIGlmICghZGVsZWdhdGUgfHwgIVtk
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uID0gV2ViVGhyZWFkTWFrZU5TSW52b2Nh
dGlvbihkZWxlZ2F0ZSwgc2VsZWN0b3IpOworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZz
ZWxmIGF0SW5kZXg6Ml07CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnJlY3QgYXRJbmRl
eDozXTsKKworICAgIGlkIHJldHVyblZhbHVlOworICAgIEB0cnkgeworICAgICAgICBXZWJUaHJl
YWRDYWxsRGVsZWdhdGUoaW52b2NhdGlvbik7CisgICAgICAgIGlmIChbW2ludm9jYXRpb24gbWV0
aG9kU2lnbmF0dXJlXSBtZXRob2RSZXR1cm5MZW5ndGhdID09IDApIHsKKyAgICAgICAgICAgIHJl
dHVybiBuaWw7CisgICAgICAgIH0KKyAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6
JnJldHVyblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0gQGNhdGNo
KGlkIGV4Y2VwdGlvbikgeworICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlv
bihzZWxlY3RvciwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgog
fQogCiBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShXZWJWaWV3ICpzZWxmLCBpZCBkZWxl
Z2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBpZCBvYmplY3QyKQogeworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpzZWxlY3Rvcl0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgQHRyeSB7CkBAIC0xMjUs
MTAgKzE5OCwzMyBAQCBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShXZWJWaWV3ICpzZWxm
LCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmplYwogICAgICAgICBSZXBvcnREaXNj
YXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAg
cmV0dXJuIG5pbDsKKyNlbHNlCisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhW2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU0lu
dm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRlbGVnYXRl
LCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnNlbGYgYXRJbmRleDoy
XTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0MSBhdEluZGV4OjNdOworICAg
IFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QyIGF0SW5kZXg6NF07CisKKyAgICBpZCBy
ZXR1cm5WYWx1ZTsKKyAgICBAdHJ5IHsKKyAgICAgICAgV2ViVGhyZWFkQ2FsbERlbGVnYXRlKGlu
dm9jYXRpb24pOworICAgICAgICBpZiAoW1tpbnZvY2F0aW9uIG1ldGhvZFNpZ25hdHVyZV0gbWV0
aG9kUmV0dXJuTGVuZ3RoXSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAg
ICB9CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZyZXR1cm5WYWx1ZV07Cisg
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9IEBjYXRjaChpZCBleGNlcHRpb24pIHsK
KyAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNlcHRpb24oc2VsZWN0b3IsIGV4Y2Vw
dGlvbik7CisgICAgfQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGlu
ZSBpZCBDYWxsRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3Rv
ciwgaWQgb2JqZWN0LCBCT09MIGJvb2xlYW4pCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBp
ZiAoIWRlbGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBAdHJ5IHsKQEAgLTEzNywxMCArMjMzLDMzIEBAIHN0
YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlKFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBT
RUwgc2VsZWN0b3IsIGlkIG9iamVjCiAgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhj
ZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOwogICAgIH0KICAgICByZXR1cm4gbmlsOworI2Vs
c2UKKyAgICBpZiAoIWRlbGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNl
bGVjdG9yXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TSW52b2NhdGlvbiAqaW52b2Nh
dGlvbiA9IFdlYlRocmVhZE1ha2VOU0ludm9jYXRpb24oZGVsZWdhdGUsIHNlbGVjdG9yKTsKKyAg
ICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomc2VsZiBhdEluZGV4OjJdOworICAgIFtpbnZvY2F0
aW9uIHNldEFyZ3VtZW50OiZvYmplY3QgYXRJbmRleDozXTsKKyAgICBbaW52b2NhdGlvbiBzZXRB
cmd1bWVudDomYm9vbGVhbiBhdEluZGV4OjRdOworCisgICAgaWQgcmV0dXJuVmFsdWU7CisgICAg
QHRyeSB7CisgICAgICAgIFdlYlRocmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKKyAgICAg
ICAgaWYgKFtbaW52b2NhdGlvbiBtZXRob2RTaWduYXR1cmVdIG1ldGhvZFJldHVybkxlbmd0aF0g
PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBbaW52
b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomcmV0dXJuVmFsdWVdOworICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWU7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERp
c2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAg
ICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRl
KFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEsIGlk
IG9iamVjdDIsIGlkIG9iamVjdDMpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWRl
bGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICBAdHJ5IHsKQEAgLTE0OSwxMCArMjY4LDM0IEBAIHN0YXRpYyBp
bmxpbmUgaWQgQ2FsbERlbGVnYXRlKFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2Vs
ZWN0b3IsIGlkIG9iamVjCiAgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9u
KHNlbGVjdG9yLCBleGNlcHRpb24pOwogICAgIH0KICAgICByZXR1cm4gbmlsOworI2Vsc2UKKyAg
ICBpZiAoIWRlbGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9y
XSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9
IFdlYlRocmVhZE1ha2VOU0ludm9jYXRpb24oZGVsZWdhdGUsIHNlbGVjdG9yKTsKKyAgICBbaW52
b2NhdGlvbiBzZXRBcmd1bWVudDomc2VsZiBhdEluZGV4OjJdOworICAgIFtpbnZvY2F0aW9uIHNl
dEFyZ3VtZW50OiZvYmplY3QxIGF0SW5kZXg6M107CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1l
bnQ6Jm9iamVjdDIgYXRJbmRleDo0XTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2Jq
ZWN0MyBhdEluZGV4OjVdOworCisgICAgaWQgcmV0dXJuVmFsdWU7CisgICAgQHRyeSB7CisgICAg
ICAgIFdlYlRocmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKKyAgICAgICAgaWYgKFtbaW52
b2NhdGlvbiBtZXRob2RTaWduYXR1cmVdIG1ldGhvZFJldHVybkxlbmd0aF0gPT0gMCkgeworICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBbaW52b2NhdGlvbiBnZXRS
ZXR1cm5WYWx1ZTomcmV0dXJuVmFsdWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cisg
ICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVn
YXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbmls
OworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlKFdlYlZpZXcgKnNl
bGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdCwgTlNVSW50ZWdlciBpbnRl
Z2VyKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhW2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgQHRyeSB7CkBAIC0xNjEsMTAgKzMwNCwzMyBAQCBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxl
Z2F0ZShXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmplYwog
ICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0
aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKKyNlbHNlCisgICAgaWYgKCFkZWxlZ2F0ZSB8
fCAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBOU0ludm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJ
bnZvY2F0aW9uKGRlbGVnYXRlLCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1l
bnQ6JnNlbGYgYXRJbmRleDoyXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0
IGF0SW5kZXg6M107CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JmludGVnZXIgYXRJbmRl
eDo0XTsKKworICAgIGlkIHJldHVyblZhbHVlOworICAgIEB0cnkgeworICAgICAgICBXZWJUaHJl
YWRDYWxsRGVsZWdhdGUoaW52b2NhdGlvbik7CisgICAgICAgIGlmIChbW2ludm9jYXRpb24gbWV0
aG9kU2lnbmF0dXJlXSBtZXRob2RSZXR1cm5MZW5ndGhdID09IDApIHsKKyAgICAgICAgICAgIHJl
dHVybiBuaWw7CisgICAgICAgIH0KKyAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6
JnJldHVyblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0gQGNhdGNo
KGlkIGV4Y2VwdGlvbikgeworICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlv
bihzZWxlY3RvciwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgog
fQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IENhbGxEZWxlZ2F0ZVJldHVybmluZ0Zsb2F0KFdlYlZp
ZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0b3IpCiB7CisjaWYgIVBMQVRGT1JNKElP
UykKICAgICBpZiAoIWRlbGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNl
bGVjdG9yXSkKICAgICAgICAgcmV0dXJuIDAuMGY7CiAgICAgQHRyeSB7CkBAIC0xNzMsMTAgKzMz
OSwyOCBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IENhbGxEZWxlZ2F0ZVJldHVybmluZ0Zsb2F0KFdl
YlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgcwogICAgICAgICBSZXBvcnREaXNjYXJkZWRE
ZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAgcmV0dXJu
IDAuMGY7CisjZWxzZQorICAgIGlmICghZGVsZWdhdGUgfHwgIVtkZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6c2VsZWN0b3JdKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIE5TSW52b2Nh
dGlvbiAqaW52b2NhdGlvbiA9IFdlYlRocmVhZE1ha2VOU0ludm9jYXRpb24oZGVsZWdhdGUsIHNl
bGVjdG9yKTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomc2VsZiBhdEluZGV4OjJdOwor
CisgICAgZmxvYXQgcmV0dXJuVmFsdWUgPSAwLjBmOworICAgIEB0cnkgeworICAgICAgICBXZWJU
aHJlYWRDYWxsRGVsZWdhdGUoaW52b2NhdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJl
dHVyblZhbHVlOiZyZXR1cm5WYWx1ZV07CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAg
ICB9IEBjYXRjaChpZCBleGNlcHRpb24pIHsKKyAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdh
dGVFeGNlcHRpb24oc2VsZWN0b3IsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIHJldHVybiAwLjBm
OworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgQk9PTCBDYWxsRGVsZWdhdGVSZXR1cm5pbmdC
b29sZWFuKEJPT0wgcmVzdWx0LCBXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVj
dG9yKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhW2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgQHRyeSB7CkBAIC0xODUsMTAgKzM2OSwyOCBAQCBzdGF0aWMgaW5saW5lIEJPT0wgQ2Fs
bERlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09MIHJlc3VsdCwgV2ViVmlldyAqc2VsZiwgaWQg
ZAogICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhj
ZXB0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgaWYgKCFkZWxl
Z2F0ZSB8fCAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisKKyAgICBOU0ludm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJl
YWRNYWtlTlNJbnZvY2F0aW9uKGRlbGVnYXRlLCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24g
c2V0QXJndW1lbnQ6JnNlbGYgYXRJbmRleDoyXTsKKworICAgIEJPT0wgcmV0dXJuVmFsdWU7Cisg
ICAgQHRyeSB7CisgICAgICAgIFdlYlRocmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKKyAg
ICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnJldHVyblZhbHVlXTsKKyAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOworICAgIH0gQGNhdGNoKGlkIGV4Y2VwdGlvbikgeworICAgICAg
ICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIEJP
T0wgQ2FsbERlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09MIHJlc3VsdCwgV2ViVmlldyAqc2Vs
ZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0KQogeworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpzZWxlY3Rvcl0pCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgQHRyeSB7CkBAIC0xOTcs
MTAgKzM5OSwyOSBAQCBzdGF0aWMgaW5saW5lIEJPT0wgQ2FsbERlbGVnYXRlUmV0dXJuaW5nQm9v
bGVhbihCT09MIHJlc3VsdCwgV2ViVmlldyAqc2VsZiwgaWQgZAogICAgICAgICBSZXBvcnREaXNj
YXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhW2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAg
ICBOU0ludm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRl
bGVnYXRlLCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnNlbGYgYXRJ
bmRleDoyXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0IGF0SW5kZXg6M107
CisKKyAgICBCT09MIHJldHVyblZhbHVlOworICAgIEB0cnkgeworICAgICAgICBXZWJUaHJlYWRD
YWxsRGVsZWdhdGUoaW52b2NhdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZh
bHVlOiZyZXR1cm5WYWx1ZV07CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9IEBj
YXRjaChpZCBleGNlcHRpb24pIHsKKyAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNl
cHRpb24oc2VsZWN0b3IsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cisj
ZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBCT09MIENhbGxEZWxlZ2F0ZVJldHVybmluZ0Jvb2xl
YW4oQk9PTCByZXN1bHQsIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0b3Is
IGlkIG9iamVjdCwgQk9PTCBib29sZWFuKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYg
KCFkZWxlZ2F0ZSB8fCAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgQHRyeSB7CkBAIC0yMDksNiArNDMwLDI1IEBAIHN0
YXRpYyBpbmxpbmUgQk9PTCBDYWxsRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wgcmVzdWx0
LCBXZWJWaWV3ICpzZWxmLCBpZCBkCiAgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhj
ZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBpZiAoIWRlbGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OnNlbGVjdG9yXSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIE5TSW52b2NhdGlvbiAq
aW52b2NhdGlvbiA9IFdlYlRocmVhZE1ha2VOU0ludm9jYXRpb24oZGVsZWdhdGUsIHNlbGVjdG9y
KTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomc2VsZiBhdEluZGV4OjJdOworICAgIFtp
bnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QgYXRJbmRleDozXTsKKyAgICBbaW52b2NhdGlv
biBzZXRBcmd1bWVudDomYm9vbGVhbiBhdEluZGV4OjRdOworCisgICAgQk9PTCByZXR1cm5WYWx1
ZTsKKyAgICBAdHJ5IHsKKyAgICAgICAgV2ViVGhyZWFkQ2FsbERlbGVnYXRlKGludm9jYXRpb24p
OworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomcmV0dXJuVmFsdWVdOworICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7Cisg
ICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRp
b24pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxp
bmUgQk9PTCBDYWxsRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wgcmVzdWx0LCBXZWJWaWV3
ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QsIEJPT0wgYm9vbGVh
biwgaWQgb2JqZWN0MikKQEAgLTIyNSw2ICs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIEJPT0wgQ2Fs
bERlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09MIHJlc3VsdCwgV2ViVmlldyAqc2VsZiwgaWQg
ZAogCiBzdGF0aWMgaW5saW5lIEJPT0wgQ2FsbERlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09M
IHJlc3VsdCwgV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2Jq
ZWN0MSwgaWQgb2JqZWN0MikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghZGVsZWdh
dGUgfHwgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIEB0cnkgewpAQCAtMjMzLDEwICs0NzQsNTQgQEAgc3RhdGljIGlu
bGluZSBCT09MIENhbGxEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oQk9PTCByZXN1bHQsIFdlYlZp
ZXcgKnNlbGYsIGlkIGQKICAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNlcHRpb24o
c2VsZWN0b3IsIGV4Y2VwdGlvbik7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIGlmICghZGVsZWdhdGUgfHwgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0
b3JdKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0
aW9uID0gV2ViVGhyZWFkTWFrZU5TSW52b2NhdGlvbihkZWxlZ2F0ZSwgc2VsZWN0b3IpOworICAg
IFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZzZWxmIGF0SW5kZXg6Ml07CisgICAgW2ludm9jYXRp
b24gc2V0QXJndW1lbnQ6Jm9iamVjdDEgYXRJbmRleDozXTsKKyAgICBbaW52b2NhdGlvbiBzZXRB
cmd1bWVudDomb2JqZWN0MiBhdEluZGV4OjRdOworCisgICAgQk9PTCByZXR1cm5WYWx1ZTsKKyAg
ICBAdHJ5IHsKKyAgICAgICAgV2ViVGhyZWFkQ2FsbERlbGVnYXRlKGludm9jYXRpb24pOworICAg
ICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomcmV0dXJuVmFsdWVdOworICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAg
IFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShJT1Mp
CitzdGF0aWMgaW5saW5lIEJPT0wgQ2FsbERlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09MIHJl
c3VsdCwgV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0
MSwgaWQgb2JqZWN0MiwgQk9PTCBib29sZWFuKQoreworICAgIGlmICghZGVsZWdhdGUgfHwgIVtk
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIAorICAgIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9IFdlYlRocmVhZE1ha2VO
U0ludm9jYXRpb24oZGVsZWdhdGUsIHNlbGVjdG9yKTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1
bWVudDomc2VsZiBhdEluZGV4OjJdOworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmpl
Y3QxIGF0SW5kZXg6M107CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdDIgYXRJ
bmRleDo0XTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomYm9vbGVhbiBhdEluZGV4OjVd
OworICAgIAorICAgIEJPT0wgcmV0dXJuVmFsdWU7CisgICAgQHRyeSB7CisgICAgICAgIFdlYlRo
cmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0
dXJuVmFsdWU6JnJldHVyblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAg
IH0gQGNhdGNoKGlkIGV4Y2VwdGlvbikgeworICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0
ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShJTVAgaW1wbGVt
ZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0b3IpCiB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbmls
OwogICAgIEB0cnkgewpAQCAtMjQ1LDEwICs1MzAsMzEgQEAgc3RhdGljIGlubGluZSBpZCBDYWxs
RGVsZWdhdGUoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwg
U0UKICAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNlcHRpb24oc2VsZWN0b3IsIGV4
Y2VwdGlvbik7CiAgICAgfQogICAgIHJldHVybiBuaWw7CisjZWxzZQorICAgIGlmICghZGVsZWdh
dGUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU0ludm9jYXRpb24gKmludm9jYXRpb24g
PSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRlbGVnYXRlLCBzZWxlY3Rvcik7CisgICAgW2lu
dm9jYXRpb24gc2V0QXJndW1lbnQ6JnNlbGYgYXRJbmRleDoyXTsKKworICAgIGlkIHJldHVyblZh
bHVlOworICAgIEB0cnkgeworICAgICAgICBXZWJUaHJlYWRDYWxsRGVsZWdhdGUoaW52b2NhdGlv
bik7CisgICAgICAgIGlmIChbW2ludm9jYXRpb24gbWV0aG9kU2lnbmF0dXJlXSBtZXRob2RSZXR1
cm5MZW5ndGhdID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAg
ICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnJldHVyblZhbHVlXTsKKyAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOworICAgIH0gQGNhdGNoKGlkIGV4Y2VwdGlvbikgeworICAgICAg
ICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsK
KyAgICB9CisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIGlkIENh
bGxEZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRl
LCBTRUwgc2VsZWN0b3IsIE5TVUludGVnZXIgaW50ZWdlcikKIHsKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgQHRyeSB7CkBA
IC0yNTcsMTAgKzU2MywzMiBAQCBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShJTVAgaW1w
bGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRQogICAgICAgICBSZXBv
cnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9
CiAgICAgcmV0dXJuIG5pbDsKKyNlbHNlCisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBOU0ludm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRl
bGVnYXRlLCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnNlbGYgYXRJ
bmRleDoyXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomaW50ZWdlciBhdEluZGV4OjNd
OworCisgICAgaWQgcmV0dXJuVmFsdWU7CisgICAgQHRyeSB7CisgICAgICAgIFdlYlRocmVhZENh
bGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKKyAgICAgICAgaWYgKFtbaW52b2NhdGlvbiBtZXRob2RT
aWduYXR1cmVdIG1ldGhvZFJldHVybkxlbmd0aF0gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgfQorICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomcmV0
dXJuVmFsdWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfSBAY2F0Y2goaWQg
ZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNl
bGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAK
IHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmll
dyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0KQogeworI2lmICFQ
TEFURk9STShJT1MpCiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICBAdHJ5IHsKQEAgLTI2OSwxMCArNTk3LDgzIEBAIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVn
YXRlKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFCiAg
ICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRp
b24pOwogICAgIH0KICAgICByZXR1cm4gbmlsOworI2Vsc2UKKyAgICBpZiAoIWRlbGVnYXRlKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uID0gV2Vi
VGhyZWFkTWFrZU5TSW52b2NhdGlvbihkZWxlZ2F0ZSwgc2VsZWN0b3IpOworICAgIFtpbnZvY2F0
aW9uIHNldEFyZ3VtZW50OiZzZWxmIGF0SW5kZXg6Ml07CisgICAgW2ludm9jYXRpb24gc2V0QXJn
dW1lbnQ6Jm9iamVjdCBhdEluZGV4OjNdOworCisgICAgaWQgcmV0dXJuVmFsdWU7CisgICAgQHRy
eSB7CisgICAgICAgIFdlYlRocmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKKyAgICAgICAg
aWYgKFtbaW52b2NhdGlvbiBtZXRob2RTaWduYXR1cmVdIG1ldGhvZFJldHVybkxlbmd0aF0gPT0g
MCkgeworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBbaW52b2Nh
dGlvbiBnZXRSZXR1cm5WYWx1ZTomcmV0dXJuVmFsdWVdOworICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2Nh
cmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICBy
ZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgaW5saW5l
IGlkIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAq
c2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0MikK
K3sKKyAgICBpZiAoIWRlbGVnYXRlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEB0cnkgewor
ICAgICAgICByZXR1cm4gd3RmQ2FsbElNUDxpZD4oaW1wbGVtZW50YXRpb24sIGRlbGVnYXRlLCBz
ZWxlY3Rvciwgc2VsZiwgb2JqZWN0MSwgb2JqZWN0Mik7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0
aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9y
LCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0aWMgaW5saW5l
IGlkIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAq
c2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0Miwg
aWQgb2JqZWN0MykKK3sKKyAgICBpZiAoIWRlbGVnYXRlKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIEB0cnkgeworICAgICAgICByZXR1cm4gd3RmQ2FsbElNUDxpZD4oaW1wbGVtZW50YXRpb24s
IGRlbGVnYXRlLCBzZWxlY3Rvciwgc2VsZiwgb2JqZWN0MSwgb2JqZWN0Miwgb2JqZWN0Myk7Cisg
ICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVn
YXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbmls
OworfQorCitzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKElNUCBpbXBs
ZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQg
b2JqZWN0MSwgaWQgb2JqZWN0MiwgaWQgb2JqZWN0MywgaWQgb2JqZWN0NCkKK3sKKyAgICBpZiAo
IWRlbGVnYXRlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEB0cnkgeworICAgICAgICByZXR1
cm4gd3RmQ2FsbElNUDxpZD4oaW1wbGVtZW50YXRpb24sIGRlbGVnYXRlLCBzZWxlY3Rvciwgc2Vs
Ziwgb2JqZWN0MSwgb2JqZWN0Miwgb2JqZWN0Mywgb2JqZWN0NCk7CisgICAgfSBAY2F0Y2goaWQg
ZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNl
bGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0aWMg
aW5saW5lIGlkIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKElNUCBpbXBsZW1lbnRhdGlvbiwgV2Vi
VmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgTlNVSW50ZWdlciBpbnRlZ2Vy
KQoreworICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQHRyeSB7
CisgICAgICAgIHJldHVybiB3dGZDYWxsSU1QPGlkPihpbXBsZW1lbnRhdGlvbiwgZGVsZWdhdGUs
IHNlbGVjdG9yLCBzZWxmLCBpbnRlZ2VyKTsKKyAgICB9IEBjYXRjaChpZCBleGNlcHRpb24pIHsK
KyAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNlcHRpb24oc2VsZWN0b3IsIGV4Y2Vw
dGlvbik7CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCisKIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwg
V2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQg
b2JqZWN0MikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghZGVsZWdhdGUpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgQHRyeSB7CkBAIC0yODEsMTAgKzY4Miw1OSBAQCBzdGF0aWMg
aW5saW5lIGlkIENhbGxEZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYs
IGlkIGRlbGVnYXRlLCBTRQogICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlv
bihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKKyNlbHNlCisg
ICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TSW52b2NhdGlv
biAqaW52b2NhdGlvbiA9IFdlYlRocmVhZE1ha2VOU0ludm9jYXRpb24oZGVsZWdhdGUsIHNlbGVj
dG9yKTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomc2VsZiBhdEluZGV4OjJdOworICAg
IFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QxIGF0SW5kZXg6M107CisgICAgW2ludm9j
YXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdDIgYXRJbmRleDo0XTsKKworICAgIGlkIHJldHVyblZh
bHVlOworICAgIEB0cnkgeworICAgICAgICBXZWJUaHJlYWRDYWxsRGVsZWdhdGUoaW52b2NhdGlv
bik7CisgICAgICAgIGlmIChbW2ludm9jYXRpb24gbWV0aG9kU2lnbmF0dXJlXSBtZXRob2RSZXR1
cm5MZW5ndGhdID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAg
ICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnJldHVyblZhbHVlXTsKKyAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOworICAgIH0gQGNhdGNoKGlkIGV4Y2VwdGlvbikgeworICAgICAg
ICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsK
KyAgICB9CisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oSU9TKQor
c3RhdGljIGlubGluZSBpZCBDYWxsRGVsZWdhdGUoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3
ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QsIGRvdWJsZSBkb3Vi
bGUxKQoreworICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBO
U0ludm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRlbGVn
YXRlLCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnNlbGYgYXRJbmRl
eDoyXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0IGF0SW5kZXg6M107Cisg
ICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JmRvdWJsZTEgYXRJbmRleDo0XTsKKworICAgIGlk
IHJldHVyblZhbHVlOworICAgIEB0cnkgeworICAgICAgICBXZWJUaHJlYWRDYWxsRGVsZWdhdGUo
aW52b2NhdGlvbik7CisgICAgICAgIGlmIChbW2ludm9jYXRpb24gbWV0aG9kU2lnbmF0dXJlXSBt
ZXRob2RSZXR1cm5MZW5ndGhdID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAg
ICAgIH0KKyAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnJldHVyblZhbHVlXTsK
KyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0gQGNhdGNoKGlkIGV4Y2VwdGlvbikg
eworICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhj
ZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5s
aW5lIGlkIENhbGxEZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlk
IGRlbGVnYXRlLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEsIGlkIG9iamVjdDIsIGlkIG9iamVj
dDMpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIEB0cnkgewpAQCAtMjkzLDEwICs3NDMsMzQgQEAgc3RhdGljIGlubGlu
ZSBpZCBDYWxsRGVsZWdhdGUoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBpZCBk
ZWxlZ2F0ZSwgU0UKICAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNlcHRpb24oc2Vs
ZWN0b3IsIGV4Y2VwdGlvbik7CiAgICAgfQogICAgIHJldHVybiBuaWw7CisjZWxzZQorICAgIGlm
ICghZGVsZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU0ludm9jYXRpb24gKmlu
dm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRlbGVnYXRlLCBzZWxlY3Rvcik7
CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnNlbGYgYXRJbmRleDoyXTsKKyAgICBbaW52
b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0MSBhdEluZGV4OjNdOworICAgIFtpbnZvY2F0aW9u
IHNldEFyZ3VtZW50OiZvYmplY3QyIGF0SW5kZXg6NF07CisgICAgW2ludm9jYXRpb24gc2V0QXJn
dW1lbnQ6Jm9iamVjdDMgYXRJbmRleDo1XTsKKworICAgIGlkIHJldHVyblZhbHVlOworICAgIEB0
cnkgeworICAgICAgICBXZWJUaHJlYWRDYWxsRGVsZWdhdGUoaW52b2NhdGlvbik7CisgICAgICAg
IGlmIChbW2ludm9jYXRpb24gbWV0aG9kU2lnbmF0dXJlXSBtZXRob2RSZXR1cm5MZW5ndGhdID09
IDApIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICAgICAgW2ludm9j
YXRpb24gZ2V0UmV0dXJuVmFsdWU6JnJldHVyblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlOworICAgIH0gQGNhdGNoKGlkIGV4Y2VwdGlvbikgeworICAgICAgICBSZXBvcnREaXNj
YXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAg
cmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShJ
TVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0
b3IsIGlkIG9iamVjdDEsIGlkIG9iamVjdDIsIGlkIG9iamVjdDMsIGlkIG9iamVjdDQpCiB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbmls
OwogICAgIEB0cnkgewpAQCAtMzA1LDEwICs3NzksMzUgQEAgc3RhdGljIGlubGluZSBpZCBDYWxs
RGVsZWdhdGUoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwg
U0UKICAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNlcHRpb24oc2VsZWN0b3IsIGV4
Y2VwdGlvbik7CiAgICAgfQogICAgIHJldHVybiBuaWw7CisjZWxzZQorICAgIGlmICghZGVsZWdh
dGUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU0ludm9jYXRpb24gKmludm9jYXRpb24g
PSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRlbGVnYXRlLCBzZWxlY3Rvcik7CisgICAgW2lu
dm9jYXRpb24gc2V0QXJndW1lbnQ6JnNlbGYgYXRJbmRleDoyXTsKKyAgICBbaW52b2NhdGlvbiBz
ZXRBcmd1bWVudDomb2JqZWN0MSBhdEluZGV4OjNdOworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3Vt
ZW50OiZvYmplY3QyIGF0SW5kZXg6NF07CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9i
amVjdDMgYXRJbmRleDo1XTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0NCBh
dEluZGV4OjZdOworCisgICAgaWQgcmV0dXJuVmFsdWU7CisgICAgQHRyeSB7CisgICAgICAgIFdl
YlRocmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKKyAgICAgICAgaWYgKFtbaW52b2NhdGlv
biBtZXRob2RTaWduYXR1cmVdIG1ldGhvZFJldHVybkxlbmd0aF0gPT0gMCkgeworICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5W
YWx1ZTomcmV0dXJuVmFsdWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfSBA
Y2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhj
ZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbmlsOworI2Vu
ZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlKElNUCBpbXBsZW1lbnRhdGlv
biwgV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwg
TlNJbnRlZ2VyIGludGVnZXIsIGlkIG9iamVjdDIpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIEB0cnkgewpAQCAtMzE3
LDkgKzgxNiwzNiBAQCBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShJTVAgaW1wbGVtZW50
YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRQogICAgICAgICBSZXBvcnREaXNj
YXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAg
cmV0dXJuIG5pbDsKKyNlbHNlCisgICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9IFdlYlRocmVhZE1ha2VOU0ludm9j
YXRpb24oZGVsZWdhdGUsIHNlbGVjdG9yKTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDom
c2VsZiBhdEluZGV4OjJdOworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QxIGF0
SW5kZXg6M107CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JmludGVnZXIgYXRJbmRleDo0
XTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0MiBhdEluZGV4OjVdOworCisg
ICAgaWQgcmV0dXJuVmFsdWU7CisgICAgQHRyeSB7CisgICAgICAgIFdlYlRocmVhZENhbGxEZWxl
Z2F0ZShpbnZvY2F0aW9uKTsKKyAgICAgICAgaWYgKFtbaW52b2NhdGlvbiBtZXRob2RTaWduYXR1
cmVdIG1ldGhvZFJldHVybkxlbmd0aF0gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAgICAgfQorICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomcmV0dXJuVmFs
dWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0
aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9y
LCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogc3RhdGljIGlubGluZSBpZCBDYWxsRGVsZWdhdGUoSU1QIGltcGxlbWVu
dGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmpl
Y3QxLCBOU0ludGVnZXIgaW50ZWdlcjEsIGludCBpbnRlZ2VyMiwgaWQgb2JqZWN0MikKKyNlbHNl
CitzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKElNUCBpbXBsZW1lbnRh
dGlvbiwgV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0
MSwgTlNJbnRlZ2VyIGludGVnZXIxLCBpbnQgaW50ZWdlcjIsIGlkIG9iamVjdDIpCisjZW5kaWYK
IHsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzQ1LDYgKzg3
MSw3IEBAIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwg
V2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFCiAKIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERl
bGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNF
TCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0MiwgTlNJbnRlZ2VyIGludGVnZXIsIGlk
IG9iamVjdDMpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWRlbGVnYXRlKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIEB0cnkgewpAQCAtMzUzLDkgKzg4MCw2MiBAQCBzdGF0aWMg
aW5saW5lIGlkIENhbGxEZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYs
IGlkIGRlbGVnYXRlLCBTRQogICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlv
bihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKKyNlbHNlCisg
ICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TSW52b2NhdGlv
biAqaW52b2NhdGlvbiA9IFdlYlRocmVhZE1ha2VOU0ludm9jYXRpb24oZGVsZWdhdGUsIHNlbGVj
dG9yKTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomc2VsZiBhdEluZGV4OjJdOworICAg
IFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QxIGF0SW5kZXg6M107CisgICAgW2ludm9j
YXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdDIgYXRJbmRleDo0XTsKKyAgICBbaW52b2NhdGlvbiBz
ZXRBcmd1bWVudDomaW50ZWdlciBhdEluZGV4OjVdOworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3Vt
ZW50OiZvYmplY3QzIGF0SW5kZXg6Nl07CisKKyAgICBpZCByZXR1cm5WYWx1ZTsKKyAgICBAdHJ5
IHsKKyAgICAgICAgV2ViVGhyZWFkQ2FsbERlbGVnYXRlKGludm9jYXRpb24pOworICAgICAgICBp
ZiAoW1tpbnZvY2F0aW9uIG1ldGhvZFNpZ25hdHVyZV0gbWV0aG9kUmV0dXJuTGVuZ3RoXSA9PSAw
KSB7CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgICAgIFtpbnZvY2F0
aW9uIGdldFJldHVyblZhbHVlOiZyZXR1cm5WYWx1ZV07CisgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKKyAgICB9IEBjYXRjaChpZCBleGNlcHRpb24pIHsKKyAgICAgICAgUmVwb3J0RGlzY2Fy
ZGVkRGVsZWdhdGVFeGNlcHRpb24oc2VsZWN0b3IsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIHJl
dHVybiBuaWw7CisjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBpbmxpbmUg
aWQgQ2FsbERlbGVnYXRlSW5XZWJUaHJlYWQoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpz
ZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBOU0ludGVnZXIgaW50
ZWdlciwgaWQgb2JqZWN0MikKK3sKKyAgICBpZiAoIWRlbGVnYXRlKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEB0cnkgeworICAgICAgICByZXR1cm4gd3RmQ2FsbElNUDxpZD4oaW1wbGVtZW50
YXRpb24sIGRlbGVnYXRlLCBzZWxlY3Rvciwgc2VsZiwgb2JqZWN0MSwgaW50ZWdlciwgb2JqZWN0
Mik7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRl
ZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1
cm4gbmlsOworfQorc3RhdGljIGlubGluZSBpZCBDYWxsRGVsZWdhdGVJbldlYlRocmVhZChJTVAg
aW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0b3Is
IGlkIG9iamVjdDEsIGlkIG9iamVjdDIsIE5TSW50ZWdlciBpbnRlZ2VyLCBpZCBvYmplY3QzKQor
eworICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQHRyeSB7Cisg
ICAgICAgIHJldHVybiB3dGZDYWxsSU1QPGlkPihpbXBsZW1lbnRhdGlvbiwgZGVsZWdhdGUsIHNl
bGVjdG9yLCBzZWxmLCBvYmplY3QxLCBvYmplY3QyLCBpbnRlZ2VyLCBvYmplY3QzKTsKKyAgICB9
IEBjYXRjaChpZCBleGNlcHRpb24pIHsKKyAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVF
eGNlcHRpb24oc2VsZWN0b3IsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9
CisjZW5kaWYKKworI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxl
Z2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwg
c2VsZWN0b3IsIGlkIG9iamVjdDEsIE5TSW50ZWdlciBpbnRlZ2VyMSwgaWQgb2JqZWN0MiwgTlNJ
bnRlZ2VyIGludGVnZXIyLCBpZCBvYmplY3QzKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaWQgQ2Fs
bERlbGVnYXRlSW5XZWJUaHJlYWQoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBp
ZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBOU0ludGVnZXIgaW50ZWdlcjEs
IGlkIG9iamVjdDIsIE5TSW50ZWdlciBpbnRlZ2VyMiwgaWQgb2JqZWN0MykKKyNlbmRpZgogewog
ICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0zNjcsNyArOTQ3LDEx
IEBAIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwgV2Vi
VmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFCiAgICAgcmV0dXJuIG5pbDsKIH0KIAorI2lmICFQ
TEFURk9STShJT1MpCiBzdGF0aWMgaW5saW5lIGlkIENhbGxEZWxlZ2F0ZShJTVAgaW1wbGVtZW50
YXRpb24sIFdlYlZpZXcgKnNlbGYsIGlkIGRlbGVnYXRlLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVj
dDEsIE5TSW50ZWdlciBpbnRlZ2VyLCBpZCBvYmplY3QyLCBpZCBvYmplY3QzLCBpZCBvYmplY3Q0
KQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlSW5XZWJUaHJlYWQoSU1QIGlt
cGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBp
ZCBvYmplY3QxLCBOU0ludGVnZXIgaW50ZWdlciwgaWQgb2JqZWN0MiwgaWQgb2JqZWN0MywgaWQg
b2JqZWN0NCkKKyNlbmRpZgogewogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBu
aWw7CkBAIC0zODEsNiArOTY1LDcgQEAgc3RhdGljIGlubGluZSBpZCBDYWxsRGVsZWdhdGUoSU1Q
IGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBpZCBkZWxlZ2F0ZSwgU0UKIAogc3RhdGlj
IGlubGluZSBpZCBDYWxsRGVsZWdhdGUoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxm
LCBpZCBkZWxlZ2F0ZSwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBOU1RpbWVJbnRlcnZhbCBp
bnRlcnZhbCwgaWQgb2JqZWN0MiwgaWQgb2JqZWN0MykKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgQHRyeSB7CkBAIC0z
ODksMTEyICs5NzQsMjM0IEBAIHN0YXRpYyBpbmxpbmUgaWQgQ2FsbERlbGVnYXRlKElNUCBpbXBs
ZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgaWQgZGVsZWdhdGUsIFNFCiAgICAgICAgIFJlcG9y
dERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOwogICAgIH0K
ICAgICByZXR1cm4gbmlsOworI2Vsc2UKKyAgICBpZiAoIWRlbGVnYXRlKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uID0gV2ViVGhyZWFkTWFrZU5T
SW52b2NhdGlvbihkZWxlZ2F0ZSwgc2VsZWN0b3IpOworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3Vt
ZW50OiZzZWxmIGF0SW5kZXg6Ml07CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVj
dDEgYXRJbmRleDozXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomaW50ZXJ2YWwgYXRJ
bmRleDo0XTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0MiBhdEluZGV4OjVd
OworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QzIGF0SW5kZXg6Nl07CisKKyAg
ICBpZCByZXR1cm5WYWx1ZTsKKyAgICBAdHJ5IHsKKyAgICAgICAgV2ViVGhyZWFkQ2FsbERlbGVn
YXRlKGludm9jYXRpb24pOworICAgICAgICBpZiAoW1tpbnZvY2F0aW9uIG1ldGhvZFNpZ25hdHVy
ZV0gbWV0aG9kUmV0dXJuTGVuZ3RoXSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbmlsOwor
ICAgICAgICB9CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZyZXR1cm5WYWx1
ZV07CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9IEBjYXRjaChpZCBleGNlcHRp
b24pIHsKKyAgICAgICAgUmVwb3J0RGlzY2FyZGVkRGVsZWdhdGVFeGNlcHRpb24oc2VsZWN0b3Is
IGV4Y2VwdGlvbik7CisgICAgfQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAogaWQgQ2Fs
bFVJRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yKQogeworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+VUlE
ZWxlZ2F0ZSwgc2VsZWN0b3IpOworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlKHNlbGYs
IFtzZWxmIF9VSURlbGVnYXRlRm9yU2VsZWN0b3I6c2VsZWN0b3JdLCBzZWxlY3Rvcik7CisjZW5k
aWYKIH0KIAogaWQgQ2FsbFVJRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBp
ZCBvYmplY3QpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gQ2FsbERlbGVnYXRl
KHNlbGYsIHNlbGYtPl9wcml2YXRlLT5VSURlbGVnYXRlLCBzZWxlY3Rvciwgb2JqZWN0KTsKKyNl
bHNlCisgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShzZWxmLCBbc2VsZiBfVUlEZWxlZ2F0ZUZvclNl
bGVjdG9yOnNlbGVjdG9yXSwgc2VsZWN0b3IsIG9iamVjdCk7CisjZW5kaWYKIH0KIAogaWQgQ2Fs
bFVJRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QsIEJPT0wg
Ym9vbGVhbikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBDYWxsRGVsZWdhdGUo
c2VsZiwgc2VsZi0+X3ByaXZhdGUtPlVJRGVsZWdhdGUsIHNlbGVjdG9yLCBvYmplY3QsIGJvb2xl
YW4pOworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlKHNlbGYsIFtzZWxmIF9VSURlbGVn
YXRlRm9yU2VsZWN0b3I6c2VsZWN0b3JdLCBzZWxlY3Rvciwgb2JqZWN0LCBib29sZWFuKTsKKyNl
bmRpZgogfQogCiBpZCBDYWxsVUlEZWxlZ2F0ZShXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3Is
IE5TUmVjdCByZWN0KQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxl
Z2F0ZShzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+VUlEZWxlZ2F0ZSwgc2VsZWN0b3IsIHJlY3QpOwor
I2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlKHNlbGYsIFtzZWxmIF9VSURlbGVnYXRlRm9y
U2VsZWN0b3I6c2VsZWN0b3JdLCBzZWxlY3RvciwgcmVjdCk7CisjZW5kaWYKIH0KIAogaWQgQ2Fs
bFVJRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBpZCBv
YmplY3QyKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShz
ZWxmLCBzZWxmLT5fcHJpdmF0ZS0+VUlEZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIG9iamVj
dDIpOworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlKHNlbGYsIFtzZWxmIF9VSURlbGVn
YXRlRm9yU2VsZWN0b3I6c2VsZWN0b3JdLCBzZWxlY3Rvciwgb2JqZWN0MSwgb2JqZWN0Mik7Cisj
ZW5kaWYKIH0KIAogaWQgQ2FsbFVJRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9y
LCBpZCBvYmplY3QxLCBpZCBvYmplY3QyLCBpZCBvYmplY3QzKQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+VUlEZWxl
Z2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIG9iamVjdDIsIG9iamVjdDMpOworI2Vsc2UKKyAgICBy
ZXR1cm4gQ2FsbERlbGVnYXRlKHNlbGYsIFtzZWxmIF9VSURlbGVnYXRlRm9yU2VsZWN0b3I6c2Vs
ZWN0b3JdLCBzZWxlY3Rvciwgb2JqZWN0MSwgb2JqZWN0Miwgb2JqZWN0Myk7CisjZW5kaWYKIH0K
IAogaWQgQ2FsbFVJRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmpl
Y3QsIE5TVUludGVnZXIgaW50ZWdlcikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVy
biBDYWxsRGVsZWdhdGUoc2VsZiwgc2VsZi0+X3ByaXZhdGUtPlVJRGVsZWdhdGUsIHNlbGVjdG9y
LCBvYmplY3QsIGludGVnZXIpOworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlKHNlbGYs
IFtzZWxmIF9VSURlbGVnYXRlRm9yU2VsZWN0b3I6c2VsZWN0b3JdLCBzZWxlY3Rvciwgb2JqZWN0
LCBpbnRlZ2VyKTsKKyNlbmRpZgogfQogCiBmbG9hdCBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Zs
b2F0KFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvcikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIHJldHVybiBDYWxsRGVsZWdhdGVSZXR1cm5pbmdGbG9hdChzZWxmLCBzZWxmLT5fcHJpdmF0
ZS0+VUlEZWxlZ2F0ZSwgc2VsZWN0b3IpOworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRl
UmV0dXJuaW5nRmxvYXQoc2VsZiwgW3NlbGYgX1VJRGVsZWdhdGVGb3JTZWxlY3RvcjpzZWxlY3Rv
cl0sIHNlbGVjdG9yKTsKKyNlbmRpZgogfQogCiBCT09MIENhbGxVSURlbGVnYXRlUmV0dXJuaW5n
Qm9vbGVhbihCT09MIHJlc3VsdCwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yKQogeworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4o
cmVzdWx0LCBzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+VUlEZWxlZ2F0ZSwgc2VsZWN0b3IpOworI2Vs
c2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihyZXN1bHQsIHNlbGYs
IFtzZWxmIF9VSURlbGVnYXRlRm9yU2VsZWN0b3I6c2VsZWN0b3JdLCBzZWxlY3Rvcik7CisjZW5k
aWYKIH0KIAogQk9PTCBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oQk9PTCByZXN1bHQs
IFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0KQogeworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4ocmVzdWx0LCBz
ZWxmLCBzZWxmLT5fcHJpdmF0ZS0+VUlEZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdCk7CisjZWxz
ZQorICAgIHJldHVybiBDYWxsRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKHJlc3VsdCwgc2VsZiwg
W3NlbGYgX1VJRGVsZWdhdGVGb3JTZWxlY3RvcjpzZWxlY3Rvcl0sIHNlbGVjdG9yLCBvYmplY3Qp
OworI2VuZGlmCiB9CiAKIEJPT0wgQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wg
cmVzdWx0LCBXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdCwgQk9PTCBib29s
ZWFuKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZVJldHVy
bmluZ0Jvb2xlYW4ocmVzdWx0LCBzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+VUlEZWxlZ2F0ZSwgc2Vs
ZWN0b3IsIG9iamVjdCwgYm9vbGVhbik7CisjZWxzZQorICAgIHJldHVybiBDYWxsRGVsZWdhdGVS
ZXR1cm5pbmdCb29sZWFuKHJlc3VsdCwgc2VsZiwgW3NlbGYgX1VJRGVsZWdhdGVGb3JTZWxlY3Rv
cjpzZWxlY3Rvcl0sIHNlbGVjdG9yLCBvYmplY3QsIGJvb2xlYW4pOworI2VuZGlmCiB9CiAKIEJP
T0wgQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wgcmVzdWx0LCBXZWJWaWV3ICpz
ZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdCwgQk9PTCBib29sZWFuLCBpZCBvYmplY3QyKQog
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZVJldHVybmluZ0Jv
b2xlYW4ocmVzdWx0LCBzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+VUlEZWxlZ2F0ZSwgc2VsZWN0b3Is
IG9iamVjdCwgYm9vbGVhbiwgb2JqZWN0Mik7CisjZWxzZQorICAgIHJldHVybiBDYWxsRGVsZWdh
dGVSZXR1cm5pbmdCb29sZWFuKHJlc3VsdCwgc2VsZiwgW3NlbGYgX1VJRGVsZWdhdGVGb3JTZWxl
Y3RvcjpzZWxlY3Rvcl0sIHNlbGVjdG9yLCBvYmplY3QsIGJvb2xlYW4sIG9iamVjdDIpOworI2Vu
ZGlmCiB9CiAKIEJPT0wgQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wgcmVzdWx0
LCBXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEsIGlkIG9iamVjdDIpCiB7
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gQ2FsbERlbGVnYXRlUmV0dXJuaW5nQm9v
bGVhbihyZXN1bHQsIHNlbGYsIHNlbGYtPl9wcml2YXRlLT5VSURlbGVnYXRlLCBzZWxlY3Rvciwg
b2JqZWN0MSwgb2JqZWN0Mik7CisjZWxzZQorICAgIHJldHVybiBDYWxsRGVsZWdhdGVSZXR1cm5p
bmdCb29sZWFuKHJlc3VsdCwgc2VsZiwgW3NlbGYgX1VJRGVsZWdhdGVGb3JTZWxlY3RvcjpzZWxl
Y3Rvcl0sIHNlbGVjdG9yLCBvYmplY3QxLCBvYmplY3QyKTsKKyNlbmRpZgogfQogCisjaWYgUExB
VEZPUk0oSU9TKQorQk9PTCBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oQk9PTCByZXN1
bHQsIFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0Miwg
Qk9PTCBib29sZWFuKQoreworICAgIHJldHVybiBDYWxsRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFu
KHJlc3VsdCwgc2VsZiwgW3NlbGYgX1VJRGVsZWdhdGVGb3JTZWxlY3RvcjpzZWxlY3Rvcl0sIHNl
bGVjdG9yLCBvYmplY3QxLCBvYmplY3QyLCBib29sZWFuKTsKK30KKyNlbmRpZgorCiBpZCBDYWxs
RnJhbWVMb2FkRGVsZWdhdGUoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBTRUwg
c2VsZWN0b3IpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gQ2FsbERlbGVnYXRl
KGltcGxlbWVudGF0aW9uLCBzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+ZnJhbWVMb2FkRGVsZWdhdGUs
IHNlbGVjdG9yKTsKKyNlbHNlCisgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlv
biwgc2VsZiwgW3NlbGYgX2ZyYW1lTG9hZERlbGVnYXRlRm9yd2FyZGVyXSwgc2VsZWN0b3IpOwor
I2VuZGlmCiB9CiAKIGlkIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24s
IFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgTlNVSW50ZWdlciBpbnRlZ2VyKQogeworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbiwg
c2VsZiwgc2VsZi0+X3ByaXZhdGUtPmZyYW1lTG9hZERlbGVnYXRlLCBzZWxlY3RvciwgaW50ZWdl
cik7CisjZWxzZQorICAgIHJldHVybiBDYWxsRGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYs
IFtzZWxmIF9mcmFtZUxvYWREZWxlZ2F0ZUZvcndhcmRlcl0sIHNlbGVjdG9yLCBpbnRlZ2VyKTsK
KyNlbmRpZgogfQogCiBpZCBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoSU1QIGltcGxlbWVudGF0aW9u
LCBXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdCkKIHsKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIHJldHVybiBDYWxsRGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYsIHNl
bGYtPl9wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdCk7CisjZWxz
ZQorICAgIHJldHVybiBDYWxsRGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYsIFtzZWxmIF9m
cmFtZUxvYWREZWxlZ2F0ZUZvcndhcmRlcl0sIHNlbGVjdG9yLCBvYmplY3QpOworI2VuZGlmCiB9
CiAKIGlkIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcg
KnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0MikKIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIHJldHVybiBDYWxsRGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYs
IHNlbGYtPl9wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIG9i
amVjdDIpOworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlKGltcGxlbWVudGF0aW9uLCBz
ZWxmLCBbc2VsZiBfZnJhbWVMb2FkRGVsZWdhdGVGb3J3YXJkZXJdLCBzZWxlY3Rvciwgb2JqZWN0
MSwgb2JqZWN0Mik7CisjZW5kaWYKIH0KIAogaWQgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKElNUCBp
bXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBp
ZCBvYmplY3QyLCBpZCBvYmplY3QzKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJu
IENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbiwgc2VsZiwgc2VsZi0+X3ByaXZhdGUtPmZyYW1l
TG9hZERlbGVnYXRlLCBzZWxlY3Rvciwgb2JqZWN0MSwgb2JqZWN0Miwgb2JqZWN0Myk7CisjZWxz
ZQorICAgIHJldHVybiBDYWxsRGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYsIFtzZWxmIF9m
cmFtZUxvYWREZWxlZ2F0ZUZvcndhcmRlcl0sIHNlbGVjdG9yLCBvYmplY3QxLCBvYmplY3QyLCBv
YmplY3QzKTsKKyNlbmRpZgogfQogCiBpZCBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoSU1QIGltcGxl
bWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEsIGlkIG9i
amVjdDIsIGlkIG9iamVjdDMsIGlkIG9iamVjdDQpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICByZXR1cm4gQ2FsbERlbGVnYXRlKGltcGxlbWVudGF0aW9uLCBzZWxmLCBzZWxmLT5fcHJpdmF0
ZS0+ZnJhbWVMb2FkRGVsZWdhdGUsIHNlbGVjdG9yLCBvYmplY3QxLCBvYmplY3QyLCBvYmplY3Qz
LCBvYmplY3Q0KTsKKyNlbHNlCisgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlv
biwgc2VsZiwgW3NlbGYgX2ZyYW1lTG9hZERlbGVnYXRlRm9yd2FyZGVyXSwgc2VsZWN0b3IsIG9i
amVjdDEsIG9iamVjdDIsIG9iamVjdDMsIG9iamVjdDQpOworI2VuZGlmCiB9CiAKIGlkIENhbGxG
cmFtZUxvYWREZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIFNFTCBz
ZWxlY3RvciwgaWQgb2JqZWN0MSwgTlNUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwsIGlkIG9iamVjdDIs
IGlkIG9iamVjdDMpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gQ2FsbERlbGVn
YXRlKGltcGxlbWVudGF0aW9uLCBzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+ZnJhbWVMb2FkRGVsZWdh
dGUsIHNlbGVjdG9yLCBvYmplY3QxLCBpbnRlcnZhbCwgb2JqZWN0Miwgb2JqZWN0Myk7CisjZWxz
ZQorICAgIHJldHVybiBDYWxsRGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYsIFtzZWxmIF9m
cmFtZUxvYWREZWxlZ2F0ZUZvcndhcmRlcl0sIHNlbGVjdG9yLCBvYmplY3QxLCBpbnRlcnZhbCwg
b2JqZWN0Miwgb2JqZWN0Myk7CisjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK2lkIENh
bGxGcmFtZUxvYWREZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIFNF
TCBzZWxlY3RvciwgaWQgb2JqZWN0LCBkb3VibGUgZG91YmxlMSkKK3sKKyAgICByZXR1cm4gQ2Fs
bERlbGVnYXRlKGltcGxlbWVudGF0aW9uLCBzZWxmLCBbc2VsZiBfZnJhbWVMb2FkRGVsZWdhdGVG
b3J3YXJkZXJdLCBzZWxlY3Rvciwgb2JqZWN0LCBkb3VibGUxKTsKK30KKyNlbmRpZgorCiBCT09M
IENhbGxGcmFtZUxvYWREZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oQk9PTCByZXN1bHQsIElNUCBp
bXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yKQogewogICAgIEB0cnkg
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJP
T0wgKCopKGlkLCBTRUwsIFdlYlZpZXcgKik+KG9iamNfbXNnU2VuZCkoc2VsZi0+X3ByaXZhdGUt
PmZyYW1lTG9hZERlbGVnYXRlLCBzZWxlY3Rvciwgc2VsZik7CisjZWxzZQorICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxCT09MICgqKShpZCwgU0VMLCBXZWJWaWV3ICopPihvYmpjX21z
Z1NlbmQpKFtzZWxmIF9mcmFtZUxvYWREZWxlZ2F0ZUZvcndhcmRlcl0sIHNlbGVjdG9yLCBzZWxm
KTsKKyNlbmRpZgogICAgIH0gQGNhdGNoKGlkIGV4Y2VwdGlvbikgewogICAgICAgICBSZXBvcnRE
aXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CkBA
IC01MDMsMjkgKzEyMTAsODEgQEAgQk9PTCBDYWxsRnJhbWVMb2FkRGVsZWdhdGVSZXR1cm5pbmdC
b29sZWFuKEJPT0wgcmVzdWx0LCBJTVAgaW1wbGVtZW50YXRpb24sIFdlYlYKIAogaWQgQ2FsbFJl
c291cmNlTG9hZERlbGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VM
IHNlbGVjdG9yLCBpZCBvYmplY3QxLCBpZCBvYmplY3QyKQogeworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbiwgc2VsZiwgc2VsZi0+X3By
aXZhdGUtPnJlc291cmNlUHJvZ3Jlc3NEZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIG9iamVj
dDIpOworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlKGltcGxlbWVudGF0aW9uLCBzZWxm
LCBbc2VsZiBfcmVzb3VyY2VMb2FkRGVsZWdhdGVGb3J3YXJkZXJdLCBzZWxlY3Rvciwgb2JqZWN0
MSwgb2JqZWN0Mik7CisjZW5kaWYKIH0KIAogaWQgQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlKElN
UCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3Qx
LCBpZCBvYmplY3QyLCBpZCBvYmplY3QzKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0
dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbiwgc2VsZiwgc2VsZi0+X3ByaXZhdGUtPnJl
c291cmNlUHJvZ3Jlc3NEZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIG9iamVjdDIsIG9iamVj
dDMpOworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlKGltcGxlbWVudGF0aW9uLCBzZWxm
LCBbc2VsZiBfcmVzb3VyY2VMb2FkRGVsZWdhdGVGb3J3YXJkZXJdLCBzZWxlY3Rvciwgb2JqZWN0
MSwgb2JqZWN0Miwgb2JqZWN0Myk7CisjZW5kaWYKIH0KIAogaWQgQ2FsbFJlc291cmNlTG9hZERl
bGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBp
ZCBvYmplY3QxLCBpZCBvYmplY3QyLCBpZCBvYmplY3QzLCBpZCBvYmplY3Q0KQogeworI2lmICFQ
TEFURk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbiwgc2Vs
Ziwgc2VsZi0+X3ByaXZhdGUtPnJlc291cmNlUHJvZ3Jlc3NEZWxlZ2F0ZSwgc2VsZWN0b3IsIG9i
amVjdDEsIG9iamVjdDIsIG9iamVjdDMsIG9iamVjdDQpOworI2Vsc2UKKyAgICByZXR1cm4gQ2Fs
bERlbGVnYXRlKGltcGxlbWVudGF0aW9uLCBzZWxmLCBbc2VsZiBfcmVzb3VyY2VMb2FkRGVsZWdh
dGVGb3J3YXJkZXJdLCBzZWxlY3Rvciwgb2JqZWN0MSwgb2JqZWN0Miwgb2JqZWN0Mywgb2JqZWN0
NCk7CisjZW5kaWYKIH0KIAogaWQgQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlKElNUCBpbXBsZW1l
bnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBOU0ludGVn
ZXIgaW50ZWdlciwgaWQgb2JqZWN0MikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVy
biBDYWxsRGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYsIHNlbGYtPl9wcml2YXRlLT5yZXNv
dXJjZVByb2dyZXNzRGVsZWdhdGUsIHNlbGVjdG9yLCBvYmplY3QxLCBpbnRlZ2VyLCBvYmplY3Qy
KTsKKyNlbHNlCisgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbiwgc2VsZiwg
W3NlbGYgX3Jlc291cmNlTG9hZERlbGVnYXRlRm9yd2FyZGVyXSwgc2VsZWN0b3IsIG9iamVjdDEs
IGludGVnZXIsIG9iamVjdDIpOworI2VuZGlmCiB9CiAKIGlkIENhbGxSZXNvdXJjZUxvYWREZWxl
Z2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQg
b2JqZWN0MSwgaWQgb2JqZWN0MiwgTlNJbnRlZ2VyIGludGVnZXIsIGlkIG9iamVjdDMpCiB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gQ2FsbERlbGVnYXRlKGltcGxlbWVudGF0aW9u
LCBzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+cmVzb3VyY2VQcm9ncmVzc0RlbGVnYXRlLCBzZWxlY3Rv
ciwgb2JqZWN0MSwgb2JqZWN0MiwgaW50ZWdlciwgb2JqZWN0Myk7CisjZWxzZQorICAgIHJldHVy
biBDYWxsRGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYsIFtzZWxmIF9yZXNvdXJjZUxvYWRE
ZWxlZ2F0ZUZvcndhcmRlcl0sIHNlbGVjdG9yLCBvYmplY3QxLCBvYmplY3QyLCBpbnRlZ2VyLCBv
YmplY3QzKTsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oSU9TKQoraWQgQ2FsbFJlc291cmNl
TG9hZERlbGVnYXRlSW5XZWJUaHJlYWQoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxm
LCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEsIGlkIG9iamVjdDIpCit7CisgICAgcmV0dXJuIENh
bGxEZWxlZ2F0ZUluV2ViVGhyZWFkKGltcGxlbWVudGF0aW9uLCBzZWxmLCBzZWxmLT5fcHJpdmF0
ZS0+cmVzb3VyY2VQcm9ncmVzc0RlbGVnYXRlLCBzZWxlY3Rvciwgb2JqZWN0MSwgb2JqZWN0Mik7
Cit9CisKK2lkIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZUluV2ViVGhyZWFkKElNUCBpbXBsZW1l
bnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBpZCBvYmpl
Y3QyLCBpZCBvYmplY3QzKQoreworICAgIHJldHVybiBDYWxsRGVsZWdhdGVJbldlYlRocmVhZChp
bXBsZW1lbnRhdGlvbiwgc2VsZiwgc2VsZi0+X3ByaXZhdGUtPnJlc291cmNlUHJvZ3Jlc3NEZWxl
Z2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIG9iamVjdDIsIG9iamVjdDMpOwogfQogCitpZCBDYWxs
UmVzb3VyY2VMb2FkRGVsZWdhdGVJbldlYlRocmVhZChJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZp
ZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0MiwgaWQgb2JqZWN0
MywgaWQgb2JqZWN0NCkKK3sKKyAgICByZXR1cm4gQ2FsbERlbGVnYXRlSW5XZWJUaHJlYWQoaW1w
bGVtZW50YXRpb24sIHNlbGYsIHNlbGYtPl9wcml2YXRlLT5yZXNvdXJjZVByb2dyZXNzRGVsZWdh
dGUsIHNlbGVjdG9yLCBvYmplY3QxLCBvYmplY3QyLCBvYmplY3QzLCBvYmplY3Q0KTsKK30KKwor
aWQgQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlSW5XZWJUaHJlYWQoSU1QIGltcGxlbWVudGF0aW9u
LCBXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEsIE5TSW50ZWdlciBpbnRl
Z2VyLCBpZCBvYmplY3QyKQoreworICAgIHJldHVybiBDYWxsRGVsZWdhdGVJbldlYlRocmVhZChp
bXBsZW1lbnRhdGlvbiwgc2VsZiwgc2VsZi0+X3ByaXZhdGUtPnJlc291cmNlUHJvZ3Jlc3NEZWxl
Z2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIGludGVnZXIsIG9iamVjdDIpOworfQorCitpZCBDYWxs
UmVzb3VyY2VMb2FkRGVsZWdhdGVJbldlYlRocmVhZChJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZp
ZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0MiwgTlNJbnRlZ2Vy
IGludGVnZXIsIGlkIG9iamVjdDMpCit7CisgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZUluV2ViVGhy
ZWFkKGltcGxlbWVudGF0aW9uLCBzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+cmVzb3VyY2VQcm9ncmVz
c0RlbGVnYXRlLCBzZWxlY3Rvciwgb2JqZWN0MSwgb2JqZWN0MiwgaW50ZWdlciwgb2JqZWN0Myk7
Cit9CisKK2lkIENhbGxGcmFtZUxvYWREZWxlZ2F0ZUluV2ViVGhyZWFkKElNUCBpbXBsZW1lbnRh
dGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBOU1VJbnRlZ2VyIGludGVnZXIpCit7
CisgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKGltcGxlbWVudGF0aW9uLCBzZWxm
LCBzZWxmLT5fcHJpdmF0ZS0+ZnJhbWVMb2FkRGVsZWdhdGUsIHNlbGVjdG9yLCBpbnRlZ2VyKTsK
K30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIEJPT0wgQ2FsbFJlc291cmNlTG9hZERlbGVn
YXRlUmV0dXJuaW5nQm9vbGVhbihCT09MIHJlc3VsdCwgSU1QIGltcGxlbWVudGF0aW9uLCBXZWJW
aWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEpCiB7CiAgICAgQHRyeSB7CkBAIC01
NTgsMjIgKzEzMTcsMzggQEAgQk9PTCBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGVSZXR1cm5pbmdC
b29sZWFuKEJPT0wgcmVzdWx0LCBJTVAgaW1wbGVtZW50YXRpb24sIFcKIAogaWQgQ2FsbFNjcmlw
dERlYnVnRGVsZWdhdGUoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBTRUwgc2Vs
ZWN0b3IsIGlkIG9iamVjdDEsIGlkIG9iamVjdDIsIE5TSW50ZWdlciBpbnRlZ2VyLCBpZCBvYmpl
Y3QzKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBs
ZW1lbnRhdGlvbiwgc2VsZiwgc2VsZi0+X3ByaXZhdGUtPnNjcmlwdERlYnVnRGVsZWdhdGUsIHNl
bGVjdG9yLCBvYmplY3QxLCBvYmplY3QyLCBpbnRlZ2VyLCBvYmplY3QzKTsKKyNlbHNlCisgICAg
cmV0dXJuIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKGltcGxlbWVudGF0aW9uLCBzZWxmLCBzZWxm
LT5fcHJpdmF0ZS0+c2NyaXB0RGVidWdEZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIG9iamVj
dDIsIGludGVnZXIsIG9iamVjdDMpOworI2VuZGlmCiB9CiAKIGlkIENhbGxTY3JpcHREZWJ1Z0Rl
bGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBp
ZCBvYmplY3QxLCBOU0ludGVnZXIgaW50ZWdlcjEsIGlkIG9iamVjdDIsIE5TSW50ZWdlciBpbnRl
Z2VyMiwgaWQgb2JqZWN0MykKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBDYWxs
RGVsZWdhdGUoaW1wbGVtZW50YXRpb24sIHNlbGYsIHNlbGYtPl9wcml2YXRlLT5zY3JpcHREZWJ1
Z0RlbGVnYXRlLCBzZWxlY3Rvciwgb2JqZWN0MSwgaW50ZWdlcjEsIG9iamVjdDIsIGludGVnZXIy
LCBvYmplY3QzKTsKKyNlbHNlCisgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKGlt
cGxlbWVudGF0aW9uLCBzZWxmLCBzZWxmLT5fcHJpdmF0ZS0+c2NyaXB0RGVidWdEZWxlZ2F0ZSwg
c2VsZWN0b3IsIG9iamVjdDEsIGludGVnZXIxLCBvYmplY3QyLCBpbnRlZ2VyMiwgb2JqZWN0Myk7
CisjZW5kaWYKIH0KIAogaWQgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoSU1QIGltcGxlbWVudGF0
aW9uLCBXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEsIE5TSW50ZWdlciBp
bnRlZ2VyLCBpZCBvYmplY3QyLCBpZCBvYmplY3QzLCBpZCBvYmplY3Q0KQogeworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbiwgc2VsZiwg
c2VsZi0+X3ByaXZhdGUtPnNjcmlwdERlYnVnRGVsZWdhdGUsIHNlbGVjdG9yLCBvYmplY3QxLCBp
bnRlZ2VyLCBvYmplY3QyLCBvYmplY3QzLCBvYmplY3Q0KTsKKyNlbHNlCisgICAgcmV0dXJuIENh
bGxEZWxlZ2F0ZUluV2ViVGhyZWFkKGltcGxlbWVudGF0aW9uLCBzZWxmLCBzZWxmLT5fcHJpdmF0
ZS0+c2NyaXB0RGVidWdEZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIGludGVnZXIsIG9iamVj
dDIsIG9iamVjdDMsIG9iamVjdDQpOworI2VuZGlmCiB9CiAKIGlkIENhbGxTY3JpcHREZWJ1Z0Rl
bGVnYXRlKElNUCBpbXBsZW1lbnRhdGlvbiwgV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBp
ZCBvYmplY3QxLCBOU0ludGVnZXIgaW50ZWdlcjEsIGludCBpbnRlZ2VyMiwgaWQgb2JqZWN0MikK
IHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBDYWxsRGVsZWdhdGUoaW1wbGVtZW50
YXRpb24sIHNlbGYsIHNlbGYtPl9wcml2YXRlLT5zY3JpcHREZWJ1Z0RlbGVnYXRlLCBzZWxlY3Rv
ciwgb2JqZWN0MSwgaW50ZWdlcjEsIGludGVnZXIyLCBvYmplY3QyKTsKKyNlbHNlCisgICAgcmV0
dXJuIENhbGxEZWxlZ2F0ZUluV2ViVGhyZWFkKGltcGxlbWVudGF0aW9uLCBzZWxmLCBzZWxmLT5f
cHJpdmF0ZS0+c2NyaXB0RGVidWdEZWxlZ2F0ZSwgc2VsZWN0b3IsIG9iamVjdDEsIGludGVnZXIx
LCBpbnRlZ2VyMiwgb2JqZWN0Mik7CisjZW5kaWYKIH0KIAogaWQgQ2FsbFNjcmlwdERlYnVnRGVs
ZWdhdGUoSU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlk
IG9iamVjdDEsIEJPT0wgYm9vbGVhbiwgTlNJbnRlZ2VyIGludGVnZXIxLCBpbnQgaW50ZWdlcjIs
IGlkIG9iamVjdDIpCkBAIC02MDAsNiArMTM3NSw3IEBAIGlkIENhbGxIaXN0b3J5RGVsZWdhdGUo
SU1QIGltcGxlbWVudGF0aW9uLCBXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVj
CiAKIGlkIENhbGxGb3JtRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBv
YmplY3QxLCBpZCBvYmplY3QyKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWQgZGVsZWdh
dGUgPSBzZWxmLT5fcHJpdmF0ZS0+Zm9ybURlbGVnYXRlOwogICAgIGlmICghZGVsZWdhdGUgfHwg
IVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQogICAgICAgICByZXR1cm4g
bmlsOwpAQCAtNjA5LDEwICsxMzg1LDMzIEBAIGlkIENhbGxGb3JtRGVsZWdhdGUoV2ViVmlldyAq
c2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBpZCBvYmplY3QyKQogICAgICAgICBSZXBv
cnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9
CiAgICAgcmV0dXJuIG5pbDsKKyNlbHNlCisgICAgaWQgZGVsZWdhdGUgPSBbc2VsZiBfZm9ybURl
bGVnYXRlRm9yU2VsZWN0b3I6c2VsZWN0b3JdOworICAgIGlmICghZGVsZWdhdGUpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBOU0ludm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRN
YWtlTlNJbnZvY2F0aW9uKGRlbGVnYXRlLCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0
QXJndW1lbnQ6Jm9iamVjdDEgYXRJbmRleDoyXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVu
dDomb2JqZWN0MiBhdEluZGV4OjNdOworCisgICAgaWQgcmV0dXJuVmFsdWU7CisgICAgQHRyeSB7
CisgICAgICAgIFdlYlRocmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKKyAgICAgICAgaWYg
KFtbaW52b2NhdGlvbiBtZXRob2RTaWduYXR1cmVdIG1ldGhvZFJldHVybkxlbmd0aF0gPT0gMCkg
eworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBbaW52b2NhdGlv
biBnZXRSZXR1cm5WYWx1ZTomcmV0dXJuVmFsdWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRl
ZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1
cm4gbmlsOworI2VuZGlmCiB9CiAKIGlkIENhbGxGb3JtRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwg
U0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBpZCBvYmplY3QyLCBpZCBvYmplY3QzKQogeworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgaWQgZGVsZWdhdGUgPSBzZWxmLT5fcHJpdmF0ZS0+Zm9ybURl
bGVnYXRlOwogICAgIGlmICghZGVsZWdhdGUgfHwgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6c2VsZWN0b3JdKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNjIyLDEwICsxNDIxLDM0IEBA
IGlkIENhbGxGb3JtRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmpl
Y3QxLCBpZCBvYmplY3QyLCBpZCBvYmplCiAgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRl
RXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOwogICAgIH0KICAgICByZXR1cm4gbmlsOwor
I2Vsc2UKKyAgICBpZCBkZWxlZ2F0ZSA9IFtzZWxmIF9mb3JtRGVsZWdhdGVGb3JTZWxlY3Rvcjpz
ZWxlY3Rvcl07CisgICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9IFdlYlRocmVhZE1ha2VOU0ludm9jYXRpb24oZGVs
ZWdhdGUsIHNlbGVjdG9yKTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0MSBh
dEluZGV4OjJdOworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QyIGF0SW5kZXg6
M107CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdDMgYXRJbmRleDo0XTsKKwor
ICAgIGlkIHJldHVyblZhbHVlOworICAgIEB0cnkgeworICAgICAgICBXZWJUaHJlYWRDYWxsRGVs
ZWdhdGUoaW52b2NhdGlvbik7CisgICAgICAgIGlmIChbW2ludm9jYXRpb24gbWV0aG9kU2lnbmF0
dXJlXSBtZXRob2RSZXR1cm5MZW5ndGhdID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7
CisgICAgICAgIH0KKyAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnJldHVyblZh
bHVlXTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0gQGNhdGNoKGlkIGV4Y2Vw
dGlvbikgeworICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2VwdGlvbihzZWxlY3Rv
ciwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCiBpZCBD
YWxsRm9ybURlbGVnYXRlKFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwg
aWQgb2JqZWN0MiwgaWQgb2JqZWN0MywgaWQgb2JqZWN0NCwgaWQgb2JqZWN0NSkKIHsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIGlkIGRlbGVnYXRlID0gc2VsZi0+X3ByaXZhdGUtPmZvcm1EZWxl
Z2F0ZTsKICAgICBpZiAoIWRlbGVnYXRlIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OnNlbGVjdG9yXSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTYzNSwxMCArMTQ1OCwzNiBAQCBp
ZCBDYWxsRm9ybURlbGVnYXRlKFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0
MSwgaWQgb2JqZWN0MiwgaWQgb2JqZQogICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4
Y2VwdGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKKyNl
bHNlCisgICAgaWQgZGVsZWdhdGUgPSBbc2VsZiBfZm9ybURlbGVnYXRlRm9yU2VsZWN0b3I6c2Vs
ZWN0b3JdOworICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBO
U0ludm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRlbGVn
YXRlLCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdDEgYXRJ
bmRleDoyXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0MiBhdEluZGV4OjNd
OworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QzIGF0SW5kZXg6NF07CisgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdDQgYXRJbmRleDo1XTsKKyAgICBbaW52b2Nh
dGlvbiBzZXRBcmd1bWVudDomb2JqZWN0NSBhdEluZGV4OjZdOworCisgICAgaWQgcmV0dXJuVmFs
dWU7CisgICAgQHRyeSB7CisgICAgICAgIFdlYlRocmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9u
KTsKKyAgICAgICAgaWYgKFtbaW52b2NhdGlvbiBtZXRob2RTaWduYXR1cmVdIG1ldGhvZFJldHVy
bkxlbmd0aF0gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAg
ICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomcmV0dXJuVmFsdWVdOworICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAg
IFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOwor
ICAgIH0KKyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKIEJPT0wgQ2FsbEZvcm1EZWxlZ2F0
ZVJldHVybmluZ0Jvb2xlYW4oQk9PTCByZXN1bHQsIFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3Rv
ciwgaWQgb2JqZWN0MSwgU0VMIHNlbGVjdG9yQXJnLCBpZCBvYmplY3QyKQogeworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgaWQgZGVsZWdhdGUgPSBzZWxmLT5fcHJpdmF0ZS0+Zm9ybURlbGVnYXRl
OwogICAgIGlmICghZGVsZWdhdGUgfHwgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2Vs
ZWN0b3JdKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjQ4LDYgKzE0OTcsMjYgQEAgQk9P
TCBDYWxsRm9ybURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCT09MIHJlc3VsdCwgV2ViVmlldyAq
c2VsZiwgU0VMIHNlbGVjdG9yLAogICAgICAgICBSZXBvcnREaXNjYXJkZWREZWxlZ2F0ZUV4Y2Vw
dGlvbihzZWxlY3RvciwgZXhjZXB0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgaWQgZGVsZWdhdGUgPSBbc2VsZiBfZm9ybURlbGVnYXRlRm9yU2VsZWN0b3I6c2Vs
ZWN0b3JdOworICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAg
ICBOU0ludm9jYXRpb24gKmludm9jYXRpb24gPSBXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGRl
bGVnYXRlLCBzZWxlY3Rvcik7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdDEg
YXRJbmRleDoyXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomc2VsZWN0b3JBcmcgYXRJ
bmRleDozXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0MiBhdEluZGV4OjRd
OworCisgICAgQk9PTCByZXR1cm5WYWx1ZTsKKyAgICBAdHJ5IHsKKyAgICAgICAgV2ViVGhyZWFk
Q2FsbERlbGVnYXRlKGludm9jYXRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5W
YWx1ZTomcmV0dXJuVmFsdWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfSBA
Y2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhj
ZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
I2VuZGlmCiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRGV2aWNlT3JpZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRl
dmljZU9yaWVudGF0aW9uLm1tCmluZGV4IGRiNzg5NGY5YzY5YWE3MmY1NjcxNDMwOGI2ZDk5NTlk
MzgzNTdjYmEuLjM0ZmExODg1NzBlZWFjNzJkZjZmMjE2YWUwYWM0NWMyMTliYzFjMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGV2aWNlT3JpZW50YXRpb24ubW0K
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEZXZpY2VPcmllbnRhdGlvbi5tbQpA
QCAtNjUsNyArNjUsMTMgQEAgLSAoaWQpaW5pdFdpdGhDYW5Qcm92aWRlQWxwaGE6KGJvb2wpY2Fu
UHJvdmlkZUFscGhhIGFscGhhOihkb3VibGUpYWxwaGEgY2FuUHJvdmkKICAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgLy8gV2UgZG9uJ3QgdXNlIHRoaXMgQVBJLCBidXQgbWFrZSBzdXJlIHRo
YXQgaXQgY29tcGlsZXMgd2l0aCB0aGUgbmV3CisgICAgLy8gY29tcGFzcyBwYXJhbWV0ZXJzLgor
ICAgIG1faW50ZXJuYWwgPSBbW1dlYkRldmljZU9yaWVudGF0aW9uSW50ZXJuYWwgYWxsb2NdIGlu
aXRXaXRoQ29yZURldmljZU9yaWVudGF0aW9uOkRldmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRl
KGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRl
R2FtbWEsIGdhbW1hLCBmYWxzZSwgMCwgZmFsc2UsIDApXTsKKyNlbHNlCiAgICAgbV9pbnRlcm5h
bCA9IFtbV2ViRGV2aWNlT3JpZW50YXRpb25JbnRlcm5hbCBhbGxvY10gaW5pdFdpdGhDb3JlRGV2
aWNlT3JpZW50YXRpb246RGV2aWNlT3JpZW50YXRpb25EYXRhOjpjcmVhdGUoY2FuUHJvdmlkZUFs
cGhhLCBhbHBoYSwgY2FuUHJvdmlkZUJldGEsIGJldGEsIGNhblByb3ZpZGVHYW1tYSwgZ2FtbWEp
XTsKKyNlbmRpZgogICAgIHJldHVybiBzZWxmOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkRvY3VtZW50SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRG9jdW1lbnRJbnRlcm5hbC5oCmluZGV4IGQzN2IxNmYwZjFiYTRhNGVlOTU1
YmJjZDQ1YWUxNjQzY2Q3NmI0MDYuLjViZTI3YWMxMTE1MDFkNjE5NWZhMDY1ZDMyMjEwNjMzNDQ5
NTU3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRJ
bnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRJbnRl
cm5hbC5oCkBAIC0zMCw2ICszMCwxMiBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYkhUTUxWaWV3Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpZiAhZGVmaW5lZChJQkFjdGlvbikKKyNkZWZpbmUgSUJBY3Rpb24gdm9pZAorI2VuZGlmCisj
ZW5kaWYKKwogLyohCiBAcHJvdG9jb2wgX1dlYkRvY3VtZW50Wm9vbWluZwogQGRpc2N1c3Npb24g
T3B0aW9uYWwgcHJvdG9jb2wgZm9yIGEgdmlldyB0aGF0IHdhbnRzIHRvIGhhbmRsZSBpdHMgb3du
IHpvb20uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRvY3VtZW50
TG9hZGVyTWFjLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEb2N1bWVudExvYWRl
ck1hYy5tbQppbmRleCA1NjRmMzhkMjJiNjM1M2E3MTdlYWI5ZWYxMmYwMTJmZDgzMDdjYTcwLi5i
NDgyYmM1NTA2NTliN2UwNTNkMWJiNjEzZTU2NTAxNTUyOGIxYWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRvY3VtZW50TG9hZGVyTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRMb2FkZXJNYWMubW0KQEAgLTQyLDkgKzQy
LDEzIEBAIFdlYkRvY3VtZW50TG9hZGVyTWFjOjpXZWJEb2N1bWVudExvYWRlck1hYyhjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVk
c0RhdGFMb2FkV29ya2Fyb3VuZChXZWJWaWV3ICp3ZWJWaWV3KQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgc3RhdGljIGJvb2wgbmVlZHNXb3JrYXJvdW5kID0gIVdlYktpdExpbmtlZE9uT3JB
ZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0FET0JFX0lOU1RBTExFUl9RVUlSSykg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFkb2JlLkluc3Rh
bGxlcnMuU2V0dXAiXTsKICAgICByZXR1cm4gbmVlZHNXb3JrYXJvdW5kOworI2Vsc2UKKyAgICBy
ZXR1cm4gTk87CisjZW5kaWYKIH0KIAogdm9pZCBXZWJEb2N1bWVudExvYWRlck1hYzo6c2V0RGF0
YVNvdXJjZShXZWJEYXRhU291cmNlICpkYXRhU291cmNlLCBXZWJWaWV3ICp3ZWJWaWV3KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xsQmFyc1Zp
ZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xs
QmFyc1ZpZXdJbnRlcm5hbC5oCmluZGV4IGYwZGFjYjA2MWI1YTZmMDNkNzFhNzAxMGZjMjY4MjU1
ZjVjNzY4YjcuLjExZTMwZTM2ZGI5OTQ5NWMzZGRjMjhlMGE3OWZmOWNiNTA0YTU1ZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3
SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkR5bmFtaWNTY3Jv
bGxCYXJzVmlld0ludGVybmFsLmgKQEAgLTI2LDYgKzI2LDggQEAKICAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAorI2lmICFQTEFURk9STShJT1MpCisKICNpbXBvcnQgIldlYkR5bmFtaWNTY3JvbGxCYXJzVmll
dy5oIgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnJhbWVWaWV3Lmg+CiAKQEAgLTYyLDMgKzY0
LDUgQEAKIC8vIHNjcm9sbGVycyBmcm9tIGluc2lkZSB0aGlzIGNsYXNzIHNob3VsZCBub3QgZmly
ZSBKUyBldmVudHMuCiAtIChCT09MKWluUHJvZ3JhbW1hdGljU2Nyb2xsOwogQGVuZAorCisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRm9ybURlbGVnYXRlLm0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZvcm1E
ZWxlZ2F0ZS5tCmluZGV4IDhjNGNlZGI2YjZiZDFmNWE0NmFlYWM0ODhlMmYzZjRkYzE3M2QxOWQu
LjI3NDgwMGRlZDU0ZmFjN2QwMzUyZTkxM2Q3NTgyYjc3NDlmOTY4M2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRm9ybURlbGVnYXRlLm0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGb3JtRGVsZWdhdGUubQpAQCAtNjksMTAgKzY5LDEyIEBAIC0g
KEJPT0wpdGV4dEZpZWxkOihET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVudCBkb0NvbW1hbmRC
eVNlbGVjdG9yOihTRUwpY29tbWFuCiAgICAgcmV0dXJuIE5POwogfQogCisjaWYgIVBMQVRGT1JN
KElPUykgICAgCiAtIChCT09MKXRleHRGaWVsZDooRE9NSFRNTElucHV0RWxlbWVudCAqKWVsZW1l
bnQgc2hvdWxkSGFuZGxlRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpbkZyYW1lOihXZWJGcmFtZSAq
KWZyYW1lCiB7CiAgICAgcmV0dXJuIE5POwogfQorI2VuZGlmCiAKIC0gKHZvaWQpZnJhbWU6KFdl
YkZyYW1lICopZnJhbWUgc291cmNlRnJhbWU6KFdlYkZyYW1lICopc291cmNlRnJhbWUgd2lsbFN1
Ym1pdEZvcm06KERPTUVsZW1lbnQgKilmb3JtCiAgICAgd2l0aFZhbHVlczooTlNEaWN0aW9uYXJ5
ICopdmFsdWVzIHN1Ym1pc3Npb25MaXN0ZW5lcjooaWQgPFdlYkZvcm1TdWJtaXNzaW9uTGlzdGVu
ZXI+KWxpc3RlbmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBmYWU3
ZmFjZmZmZTQ2NDE1ZjFhNjRlYjc4NGU0ZTM5NzQ4YzBmNjRhLi42YzRjYWMxZjc1NGU4NzdkMjlm
NmVjNTVhYjkzMzJiYTczYjA3ODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KQEAgLTEwNSw2ICsxMDUsMjcgQEAKICNpbXBvcnQgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgog
I2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0
ICJXZWJNYWlsRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYlJlc291cmNlLmgiCisjaW1wb3J0ICJX
ZWJVSUtpdERlbGVnYXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElTaGltcy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yQ2xpZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3Vz
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgorI2ltcG9y
dCA8V2ViQ29yZS9IaXN0b3J5Q29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob2RlVHJh
dmVyc2FsLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1NpbXBsZUZvbnREYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRSZXNvdXJjZURlY29k
ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV0FLU2Nyb2xsVmlldy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9XQUtWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9XS0dyYXBoaWNzLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRSdW4uaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKQEAgLTMwMyw2ICszMjQs
MjIgQEAgLSAoQk9PTClfaXNJbmNsdWRlZEluV2ViS2l0U3RhdGlzdGljcwogICAgIHJldHVybiBf
cHJpdmF0ZSAmJiBfcHJpdmF0ZS0+aW5jbHVkZWRJbldlYktpdFN0YXRpc3RpY3M7CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCitzdGF0aWMgTlNVUkwgKmNyZWF0ZVVuaXF1ZVdlYkRhdGFVUkwoKTsK
KworKyAodm9pZClfY3JlYXRlTWFpbkZyYW1lV2l0aFNpbXBsZUhUTUxEb2N1bWVudFdpdGhQYWdl
OihQYWdlKilwYWdlIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3IHN0eWxlOihO
U1N0cmluZyAqKXN0eWxlCit7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IGtpdChwYWdlKTsKKyAg
ICAKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbW3NlbGYgYWxsb2NdIF9pbml0V2l0aFdlYkZyYW1l
VmlldzpmcmFtZVZpZXcgd2ViVmlldzp3ZWJWaWV3XTsKKyAgICBmcmFtZS0+X3ByaXZhdGUtPmNv
cmVGcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsKKyAgICBzdGF0aWNfY2FzdDxXZWJGcmFtZUxv
YWRlckNsaWVudCY+KHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpKS5zZXRXZWJG
cmFtZShmcmFtZSk7CisgICAgW2ZyYW1lIHJlbGVhc2VdOworCisgICAgZnJhbWUtPl9wcml2YXRl
LT5jb3JlRnJhbWUtPmluaXRXaXRoU2ltcGxlSFRNTERvY3VtZW50KHN0eWxlLCBjcmVhdGVVbmlx
dWVXZWJEYXRhVVJMKCkpOworfQorI2VuZGlmCisKIC0gKHZvaWQpX2F0dGFjaFNjcmlwdERlYnVn
Z2VyCiB7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IF9wcml2YXRl
LT5jb3JlRnJhbWUtPnNjcmlwdCgpOwpAQCAtMzYyLDcgKzM5OSwxMSBAQCAtICh2b2lkKV91cGRh
dGVCYWNrZ3JvdW5kQW5kVXBkYXRlc1doaWxlT2Zmc2NyZWVuCiB7CiAgICAgV2ViVmlldyAqd2Vi
VmlldyA9IGdldFdlYlZpZXcoc2VsZik7CiAgICAgQk9PTCBkcmF3c0JhY2tncm91bmQgPSBbd2Vi
VmlldyBkcmF3c0JhY2tncm91bmRdOworI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNDb2xvciAq
YmFja2dyb3VuZENvbG9yID0gW3dlYlZpZXcgYmFja2dyb3VuZENvbG9yXTsKKyNlbHNlCisgICAg
Q0dDb2xvclJlZiBiYWNrZ3JvdW5kQ29sb3IgPSBbd2ViVmlldyBiYWNrZ3JvdW5kQ29sb3JdOwor
I2VuZGlmCiAKICAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkgewpAQCAtMzcxLDExICs0MTIsMTggQEAgLSAo
dm9pZClfdXBkYXRlQmFja2dyb3VuZEFuZFVwZGF0ZXNXaGlsZU9mZnNjcmVlbgogICAgICAgICBX
ZWJGcmFtZSAqd2ViRnJhbWUgPSBraXQoZnJhbWUpOwogICAgICAgICBpZiAoIWRyYXdzQmFja2dy
b3VuZCkKICAgICAgICAgICAgIFtbW3dlYkZyYW1lIGZyYW1lVmlld10gX3Njcm9sbFZpZXddIHNl
dERyYXdzQmFja2dyb3VuZDpOT107CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgW1tbd2Vi
RnJhbWUgZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gc2V0QmFja2dyb3VuZENvbG9yOmJhY2tncm91
bmRDb2xvcl07CisjZW5kaWYKIAogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUt
PnZpZXcoKSkgewogICAgICAgICAgICAgdmlldy0+c2V0VHJhbnNwYXJlbnQoIWRyYXdzQmFja2dy
b3VuZCk7Ci0gICAgICAgICAgICB2aWV3LT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKGNvbG9yRnJv
bU5TQ29sb3IoW2JhY2tncm91bmRDb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZp
Y2VSR0JDb2xvclNwYWNlXSkpOworI2lmICFQTEFURk9STShJT1MpCisgICAgICAgICAgICBDb2xv
ciBjb2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW2JhY2tncm91bmRDb2xvciBjb2xvclVzaW5nQ29s
b3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXSk7CisjZWxzZQorICAgICAgICAgICAg
Q29sb3IgY29sb3IgPSBDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworI2VuZGlmCisgICAgICAgICAg
ICB2aWV3LT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHZpZXct
PnNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKFt3ZWJWaWV3IHNob3VsZFVwZGF0ZVdoaWxl
T2Zmc2NyZWVuXSk7CiAgICAgICAgIH0KICAgICB9CkBAIC00MDIsMTEgKzQ1MCwxMyBAQCAtICh2
b2lkKV91bm1hcmtBbGxCYWRHcmFtbWFyCiAKIC0gKHZvaWQpX3VubWFya0FsbE1pc3NwZWxsaW5n
cwogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRl
LT5jb3JlRnJhbWU7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKICAgICAgICAg
aWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAgICAg
ZG9jdW1lbnQtPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpTcGVsbGlu
Zyk7CiAgICAgfQorI2VuZGlmCiB9CiAKIC0gKEJPT0wpX2hhc1NlbGVjdGlvbgpAQCAtNDgxLDYg
KzUzMSwxOCBAQCAtIChXZWJEYXRhU291cmNlICopX2RhdGFTb3VyY2UKICAgICByZXR1cm4gZGF0
YVNvdXJjZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKEJPT0wpX2lzQ29tbWl0dGluZworeworICAgIHJl
dHVybiBfcHJpdmF0ZS0+aXNDb21taXR0aW5nOworfQorCistICh2b2lkKV9zZXRJc0NvbW1pdHRp
bmc6KEJPT0wpdmFsdWUKK3sKKyAgICBfcHJpdmF0ZS0+aXNDb21taXR0aW5nID0gdmFsdWU7Cit9
CisjZW5kaWYKKwogLSAoTlNBcnJheSAqKV9ub2Rlc0Zyb21MaXN0OihWZWN0b3I8Tm9kZSo+ICop
bm9kZXNWZWN0b3IKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG5vZGVzVmVjdG9yLT5zaXplKCk7CkBA
IC01MDIsMTAgKzU2NCwxMiBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdGb3JSYW5nZTooRE9NUmFu
Z2UgKilyYW5nZQogCiAtIChCT09MKV9zaG91bGRGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnM6KENH
Q29udGV4dFJlZiljb250ZXh0CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyAtY3VycmVu
dENvbnRleHREcmF3aW5nVG9TY3JlZW4gcmV0dXJucyBZRVMgZm9yIGJpdG1hcCBjb250ZXh0cy4K
ICAgICBCT09MIGlzUHJpbnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
RHJhd2luZ1RvU2NyZWVuXTsKICAgICBpZiAoaXNQcmludGluZykKICAgICAgICAgcmV0dXJuIFlF
UzsKKyNlbmRpZgogCiAgICAgaWYgKCFXS0NHQ29udGV4dElzQml0bWFwQ29udGV4dChjb250ZXh0
KSkKICAgICAgICAgcmV0dXJuIE5POwpAQCAtNTIwLDExICs1ODQsMjIgQEAgLSAoQk9PTClfc2hv
dWxkRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzOihDR0NvbnRleHRSZWYpY29udGV4dAogCiAtICh2
b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09MKWNvbnRlbnRzT25s
eQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgQVNTRVJUKFtbTlNHcmFwaGljc0NvbnRleHQg
Y3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0pOwogCiAgICAgQ0dDb250ZXh0UmVmIGN0eCA9IHN0
YXRpY19jYXN0PENHQ29udGV4dFJlZj4oW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0gZ3JhcGhpY3NQb3J0XSk7CisjZWxzZQorICAgIENHQ29udGV4dFJlZiBjdHggPSBXS0dldEN1
cnJlbnRHcmFwaGljc0NvbnRleHQoKTsKKyNlbmRpZgogICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KGN0eCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IHdoZW4gPHJkYXI6
Ly9wcm9ibGVtLzkwMzQ5Nzc+IGlzIGZpeGVkIHRoZXJlIHdpbGwgYmUgbm8gbmVlZCB0byBkbyB0
aGlzIGhlcmUuCisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICBp
ZiAoV2ViQ29yZTo6UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgIGNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQocGFnZS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKCkpOworI2VuZGlmCisKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT52aWV3KCk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRGbGF0dGVuID0gZmFsc2U7
CkBAIC01NzcsNiArNjUyLDE0IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBmb3JjZVVzCiAgICAgQVNTRVJU
KF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpOwogICAgIFJldGFpblB0cjxXZWJGcmFt
ZT4gcHJvdGVjdChzZWxmKTsgLy8gRXhlY3V0aW5nIGFyYml0cmFyeSBKYXZhU2NyaXB0IGNhbiBk
ZXN0cm95IHRoZSBmcmFtZS4KICAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJUKFdl
YlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9y
bWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICAvLyBOZWVkIHRvIHVzZSB0aGUgZnVsbCBl
bnRyeSBzaGltIHRvIHByZXZlbnQgY3Jhc2hlcyBhcmlzaW5nIGZyb20gdGhlIFVJIHRocmVhZCBi
ZWluZyB1bmtub3duCisgICAgLy8gdG8gdGhlIEpTQyBHQzogPHJkYXI6Ly9wcm9ibGVtLzExNTUz
MTcyPiBDcmFzaCB3aGVuIGJyZWFraW5nIGluIHRoZSBXZWIgSW5zcGVjdG9yIGR1cmluZyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzoKKyAgICBKU0M6OkFQSUVudHJ5U2hp
bSBqc2NMb2NrKGV4ZWMpOworI2VuZGlmCisKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCkuZXhlY3V0ZVNjcmlwdChzdHJpbmcsIGZvcmNlVXNl
ckdlc3R1cmUpLmpzVmFsdWUoKTsKIAogICAgIGlmICghX3ByaXZhdGUtPmNvcmVGcmFtZSkgLy8g
SW4gY2FzZSB0aGUgc2NyaXB0IHJlbW92ZWQgb3VyIGZyYW1lIGZyb20gdGhlIHBhZ2UuCkBAIC01
ODgsOCArNjcxLDEwIEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBmb3JjZVVzCiAgICAgaWYgKCFyZXN1bHQg
fHwgKCFyZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0cmluZygpICYmICFyZXN1bHQu
aXNOdW1iZXIoKSkpCiAgICAgICAgIHJldHVybiBAIiI7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCku
Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0
LnRvV1RGU3RyaW5nKGV4ZWMpOwogfQogCkBAIC02MDksMTUgKzY5NCw1MiBAQCAtICh2b2lkKV9z
Y3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZQogICAgIE5TUmVjdCByYW5n
ZVJlY3QgPSBbc2VsZiBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOyAgICAKICAgICBOb2Rl
ICpzdGFydE5vZGUgPSBjb3JlKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOwogICAgICAgICAKLSAg
ICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkKKyAgICBpZiAoc3RhcnRO
b2RlICYmIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgeworI2lmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShlbmNsb3NpbmdJ
bnRSZWN0KHJhbmdlUmVjdCksIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwg
U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsKKyNlbHNlCisgICAgICAgIFJl
bmRlckxheWVyKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIo
KTsKKyAgICAgICAgaWYgKGxheWVyKSB7CisgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5k
ZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwg
U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduVG9FZGdlSWZOZWVkZWQpOworICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOworICAgICAgICAgICAgX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9Cit9CisKKyNpZiBQTEFURk9STShJT1MpCistICh2b2lkKV9zY3Jv
bGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZSB3aXRoSW5zZXQ6KENHRmxvYXQp
aW5zZXQKK3sKKyAgICBOU1JlY3QgcmFuZ2VSZWN0ID0gTlNJbnNldFJlY3QoW3NlbGYgX2ZpcnN0
UmVjdEZvckRPTVJhbmdlOnJhbmdlXSwgaW5zZXQsIGluc2V0KTsKKyAgICBOb2RlICpzdGFydE5v
ZGUgPSBjb3JlKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOworCisgICAgaWYgKHN0YXJ0Tm9kZSAm
JiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
c3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgICAgICBpZiAobGF5
ZXIpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7CisgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RU
b1Zpc2libGUoZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7
CisgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKKworICAgICAgICAgICAgRnJhbWUgKmNvcmVGcmFtZSA9IGNvcmUoc2VsZik7CisgICAg
ICAgICAgICBpZiAoY29yZUZyYW1lKSB7CisgICAgICAgICAgICAgICAgRnJhbWVTZWxlY3Rpb24m
IGZyYW1lU2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgICAgICAg
ICBmcmFtZVNlbGVjdGlvbi5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOworICAgICAgICAgICAg
ICAgIGZyYW1lU2VsZWN0aW9uLnVwZGF0ZUFwcGVhcmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KIH0KKyNlbmRpZgogCiAtIChCT09MKV9uZWVkc0xheW91dAogewogICAg
IHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCkgPyBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT52aWV3KCktPm5lZWRzTGF5b3V0KCkgOiBmYWxzZTsKIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihGcmFtZVNl
bGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFNlbGVjdGlvbkRpcmVj
dGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFRleHRHcmFudWxhcml0eSlncmFudWxhcml0eQog
ewogICAgIGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKQEAg
LTYyOCw2ICs3NTAsNyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2Vs
ZWN0aW9uOihGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0ZQogICAgIHNlbGVjdGlvbi5t
b2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiAgICAgcmV0dXJuIGtp
dChzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9CisjZW5kaWYKIAogLSAo
VGV4dEdyYW51bGFyaXR5KV9zZWxlY3Rpb25HcmFudWxhcml0eQogewpAQCAtODU4LDcgKzk4MSwx
MSBAQCAtICh2b2lkKV9zZXRTaG91bGRDcmVhdGVSZW5kZXJlcnM6KEJPT0wpc2hvdWxkQ3JlYXRl
UmVuZGVyZXJzCiAgICAgX3ByaXZhdGUtPnNob3VsZENyZWF0ZVJlbmRlcmVycyA9IHNob3VsZENy
ZWF0ZVJlbmRlcmVyczsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChOU0NvbG9yICopX2Jv
ZHlCYWNrZ3JvdW5kQ29sb3IKKyNlbHNlCistIChDR0NvbG9yUmVmKV9ib2R5QmFja2dyb3VuZENv
bG9yCisjZW5kaWYKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCkBAIC04NzIsNyArOTk5LDExIEBA
IC0gKE5TQ29sb3IgKilfYm9keUJhY2tncm91bmRDb2xvcgogICAgIENvbG9yIGNvbG9yID0gYm9k
eVJlbmRlcmVyLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcik7CiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBu
aWw7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gbnNDb2xvcihjb2xvcik7CisjZWxz
ZQorICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKGNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
KyNlbmRpZgogfQogCiAtIChCT09MKV9pc0ZyYW1lU2V0CkBAIC04OTgsNiArMTAyOSw2MSBAQCAt
IChXZWJGcmFtZUxvYWRUeXBlKV9sb2FkVHlwZQogICAgIHJldHVybiAoV2ViRnJhbWVMb2FkVHlw
ZSlfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS5sb2FkVHlwZSgpOwogfQogCisjaWYgUExB
VEZPUk0oSU9TKQorLSAoQk9PTCluZWVkc0xheW91dAoreworICAgIC8vIE5lZWRlZCBmb3IgTWFp
bCA8cmRhcjovL3Byb2JsZW0vNjIyODAzOD4KKyAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFt
ZSA/IFtzZWxmIF9uZWVkc0xheW91dF0gOiBOTzsKK30KKworLSAodm9pZClfc2V0TG9hZHNTeW5j
aHJvbm91c2x5OihCT09MKWZsYWcKK3sKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2FkZXIo
KS5zZXRMb2Fkc1N5bmNocm9ub3VzbHkoZmxhZyk7Cit9CisKKy0gKEJPT0wpX2xvYWRzU3luY2hy
b25vdXNseQoreworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS5sb2Fk
c1N5bmNocm9ub3VzbHkoKTsKK30KKworLy8gRklYTUU6IHNlbGVjdGlvbgorCistIChOU0FycmF5
ICopX3JlY3RzRm9yUmFuZ2U6KERPTVJhbmdlICopZG9tUmFuZ2UKK3sKKyAgICBSYW5nZSAqcmFu
Z2UgPSBjb3JlKGRvbVJhbmdlKTsKKyAgICAKKyAgICAKKyAgICBWZWN0b3I8SW50UmVjdD4gaW50
UmVjdHM7CisgICAgcmFuZ2UtPnRleHRSZWN0cyhpbnRSZWN0cywgTk8pOworICAgIHVuc2lnbmVk
IHNpemUgPSBpbnRSZWN0cy5zaXplKCk7CisgICAgCisgICAgTlNNdXRhYmxlQXJyYXkgKnJlY3RB
cnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIFtyZWN0QXJyYXkgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6KENHUmVjdCApaW50UmVjdHNbaV1dXTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHJlY3RBcnJheTsKK30KKworLSAoRE9NUmFuZ2UgKilfc2Vs
ZWN0aW9uUmFuZ2VGb3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNlY29uZFBvaW50OihDR1Bv
aW50KXNlY29uZAoreworICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdFBvcyA9IFtzZWxmIF92aXNp
YmxlUG9zaXRpb25Gb3JQb2ludDpmaXJzdF07CisgICAgVmlzaWJsZVBvc2l0aW9uIHNlY29uZFBv
cyA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpzZWNvbmRdOworICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uKGZpcnN0UG9zLCBzZWNvbmRQb3MpOworICAgIERPTVJhbmdlICpy
YW5nZSA9IGtpdChzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0
dXJuIHJhbmdlOyAgICAKK30KKworLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JQb2lu
dDooQ0dQb2ludClwb2ludAoreworICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBbc2VsZiBfdmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOyAgICAKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbihwb3MpOworICAgIERPTVJhbmdlICpyYW5nZSA9IGtpdChzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIHJhbmdlOworfQorCisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQorCiAtIChOU1JhbmdlKV9zZWxlY3RlZE5TUmFuZ2UKIHsKICAgICByZXR1
cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKV07CkBAIC05NDMsNiArMTEyOSw3MzEgQEAgLSAo
dm9pZClfcmVjdXJzaXZlX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucwogfQog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCistICh1bnNpZ25lZClmb3JtRWxlbWVudHNDaGFy
YWN0ZXJDb3VudAoreworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Cisg
ICAgcmV0dXJuIGZyYW1lLT5mb3JtRWxlbWVudHNDaGFyYWN0ZXJDb3VudCgpOworfQorCistICh2
b2lkKXNldFRpbWVvdXRzUGF1c2VkOihCT09MKWZsYWcKK3sKKyAgICBpZCBkb2N1bWVudFZpZXcg
PSBbX3ByaXZhdGUtPndlYkZyYW1lVmlldyBkb2N1bWVudFZpZXddOyAgICAKKyAgICBpZiAoW2Rv
Y3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7CisgICAgICAg
IGlmIChGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZSkKKyAgICAgICAgICAg
IGNvcmVGcmFtZS0+c2V0VGltZXJzUGF1c2VkKGZsYWcpOworICAgIH0KK30KKworLSAodm9pZClz
ZXRQbHVnaW5zUGF1c2VkOihCT09MKWZsYWcKK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0
V2ViVmlldyhzZWxmKTsKKyAgICBpZiAoIXdlYlZpZXcpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChmbGFnKQorICAgICAgICBbd2ViVmlldyBfc3RvcEFsbFBsdWdJbnNdOworICAgIGVsc2UK
KyAgICAgICAgW3dlYlZpZXcgX3N0YXJ0QWxsUGx1Z0luc107Cit9CisKKy0gKHZvaWQpcHJlcGFy
ZUZvclBhdXNlCit7CisgICAgaWQgZG9jdW1lbnRWaWV3ID0gW19wcml2YXRlLT53ZWJGcmFtZVZp
ZXcgZG9jdW1lbnRWaWV3XTsgICAgCisgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFz
czpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgeworICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IF9wcml2YXRlLT5jb3JlRnJhbWUpCisgICAgICAgICAgICBjb3JlRnJhbWUtPmRpc3BhdGNoUGFn
ZUhpZGVFdmVudEJlZm9yZVBhdXNlKCk7CisgICAgfQorfQorCistICh2b2lkKXJlc3VtZUZyb21Q
YXVzZQoreworICAgIGlkIGRvY3VtZW50VmlldyA9IFtfcHJpdmF0ZS0+d2ViRnJhbWVWaWV3IGRv
Y3VtZW50Vmlld107ICAgIAorICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dl
YkhUTUxWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lKQorICAgICAgICAgICAgY29yZUZyYW1lLT5kaXNwYXRjaFBhZ2VTaG93
RXZlbnRCZWZvcmVSZXN1bWUoKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2VsZWN0TlNSYW5nZToo
TlNSYW5nZSlyYW5nZQoreworICAgIFtzZWxmIF9zZWxlY3ROU1JhbmdlOnJhbmdlXTsKK30KKwor
LSAodm9pZClzZWxlY3RXaXRob3V0Q2xvc2luZ1R5cGluZ05TUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UK
K3sKKyAgICBSZWZQdHI8UmFuZ2U+IGRvbVJhbmdlID0gW3NlbGYgX2NvbnZlcnRUb0RPTVJhbmdl
OnJhbmdlXTsKKyAgICBpZiAoZG9tUmFuZ2UpIHsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihkb21SYW5nZS5nZXQoKSwgU0VM
X0RFRkFVTFRfQUZGSU5JVFkpOworICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCAwKTsKKyAgICAgICAgCisgICAgICAgIF9w
cml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCk7CisgICAgfQorfQorCistIChOU1Jhbmdl
KXNlbGVjdGVkTlNSYW5nZQoreworICAgIHJldHVybiBbc2VsZiBfc2VsZWN0ZWROU1JhbmdlXTsK
K30KKworLSAodm9pZClmb3JjZUxheW91dEFkanVzdGluZ1ZpZXdTaXplOihCT09MKWFkanVzdAor
eworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKS0+Zm9yY2VMYXlvdXQoIWFkanVzdCk7
CisgICAgaWYgKGFkanVzdCkKKyAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+dmlldygpLT5h
ZGp1c3RWaWV3U2l6ZSgpOworfQorCistICh2b2lkKV9oYW5kbGVLZXlFdmVudDooV2ViRXZlbnQg
KilldmVudAoreworICAgIGNvcmUoc2VsZiktPmV2ZW50SGFuZGxlcigpLmtleUV2ZW50KGV2ZW50
KTsKK30KKworLSAodm9pZClfc2VsZWN0QWxsCit7CisgICAgY29yZShzZWxmKS0+c2VsZWN0aW9u
KCkuc2VsZWN0QWxsKCk7Cit9CisKKy0gKHZvaWQpX3NldFNlbGVjdGlvbkZyb21Ob25lCit7Cisg
ICAgY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKK30KKwor
LSAodm9pZClfcmVzdG9yZVZpZXdTdGF0ZQoreworICAgIEFTU0VSVCghV2ViVGhyZWFkSXNFbmFi
bGVkKCkgfHwgV2ViVGhyZWFkSXNMb2NrZWQoKSk7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+
bG9hZGVyKCkuY2xpZW50KCkucmVzdG9yZVZpZXdTdGF0ZSgpOworfQorCistICh2b2lkKV9zYXZl
Vmlld1N0YXRlCit7CisgICAgQVNTRVJUKCFXZWJUaHJlYWRJc0VuYWJsZWQoKSB8fCBXZWJUaHJl
YWRJc0xvY2tlZCgpKTsKKyAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5sb2FkZXIoKTsKKyAgICBmcmFtZUxvYWRlci5jbGllbnQoKS5zYXZlVmlld1N0
YXRlVG9JdGVtKGZyYW1lTG9hZGVyLmhpc3RvcnkoKS5jdXJyZW50SXRlbSgpKTsKK30KKworLSAo
dm9pZClzZW5kT3JpZW50YXRpb25DaGFuZ2VFdmVudDooaW50KW5ld09yaWVudGF0aW9uCit7Cisg
ICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUo
c2VsZik7CisgICAgICAgIGlmIChmcmFtZSkKKyAgICAgICAgICAgIGZyYW1lLT5zZW5kT3JpZW50
YXRpb25DaGFuZ2VFdmVudChuZXdPcmllbnRhdGlvbik7CisgICAgfSk7Cit9CisKKy0gKHZvaWQp
c2V0TmVlZHNMYXlvdXQKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYp
OworICAgIGlmIChmcmFtZS0+dmlldygpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zZXROZWVk
c0xheW91dCgpOworfQorCistIChDR1NpemUpcmVuZGVyZWRTaXplT2ZOb2RlOihET01Ob2RlICop
bm9kZSBjb25zdHJhaW5lZFRvV2lkdGg6KGZsb2F0KXdpZHRoCit7CisgICAgTm9kZSAqbiA9IGNv
cmUobm9kZSk7CisgICAgUmVuZGVyT2JqZWN0ICpyID0gbiA/IG4tPnJlbmRlcmVyKCkgOiAwOwor
ICAgIGZsb2F0IHcgPSBzdGQ6Om1pbigoZmxvYXQpci0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
KCksIHdpZHRoKTsKKyAgICByZXR1cm4gciAmJiByLT5pc0JveCgpID8gQ0dTaXplTWFrZSh3LCB0
b1JlbmRlckJveChyKS0+aGVpZ2h0KCkpIDogQ0dTaXplTWFrZSgwLDApOworfQorCistIChET01O
b2RlICopZGVlcGVzdE5vZGVBdFZpZXdwb3J0TG9jYXRpb246KENHUG9pbnQpYVZpZXdwb3J0TG9j
YXRpb24KK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIHJl
dHVybiBraXQoZnJhbWUtPmRlZXBlc3ROb2RlQXRMb2NhdGlvbihGbG9hdFBvaW50KGFWaWV3cG9y
dExvY2F0aW9uKSkpOworfQorCistIChET01Ob2RlICopc2Nyb2xsYWJsZU5vZGVBdFZpZXdwb3J0
TG9jYXRpb246KENHUG9pbnQpYVZpZXdwb3J0TG9jYXRpb24KK3sKKyAgICBXZWJDb3JlOjpGcmFt
ZSAqZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUgKm5vZGUgPSBmcmFtZS0+
bm9kZVJlc3BvbmRpbmdUb1Njcm9sbFdoZWVsRXZlbnRzKEZsb2F0UG9pbnQoYVZpZXdwb3J0TG9j
YXRpb24pKTsKKyAgICByZXR1cm4ga2l0KG5vZGUpOworfQorCistIChET01Ob2RlICopYXBwcm94
aW1hdGVOb2RlQXRWaWV3cG9ydExvY2F0aW9uOihDR1BvaW50ICopYVZpZXdwb3J0TG9jYXRpb24K
K3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIEZsb2F0UG9p
bnQgdmlld3BvcnRMb2NhdGlvbigqYVZpZXdwb3J0TG9jYXRpb24pOworICAgIEZsb2F0UG9pbnQg
YWRqdXN0ZWRMb2NhdGlvbjsKKyAgICBXZWJDb3JlOjpOb2RlICpub2RlID0gZnJhbWUtPm5vZGVS
ZXNwb25kaW5nVG9DbGlja0V2ZW50cyh2aWV3cG9ydExvY2F0aW9uLCBhZGp1c3RlZExvY2F0aW9u
KTsKKyAgICAqYVZpZXdwb3J0TG9jYXRpb24gPSBhZGp1c3RlZExvY2F0aW9uOworICAgIHJldHVy
biBraXQobm9kZSk7Cit9CisKKy0gKENHUmVjdClyZW5kZXJSZWN0Rm9yUG9pbnQ6KENHUG9pbnQp
cG9pbnQgaXNSZXBsYWNlZDooQk9PTCAqKWlzUmVwbGFjZWQgZm9udFNpemU6KGZsb2F0ICopZm9u
dFNpemUKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIGJv
b2wgcmVwbGFjZWQgPSBmYWxzZTsKKyAgICBDR1JlY3QgcmVjdCA9IGZyYW1lLT5yZW5kZXJSZWN0
Rm9yUG9pbnQocG9pbnQsICZyZXBsYWNlZCwgZm9udFNpemUpOworICAgICppc1JlcGxhY2VkID0g
cmVwbGFjZWQ7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKKy0gKHZvaWQpX3NldFByb2hpYml0c1Nj
cm9sbGluZzooQk9PTClmbGFnCit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShz
ZWxmKTsKKyAgICBmcmFtZS0+dmlldygpLT5zZXRQcm9oaWJpdHNTY3JvbGxpbmcoZmxhZyk7Cit9
CisKKy0gKHZvaWQpcmV2ZWFsU2VsZWN0aW9uQXRFeHRlbnQ6KEJPT0wpcmV2ZWFsRXh0ZW50Cit7
CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICBSZXZlYWxFeHRl
bnRPcHRpb24gcmV2ZWFsRXh0ZW50T3B0aW9uID0gcmV2ZWFsRXh0ZW50ID8gUmV2ZWFsRXh0ZW50
IDogRG9Ob3RSZXZlYWxFeHRlbnQ7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIHJldmVhbEV4dGVudE9w
dGlvbik7Cit9CisKKy0gKHZvaWQpcmVzZXRTZWxlY3Rpb24KK3sKKyAgICBXZWJDb3JlOjpGcmFt
ZSAqZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKK30KKworLSAoQk9PTCloYXNFZGl0
YWJsZVNlbGVjdGlvbgoreworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7
CisgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOworfQor
CistIChpbnQpcHJlZmVycmVkSGVpZ2h0Cit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0g
Y29yZShzZWxmKTsKKyAgICByZXR1cm4gZnJhbWUtPnByZWZlcnJlZEhlaWdodCgpOworfQorCist
IChpbnQpaW5uZXJMaW5lSGVpZ2h0OihET01Ob2RlICopbm9kZQoreworICAgIFdlYkNvcmU6OkZy
YW1lICpmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgcmV0dXJuIGZyYW1lLT5pbm5lckxpbmVIZWln
aHQobm9kZSk7Cit9CisKKy0gKHZvaWQpdXBkYXRlTGF5b3V0Cit7CisgICAgV2ViQ29yZTo6RnJh
bWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICBmcmFtZS0+dXBkYXRlTGF5b3V0KCk7Cit9CisK
Ky0gKHZvaWQpc2V0SXNBY3RpdmU6KEJPT0wpZmxhZworeworICAgIFdlYkNvcmU6OkZyYW1lICpm
cmFtZSA9IGNvcmUoc2VsZik7CisgICAgZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCku
c2V0QWN0aXZlKGZsYWcpOworfQorCistICh2b2lkKXNldFNlbGVjdGlvbkNoYW5nZUNhbGxiYWNr
c0Rpc2FibGVkOihCT09MKWZsYWcKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3Jl
KHNlbGYpOworICAgIGZyYW1lLT5zZXRTZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZChm
bGFnKTsKK30KKworLSAoTlNSZWN0KWNhcmV0UmVjdAoreworICAgIFdlYkNvcmU6OkZyYW1lICpm
cmFtZSA9IGNvcmUoc2VsZik7CisgICAgcmV0dXJuIGZyYW1lLT5jYXJldFJlY3QoKTsKK30KKwor
LSAoTlNSZWN0KXJlY3RGb3JTY3JvbGxUb1Zpc2libGUKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAq
ZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIHJldHVybiBmcmFtZS0+cmVjdEZvclNjcm9sbFRvVmlz
aWJsZSgpOworfQorCistICh2b2lkKXNldENhcmV0Q29sb3I6KENHQ29sb3JSZWYpY29sb3IKK3sK
KyAgICBDb2xvciBxQ29sb3IgPSBjb2xvciA/IENvbG9yKGNvbG9yKSA6IENvbG9yOjpibGFjazsK
KyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZXRDYXJldENvbG9yKHFDb2xvcik7Cit9CisKKy0gKE5TVmlldyAqKWRvY3VtZW50
VmlldworeworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgcmV0
dXJuIFtba2l0KGZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Cit9CisKKy0gKGludCls
YXlvdXRDb3VudAoreworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Cisg
ICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGZyYW1lLT52aWV3KCktPmxheW91dENvdW50KCk7Cit9CisKKy0gKEJPT0wpaXNUZWxl
cGhvbmVOdW1iZXJQYXJzaW5nQWxsb3dlZAoreworICAgIERvY3VtZW50ICpkb2N1bWVudCA9IGNv
cmUoc2VsZiktPmRvY3VtZW50KCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5pc1RlbGVwaG9uZU51
bWJlclBhcnNpbmdBbGxvd2VkKCk7Cit9CisKKy0gKEJPT0wpaXNUZWxlcGhvbmVOdW1iZXJQYXJz
aW5nRW5hYmxlZAoreworICAgIERvY3VtZW50ICpkb2N1bWVudCA9IGNvcmUoc2VsZiktPmRvY3Vt
ZW50KCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5pc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFi
bGVkKCk7Cit9CisKKy0gKEJPT0wpbWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5Cit7CisgICAg
V2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICBpZiAoV2ViQ29yZTo6UGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygp
Lm1lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseSgpOworCisgICAgcmV0dXJuIE5POworfQorCist
ICh2b2lkKXNldE1lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseTooQk9PTClmbGFnCit7CisgICAg
V2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICBpZiAoV2ViQ29yZTo6UGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0TWVk
aWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5KGZsYWcpOworfQorCistIChET01SYW5nZSAqKXNlbGVj
dGVkRE9NUmFuZ2UKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKK30KKworLSAo
dm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1Nl
bGVjdGlvbkFmZmluaXR5KWFmZmluaXR5IGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nCit7
CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gRW5zdXJlIHRoZSB2aWV3IGJlY29tZXMgZmlyc3QgcmVzcG9uZGVyLgorICAg
IC8vIFRoaXMgZG9lcyBub3QgaGFwcGVuIGF1dG9tYXRpY2FsbHkgb24gaU9TIGJlY2F1c2Ugd2Ug
ZG9uJ3QgZm9yd2FyZAorICAgIC8vIGFsbCB0aGUgY2xpY2sgZXZlbnRzIHRvIFdlYktpdC4KKyAg
ICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpKSB7CisgICAgICAgIGlm
IChOU1ZpZXcgKmRvY3VtZW50VmlldyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCkpIHsKKyAg
ICAgICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgICAgICAgICAgaWYgKCFw
YWdlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgp
LmZvY3VzTlNWaWV3KGRvY3VtZW50Vmlldyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAg
ICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgKEVBZmZp
bml0eSlhZmZpbml0eSwgY2xvc2VUeXBpbmcpOworICAgIGlmICghY2xvc2VUeXBpbmcpCisgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS5lbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0
aW9uSWZPcGVuRm9yTW9yZVR5cGluZygpOworfQorCistIChOU1NlbGVjdGlvbkFmZmluaXR5KXNl
bGVjdGlvbkFmZmluaXR5Cit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxm
KTsKKyAgICByZXR1cm4gKE5TU2VsZWN0aW9uQWZmaW5pdHkpKGZyYW1lLT5zZWxlY3Rpb24oKS5h
ZmZpbml0eSgpKTsKK30KKworLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24KK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNl
bGYpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKK30KKworLSAoRE9NUmFuZ2UgKillbGVtZW50UmFuZ2VD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24KK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2Vs
ZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgcmV0
dXJuIGtpdChyYW5nZS5nZXQoKSk7Cit9CisKKy0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9Xb3Jk
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0g
Y29yZShzZWxmKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9Xb3Jk
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Cit9CisKKy0gKHZvaWQpZXhwYW5kU2VsZWN0aW9u
VG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgoreworICAgIFdlYkNvcmU6OkZy
YW1lICpmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLmV4cGFuZFNl
bGVjdGlvblRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKK30KKworLSAo
dW5pY2hhciljaGFyYWN0ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbjooaW50KWFtb3VudAor
eworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgcmV0dXJuIGZy
YW1lLT5zZWxlY3Rpb24oKS5jaGFyYWN0ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbihhbW91
bnQpOworfQorCistICh1bmljaGFyKWNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uCit7Cisg
ICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICByZXR1cm4gZnJhbWUt
PnNlbGVjdGlvbigpLmNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uKCk7Cit9CisKKy0gKHVu
aWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVjdGlvbgoreworICAgIFdlYkNvcmU6OkZyYW1l
ICpmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5jaGFy
YWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uKCk7Cit9CisKKy0gKERPTVJhbmdlICopd29yZFJhbmdl
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0g
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNl
bGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOworICAgIHJldHVy
biBraXQocmFuZ2UuZ2V0KCkpOworfQorCistIChOU1N0cmluZyAqKXdvcmRJblJhbmdlOihET01S
YW5nZSAqKXJhbmdlCit7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICByZXR1cm4gW3NlbGYgX3N0cmluZ0ZvclJhbmdlOnJhbmdlXTsKK30KKworLSAoaW50KXdvcmRP
ZmZzZXRJblJhbmdlOihET01SYW5nZSAqKXJhbmdlCit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZy
YW1lID0gY29yZShzZWxmKTsKKyAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLndvcmRPZmZz
ZXRJblJhbmdlKGNvcmUocmFuZ2UpKTsKK30KKworLSAoQk9PTClzcGFjZUZvbGxvd3NXb3JkSW5S
YW5nZTooRE9NUmFuZ2UgKilyYW5nZQoreworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNv
cmUoc2VsZik7CisgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5zcGFjZUZvbGxvd3NXb3Jk
SW5SYW5nZShjb3JlKHJhbmdlKSk7Cit9CisKKy0gKE5TQXJyYXkgKil3b3Jkc0luQ3VycmVudFBh
cmFncmFwaAoreworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7CisgICAg
cmV0dXJuIGZyYW1lLT53b3Jkc0luQ3VycmVudFBhcmFncmFwaCgpOworfQorCistIChCT09MKXNl
bGVjdGlvbkF0RG9jdW1lbnRTdGFydAoreworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNv
cmUoc2VsZik7CisgICAgCisgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgICAKKyAgICBmcmFtZS0+ZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAgCisgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKTsKK30KKworLSAoQk9PTClzZWxlY3Rpb25BdFNl
bnRlbmNlU3RhcnQKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwor
ICAgIAorICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisg
ICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgCisgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZUxheW91dCgpOworICAgIAorICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
QXRTZW50ZW5jZVN0YXJ0KCk7Cit9CisKKy0gKEJPT0wpc2VsZWN0aW9uQXRXb3JkU3RhcnQKK3sK
KyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIAorICAgIGlmIChm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBO
TzsKKyAgICAgICAgCisgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworICAg
IAorICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uQXRXb3JkU3RhcnQoKTsK
K30KKworLSAoRE9NUmFuZ2UgKilyYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbjooaW50KWFt
b3VudAoreworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92
aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpOworICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkp
OworfQorCistIChET01SYW5nZSAqKXJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uOihp
bnQpYW1vdW50Cit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnJhbmdl
QnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCk7CisgICAgcmV0dXJuIGtpdChyYW5n
ZS5nZXQoKSk7Cit9CisKKy0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZSBvbkVs
ZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50Cit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1l
ID0gY29yZShzZWxmKTsKKworICAgIERvY3VtZW50ICpkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSAqbm9kZSA9IGNvcmUo
ZWxlbWVudCk7CisgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdFJhbmdlT25FbGVtZW50KHJh
bmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgsIG5vZGUpOworfQorCistIChET01SYW5nZSAqKW1h
cmtlZFRleHRET01SYW5nZQoreworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2Vs
Zik7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBr
aXQoZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSk7Cit9CisKKy0gKHZv
aWQpc2V0TWFya2VkVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Up
bmV3U2VsUmFuZ2UKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwor
ICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWZWN0b3I8Q29tcG9z
aXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCku
Y2xpZW50KCkuc3VwcHJlc3NGb3JtTm90aWZpY2F0aW9ucygpOworICAgIGZyYW1lLT5lZGl0b3Io
KS5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwg
TlNNYXhSYW5nZShuZXdTZWxSYW5nZSkpOworICAgIGZyYW1lLT5wYWdlKCktPmNocm9tZSgpLmNs
aWVudCgpLnJlc3RvcmVGb3JtTm90aWZpY2F0aW9ucygpOworfQorCistICh2b2lkKXNldE1hcmtl
ZFRleHQ6KE5TU3RyaW5nICopdGV4dCBmb3JDYW5kaWRhdGVzOihCT09MKWZvckNhbmRpZGF0ZXMK
K3sKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW5lPiB1bmRlcmxpbmVzOworICAgIGZyYW1lLT5lZGl0b3IoKS5zZXRDb21wb3NpdGlvbih0
ZXh0LCB1bmRlcmxpbmVzLCAwLCBbdGV4dCBsZW5ndGhdKTsKK30KKworLSAodm9pZCljb25maXJt
TWFya2VkVGV4dDooTlNTdHJpbmcgKil0ZXh0Cit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1l
ID0gY29yZShzZWxmKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZWRpdG9yKCkuY2xpZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5j
bGllbnQoKS5zdXBwcmVzc0Zvcm1Ob3RpZmljYXRpb25zKCk7CisgICAgaWYgKHRleHQpCisgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24odGV4dCk7CisgICAgZWxzZQor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuY29uZmlybU1hcmtlZFRleHQoKTsKKyAgICBmcmFtZS0+
cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5yZXN0b3JlRm9ybU5vdGlmaWNhdGlvbnMoKTsKK30K
KworLSAodm9pZClzZXRUZXh0OihOU1N0cmluZyAqKXRleHQgYXNDaGlsZE9mRWxlbWVudDooRE9N
RWxlbWVudCAqKWVsZW1lbnQKK3sKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICBp
ZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBmcmFtZS0+ZWRpdG9yKCkuc2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQodGV4dCwgY29y
ZShlbGVtZW50KSk7Cit9CisKKy0gKHZvaWQpc2V0RGljdGF0aW9uUGhyYXNlczooTlNBcnJheSAq
KWRpY3RhdGlvblBocmFzZXMgbWV0YWRhdGE6KGlkKW1ldGFkYXRhIGFzQ2hpbGRPZkVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbGVtZW50Cit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZnJhbWUtPmVkaXRvcigpLnNl
dERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KHZlY3RvckZvckRpY3RhdGlvblBocmFz
ZXNBcnJheShkaWN0YXRpb25QaHJhc2VzKSwgbWV0YWRhdGEsIGNvcmUoZWxlbWVudCkpOworfQor
CistIChOU0FycmF5ICopaW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QKK3sKKyAgICByZXR1
cm4gY29yZShzZWxmKS0+aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKTsKK30KKworLy8g
Q29sbGVjdHMgdGhlIHJhbmdlcyBhbmQgbWV0YWRhdGEgZm9yIGFsbCBvZiB0aGUgbWFycyB2b2x0
YXMgaW4gdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudC4KKy0gKHZvaWQpZ2V0RGljdGF0aW9uUmVz
dWx0UmFuZ2VzOihOU0FycmF5ICoqKW91dFJhbmdlcyBhbmRNZXRhZGF0YXM6KE5TQXJyYXkgKiop
b3V0TWV0YWRhdGFzCit7CisgICAgQVNTRVJUKG91dFJhbmdlcyk7CisgICAgaWYgKCFvdXRSYW5n
ZXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyAqb3V0UmFuZ2VzIHNob3VsZCBub3Qg
YWxyZWFkeSBwb2ludCB0byBhbiBhcnJheS4KKyAgICBBU1NFUlQoISgqb3V0UmFuZ2VzKSk7Cisg
ICAgKm91dFJhbmdlcyA9IG5pbDsKKyAgICAKKyAgICBBU1NFUlQob3V0TWV0YWRhdGFzKTsKKyAg
ICBpZiAoIW91dE1ldGFkYXRhcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vICptZXRh
ZGF0YSBzaG91bGQgbm90IGFscmVhZHkgcG9pbnQgdG8gYW4gYXJyYXkuCisgICAgQVNTRVJUKCEo
Km91dE1ldGFkYXRhcykpOworICAgICpvdXRNZXRhZGF0YXMgPSBuaWw7CisgICAgCisgICAgTlNN
dXRhYmxlQXJyYXkgKnJhbmdlcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgTlNNdXRh
YmxlQXJyYXkgKm1ldGFkYXRhcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgCisgICAg
RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKKyAgICBEb2N1bWVudCAqZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICAKKyAgICBFbGVtZW50ICpyb290ID0gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGZy
YW1lLT5kb2N1bWVudCgpLT5ib2R5KCkgOiBmcmFtZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxl
RWxlbWVudCgpOworICAgIAorICAgIERPTVJhbmdlICpwcmV2aW91c0RPTVJhbmdlID0gbmlsOwor
ICAgIGlkIHByZXZpb3VzTWV0YWRhdGEgPSBuaWw7CisgICAgCisgICAgZm9yIChOb2RlKiBub2Rl
ID0gcm9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKKyAgICAg
ICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50LT5tYXJrZXJzKCku
bWFya2Vyc0Zvcihub2RlKTsKKyAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcmtlcnMuZW5kKCk7CisgICAgICAgIGZvciAoVmVjdG9yPERvY3Vt
ZW50TWFya2VyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFya2Vycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCgqaXQpLT50eXBlKCkg
IT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1h
cmtlciA9ICppdDsKKyAgICAgICAgICAgIGlkIG1ldGFkYXRhID0gbWFya2VyLT5tZXRhZGF0YSgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBBbGwgcmVzdWx0IG1hcmtlcnMgc2hvdWxk
IGhhdmUgbWV0YWRhdGEuCisgICAgICAgICAgICBBU1NFUlQobWV0YWRhdGEpOworICAgICAgICAg
ICAgaWYgKCFtZXRhZGF0YSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3Vt
ZW50LCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0
KCkpOworICAgICAgICAgICAgRE9NUmFuZ2UgKmRvbVJhbmdlID0ga2l0KHJhbmdlLmdldCgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1ldGFkYXRhICE9IHByZXZpb3VzTWV0YWRh
dGEpIHsKKyAgICAgICAgICAgICAgICBbbWV0YWRhdGFzIGFkZE9iamVjdDptZXRhZGF0YV07Cisg
ICAgICAgICAgICAgICAgW3JhbmdlcyBhZGRPYmplY3Q6ZG9tUmFuZ2VdOworICAgICAgICAgICAg
ICAgIHByZXZpb3VzTWV0YWRhdGEgPSBtZXRhZGF0YTsKKyAgICAgICAgICAgICAgICBwcmV2aW91
c0RPTVJhbmdlID0gZG9tUmFuZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZvciBhIERvY3VtZW50TWFya2VyIHRvIGJlIHNwbGl0IGJ5
IGVkaXRpbmcuIEFkamFjZW50IG1hcmtlcnMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAvLyB0
aGUgc2FtZSBtZXRhZGF0YSBhcmUgZm9yIHRoZSBzYW1lIHJlc3VsdC4gU28gY29tYmluZSB0aGVp
ciByYW5nZXMuCisgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzRE9NUmFuZ2UgPT0gW3Jh
bmdlcyBsYXN0T2JqZWN0XSk7CisgICAgICAgICAgICAgICAgW3ByZXZpb3VzRE9NUmFuZ2UgcmV0
YWluXTsKKyAgICAgICAgICAgICAgICBbcmFuZ2VzIHJlbW92ZUxhc3RPYmplY3RdOworICAgICAg
ICAgICAgICAgIERPTU5vZGUgKnN0YXJ0Q29udGFpbmVyID0gW2RvbVJhbmdlIHN0YXJ0Q29udGFp
bmVyXTsKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBbZG9tUmFuZ2Ugc3RhcnRP
ZmZzZXRdOworICAgICAgICAgICAgICAgIFtwcmV2aW91c0RPTVJhbmdlIHNldEVuZDpzdGFydENv
bnRhaW5lciBvZmZzZXQ6c3RhcnRPZmZzZXRdOworICAgICAgICAgICAgICAgIFtyYW5nZXMgYWRk
T2JqZWN0OnByZXZpb3VzRE9NUmFuZ2VdOworICAgICAgICAgICAgICAgIFtwcmV2aW91c0RPTVJh
bmdlIHJlbGVhc2VdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
ICpvdXRSYW5nZXMgPSByYW5nZXM7CisgICAgKm91dE1ldGFkYXRhcyA9IG1ldGFkYXRhczsKKyAg
ICAKKyAgICByZXR1cm47Cit9CisKKy0gKGlkKWRpY3RhdGlvblJlc3VsdE1ldGFkYXRhRm9yUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2UKK3sKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBjb3JlKHNl
bGYpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoY29yZShyYW5nZSksIERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpOworICAgIAorICAgIC8vIFVJS2l0IHNob3Vs
ZCBvbmx5IGV2ZXIgZ2l2ZSB1cyBhIERPTVJhbmdlIGZvciBhIHBocmFzZSB3aXRoIGFsdGVybmF0
aXZlcywgd2hpY2ggc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIG1vcmUgdGhhbiBvbmUgcmVzdWx0Lgor
ICAgIEFTU0VSVChtYXJrZXJzLnNpemUoKSA8PSAxKTsKKyAgICBpZiAobWFya2Vycy5zaXplKCkg
PT0gMCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gbWFya2Vyc1swXS0+
bWV0YWRhdGEoKTsKK30KKworLSAodm9pZClyZWN1cnNpdmVTZXRVcGRhdGVBcHBlYXJhbmNlRW5h
YmxlZDooQk9PTCllbmFibGVkCit7CisgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShz
ZWxmKTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5yZWN1cnNpdmVTZXRVcGRhdGVB
cHBlYXJhbmNlRW5hYmxlZChlbmFibGVkKTsKK30KKworLy8gV2ViQ29yZUZyYW1lQnJpZGdlIG1l
dGhvZHMgdXNlZCBieSBpT1MgYXBwbGljYXRpb25zIGFuZCBmcmFtZXdvcmtzCisKKysgKE5TU3Ry
aW5nICopc3RyaW5nV2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgdGV4dEVuY29kaW5nTmFtZTooTlNT
dHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lCit7CisgICAgV2ViQ29yZTo6VGV4dEVuY29kaW5nIGVu
Y29kaW5nKHRleHRFbmNvZGluZ05hbWUpOworICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgpKQor
ICAgICAgICBlbmNvZGluZyA9IFdpbmRvd3NMYXRpbjFFbmNvZGluZygpOworICAgIHJldHVybiBl
bmNvZGluZy5kZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oW2RhdGEgYnl0ZXNd
KSwgW2RhdGEgbGVuZ3RoXSk7Cit9CisKKy0gKE5TUmVjdCljYXJldFJlY3RBdE5vZGU6KERPTU5v
ZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldCBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0
eSlhZmZpbml0eQoreworICAgIHJldHVybiBbc2VsZiBfY2FyZXRSZWN0QXRQb3NpdGlvbjpjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29yZShub2RlKSwgb2Zmc2V0KSBhZmZpbml0eTphZmZp
bml0eV07Cit9CisKKy0gKERPTVJhbmdlICopY2hhcmFjdGVyUmFuZ2VBdFBvaW50OihOU1BvaW50
KXBvaW50Cit7CisgICAgcmV0dXJuIFtzZWxmIF9jaGFyYWN0ZXJSYW5nZUF0UG9pbnQ6cG9pbnRd
OworfQorCistIChOU1JhbmdlKWNvbnZlcnRET01SYW5nZVRvTlNSYW5nZTooRE9NUmFuZ2UgKily
YW5nZQoreworICAgIHJldHVybiBbc2VsZiBfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOnJhbmdl
XTsKK30KKworLSAoRE9NUmFuZ2UgKiljb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2Up
bnNyYW5nZQoreworICAgIHJldHVybiBbc2VsZiBfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOm5z
cmFuZ2VdOworfQorCistIChOU1JlY3QpZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsK
K30KKworLSAoQ1RGb250UmVmKWZvbnRGb3JTZWxlY3Rpb246KEJPT0wgKiloYXNNdWx0aXBsZUZv
bnRzCit7CisgICAgYm9vbCBtdWx0aXBsZUZvbnRzID0gZmFsc2U7CisgICAgQ1RGb250UmVmIGZv
bnQgPSBuaWw7CisgICAgaWYgKF9wcml2YXRlLT5jb3JlRnJhbWUpIHsKKyAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZkID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZv
clNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKTsKKyAgICAgICAgaWYgKGZkKQorICAgICAgICAgICAg
Zm9udCA9IGZkLT5nZXRDVEZvbnQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGhhc011bHRpcGxl
Rm9udHMpCisgICAgICAgICpoYXNNdWx0aXBsZUZvbnRzID0gbXVsdGlwbGVGb250czsKKyAgICBy
ZXR1cm4gZm9udDsKK30KKworLSAodm9pZClzZW5kU2Nyb2xsRXZlbnQKK3sKKyAgICBBU1NFUlQo
V2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLnNlbmRTY3JvbGxFdmVudCgpOworfQorCistICh2b2lkKV91c2VyU2Ny
b2xsZWQKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAg
IGlmIChGcmFtZVZpZXcqIHZpZXcgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCkpCisgICAg
ICAgIHZpZXctPnNldFdhc1Njcm9sbGVkQnlVc2VyKHRydWUpOworfQorCistIChOU1N0cmluZyAq
KXN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyBmb3JjZVVzZXJHZXN0dXJlOihCT09MKWZvcmNlVXNlckdlc3R1cmUKK3sKKyAgICByZXR1cm4g
W3NlbGYgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOnN0cmluZyBmb3Jj
ZVVzZXJHZXN0dXJlOmZvcmNlVXNlckdlc3R1cmVdOworfQorCistIChOU1N0cmluZyAqKXN0cmlu
Z0ZvclJhbmdlOihET01SYW5nZSAqKXJhbmdlCit7CisgICAgcmV0dXJuIFtzZWxmIF9zdHJpbmdG
b3JSYW5nZTpyYW5nZV07Cit9CisKKy8vCisvLyBGSVhNRTogV2UgbmVlZGVkIHRvIGFkZCB0aGlz
IG1ldGhvZCBmb3IgaU9TIGR1ZSB0byB0aGUgb3BlbnNvdXJjZSB2ZXJzaW9uJ3MgaW5jbHVzaW9u
IG9mCisvLyBtYXRjaFN0eWxlOllFUy4gSXQgc2VlbXMgb2RkIHRoYXQgd2Ugc2hvdWxkIG5lZWQg
dG8gZXhwbGljaXRseSBtYXRjaCBzdHlsZSwgZ2l2ZW4gdGhhdCB0aGUKKy8vIGZyYWdtZW50IGlz
IGJlaW5nIG1hZGUgb3V0IG9mIHBsYWluIHRleHQsIHdoaWNoIHNob3VsZG4ndCBiZSBjYXJyeWlu
ZyBhbnkgc3R5bGUgb2YgaXRzIG93bi4KKy8vIFdoZW4gd2UgcGFzdGUgdGhhdCBpdCB3aWxsIHBp
Y2sgdXAgaXRzIHN0eWxlIGZyb20gdGhlIHN1cnJvdW5kaW5nIGNvbnRlbnQuIFdoYXQgZWxzZSB3
b3VsZAorLy8gd2UgZXhwZWN0PyBJZiB3ZSBmbGlwcGVkIHRoYXQgbWF0Y2hTdHlsZSBiaXQgdG8g
Tk8sIHdlIGNvdWxkIHByb2JhYmx5IGp1c3QgZ2V0IHJpZAorLy8gb2YgdGhpcyBtZXRob2QsIGFu
ZCBjYWxsIHRoZSBzdGFuZGFyZCBXZWJLaXQgdmVyc2lvbi4KKy8vCisvLyBUaGVyZSdzIGEgc2Vj
b25kIHByb2JsZW0gaGVyZSwgdG9vLCB3aGljaCBpcyB0aGF0IFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kIHNvbWV0aW1lcyBhZGRzCisvLyByZWR1bmRhbnQgc3R5bGUuCisvLyAKKy0gKHZvaWQpX3Jl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJlcGxhY2VtZW50
OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2Ug
bWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxlCit7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisK
KyAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5nZXQoKSkgOiBuaWw7CisgICAgW3NlbGYgX3Jl
cGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2Vs
ZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOm1hdGNo
U3R5bGVdOworfQorCistICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFdlYkFyY2hpdmU6KFdl
YkFyY2hpdmUgKil3ZWJBcmNoaXZlIHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxh
Y2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UKK3sKKyAgICBOU0FycmF5KiBz
dWJyZXNvdXJjZXMgPSBbd2ViQXJjaGl2ZSBzdWJyZXNvdXJjZXNdOworICAgIGZvciAoV2ViUmVz
b3VyY2UqIHN1YnJlc291cmNlIGluIHN1YnJlc291cmNlcykgeworICAgICAgICBpZiAoIVtbc2Vs
ZiBkYXRhU291cmNlXSBzdWJyZXNvdXJjZUZvclVSTDpbc3VicmVzb3VyY2UgVVJMXV0pCisgICAg
ICAgICAgICBbW3NlbGYgZGF0YVNvdXJjZV0gYWRkU3VicmVzb3VyY2U6c3VicmVzb3VyY2VdOwor
ICAgIH0KKworICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gW1tzZWxmIGRhdGFT
b3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEFyY2hpdmU6d2ViQXJjaGl2ZV07CisgICAgW3Nl
bGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1l
bnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxl
Ok5PXTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogI2lmIEVOQUJMRShJT1NfVEVY
VF9BVVRPU0laSU5HKQogLSAodm9pZClyZXNldFRleHRBdXRvc2l6aW5nQmVmb3JlTGF5b3V0CiB7
CkBAIC05OTAsNiArMTkwMSwxOCBAQCAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgc2VsZWN0UmVwbAogICAgIF9wcml2
YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY29y
ZShmcmFnbWVudCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUp
OwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAodm9pZClyZW1vdmVVbmNoYW5nZWFibGVTdHls
ZXMKK3sKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5yZW1vdmVVbmNoYW5nZWFi
bGVTdHlsZXMoKTsKK30KKworLSAoQk9PTCloYXNSaWNobHlFZGl0YWJsZVNlbGVjdGlvbgorewor
ICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpOworfQorI2VuZGlmCisKIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxh
Y2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UKIHsKICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKQEAgLTEwMDQsNiArMTkyNyw3IEBAIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25X
aXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nCiAg
ICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVw
bGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRj
aFN0eWxlOk5PXTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAvLyBEZXRlcm1pbmVzIHdoZXRo
ZXIgd2hpdGVzcGFjZSBuZWVkcyB0byBiZSBhZGRlZCBhcm91bmQgYVN0cmluZyB0byBwcmVzZXJ2
ZSBwcm9wZXIgc3BhY2luZyBhbmQKIC8vIHB1bmN0dWF0aW9uIHdoZW4gaXQncyBpbnNlcnRlZCBp
bnRvIHRoZSByZWNlaXZlcidzIHRleHQgb3ZlciBjaGFyUmFuZ2UuIFJldHVybnMgYnkgcmVmZXJl
bmNlCiAvLyBpbiBiZWZvcmVTdHJpbmcgYW5kIGFmdGVyU3RyaW5nIGFueSB3aGl0ZXNwYWNlIHRo
YXQgc2hvdWxkIGJlIGFkZGVkLCB1bmxlc3MgZWl0aGVyIG9yIGJvdGggYXJlCkBAIC0xMDYxLDYg
KzE5ODUsNyBAQCAtICh2b2lkKV9zbWFydEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgKilwYXN0
ZVN0cmluZyByZXBsYWNpbmdSYW5nZTooRE9NUmFuZ2UgKgogICAgIGlmIChhZnRlclN0cmluZyAm
JiBhZGRUcmFpbGluZ1NwYWNlICYmICFoYXNXaGl0ZXNwYWNlQXRFbmQpCiAgICAgICAgICphZnRl
clN0cmluZyA9IEAiICI7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogLSAoTlNNdXRh
YmxlRGljdGlvbmFyeSAqKV9jYWNoZWFiaWxpdHlEaWN0aW9uYXJ5CiB7CkBAIC0xMTU4LDYgKzIw
ODMsNyBAQCAtIChKU0NvbnRleHQgKilfamF2YVNjcmlwdENvbnRleHRGb3JTY3JpcHRXb3JsZDoo
V2ViU2NyaXB0V29ybGQgKil3b3JsZAogfQogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQog
LSAodm9pZClzZXRBbGxvd3NTY3JvbGxlcnNUb092ZXJsYXBDb250ZW50OihCT09MKWZsYWcKIHsK
ICAgICBBU1NFUlQoW1tbc2VsZiBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBpc0tpbmRPZkNsYXNz
OltXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgY2xhc3NdXSk7CkBAIC0xMTc0LDYgKzIxMDAsNyBA
QCAtICh2b2lkKXNldEFsd2F5c0hpZGVWZXJ0aWNhbFNjcm9sbGVyOihCT09MKWZsYWcKICAgICBB
U1NFUlQoW1tbc2VsZiBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBpc0tpbmRPZkNsYXNzOltXZWJE
eW5hbWljU2Nyb2xsQmFyc1ZpZXcgY2xhc3NdXSk7CiAgICAgWyhXZWJEeW5hbWljU2Nyb2xsQmFy
c1ZpZXcgKilbW3NlbGYgZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gc2V0QWx3YXlzSGlkZVZlcnRp
Y2FsU2Nyb2xsZXI6ZmxhZ107CiB9CisjZW5kaWYKIAogLSAodm9pZClzZXRBY2Nlc3NpYmxlTmFt
ZTooTlNTdHJpbmcgKiluYW1lCiB7CkBAIC0xMjA2LDcgKzIxMzMsOSBAQCAtIChpZClhY2Nlc3Np
YmlsaXR5Um9vdAogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKICAgICBpZiAoIUFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgQVhPYmplY3RDYWNoZTo6ZW5h
YmxlQWNjZXNzaWJpbGl0eSgpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIEFYT2JqZWN0
Q2FjaGU6OnNldEVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2liaWxpdHkoW1tOU0FwcCBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJm
YWNlQXR0cmlidXRlXSBib29sVmFsdWVdKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICBpZiAo
IV9wcml2YXRlLT5jb3JlRnJhbWUpCkBAIC0xMjc0LDYgKzIyMDMsNTkgQEAgLSAoTlNBcnJheSAq
KV9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50U2NhbGVGYWN0b3I6KGZsb2F0KXByaW50U2NhbGVG
YWN0b3IgcGFnZVMKICAgICByZXR1cm4gcGFnZXM7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCist
IChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGb3JUZXh0OihOU1N0cmlu
ZyAqKXRleHQKK3sKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKl9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHRl
eHQpLmdldCgpKTsKK30KKworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdt
ZW50Rm9yV2ViQXJjaGl2ZTooV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKK3sKKyAgICByZXR1cm4g
W1tzZWxmIGRhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEFyY2hpdmU6d2ViQXJjaGl2
ZV07Cit9CisKKy0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZvcklt
YWdlRGF0YTooTlNEYXRhICopZGF0YSB3aXRoUmVsYXRpdmVVUkxQYXJ0OihOU1N0cmluZyAqKXJl
bGF0aXZlVVJMUGFydCBhbmRNSU1FVHlwZTooTlNTdHJpbmcgKiltaW1lVHlwZQoreworICAgIFdl
YlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpk
YXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVJMOltOU1VSTCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0OnJlbGF0aXZlVVJMUGFy
dF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TUlNRVR5cGU6bWltZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CisgICAgRE9NRG9jdW1lbnRG
cmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50
V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOworICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKKyAg
ICByZXR1cm4gZnJhZ21lbnQ7Cit9CisKKy0gKEJPT0wpZm9jdXNlZE5vZGVIYXNDb250ZW50Cit7
CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CisgICAKKyAgICBF
bGVtZW50KiByb290OworICAgIGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8
ICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJv
b3QgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
Ly8gQ2FuJ3QgdXNlIHRoZSBmb2N1c2VkTm9kZSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgcm9v
dCBvZiB0aGUgc2hhZG93IHRyZWUgZm9yIGZvcm0gZWxlbWVudHMuCisgICAgICAgIHJvb3QgPSBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICB9CisgICAg
Ly8gRWFybHkgcmV0dXJuIHRvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGNyZWF0aW5nIFZpc2libGVQ
b3NpdGlvbnMuCisgICAgLy8gRklYTUU6IFdlIGZhaWwgdG8gY29tcHV0ZSBhIHJvb3QgZm9yIFNW
Rywgd2UgaGF2ZSBhIG51bGwgY2hlY2sgaGVyZSBzbyB0aGF0IHdlIGRvbid0IGNyYXNoLgorICAg
IGlmICghcm9vdCB8fCAhcm9vdC0+aGFzQ2hpbGROb2RlcygpKQorICAgICAgICByZXR1cm4gTk87
CisKKyAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3QoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJvb3QsIDApKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbGFzdChjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24ocm9vdCwgcm9vdC0+Y2hpbGROb2RlQ291bnQoKSkpOworICAgIHJldHVybiBmaXJz
dCAhPSBsYXN0OworfQorCistICh2b2lkKV9kaXNwYXRjaERpZFJlY2VpdmVUaXRsZTooTlNTdHJp
bmcgKil0aXRsZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
OworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgY29yZUZyYW1lLT5s
b2FkZXIoKS5jbGllbnQoKS5kaXNwYXRjaERpZFJlY2VpdmVUaXRsZShTdHJpbmdXaXRoRGlyZWN0
aW9uKHRpdGxlLCBMVFIpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIC0gKEpTVmFs
dWVSZWYpanNXcmFwcGVyRm9yTm9kZTooRE9NTm9kZSAqKW5vZGUgaW5TY3JpcHRXb3JsZDooV2Vi
U2NyaXB0V29ybGQgKil3b3JsZAogewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOwpAQCAtMTQzNyw4ICsyNDE5LDEwIEBAIHN0YXRpYyBOU1VSTCAqY3JlYXRlVW5p
cXVlV2ViRGF0YVVSTCgpCiAKIC0gKHZvaWQpX2xvYWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVU
eXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopZW5j
b2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCB1bnJlYWNoYWJsZVVSTDooTlNVUkwg
Kil1bnJlYWNoYWJsZVVSTAogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFwdGhyZWFk
X21haW5fbnAoKSkKICAgICAgICAgcmV0dXJuIFtbc2VsZiBfd2Via2l0X2ludm9rZU9uTWFpblRo
cmVhZF0gX2xvYWREYXRhOmRhdGEgTUlNRVR5cGU6TUlNRVR5cGUgdGV4dEVuY29kaW5nTmFtZTpl
bmNvZGluZ05hbWUgYmFzZVVSTDpiYXNlVVJMIHVucmVhY2hhYmxlVVJMOnVucmVhY2hhYmxlVVJM
XTsKKyNlbmRpZgogICAgIAogICAgIFVSTCByZXNwb25zZVVSTDsKICAgICBpZiAoIWJhc2VVUkwp
IHsKQEAgLTE0NDgsOCArMjQzMiwxMCBAQCAtICh2b2lkKV9sb2FkRGF0YTooTlNEYXRhICopZGF0
YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZSB0ZXh0RW5jb2RpbmdOYW1lOgogICAgIAog
ICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFtiYXNlVVJMIGFic29sdXRlVVJMXSk7CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIGhhY2sgYmVjYXVzZSBNYWlsIGNoZWNrcyBmb3IgdGhp
cyBwcm9wZXJ0eSB0byBkZXRlY3QgZGF0YSAvIGFyY2hpdmUgbG9hZHMKICAgICBbTlNVUkxQcm90
b2NvbCBzZXRQcm9wZXJ0eTpAIiIgZm9yS2V5OkAiV2ViRGF0YVJlcXVlc3QiIGluUmVxdWVzdDoo
TlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3QubnNVUkxSZXF1ZXN0KFVwZGF0ZUhUVFBCb2R5
KV07CisjZW5kaWYKIAogICAgIFN1YnN0aXR1dGVEYXRhIHN1YnN0aXR1dGVEYXRhKFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShkYXRhKSwgTUlNRVR5cGUsIGVuY29kaW5nTmFtZSwg
W3VucmVhY2hhYmxlVVJMIGFic29sdXRlVVJMXSwgcmVzcG9uc2VVUkwpOwogCkBAIC0xNTAxLDkg
KzI0ODcsMTEgQEAgLSAodm9pZClzdG9wTG9hZGluZwogCiAtICh2b2lkKXJlbG9hZAogeworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJ
UlNUX1ZFUlNJT05fV0lUSF9SRUxPQURfRlJPTV9PUklHSU4pICYmIGFwcGxpY2F0aW9uSXNTYWZh
cmkoKSkKICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCkucmVsb2FkKEdldEN1
cnJlbnRLZXlNb2RpZmllcnMoKSAmIHNoaWZ0S2V5KTsKICAgICBlbHNlCisjZW5kaWYKICAgICAg
ICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCkucmVsb2FkKGZhbHNlKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmggYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCBmY2NiZWFh
MWNhYmRkZmZkNzNlNDNkOTQzZmY3YzJmMzg0MjVlOWUzLi40NmYzMjJiOTlkYmU1ZDBmNmViM2Zm
ZjU2MGQ0MDgzNWQyMzNmNmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lSW50ZXJuYWwuaApAQCAtODQsNiArODQsOSBAQCBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZy
YW1lICp3ZWJGcmFtZSk7CiAgICAgQk9PTCBpbmNsdWRlZEluV2ViS2l0U3RhdGlzdGljczsKICAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IHVybDsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHByb3Zp
c2lvbmFsVVJMOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBCT09MIGlzQ29tbWl0dGluZzsKKyNl
bmRpZiAgICAKIH0KIEBlbmQKIApAQCAtMTIxLDYgKzEyNCwxMyBAQCBXZWJWaWV3ICpnZXRXZWJW
aWV3KFdlYkZyYW1lICp3ZWJGcmFtZSk7CiAvLyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgogLSAo
V2ViRGF0YVNvdXJjZSAqKV9kYXRhU291cmNlOwogCisjaWYgUExBVEZPUk0oSU9TKQorKyAodm9p
ZClfY3JlYXRlTWFpbkZyYW1lV2l0aFNpbXBsZUhUTUxEb2N1bWVudFdpdGhQYWdlOihXZWJDb3Jl
OjpQYWdlKilwYWdlIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3IHN0eWxlOihO
U1N0cmluZyAqKXN0eWxlOworCistIChCT09MKV9pc0NvbW1pdHRpbmc7CistICh2b2lkKV9zZXRJ
c0NvbW1pdHRpbmc6KEJPT0wpdmFsdWU7CisjZW5kaWYKKwogLSAoQk9PTClfbmVlZHNMYXlvdXQ7
CiAtICh2b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09MKWNvbnRl
bnRzT25seTsKIC0gKEJPT0wpX2dldFZpc2libGVSZWN0OihOU1JlY3QqKXJlY3Q7CkBAIC0xMzcs
OCArMTQ3LDEzIEBAIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1lKTsKIC0g
KE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6UG9zaXRpb24mKXBv
cyBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eTsKIC0gKE5TUmVjdClfZmly
c3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CiAtICh2b2lkKV9zY3JvbGxET01S
YW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZTsKKyNpZiBQTEFURk9STShJT1MpCistICh2
b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZSB3aXRoSW5zZXQ6
KENHRmxvYXQpaW5zZXQ7CisjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAtIChET01SYW5n
ZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlv
bkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNvcmU6OlRleHRHcmFudWxhcml0
eSlncmFudWxhcml0eTsKKyNlbmRpZgogLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooV2Vi
Q29yZTo6UmFuZ2UqKXJhbmdlOwogLSAoUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZl
cnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZVZpZXcubW0KaW5kZXggY2NiODgxZjZiOTMyMzJjMzcxMDQwYTcyZjFlNjViMzY1
YTIxZWFkYi4uOTE2YzI0NTI1ZDVlYzRlZDVlZDFlNWE3YTg0ODMzYmFhZDE4OTU3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0KQEAgLTY5LDE4ICs2OSwzNiBA
QAogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgorI2ltcG9ydCAiV2ViUERGVmlld0lPUy5oIgorI2ltcG9ydCAiV2ViVUlLaXREZWxlZ2F0ZS5o
IgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFJlcXVlc3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0tleUV2ZW50Q29kZXNJT1MuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dBS0NsaXBW
aWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dBS1Njcm9sbFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvV0FLVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV0FLV2luZG93Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1dLR3JhcGhpY3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViRXZlbnQuaD4K
KyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorI2lmICFQTEFURk9STShJT1Mp
CiBAaW50ZXJmYWNlIE5TV2luZG93IChXaW5kb3dQcml2YXRlKQogLSAoQk9PTClfbmVlZHNUb1Jl
c2V0RHJhZ01hcmdpbnM7CiAtICh2b2lkKV9zZXROZWVkc1RvUmVzZXREcmFnTWFyZ2luczooQk9P
TClzOwogQGVuZAorI2VuZGlmCiAKIEBpbnRlcmZhY2UgTlNDbGlwVmlldyAoQXBwS2l0U2VjcmV0
c0lLbm93KQogLSAoQk9PTClfc2Nyb2xsVG86KGNvbnN0IE5TUG9pbnQgKiluZXdPcmlnaW4gYW5p
bWF0ZTooQk9PTClhbmltYXRlOyAvLyBuZWVkIHRoZSBib29sZWFuIHJlc3VsdCBmcm9tIHRoaXMg
bWV0aG9kCiBAZW5kCiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwOTAKIEBpbnRlcmZhY2UgTlNWaWV3IChEZXRhaWxzKQogLSAodm9pZClzZXRCYWNrZ3Jv
dW5kQ29sb3I6KE5TQ29sb3IgKiljb2xvcjsKIEBlbmQKQEAgLTE0Myw2ICsxNjEsNyBAQCAtICh2
b2lkKV9zZXREb2N1bWVudFZpZXc6KE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqKXZpZXcKICAg
ICBjb3JlKFtzZWxmIF93ZWJWaWV3XSktPmRyYWdDb250cm9sbGVyKCkuc2V0RGlkSW5pdGlhdGVE
cmFnKGZhbHNlKTsKICNlbmRpZgogICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgW3N2IHNl
dFN1cHByZXNzTGF5b3V0OllFU107CiAgICAgCiAgICAgLy8gSWYgdGhlIG9sZCB2aWV3IGlzIHRo
ZSBmaXJzdCByZXNwb25kZXIsIHRyYW5zZmVyIGZpcnN0IHJlc3BvbmRlciBzdGF0dXMgdG8gdGhl
IG5ldyB2aWV3IGFzIApAQCAtMTU0LDEyICsxNzMsMjUgQEAgLSAodm9pZClfc2V0RG9jdW1lbnRW
aWV3OihOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKil2aWV3CiAgICAgLy8gU3VwcHJlc3MgdGhl
IHJlc2V0dGluZyBvZiBkcmFnIG1hcmdpbnMgc2luY2Ugd2Uga25vdyB3ZSBjYW4ndCBhZmZlY3Qg
dGhlbS4KICAgICBCT09MIHJlc2V0RHJhZ01hcmdpbnMgPSBbd2luZG93IF9uZWVkc1RvUmVzZXRE
cmFnTWFyZ2luc107CiAgICAgW3dpbmRvdyBfc2V0TmVlZHNUb1Jlc2V0RHJhZ01hcmdpbnM6Tk9d
OworI2VuZGlmCiAgICAgW3N2IHNldERvY3VtZW50Vmlldzp2aWV3XTsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIFt3aW5kb3cgX3NldE5lZWRzVG9SZXNldERyYWdNYXJnaW5zOnJlc2V0RHJhZ01h
cmdpbnNdOwogCiAgICAgaWYgKG1ha2VOZXdWaWV3Rmlyc3RSZXNwb25kZXIpCiAgICAgICAgIFt3
aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnZpZXddOwogICAgIFtzdiBzZXRTdXBwcmVzc0xheW91
dDpOT107CisjZWxzZQorICAgIEFTU0VSVChfcHJpdmF0ZS0+d2ViRnJhbWUpOworCisgICAgRnJh
bWUqIGZyYW1lID0gY29yZShfcHJpdmF0ZS0+d2ViRnJhbWUpOworCisgICAgQVNTRVJUKGZyYW1l
KTsKKyAgICBBU1NFUlQoZnJhbWUtPnBhZ2UoKSk7CisKKyAgICBpZiAoZnJhbWUgPT0gJmZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpKQorICAgICAgICBbW3NlbGYgd2luZG93XSBtYWtlRmlyc3RS
ZXNwb25kZXI6W3NlbGYgZG9jdW1lbnRWaWV3XV07CisjZW5kaWYKIH0KIAogLShOU1ZpZXcgPFdl
YkRvY3VtZW50Vmlldz4gKilfbWFrZURvY3VtZW50Vmlld0ZvckRhdGFTb3VyY2U6KFdlYkRhdGFT
b3VyY2UgKilkYXRhU291cmNlCkBAIC0yNDMsNyArMjc1LDEzIEBAICsgKE5TTXV0YWJsZURpY3Rp
b25hcnkgKilfdmlld1R5cGVzQWxsb3dJbWFnZVR5cGVPbWlzc2lvbjooQk9PTClhbGxvd0ltYWdl
VHlwZU9tCiAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSAic2VjcmV0IGRlZmF1bHQiIHdlIGRv
bid0IGJvdGhlciByZWdpc3RlcmluZyBpdC4KICAgICAgICAgQk9PTCBvbWl0UERGU3VwcG9ydCA9
IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJL
aXRPbWl0UERGU3VwcG9ydCJdOwogICAgICAgICBpZiAoIW9taXRQREZTdXBwb3J0KQorI2lmIFBM
QVRGT1JNKElPUykKKyNkZWZpbmUgV2ViUERGVmlldyAoW1dlYlZpZXcgX2dldFBERlZpZXdDbGFz
c10pCisjZW5kaWYKICAgICAgICAgICAgIGFkZFR5cGVzRnJvbUNsYXNzKHZpZXdUeXBlcywgW1dl
YlBERlZpZXcgY2xhc3NdLCBbV2ViUERGVmlldyBzdXBwb3J0ZWRNSU1FVHlwZXNdKTsKKyNpZiBQ
TEFURk9STShJT1MpCisjdW5kZWYgV2ViUERGVmlldworI2VuZGlmCiAgICAgfQogICAgIAogICAg
IGlmICghYWRkZWRJbWFnZVR5cGVzICYmICFhbGxvd0ltYWdlVHlwZU9taXNzaW9uKSB7CkBAIC0y
NjcsNyArMzA1LDE0IEBAICsgKENsYXNzKV92aWV3Q2xhc3NGb3JNSU1FVHlwZTooTlNTdHJpbmcg
KilNSU1FVHlwZSBhbGxvd2luZ1BsdWdpbnM6KEJPT0wpYWxsb3dQCiAKIC0gKENsYXNzKV92aWV3
Q2xhc3NGb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQogewotICAgIHJldHVybiBbW3Nl
bGYgY2xhc3NdIF92aWV3Q2xhc3NGb3JNSU1FVHlwZTpNSU1FVHlwZSBhbGxvd2luZ1BsdWdpbnM6
W1tbc2VsZiBfd2ViVmlld10gcHJlZmVyZW5jZXNdIGFyZVBsdWdJbnNFbmFibGVkXV07CisgICAg
Q2xhc3MgcmV0VmFsID0gW1tzZWxmIGNsYXNzXSBfdmlld0NsYXNzRm9yTUlNRVR5cGU6TUlNRVR5
cGUgYWxsb3dpbmdQbHVnaW5zOltbW3NlbGYgX3dlYlZpZXddIHByZWZlcmVuY2VzXSBhcmVQbHVn
SW5zRW5hYmxlZF1dOworCisjaWYgUExBVEZPUk0oSU9TKSAgIAorICAgIGlmIChbcmV0VmFsIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3JlcHJlc2VudGF0aW9uQ2xhc3NGb3JXZWJGcmFt
ZTopXSkKKyAgICAgICAgcmV0VmFsID0gW3JldFZhbCBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9y
KF9yZXByZXNlbnRhdGlvbkNsYXNzRm9yV2ViRnJhbWU6KSB3aXRoT2JqZWN0OltzZWxmIHdlYkZy
YW1lXV07CisjZW5kaWYKKyAgICAgICAgCisgICAgcmV0dXJuIHJldFZhbDsKIH0KIAogLSAodm9p
ZClfaW5zdGFsbApAQCAtMzI3LDYgKzM3Miw3IEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVj
dClmcmFtZQogICAgICAgICAvLyBOb3RlOiBXZSBhbHNvIGRvIHRoaXMgaW4gV2ViSGlzdG9yeUl0
ZW0ncyBpbml0IG1ldGhvZC4KICAgICAgICAgV2ViQ29yZTo6bm90aWZ5SGlzdG9yeUl0ZW1DaGFu
Z2VkID0gV0tOb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQ7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQog
Ly8gRklYTUU6IFJlbW92ZSB0aGUgTlNBcHBLaXRWZXJzaW9uTnVtYmVyV2l0aERlZmVycmVkV2lu
ZG93RGlzcGxheVN1cHBvcnQgY2hlY2sgb25jZQogLy8gb25jZSBBcHBLaXQncyBEZWZlcnJlZCBX
aW5kb3cgRGlzcGxheSBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KICNpZiAhZGVmaW5lZChOU0FwcEtp
dFZlcnNpb25OdW1iZXJXaXRoRGVmZXJyZWRXaW5kb3dEaXNwbGF5U3VwcG9ydCkKQEAgLTM0MSwx
MyArMzg3LDE4IEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZQogICAgICAgICBi
b29sIHRocm93RXhjZXB0aW9uc0ZvclJvdW5kVHdvID0gV2ViS2l0TGlua2VkT25PckFmdGVyKFdF
QktJVF9GSVJTVF9WRVJTSU9OX1dJVEhfUk9VTkRfVFdPX01BSU5fVEhSRUFEX0VYQ0VQVElPTlMp
OwogICAgICAgICBpZiAoIXRocm93RXhjZXB0aW9uc0ZvclJvdW5kVHdvKQogICAgICAgICAgICAg
c2V0RGVmYXVsdFRocmVhZFZpb2xhdGlvbkJlaGF2aW9yKExvZ09uRmlyc3RUaHJlYWRWaW9sYXRp
b24sIFRocmVhZFZpb2xhdGlvblJvdW5kVHdvKTsKKyNlbmRpZgogICAgIH0KIAogICAgIF9wcml2
YXRlID0gW1tXZWJGcmFtZVZpZXdQcml2YXRlIGFsbG9jXSBpbml0XTsKIAogICAgIFdlYkR5bmFt
aWNTY3JvbGxCYXJzVmlldyAqc2Nyb2xsVmlldyA9IFtbV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMC4wZiwgMC4wZiwgZnJhbWUuc2l6ZS53
aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpXTsKICAgICBfcHJpdmF0ZS0+ZnJhbWVTY3JvbGxWaWV3
ID0gc2Nyb2xsVmlldzsKKyNpZiBQTEFURk9STShJT1MpCisgICAgW3Njcm9sbFZpZXcgc2V0RGVs
ZWdhdGU6c2VsZl07CisjZWxzZQogICAgIFtzY3JvbGxWaWV3IHNldENvbnRlbnRWaWV3OltbW1dl
YkNsaXBWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzY3JvbGxWaWV3IGJvdW5kc11dIGF1dG9y
ZWxlYXNlXV07CisjZW5kaWYKICAgICBbc2Nyb2xsVmlldyBzZXREcmF3c0JhY2tncm91bmQ6Tk9d
OwogICAgIFtzY3JvbGxWaWV3IHNldEhhc1ZlcnRpY2FsU2Nyb2xsZXI6Tk9dOwogICAgIFtzY3Jv
bGxWaWV3IHNldEhhc0hvcml6b250YWxTY3JvbGxlcjpOT107CkBAIC0zODIsNiArNDMzLDE0IEBA
IC0gKHZvaWQpZmluYWxpemUKICAgICBbc3VwZXIgZmluYWxpemVdOwogfQogCisjaWYgUExBVEZP
Uk0oSU9TKQorLSAoQk9PTClzY3JvbGxWaWV3OihXQUtTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyBz
aG91bGRTY3JvbGxUb1BvaW50OihDR1BvaW50KXBvaW50Cit7CisgICAgV2ViVmlldyAqd2ViVmll
dyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICByZXR1cm4gW1t3ZWJWaWV3IF9VSUtpdERlbGVnYXRl
Rm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkU2Nyb2xsVG9Qb2ludDpwb2ludCBmb3JG
cmFtZTpfcHJpdmF0ZS0+d2ViRnJhbWVdOworfQorI2VuZGlmCisKIC0gKFdlYkZyYW1lICopd2Vi
RnJhbWUKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGJlbmVhdGggLVtOU1Zp
ZXcgZGVhbGxvY10gYWZ0ZXIgX3ByaXZhdGUgaGFzIGJlZW4gY2xlYXJlZC4KQEAgLTQ2MCwyMyAr
NTE5LDQwIEBAIC0gKEJPT0wpaXNPcGFxdWUKIAogLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJl
Y3QKIHsKLSAgICBpZiAoIVtzZWxmIGRvY3VtZW50Vmlld10pIHsKKyNpZiAhUExBVEZPUk0oSU9T
KQorICAgIGlmICghW3NlbGYgZG9jdW1lbnRWaWV3XSkKKyNlbHNlCisgICAgaWYgKCFbc2VsZiBk
b2N1bWVudFZpZXddIHx8IFtbc2VsZiBkb2N1bWVudFZpZXddIGZyYW1lXS5zaXplLmhlaWdodCA9
PSAwIHx8IFtbc2VsZiB3ZWJGcmFtZV0gX2lzQ29tbWl0dGluZ10pCisjZW5kaWYKKyAgICB7CiAg
ICAgICAgIC8vIE5lZWQgdG8gcGFpbnQgb3Vyc2VsdmVzIGlmIHRoZXJlJ3Mgbm8gZG9jdW1lbnRW
aWV3IHRvIGRvIGl0IGluc3RlYWQuCiAgICAgICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIGRyYXdz
QmFja2dyb3VuZF0pIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgW1tbc2VsZiBf
d2ViVmlld10gYmFja2dyb3VuZENvbG9yXSBzZXRdOwogICAgICAgICAgICAgTlNSZWN0RmlsbChy
ZWN0KTsKKyNlbHNlCisgICAgICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gV0tHZXRD
dXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgICAgICBzZXRTdHJva2VBbmRGaWxsQ29s
b3IoY2dDb250ZXh0LCBjYWNoZWRDR0NvbG9yKENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmlj
ZVJHQikpOworICAgICAgICAgICAgV0tSZWN0RmlsbChjZ0NvbnRleHQsIHJlY3QpOworI2VuZGlm
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgaWYgKFtb
c2VsZiBfc2Nyb2xsVmlld10gZHJhd3NCYWNrZ3JvdW5kXSkgeworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgICAgICBbW05TQ29sb3IgY3lhbkNvbG9yXSBzZXRdOwogICAgICAgICAgICAgTlNS
ZWN0RmlsbChyZWN0KTsKKyNlbHNlCisgICAgICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gV0tHZXRDdXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgICAgICBzZXRTdHJva2VB
bmRGaWxsQ29sb3IoY2dDb250ZXh0LCBjYWNoZWRDR0NvbG9yKENvbG9yOjpjeWFuLCBDb2xvclNw
YWNlRGV2aWNlUkdCKSk7CisgICAgICAgICAgICBXS1JlY3RGaWxsKGNnQ29udGV4dCwgcmVjdCk7
CisjZW5kaWYKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQogfQogCi0jaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAtIChCT09MKXdhbnRzVXBkYXRlTGF5
ZXIKIHsKICAgICByZXR1cm4gWUVTOwpAQCAtNzg5LDYgKzg2NSw5IEBAIC0gKHZvaWQpc2Nyb2xs
TGluZURvd246KGlkKXNlbmRlcgogCiAtIChCT09MKV9maXJzdFJlc3BvbmRlcklzRm9ybUNvbnRy
b2wKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIE5POworI2Vsc2UKICAgICBOU1Jl
c3BvbmRlciAqZmlyc3RSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl07
CiAgICAgCiAgICAgLy8gV2ViSFRNTFZpZXcgaXMgYW4gTlNDb250cm9sIHN1YmNsYXNzIHRoZXNl
IGRheXMsIGJ1dCBpdCdzIG5vdCBhIGZvcm0gY29udHJvbApAQCAtNzk2LDkgKzg3NSwzOCBAQCAt
IChCT09MKV9maXJzdFJlc3BvbmRlcklzRm9ybUNvbnRyb2wKICAgICAgICAgcmV0dXJuIE5POwog
ICAgIH0KICAgICByZXR1cm4gW2ZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TQ29udHJv
bCBjbGFzc11dOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShJT1MpCisvLyBVbmxpa2UgT1Mg
WCBXZWJLaXQsIG9uIGlPUywgdW5oYW5kbGVkIG1vdXNlIGV2ZW50cyBhcmUgZm9yd2FyZGVkIHRv
IGFsbG93IGZvciBzY3JvbGxpbmcuCisvLyBTaW5jZSBtb3VzZSBldmVudHMgd2VyZSBmb3J3YXJk
ZWQgdG8gdGhpcyBXZWJGcmFtZVZpZXcsIHRoaXMgbWVhbnMgdGhhdCB0aGUgc3Vidmlld3MgZGlk
bid0CisvLyBoYW5kbGUgdGhlIGV2ZW50LiBQYXNzIHRoZSBldmVudHMgdG8gdGhlIG5leHQgc2Ny
b2xsIHZpZXcuCistICh2b2lkKV9mb3J3YXJkTW91c2VFdmVudDooV2ViRXZlbnQgKilldmVudAor
eworICAgIFdBS1ZpZXcgKnN1cGVydmlldyA9IFtzZWxmIHN1cGVydmlld107CisgICAgaWYgKFtz
dXBlcnZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJEb2N1bWVudFZpZXcpXSkK
KyAgICAgICAgW1tbc3VwZXJ2aWV3IF93ZWJfcGFyZW50V2ViRnJhbWVWaWV3XSBfc2Nyb2xsVmll
d10gaGFuZGxlRXZlbnQ6ZXZlbnRdOworICAgIGVsc2UKKyAgICAgICAgW1tzZWxmIG5leHRSZXNw
b25kZXJdIGhhbmRsZUV2ZW50OmV2ZW50XTsKK30KKworLSAodm9pZCltb3VzZURvd246KFdlYkV2
ZW50ICopZXZlbnQKK3sKKyAgICBbc2VsZiBfZm9yd2FyZE1vdXNlRXZlbnQ6ZXZlbnRdOworfQor
CistICh2b2lkKW1vdXNlVXA6KFdlYkV2ZW50ICopZXZlbnQKK3sKKyAgICBbc2VsZiBfZm9yd2Fy
ZE1vdXNlRXZlbnQ6ZXZlbnRdOwogfQorI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAo
dm9pZClrZXlEb3duOihOU0V2ZW50ICopZXZlbnQKKyNlbHNlCistICh2b2lkKWtleURvd246KFdl
YkV2ZW50ICopZXZlbnQKKyNlbmRpZgogewogICAgIC8vIEltcGxlbWVudCBjb21tb24gYnJvd3Nl
ciBiZWhhdmlvcnMgZm9yIGFsbCBraW5kcyBvZiBjb250ZW50LgogCkBAIC04MDcsNyArOTE1LDEz
IEBAIC0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50CiAgICAgLy8gVGhpcyBkb2Vzbid0
IHdvcmsgYXV0b21hdGljYWxseSBiZWNhdXNlIG1vc3Qgb2YgdGhlIGtleXMgaGFuZGxlZCBoZXJl
IGFyZSB0cmFuc2xhdGVkIGludG8gbW92ZVhYWCBjb21tYW5kcywgd2hpY2ggYXJlIG5vdCBoYW5k
bGVkCiAgICAgLy8gYnkgRWRpdG9yIHdoZW4gZm9jdXMgaXMgbm90IGluIGVkaXRhYmxlIGNvbnRl
bnQuCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzID0gW2V2
ZW50IGNoYXJhY3RlcnNdOworICAgIGludCBtb2RpZmllckZsYWdzID0gW2V2ZW50IG1vZGlmaWVy
RmxhZ3NdOworI2Vsc2UKKyAgICBOU1N0cmluZyAqY2hhcmFjdGVycyA9IGV2ZW50LmNoYXJhY3Rl
cnM7CisgICAgaW50IG1vZGlmaWVyRmxhZ3MgPSBldmVudC5tb2RpZmllckZsYWdzOworI2VuZGlm
CiAgICAgaW50IGluZGV4LCBjb3VudDsKICAgICBCT09MIGNhbGxTdXBlciA9IFlFUzsKICAgICBG
cmFtZSogY29yZUZyYW1lID0gW3NlbGYgX3dlYl9mcmFtZV07CkBAIC04MjMsNyArOTM3LDcgQEAg
LSAodm9pZClrZXlEb3duOihOU0V2ZW50ICopZXZlbnQKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBvZGQgYmVoYXZpb3IgbWF0Y2hlcyBzb21lIGV4aXN0aW5nIGJy
b3dzZXJzLAogICAgICAgICAgICAgICAgIC8vIGluY2x1ZGluZyBXaW5kb3dzIElFCi0gICAgICAg
ICAgICAgICAgaWYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TU2hpZnRLZXlNYXNrKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyRmxhZ3MgJiBOU1NoaWZ0S2V5TWFzaykgewogICAg
ICAgICAgICAgICAgICAgICBbc2VsZiBfZ29Gb3J3YXJkXTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBbc2VsZiBfZ29CYWNrXTsKQEAgLTgzOCw3ICs5NTIs
NyBAQCAtICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAogICAgICAgICAgICAgICAgICAg
ICBjYWxsU3VwZXIgPSBZRVM7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNT
aGlmdEtleU1hc2spIHsKKyAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJGbGFncyAmIE5TU2hp
ZnRLZXlNYXNrKSB7CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNjcm9sbFBhZ2VVcDpuaWxd
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNj
cm9sbFBhZ2VEb3duOm5pbF07CkBAIC04NzksMTAgKzk5MywxMSBAQCAtICh2b2lkKWtleURvd246
KE5TRXZlbnQgKilldmVudAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBOU1VwQXJyb3dGdW5jdGlvbktleToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYW5k
bGUgc2hpZnRlZCBvciBjb250cm9sLWFycm93IGtleXMgaGVyZSwgc28gbGV0IHN1cGVyIGhhdmUg
YSBjaGFuY2UuCi0gICAgICAgICAgICAgICAgaWYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIChO
U1NoaWZ0S2V5TWFzayB8IE5TQ29udHJvbEtleU1hc2spKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1vZGlmaWVyRmxhZ3MgJiAoTlNTaGlmdEtleU1hc2sgfCBOU0NvbnRyb2xLZXlNYXNrKSkgewog
ICAgICAgICAgICAgICAgICAgICBjYWxsU3VwZXIgPSBZRVM7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAg
ICAgICAgIGlmICgoIVtzZWxmIGFsbG93c1Njcm9sbGluZ10gJiYgIVtzZWxmIF9sYXJnZXN0U2Ny
b2xsYWJsZUNoaWxkXSkgfHwKICAgICAgICAgICAgICAgICAgICAgW1tbc2VsZiB3aW5kb3ddIGZp
cnN0UmVzcG9uZGVyXSBpc0tpbmRPZkNsYXNzOltOU1BvcFVwQnV0dG9uIGNsYXNzXV0pIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gTGV0IGFycm93IGtleXMgZ28gdGhyb3VnaCB0byBwb3AgdXAg
YnV0dG9ucwpAQCAtODkxLDkgKzEwMDYsMTAgQEAgLSAodm9pZClrZXlEb3duOihOU0V2ZW50ICop
ZXZlbnQKICAgICAgICAgICAgICAgICAgICAgY2FsbFN1cGVyID0gWUVTOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFtl
dmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29tbWFuZEtleU1hc2spIHsKKyNlbmRpZgorICAgICAg
ICAgICAgICAgIGlmIChtb2RpZmllckZsYWdzICYgTlNDb21tYW5kS2V5TWFzaykgewogICAgICAg
ICAgICAgICAgICAgICBbc2VsZiBzY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnQ6bmlsXTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQWx0ZXJu
YXRlS2V5TWFzaykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kaWZpZXJGbGFncyAm
IE5TQWx0ZXJuYXRlS2V5TWFzaykgewogICAgICAgICAgICAgICAgICAgICBbc2VsZiBzY3JvbGxQ
YWdlVXA6bmlsXTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICBbc2VsZiBzY3JvbGxMaW5lVXA6bmlsXTsKQEAgLTkwMiwxMCArMTAxOCwxMSBAQCAtICh2b2lk
KWtleURvd246KE5TRXZlbnQgKilldmVudAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBOU0Rvd25BcnJvd0Z1bmN0aW9uS2V5OgogICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IGhhbmRsZSBzaGlmdGVkIG9yIGNvbnRyb2wtYXJyb3cga2V5cyBoZXJlLCBzbyBsZXQg
c3VwZXIgaGF2ZSBhIGNoYW5jZS4KLSAgICAgICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVy
RmxhZ3NdICYgKE5TU2hpZnRLZXlNYXNrIHwgTlNDb250cm9sS2V5TWFzaykpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobW9kaWZpZXJGbGFncyAmIChOU1NoaWZ0S2V5TWFzayB8IE5TQ29udHJvbEtl
eU1hc2spKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxTdXBlciA9IFlFUzsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQorI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgICAgICAgICAgaWYgKCghW3NlbGYgYWxsb3dzU2Nyb2xsaW5nXSAmJiAhW3NlbGYg
X2xhcmdlc3RTY3JvbGxhYmxlQ2hpbGRdKSB8fAogICAgICAgICAgICAgICAgICAgICBbW1tzZWxm
IHdpbmRvd10gZmlyc3RSZXNwb25kZXJdIGlzS2luZE9mQ2xhc3M6W05TUG9wVXBCdXR0b24gY2xh
c3NdXSkgewogICAgICAgICAgICAgICAgICAgICAvLyBMZXQgYXJyb3cga2V5cyBnbyB0aHJvdWdo
IHRvIHBvcCB1cCBidXR0b25zCkBAIC05MTQsOSArMTAzMSwxMCBAQCAtICh2b2lkKWtleURvd246
KE5TRXZlbnQgKilldmVudAogICAgICAgICAgICAgICAgICAgICBjYWxsU3VwZXIgPSBZRVM7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb21tYW5kS2V5TWFzaykgeworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyRmxhZ3MgJiBOU0NvbW1hbmRLZXlNYXNr
KSB7CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNjcm9sbFRvRW5kT2ZEb2N1bWVudDpuaWxd
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNB
bHRlcm5hdGVLZXlNYXNrKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RpZmllckZs
YWdzICYgTlNBbHRlcm5hdGVLZXlNYXNrKSB7CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNj
cm9sbFBhZ2VEb3duOm5pbF07CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgW3NlbGYgc2Nyb2xsTGluZURvd246bmlsXTsKQEAgLTkyNSwxMiArMTA0MywxMiBA
QCAtICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBOU0xlZnRBcnJvd0Z1bmN0aW9uS2V5OgogICAgICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGhhbmRsZSBzaGlmdGVkIG9yIGNvbnRyb2wtYXJyb3cga2V5cyBoZXJl
LCBzbyBsZXQgc3VwZXIgaGF2ZSBhIGNoYW5jZS4KLSAgICAgICAgICAgICAgICBpZiAoW2V2ZW50
IG1vZGlmaWVyRmxhZ3NdICYgKE5TU2hpZnRLZXlNYXNrIHwgTlNDb250cm9sS2V5TWFzaykpIHsK
KyAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJGbGFncyAmIChOU1NoaWZ0S2V5TWFzayB8IE5T
Q29udHJvbEtleU1hc2spKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxTdXBlciA9IFlFUzsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIC8vIENoZWNrIGJhY2svZm9yd2FyZCByZWxhdGVkIGtleXMuCi0gICAgICAgICAgICAg
ICAgaWYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29tbWFuZEtleU1hc2spIHsKKyAgICAg
ICAgICAgICAgICBpZiAobW9kaWZpZXJGbGFncyAmIE5TQ29tbWFuZEtleU1hc2spIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtYWludGFpbnNCYWNrRm9yd2FyZExpc3QpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxTdXBlciA9IFlFUzsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtOTQzLDcgKzEwNjEsNyBAQCAtICh2b2lkKWtleURvd246KE5TRXZlbnQgKill
dmVudAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNB
bHRlcm5hdGVLZXlNYXNrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllckZsYWdz
ICYgTlNBbHRlcm5hdGVLZXlNYXNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZiBf
cGFnZUhvcml6b250YWxseTpZRVNdOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgW3NlbGYgX3Njcm9sbExpbmVIb3Jpem9udGFsbHk6WUVTXTsK
QEAgLTk1MywxMiArMTA3MSwxMiBAQCAtICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBOU1JpZ2h0QXJyb3dGdW5j
dGlvbktleToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUgc2hpZnRlZCBvciBj
b250cm9sLWFycm93IGtleXMgaGVyZSwgc28gbGV0IHN1cGVyIGhhdmUgYSBjaGFuY2UuCi0gICAg
ICAgICAgICAgICAgaWYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIChOU1NoaWZ0S2V5TWFzayB8
IE5TQ29udHJvbEtleU1hc2spKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyRmxhZ3Mg
JiAoTlNTaGlmdEtleU1hc2sgfCBOU0NvbnRyb2xLZXlNYXNrKSkgewogICAgICAgICAgICAgICAg
ICAgICBjYWxsU3VwZXIgPSBZRVM7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBDaGVjayBiYWNrL2ZvcndhcmQgcmVsYXRl
ZCBrZXlzLgotICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0Nv
bW1hbmRLZXlNYXNrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyRmxhZ3MgJiBOU0Nv
bW1hbmRLZXlNYXNrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWFpbnRhaW5zQmFja0Zv
cndhcmRMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsU3VwZXIgPSBZRVM7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk3MSw3ICsxMDg5LDcgQEAgLSAodm9p
ZClrZXlEb3duOihOU0V2ZW50ICopZXZlbnQKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKFtldmVu
dCBtb2RpZmllckZsYWdzXSAmIE5TQWx0ZXJuYXRlS2V5TWFzaykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobW9kaWZpZXJGbGFncyAmIE5TQWx0ZXJuYXRlS2V5TWFzaykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgW3NlbGYgX3BhZ2VIb3Jpem9udGFsbHk6Tk9dOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYgX3Njcm9sbExp
bmVIb3Jpem9udGFsbHk6Tk9dOwpAQCAtOTk2LDYgKzExMTQsNyBAQCAtIChOU1ZpZXcgKilfd2Vi
Y29yZV9lZmZlY3RpdmVGaXJzdFJlc3BvbmRlcgogICAgIHJldHVybiB2aWV3ID8gW3ZpZXcgX3dl
YmNvcmVfZWZmZWN0aXZlRmlyc3RSZXNwb25kZXJdIDogW3N1cGVyIF93ZWJjb3JlX2VmZmVjdGl2
ZUZpcnN0UmVzcG9uZGVyXTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChCT09MKWNhblBy
aW50SGVhZGVyc0FuZEZvb3RlcnMKIHsKICAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbc2Vs
ZiBfc2Nyb2xsVmlld10gZG9jdW1lbnRWaWV3XTsKQEAgLTEwMTYsNiArMTEzNSw3IEBAIC0gKE5T
UHJpbnRPcGVyYXRpb24gKilwcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZv
ICopcHJpbnRJbmZvCiAgICAgfQogICAgIHJldHVybiBbTlNQcmludE9wZXJhdGlvbiBwcmludE9w
ZXJhdGlvbldpdGhWaWV3OmRvY3VtZW50VmlldyBwcmludEluZm86cHJpbnRJbmZvXTsKIH0KKyNl
bmRpZgogCiAtIChCT09MKWRvY3VtZW50Vmlld1Nob3VsZEhhbmRsZVByaW50CiB7CkBAIC0xMDQ1
LDggKzExNjUsMTIgQEAgLSAoZmxvYXQpX2FyZWEKIAogLSAoQk9PTClfaXNTY3JvbGxhYmxlCiB7
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgKnNjcm9s
bFZpZXcgPSBbc2VsZiBfc2Nyb2xsVmlld107CiAgICAgcmV0dXJuIFtzY3JvbGxWaWV3IGhvcml6
b250YWxTY3JvbGxpbmdBbGxvd2VkXSB8fCBbc2Nyb2xsVmlldyB2ZXJ0aWNhbFNjcm9sbGluZ0Fs
bG93ZWRdOworI2Vsc2UKKyAgICByZXR1cm4gW3NlbGYgX2hhc1Njcm9sbEJhcnNdOworI2VuZGlm
CiB9CiAKIC0gKFdlYkZyYW1lVmlldyAqKV9sYXJnZXN0U2Nyb2xsYWJsZUNoaWxkCkBAIC0xMTI1
LDYgKzEyNDksNyBAQCAtIChDbGFzcylfY3VzdG9tU2Nyb2xsVmlld0NsYXNzCiAgICAgcmV0dXJu
IFtfcHJpdmF0ZS0+ZnJhbWVTY3JvbGxWaWV3IGNsYXNzXTsKIH0KIAorI2lmICFQTEFURk9STShJ
T1MpCiAtICh2b2lkKV9zZXRDdXN0b21TY3JvbGxWaWV3Q2xhc3M6KENsYXNzKWN1c3RvbUNsYXNz
CiB7CiAgICAgaWYgKCFjdXN0b21DbGFzcykKQEAgLTExNjEsNSArMTI4Niw2IEBAIC0gKHZvaWQp
X3NldEN1c3RvbVNjcm9sbFZpZXdDbGFzczooQ2xhc3MpY3VzdG9tQ2xhc3MKICAgICBbb2xkU2Ny
b2xsVmlldyByZWxlYXNlXTsKICAgICBbZG9jdW1lbnRWaWV3IHJlbGVhc2VdOwogfQorI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAppbmRleCA0NTE5YjA0MTliNThjMjBhOGVi
YjhlOGNkMjlkOTUzOGY1Y2YwNTljLi4yZDZjZGM4NWFmNDJhNjhkMjlhYWM5OGIwZGZiNWI0NDY3
MTk3NDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpICYmICFQTEFURk9STShJT1MpCiAKICNpbXBvcnQgPFdlYkNvcmUv
SW50UG9pbnQuaD4KICNpbXBvcnQgPHd0Zi9Pd25QdHIuaD4KQEAgLTczLDQgKzczLDQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogLSAodm9pZCljbG9zZTsKIEBlbmQKIAotI2VuZGlmIC8vIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmICFQ
TEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxs
U2NyZWVuQ29udHJvbGxlci5tbQppbmRleCAyODVhNWU2M2RkMzU4YTBkZTI0NmRjODA1OTAyN2Zi
M2ExNmE5ZTUwLi43YTcyOTZlNGQ3MTJiYTk2MDUyZjg5NWM2MDY1Y2I3YTdjODAzMjVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xs
ZXIubW0KQEAgLTIzLDcgKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkgJiYgIVBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIuaCIKIApAQCAtNTc4LDQgKzU3OCw0IEBAIC0gKHZvaWQpX3N0YXJ0RXhpdEZ1bGxTY3Jl
ZW5BbmltYXRpb25XaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCiBAZW5kCiAK
IAotI2VuZGlmIC8qIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgKi8KKyNlbmRpZiAvKiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpICYmICFQTEFURk9STShJT1MpICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCmluZGV4IGQ5ODFjZjQ2ZGRm
MWJiZjE3ZTVhNzY0ZDhiZGMwYmQxYjMwYTM1ZmIuLjlkODkzNGFlZTk3NWViZmNiN2ZlMTJlNjE2
MWM2MzdlNjdiYmNhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFJlcHJlc2VudGF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFJlcHJlc2VudGF0aW9uLm1tCkBAIC0yNjYsNiArMjY2LDcgQEAgLSAoRE9NRG9jdW1lbnQg
KilET01Eb2N1bWVudAogICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1l
XSBET01Eb2N1bWVudF07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAoTlNBdHRyaWJ1dGVk
U3RyaW5nICopYXR0cmlidXRlZFRleHQKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50CkBAIC0y
NzYsNiArMjc3LDcgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0Zy
b206KERPTU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6KGkKIHsKICAgICByZXR1cm4gW1dl
YkhUTUxDb252ZXJ0ZXIgZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6UmFuZ2U6OmNy
ZWF0ZShjb3JlKHN0YXJ0Tm9kZSktPmRvY3VtZW50KCksIGNvcmUoc3RhcnROb2RlKSwgc3RhcnRP
ZmZzZXQsIGNvcmUoZW5kTm9kZSksIGVuZE9mZnNldCkuZ2V0KCldOwogfQorI2VuZGlmCiAKIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVu
dCAqZWxlbWVudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmlu
ZGV4IDM1ZDAxOTRkMjAyNTliZmE4ZjMzZTM2ZDg4MGZlMDQwOWZiOWYyZTYuLjg5YTQyZjM5ZDRh
YjNiZGI5MjBhNTA2MjE2OTMxYWIxZjU2MWZkOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQpAQCAtNzEsOCArNzEsNiBAQAogI2ltcG9ydCAiV2ViVHlwZXNJbnRl
cm5hbC5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKICNpbXBvcnQgIldlYlZp
ZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0eS5oPgotI2ltcG9y
dCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0NTU1N0eWxlRGVjbGFyYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkSW1h
Z2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaD4KQEAgLTEwNiw3
ICsxMDQsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jh
bmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmVuZGVyV2lkZ2V0Lmg+CkBAIC0xMzYsMTAgKzEzMywzNCBAQAogI2ltcG9ydCA8UXVhcnR6Q29y
ZS9RdWFydHpDb3JlLmg+CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCisjaW1wb3J0IDxB
cHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CisjaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0Fw
cGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1FdmVudEZhY3Rv
cnlNYWMuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiV2ViVUlLaXRE
ZWxlZ2F0ZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9LZXlFdmVudENvZGVzSU9TLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dB
S1Njcm9sbFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV0FLVmlld1ByaXZhdGUuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvV0FLV2luZG93Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkV2ZW50Lmg+Cisj
ZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAorI2lmIFBMQVRGT1JNKElPUykKK0BpbnRlcmZh
Y2UgTlNPYmplY3QgKEFjY2Vzc2liaWxpdHkpCistIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDoo
TlNQb2ludClwb2ludDsKKy0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50OworQGVu
ZAorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oSU9TKQogQGludGVyZmFjZSBXZWJNZW51VGFyZ2V0
IDogTlNPYmplY3QgewogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlciogX21lbnVD
b250cm9sbGVyOwogfQpAQCAtMjM2LDkgKzI1NywxMSBAQCBzdGF0aWMgQk9PTCBmb3JjZU5TVmll
d0hpdFRlc3Q7CiAKIC8vIGlmIFlFUywgZG8gdGhlICJ0b3AgV2ViSFRNTFZpZXciIGhpdCB0ZXN0
ICh3aGljaCB3ZSdkIGxpa2UgdG8gZG8gYWxsIHRoZSB0aW1lIGJ1dCBjYW4ndCBiZWNhdXNlIG9m
IEphdmEgcmVxdWlyZW1lbnRzIFtzZWUgYnVnIDQzNDk3MjFdKQogc3RhdGljIEJPT0wgZm9yY2VX
ZWJIVE1MVmlld0hpdFRlc3Q7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogc3RhdGljIFdl
YkhUTUxWaWV3ICpsYXN0SGl0VmlldzsKIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgYm9v
bCBuZWVkc0N1cnNvclJlY3RzU3VwcG9ydEF0UG9pbnQoTlNXaW5kb3cqIHdpbmRvdywgTlNQb2lu
dCBwb2ludCkKIHsKICAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBZRVM7CkBAIC0yNjksNiArMjky
LDcgQEAgc3RhdGljIHZvaWQgc2V0Q3Vyc29yKE5TV2luZG93ICpzZWxmLCBTRUwgY21kLCBOU1Bv
aW50IHBvaW50KQogICAgICAgICB3dGZDYWxsSU1QPGlkPihvbGRTZXRDdXJzb3JGb3JNb3VzZUxv
Y2F0aW9uSU1QLCBzZWxmLCBjbWQsIHBvaW50KTsKIH0KIAorI2VuZGlmCiAKIGV4dGVybiAiQyIg
ewogCkBAIC0yODIsMTYgKzMwNiwyMiBAQCBleHRlcm4gTlNTdHJpbmcgKk5TVGV4dElucHV0UmVw
bGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWU7CiBAaW50ZXJmYWNlIE5TVmlldyAoV2ViTlNWaWV3
RGV0YWlscykKIC0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09w
YWNpdHk6KE5TUmVjdClyZWN0IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0
SXNWaXNpYmxlUmVjdEZvclZpZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wp
dG9wVmlldzsKIC0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6
KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVjdDooTlNSZWN0KXZpc1JlY3Q7CisjaWYgIVBMQVRG
T1JNKElPUykKIC0gKHZvaWQpX3JlY3Vyc2l2ZTooQk9PTClyZWN1cnNlIGRpc3BsYXlSZWN0SWdu
b3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxheVJlY3QgaW5Db250ZXh0OihOU0dyYXBoaWNzQ29u
dGV4dCAqKWNvbnRleHQgdG9wVmlldzooQk9PTCl0b3BWaWV3OwogLSAodm9pZClfcmVjdXJzaXZl
OihCT09MKXJlY3Vyc2VYIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxh
eVJlY3QgaW5HcmFwaGljc0NvbnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0ICopZ3JhcGhpY3NDb250
ZXh0IENHQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eCB0b3BWaWV3OihCT09MKWlzVG9wVmlldyBz
aG91bGRDaGFuZ2VGb250UmVmZXJlbmNlQ29sb3I6KEJPT0wpc2hvdWxkQ2hhbmdlRm9udFJlZmVy
ZW5jZUNvbG9yOworI2VuZGlmCiAtIChOU1JlY3QpX2RpcnR5UmVjdDsKIC0gKHZvaWQpX3NldERy
YXdzT3duRGVzY2VuZGFudHM6KEJPT0wpZHJhd3NPd25EZXNjZW5kYW50czsKIC0gKEJPT0wpX2Ry
YXduQnlBbmNlc3RvcjsKIC0gKHZvaWQpX2ludmFsaWRhdGVHU3RhdGVzRm9yVHJlZTsKIC0gKHZv
aWQpX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9yczsKIC0gKHZvaWQpX3dpbmRv
d0NoYW5nZWRLZXlTdGF0ZTsKKyNpZiBQTEFURk9STShJT1MpCistICh2b2lkKWNlbnRlclNlbGVj
dGlvbkluVmlzaWJsZUFyZWE6KGlkKXNlbmRlcjsKKyNlbmRpZgogQGVuZAogCisjaWYgIVBMQVRG
T1JNKElPUykKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBzdGF0aWMgSU1QIG9s
ZFNldE5lZWRzRGlzcGxheUluUmVjdElNUDsKIApAQCAtMzQ0LDYgKzM3NCw3IEBAIEBlbmQKIEBp
bnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKFdlYk5TU3BlbGxDaGVja2VyRGV0YWlscykKIC0gKHZv
aWQpbGVhcm5Xb3JkOihOU1N0cmluZyAqKXdvcmQ7CiBAZW5kCisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKIAogLy8gQnkgaW1hZ2luZyB0byBhIHdpZHRoIGEgbGl0dGxlIHdpZGVyIHRoYW4gdGhl
IGF2YWlsYWJsZSBwaXhlbHMsCiAvLyB0aGluIHBhZ2VzIHdpbGwgYmUgc2NhbGVkIGRvd24gYSBs
aXR0bGUsIG1hdGNoaW5nIHRoZSB3YXkgdGhleQpAQCAtMzgxLDE0ICs0MTIsMjEgQEAgQGVuZAog
QGltcGxlbWVudGF0aW9uIFdlYkNvcmVTY3JvbGxWaWV3CiBAZW5kCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogLy8gV2UgbmVlZCB0aGlzIHRvIGJlIGFibGUgdG8gc2FmZWx5IHJlZmVyZW5jZSB0aGUg
Q2FjaGVkSW1hZ2UgZm9yIHRoZSBwcm9taXNlZCBkcmFnIGRhdGEKIHN0YXRpYyBDYWNoZWRJbWFn
ZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50KCkKIHsKICAgICBzdGF0aWMgQ2FjaGVkSW1hZ2VD
bGllbnQqIHN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50ID0gbmV3IENhY2hlZEltYWdlQ2xpZW50
OwogICAgIHJldHVybiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudDsKIH0KKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oSU9TKQorc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViTWFya2VkVGV4dFVw
ZGF0ZWROb3RpZmljYXRpb24gPSBAIldlYk1hcmtlZFRleHRVcGRhdGVkIjsKKyNlbmRpZgogCiBA
aW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKyNpZiAhUExB
VEZPUk0oSU9TKQogLSAoQk9PTClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5ICopcGF0aHM7
CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2Fy
ZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4
dCBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4dDsKIC0gKE5TU3RyaW5nICopX3Bs
YWluVGV4dEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwpAQCAtMzk3
LDIwICs0MzUsMjkgQEAgLSAodm9pZClfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwogLSAodm9pZClfcmVtb3ZlTW91c2VNb3ZlZE9ic2Vy
dmVyVW5jb25kaXRpb25hbGx5OwogLSAodm9pZClfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzOwog
LSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzOworI2VuZGlmCiAtIChCT09MKV9zaG91bGRJ
bnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RP
TVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9u
KWFjdGlvbjsKIC0gKEJPT0wpX3Nob3VsZEluc2VydFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBs
YWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2Vy
dEFjdGlvbilhY3Rpb247CiAtIChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6
KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247
CiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlOwogLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2U7CisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TVmlldyAqKV9o
aXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKIC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9u
V2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0
ZWJvYXJkICopcGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRT
dHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nOworI2VuZGlmCiAtIChET01SYW5nZSAqKV9kb2N1bWVu
dFJhbmdlOworI2lmICFQTEFURk9STShJT1MpCiAtICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDoo
TlNFdmVudCAqKWV2ZW50OworI2Vsc2UKKy0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihXZWJF
dmVudCAqKWV2ZW50OworI2VuZGlmCiAtIChXZWJIVE1MVmlldyAqKV90b3BIVE1MVmlldzsKIC0g
KEJPT0wpX2lzVG9wSFRNTFZpZXc7CisjaWYgIVBMQVRGT1JNKElPUykKIC0gKHZvaWQpX3dlYl9z
ZXRQcmludGluZ01vZGVSZWN1cnNpdmU7CiAtICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVj
dXJzaXZlQW5kQWRqdXN0Vmlld1NpemU7CiAtICh2b2lkKV93ZWJfY2xlYXJQcmludGluZ01vZGVS
ZWN1cnNpdmU7CisjZW5kaWYKIEBlbmQKIAogQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViSFRN
TFZpZXdUZXh0Q2hlY2tpbmdJbnRlcm5hbCkKQEAgLTQzNyw5ICs0ODQsMTIgQEAgQGVuZAogCiBA
aW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJGb3J3YXJkRGVjbGFyYXRpb24pIC8vIEZJWE1FOiBQ
dXQgdGhpcyBpbiBhIG5vcm1hbCBjYXRlZ29yeSBhbmQgc3RvcCBkb2luZyB0aGUgZm9yd2FyZCBk
ZWNsYXJhdGlvbiB0cmljay4KIC0gKHZvaWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5nIG1p
bmltdW1QYWdlTG9naWNhbFdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbG9naWNhbEhlaWdodDoo
ZmxvYXQpbWluUGFnZUhlaWdodCBvcmlnaW5hbFBhZ2VXaWR0aDooZmxvYXQpcGFnZUxvZ2ljYWxX
aWR0aCBvcmlnaW5hbFBhZ2VIZWlnaHQ6KGZsb2F0KXBhZ2VMb2dpY2FsSGVpZ2h0IG1heGltdW1T
aHJpbmtSYXRpbzooZmxvYXQpbWF4aW11bVNocmlua1JhdGlvIGFkanVzdFZpZXdTaXplOihCT09M
KWFkanVzdFZpZXdTaXplIHBhZ2luYXRlU2NyZWVuQ29udGVudDooQk9PTClwYWdpbmF0ZVNjcmVl
bkNvbnRlbnQ7CisjaWYgIVBMQVRGT1JNKElPUykKIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0
U3RhdGU7CisjZW5kaWYKIEBlbmQKIAorI2lmICFQTEFURk9STShJT1MpCiBAY2xhc3MgTlNUZXh0
SW5wdXRDb250ZXh0OwogQGludGVyZmFjZSBOU1Jlc3BvbmRlciAoQXBwS2l0RGV0YWlscykKIC0g
KE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dDsKQEAgLTQ0OSwxNCArNDk5LDI0IEBA
IEBpbnRlcmZhY2UgTlNPYmplY3QgKE5TVGV4dElucHV0Q29udGV4dERldGFpbHMpCiAtIChCT09M
KXdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50czsKIC0gKEJPT0wpaGFuZGxlTW91c2VFdmVudDooTlNF
dmVudCAqKWV2ZW50OwogQGVuZAorI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogQGludGVy
ZmFjZSBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0KSA8TlNUZXh0SW5wdXQ+Cisj
ZWxzZQorQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0KQorI2Vu
ZGlmCiAtICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXI7CisjaWYgUExBVEZP
Uk0oSU9TKQorLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3I7CisjZW5k
aWYKIEBlbmQKIAogQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRWRpdGluZ1N0eWxlU3VwcG9y
dCkKIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlTdHlsZTsKKyNpZiAhUExBVEZP
Uk0oSU9TKQogLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAqKWNvbG9yOwor
I2VuZGlmCiBAZW5kCiAKIEBpbnRlcmZhY2UgTlNWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5h
bCkKQEAgLTQ4MSwzMCArNTQxLDQyIEBAIEBwdWJsaWMKICAgICBCT09MIGlnbm9yaW5nTW91c2VE
cmFnZ2VkRXZlbnRzOwogICAgIEJPT0wgcHJpbnRpbmc7CiAgICAgQk9PTCBwYWdpbmF0ZVNjcmVl
bkNvbnRlbnQ7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBCT09MIG9ic2VydmluZ01vdXNlTW92
ZWROb3RpZmljYXRpb25zOwogICAgIEJPT0wgb2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9u
czsKICAgICBCT09MIG9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnM7CiAgICAgCiAgICAgaWQg
c2F2ZWRTdWJ2aWV3czsKICAgICBCT09MIHN1YnZpZXdzU2V0QXNpZGU7CisjZW5kaWYKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBOU1ZpZXcgKmxheWVySG9zdGluZ1Zp
ZXc7CiAgICAgQk9PTCBkcmF3aW5nSW50b0xheWVyOwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIE5TRXZlbnQgKm1vdXNlRG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5n
IHRoZSBldmVudC4KKyNlbHNlCisgICAgV2ViRXZlbnQgKm1vdXNlRG93bkV2ZW50OyAvLyBLZXB0
IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KKyNlbmRpZgogICAgIEJPT0wgaGFuZGxpbmdNb3Vz
ZURvd25FdmVudDsKKyNpZiAhUExBVEZPUk0oSU9TKSAgICAKICAgICBOU0V2ZW50ICprZXlEb3du
RXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgorI2Vsc2UKKyAgICBXZWJF
dmVudCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KKyNl
bmRpZgogCiAgICAgLy8gQSBXZWJIVE1MVmlldyBoYXMgYSBzaW5nbGUgaW5wdXQgY29udGV4dCwg
YnV0IHdlIHJldHVybiBuaWwgd2hlbiBpbiBub24tZWRpdGFibGUgY29udGVudCB0byBhdm9pZCBt
YWtpbmcgaW5wdXQgbWV0aG9kcyBkbyB0aGVpciB3b3JrLgogICAgIC8vIFRoaXMgc3RhdGUgaXMg
c2F2ZWQgZWFjaCB0aW1lIHNlbGVjdGlvbiBjaGFuZ2VzLCBiZWNhdXNlIGNvbXB1dGluZyBpdCBj
YXVzZXMgc3R5bGUgcmVjYWxjLCB3aGljaCBpcyBub3QgYWx3YXlzIHNhZmUgdG8gZG8uCiAgICAg
Qk9PTCBleHBvc2VJbnB1dENvbnRleHQ7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFRy
YWNrIHdoZXRoZXIgdGhlIHZpZXcgaGFzIHNldCBhIHNlY3VyZSBpbnB1dCBzdGF0ZS4KICAgICBC
T09MIGlzSW5TZWN1cmVJbnB1dFN0YXRlOwogCiAgICAgQk9PTCBfZm9yY2VVcGRhdGVTZWN1cmVJ
bnB1dFN0YXRlOworI2VuZGlmCiAKICAgICBOU1BvaW50IGxhc3RTY3JvbGxQb3NpdGlvbjsKICAg
ICBCT09MIGluU2Nyb2xsUG9zaXRpb25DaGFuZ2VkOwpAQCAtNTEyLDMwICs1ODQsNDIgQEAgQHB1
YmxpYwogICAgIFdlYlBsdWdpbkNvbnRyb2xsZXIgKnBsdWdpbkNvbnRyb2xsZXI7CiAgICAgCiAg
ICAgTlNTdHJpbmcgKnRvb2xUaXA7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1Rvb2xUaXBU
YWcgbGFzdFRvb2xUaXBUYWc7CisjZW5kaWYKICAgICBpZCB0cmFja2luZ1JlY3RPd25lcjsKICAg
ICB2b2lkICp0cmFja2luZ1JlY3RVc2VyRGF0YTsKICAgICAKICAgICBOU1RpbWVyICphdXRvc2Ny
b2xsVGltZXI7CisjaWYgIVBMQVRGT1JNKElPUykgICAgCiAgICAgTlNFdmVudCAqYXV0b3Njcm9s
bFRyaWdnZXJFdmVudDsKKyNlbHNlCisgICAgV2ViRXZlbnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZl
bnQ7CisjZW5kaWYKICAgICAKICAgICBOU0FycmF5ICpwYWdlUmVjdHM7CiAKICAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpoaWdobGlnaHRlcnM7CiAKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlciAqY29tcGxldGlvbkNvbnRyb2xsZXI7Cisj
ZW5kaWYKICAgICAKICAgICBCT09MIHRyYW5zcGFyZW50QmFja2dyb3VuZDsKIAogICAgIFdlYkhU
TUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogaW50ZXJwcmV0S2V5RXZlbnRzUGFy
YW1ldGVyczsKICAgICAKICAgICBXZWJEYXRhU291cmNlICpkYXRhU291cmNlOworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIHByb21pc2VkRHJhZ1RJRkZEYXRh
U291cmNlOworI2VuZGlmCiAKICAgICBTRUwgc2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9y
OwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1RyYWNraW5nQXJlYSAqdHJhY2tpbmdBcmVh
Rm9yTm9uS2V5V2luZG93OworI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgQk9PTCBlbnVt
ZXJhdGluZ1N1YnZpZXdzOwpAQCAtNTQ0LDYgKzYyOCw3IEBAIEBwdWJsaWMKIC0gKHZvaWQpY2xl
YXI7CiBAZW5kCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIE5TQ2VsbFN0YXRlVmFsdWUg
a2l0KFRyaVN0YXRlIHN0YXRlKQogewogICAgIHN3aXRjaCAoc3RhdGUpIHsKQEAgLTU1NywxNiAr
NjQyLDIwIEBAIHN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChUcmlTdGF0ZSBzdGF0ZSkKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKIH0KKyNlbmRp
ZgogCiBAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXdQcml2YXRlCiAKICsgKHZvaWQpaW5pdGlh
bGl6ZQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZFRvUHJvY2Vzc01haW5UaHJlYWQoKTsK
ICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKKyNlbmRpZgogICAgIFdlYkNv
cmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7CiAgICAgCisjaWYgIVBMQVRGT1JNKElP
UykKICAgICBpZiAoIW9sZFNldEN1cnNvckZvck1vdXNlTG9jYXRpb25JTVApIHsKICAgICAgICAg
TWV0aG9kIHNldEN1cnNvck1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtOU1dpbmRv
dyBjbGFzc10sIEBzZWxlY3Rvcihfc2V0Q3Vyc29yRm9yTW91c2VMb2NhdGlvbjopKTsKICAgICAg
ICAgQVNTRVJUKHNldEN1cnNvck1ldGhvZCk7CkBAIC01ODMsNiArNjcyLDcgQEAgKyAodm9pZClp
bml0aWFsaXplCiAgICAgfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IAorI2VuZGlmCiAKIH0KIApAQCAtNTk0LDE2ICs2ODQsMjcgQEAgLSAodm9pZClkZWFsbG9jCiAg
ICAgQVNTRVJUKCFhdXRvc2Nyb2xsVGltZXIpOwogICAgIEFTU0VSVCghYXV0b3Njcm9sbFRyaWdn
ZXJFdmVudCk7CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbbW91c2VEb3duRXZlbnQg
cmVsZWFzZV07CiAgICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKKyNlbHNlCisgICAgaWYgKG1v
dXNlRG93bkV2ZW50KQorICAgICAgICBDRlJlbGVhc2UgKG1vdXNlRG93bkV2ZW50KTsKKyAgICBp
ZiAoa2V5RG93bkV2ZW50KQorICAgICAgICBDRlJlbGVhc2Uoa2V5RG93bkV2ZW50KTsKKyNlbmRp
ZgogICAgIFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOwogICAgIFt0b29sVGlwIHJlbGVhc2Vd
OworI2lmICFQTEFURk9STShJT1MpCiAgICAgW2NvbXBsZXRpb25Db250cm9sbGVyIHJlbGVhc2Vd
OworI2VuZGlmCiAgICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07CiAgICAgW2hpZ2hsaWdodGVycyBy
ZWxlYXNlXTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFt0cmFja2luZ0FyZWFGb3JOb25LZXlX
aW5kb3cgcmVsZWFzZV07CiAgICAgaWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKQogICAg
ICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0
YUNsaWVudCgpKTsKKyNlbmRpZgogCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtNjEyLDM0
ICs3MTMsNTEgQEAgLSAodm9pZClmaW5hbGl6ZQogewogICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgp
OwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UpCiAgICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJv
bWlzZWREYXRhQ2xpZW50KCkpOworI2VuZGlmCiAKICAgICBbc3VwZXIgZmluYWxpemVdOwogfQog
CiAtICh2b2lkKWNsZWFyCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbbW91c2VEb3duRXZl
bnQgcmVsZWFzZV07CiAgICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKKyNlbHNlCisgICAgaWYg
KG1vdXNlRG93bkV2ZW50KQorICAgICAgICBDRlJlbGVhc2UobW91c2VEb3duRXZlbnQpOworICAg
IGlmIChrZXlEb3duRXZlbnQpCisgICAgICAgIENGUmVsZWFzZShrZXlEb3duRXZlbnQpOworI2Vu
ZGlmCiAgICAgW3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07CiAgICAgW3Rvb2xUaXAgcmVsZWFz
ZV07CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbY29tcGxldGlvbkNvbnRyb2xsZXIgcmVsZWFz
ZV07CisjZW5kaWYKICAgICBbZGF0YVNvdXJjZSByZWxlYXNlXTsKICAgICBbaGlnaGxpZ2h0ZXJz
IHJlbGVhc2VdOworI2lmICFQTEFURk9STShJT1MpCiAgICAgW3RyYWNraW5nQXJlYUZvck5vbktl
eVdpbmRvdyByZWxlYXNlXTsKICAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCiAg
ICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWRE
YXRhQ2xpZW50KCkpOworI2VuZGlmCiAKICAgICBtb3VzZURvd25FdmVudCA9IG5pbDsKICAgICBr
ZXlEb3duRXZlbnQgPSBuaWw7CiAgICAgcGx1Z2luQ29udHJvbGxlciA9IG5pbDsKICAgICB0b29s
VGlwID0gbmlsOworI2lmICFQTEFURk9STShJT1MpCiAgICAgY29tcGxldGlvbkNvbnRyb2xsZXIg
PSBuaWw7CisjZW5kaWYKICAgICBkYXRhU291cmNlID0gbmlsOwogICAgIGhpZ2hsaWdodGVycyA9
IG5pbDsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHRyYWNraW5nQXJlYUZvck5vbktleVdpbmRv
dyA9IG5pbDsKICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IDA7CisjZW5kaWYKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBsYXllckhvc3RpbmdWaWV3ID0g
bmlsOwpAQCAtNjU1LDYgKzc3Myw3IEBAIC0gKERPTVJhbmdlICopX2RvY3VtZW50UmFuZ2UKICAg
ICByZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBfZG9jdW1lbnRSYW5nZV07CiB9
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAoQk9PTClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0Fy
cmF5ICopcGF0aHMKIHsKICAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbcGF0aHMgb2Jq
ZWN0RW51bWVyYXRvcl07CkBAIC02NjgsNiArNzg3LDcgQEAgLSAoQk9PTClfaW1hZ2VFeGlzdHNB
dFBhdGhzOihOU0FycmF5ICopcGF0aHMKICAgICAKICAgICByZXR1cm4gTk87CiB9CisjZW5kaWYK
IAogLSAoV2ViRGF0YVNvdXJjZSAqKV9kYXRhU291cmNlCiB7CkBAIC02ODQsNiArODA0LDcgQEAg
LSAoV2ViRnJhbWVWaWV3ICopX2ZyYW1lVmlldwogICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRh
U291cmNlIHdlYkZyYW1lXSBmcmFtZVZpZXddOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczooTlNBcnJh
eSAqKXBhdGhzCiB7CiAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQ7CkBAIC05Mzks
NiArMTA2MCw3IEBAIC0gKHZvaWQpX3JlbW92ZVdpbmRvd09ic2VydmVycwogICAgIAogICAgIF9w
cml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zID0gZmFsc2U7CiB9CisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKIAogLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURv
Y3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKily
YW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KIHsKQEAgLTk3Miw2
ICsxMDk0LDcgQEAgLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UK
ICAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkRGVsZXRl
UmFuZ2UoY29yZShyYW5nZSkpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TVmlldyAq
KV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAogewogICAgIC8vIFVzdWFsbHksIHdl
IGhhY2sgQUsncyBoaXRUZXN0IG1ldGhvZCB0byBjYXRjaCBhbGwgZXZlbnRzIGF0IHRoZSB0b3Bt
b3N0IFdlYkhUTUxWaWV3LiAgCkBAIC05ODEsNyArMTEwNCw5IEBAIC0gKE5TVmlldyAqKV9oaXRW
aWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAogICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9IE5P
OyAgICAKICAgICByZXR1cm4gaGl0VmlldzsKIH0KKyNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElP
UykKIC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAq
KXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBjYWNoZWRBdHRy
aWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCiB7CiAg
ICAgLy8gUHV0IEhUTUwgb24gdGhlIHBhc3RlYm9hcmQuCkBAIC0xMDI1LDEwICsxMTUwLDE5IEBA
IC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5
cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0CiAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6bmls
IGZvclR5cGU6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwogICAgIH0KIH0KKyNlbmRpZiAvLyAh
UExBVEZPUk0oSU9TKQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKHZvaWQpX3NldE1vdXNlRG93
bkV2ZW50OihOU0V2ZW50ICopZXZlbnQKKyNlbHNlCistICh2b2lkKV9zZXRNb3VzZURvd25FdmVu
dDooV2ViRXZlbnQgKilldmVudAorI2VuZGlmCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBB
U1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2ZW50
IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJNb3Vz
ZURvd24pOworI2Vsc2UKKyAgICBBU1NFUlQoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZl
bnRNb3VzZURvd24pOworI2VuZGlmCiAKICAgICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPm1vdXNl
RG93bkV2ZW50KQogICAgICAgICByZXR1cm47CkBAIC0xMDUyLDYgKzExODYsNyBAQCAtIChCT09M
KV9pc1RvcEhUTUxWaWV3CiAgICAgcmV0dXJuIHNlbGYgPT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsK
IH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVj
dXJzaXZlCiB7CiAgICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZUxvZ2ljYWxX
aWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhl
aWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2luYXRlU2Ny
ZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07CkBAIC0xMTIwLDYg
KzEyNTUsNyBAQCAtICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0
Vmlld1NpemUKICAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwogI2VuZGlm
CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogQGVuZAogCkBAIC0xMTQ1LDYgKzEyODEs
MTYgQEAgKyAoTlNBcnJheSAqKXVuc3VwcG9ydGVkVGV4dE1JTUVUeXBlcwogICAgIHJldHVybiBb
V2ViSFRNTFJlcHJlc2VudGF0aW9uIHVuc3VwcG9ydGVkVGV4dE1JTUVUeXBlc107CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCistICh2b2lkKW1vdXNlTW92ZWQ6KFdlYkV2ZW50ICopZXZlbnQKK3sK
KyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmIChmcmFtZSkK
KyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlTW92ZWQoZXZlbnQpOworfQorI2Vu
ZGlmCisKKyNpZiAhUExBVEZPUk0oSU9TKQogKyAodm9pZClfcG9zdEZsYWdzQ2hhbmdlZEV2ZW50
OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQKIHsKICAgICAvLyBUaGlzIGlzIGEgd29ya2Fy
b3VuZCBmb3I6IDxyZGFyOi8vcHJvYmxlbS8yOTgxNjE5PiBOU1Jlc3BvbmRlcl9Qcml2YXRlIHNo
b3VsZCBpbmNsdWRlIG5vdGlmaWNhdGlvbiBmb3IgRmxhZ3NDaGFuZ2VkCkBAIC0xMTg4LDYgKzEz
MzQsNyBAQCAtICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50CiAKICAgICBbc2Vs
ZiBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OmZha2VFdmVudF07CiB9CisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKIAogLSAodm9pZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKIHsKQEAgLTEyMDQs
NyArMTM1MSw5IEBAIC0gKHZvaWQpX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBbX3ByaXZhdGUt
PmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107
CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzp3ZWJWaWV3IGRpZFNjcm9sbERvY3VtZW50SW5GcmFtZVZpZXc6W3NlbGYgX2Zy
YW1lVmlld11dOwogICAgIH0KQEAgLTEyMTMsNiArMTM2Miw3IEBAIC0gKHZvaWQpX2ZyYW1lT3JC
b3VuZHNDaGFuZ2VkCiAKIC0gKHZvaWQpX3NldEFzaWRlU3Vidmlld3MKIHsKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIEFTU0VSVCghX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwogICAgIEFT
U0VSVChfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3cyA9PSBuaWwpOwogICAgIF9wcml2YXRlLT5zYXZl
ZFN1YnZpZXdzID0gX3N1YnZpZXdzOwpAQCAtMTIyNywxMCArMTM3NywxMiBAQCAtICh2b2lkKV9z
ZXRBc2lkZVN1YnZpZXdzCiAgICAgX3N1YnZpZXdzID0gbmlsOwogI2VuZGlmICAgIAogICAgIF9w
cml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlID0gWUVTOworI2VuZGlmCiAgfQogIAogIC0gKHZvaWQp
X3Jlc3RvcmVTdWJ2aWV3cwogIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIEFTU0VSVChfcHJp
dmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewpAQCAtMTI0Niw2ICsxMzk4
LDcgQEAgLSAodm9pZClfc2V0QXNpZGVTdWJ2aWV3cwogI2VuZGlmICAgIAogICAgIF9wcml2YXRl
LT5zYXZlZFN1YnZpZXdzID0gbmlsOwogICAgIF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlID0g
Tk87CisjZW5kaWYKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTEyNjUsMTAgKzE0MTgsMTkgQEAg
LSAodm9pZCl2aWV3V2lsbERyYXcKICAgICAvLyBvbmNlIHRoZSBGSVhNRSBpbiBfaXNUb3BIVE1M
VmlldyBpcyBmaXhlZC4KICAgICBpZiAoX3ByaXZhdGUtPmRhdGFTb3VyY2UgJiYgW3NlbGYgX2lz
VG9wSFRNTFZpZXddKQogICAgICAgICBbc2VsZiBfd2ViX3VwZGF0ZUxheW91dEFuZFN0eWxlSWZO
ZWVkZWRSZWN1cnNpdmVdOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBj
b3JlVmlldyA9IGNvcmVGcmFtZS0+dmlldygpKQorICAgICAgICAgICAgY29yZVZpZXctPmZsdXNo
RGVmZXJyZWRSZXBhaW50cygpOworICAgIH0KKyNlbmRpZgorCiAgICAgW3N1cGVyIHZpZXdXaWxs
RHJhd107CiB9CiAKIAorI2lmICFQTEFURk9STShJT1MpCiAvLyBEb24ndCBsZXQgQXBwS2l0IGV2
ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJlIG9mIHRoYXQuCiAtICh2b2lkKV9yZWN1cnNp
dmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2li
bGVSZWN0OihCT09MKWlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1Zp
ZXcgKil2aXNpYmxlVmlldyB0b3BWaWV3OihCT09MKXRvcFZpZXcKIHsKQEAgLTEzNzAsMTIgKzE1
MzIsMTQgQEAgLSAodm9pZClfcmVjdXJzaXZlOihCT09MKXJlY3Vyc2VYIGRpc3BsYXlSZWN0SWdu
b3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxheVJlY3QKICAgICBpZiAoZGlkU2V0QXNpZGVTdWJ2
aWV3cykKICAgICAgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107CiB9CisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKIAogLSAoQk9PTClfaW5zaWRlQW5vdGhlckhUTUxWaWV3CiB7CiAgICAgcmV0
dXJuIHNlbGYgIT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiBzdGF0aWMgQk9PTCBpc1F1aWNrTG9va0V2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MApAQCAtMTM4NSw2ICsxNTQ5LDcg
QEAgc3RhdGljIEJPT0wgaXNRdWlja0xvb2tFdmVudChOU0V2ZW50ICpldmVudCkKICAgICByZXR1
cm4gTk87CiAjZW5kaWYKIH0KKyNlbmRpZgogCiAtIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50
KXBvaW50CiB7CkBAIC0xNDE1LDYgKzE1ODAsMjEgQEAgLSAoTlNWaWV3ICopaGl0VGVzdDooTlNQ
b2ludClwb2ludAogICAgIGlmIChfcHJpdmF0ZS0+Y2xvc2VkKQogICAgICAgICByZXR1cm4gbmls
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFByZXNlcnZlIDxyZGFyOi8vcHJvYmxlbS83
OTkyNDcyPiBiZWhhdmlvciBmb3IgdGhpcmQgcGFydHkgYXBwbGljYXRpb25zLiBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzg0NjM3MjU+LgorICAgIGlmICghV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJ
VF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfTVVMVElQTEVfSUZSQU1FX1RPVUNIX0VWRU5UX0RJU1BB
VENIKSkgeworICAgICAgICBXZWJFdmVudCAqZXZlbnQgPSBbV0FLV2luZG93IGN1cnJlbnRFdmVu
dF07CisgICAgICAgIGlmIChldmVudCAhPSBOVUxMICYmIGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRN
b3VzZURvd24gJiYgW3NlbGYgbW91c2U6cG9pbnQgaW5SZWN0OltzZWxmIGZyYW1lXV0pCisgICAg
ICAgICAgICByZXR1cm4gc2VsZjsKKyAgICAgICAgTlNWaWV3ICp2aWV3ID0gW3N1cGVyIGhpdFRl
c3Q6cG9pbnRdOworICAgICAgICAKKyAgICAgICAgLy8gRmluZCB0aGUgY2xpY2tlZCBkb2N1bWVu
dCB2aWV3CisgICAgICAgIHdoaWxlICh2aWV3ICYmICFbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6
QHByb3RvY29sKFdlYkRvY3VtZW50VmlldyldKQorICAgICAgICAgICAgdmlldyA9IFt2aWV3IHN1
cGVydmlld107CisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHZpZXc7CisgICAgfQorI2Vs
c2UKICAgICBCT09MIGNhcHR1cmVIaXRzT25TdWJ2aWV3czsKICAgICBpZiAoZm9yY2VOU1ZpZXdI
aXRUZXN0KQogICAgICAgICBjYXB0dXJlSGl0c09uU3Vidmlld3MgPSBOTzsKQEAgLTE0MzgsNiAr
MTYxOCw4IEBAIC0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKICNlbmRpZgogICAg
ICAgICByZXR1cm4gaGl0VmlldzsKICAgICB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwog
ICAgIGlmIChbW3NlbGYgc3VwZXJ2aWV3XSBtb3VzZTpwb2ludCBpblJlY3Q6W3NlbGYgZnJhbWVd
XSkKICAgICAgICAgcmV0dXJuIHNlbGY7CiAgICAgcmV0dXJuIG5pbDsKQEAgLTE0NDksNiArMTYz
MSw3IEBAIC0gKHZvaWQpX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGYKICAgICAgICAgbGFzdEhpdFZp
ZXcgPSBuaWw7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAoTlNUcmFja2luZ1JlY3RUYWcp
YWRkVHJhY2tpbmdSZWN0OihOU1JlY3QpcmVjdCBvd25lcjooaWQpb3duZXIgdXNlckRhdGE6KHZv
aWQgKilkYXRhIGFzc3VtZUluc2lkZTooQk9PTClhc3N1bWVJbnNpZGUKIHsKICAgICBBU1NFUlQo
X3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID09IG5pbCk7CkBAIC0xNTQwLDkgKzE3MjMsMTEg
QEAgLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWQKICAgICAgICAgdXNlckRhdGE6X3By
aXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhXTsKICAgICBbX3ByaXZhdGUtPnRyYWNraW5nUmVj
dE93bmVyIG1vdXNlRW50ZXJlZDpmYWtlRXZlbnRdOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKIC0gKHZvaWQpX3NldFRvb2xUaXA6KE5TU3RyaW5nICopc3RyaW5nCiB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBOU1N0cmluZyAqdG9vbFRpcCA9IFtzdHJpbmcgbGVuZ3RoXSA9PSAw
ID8gbmlsIDogc3RyaW5nOwogICAgIE5TU3RyaW5nICpvbGRUb29sVGlwID0gX3ByaXZhdGUtPnRv
b2xUaXA7CiAgICAgaWYgKCh0b29sVGlwID09IG5pbCB8fCBvbGRUb29sVGlwID09IG5pbCkgPyB0
b29sVGlwID09IG9sZFRvb2xUaXAgOiBbdG9vbFRpcCBpc0VxdWFsVG9TdHJpbmc6b2xkVG9vbFRp
cF0pIHsKQEAgLTE1NjAsOCArMTc0NSwxMCBAQCAtICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmlu
ZyAqKXN0cmluZwogICAgICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcgPSBbc2VsZiBhZGRU
b29sVGlwUmVjdDp3aWRlT3BlblJlY3Qgb3duZXI6c2VsZiB1c2VyRGF0YTpOVUxMXTsKICAgICAg
ICAgW3NlbGYgX3NlbmRUb29sVGlwTW91c2VFbnRlcmVkXTsKICAgICB9CisjZW5kaWYKIH0KIAor
I2lmICFQTEFURk9STShJT1MpCiAtIChOU1N0cmluZyAqKXZpZXc6KE5TVmlldyAqKXZpZXcgc3Ry
aW5nRm9yVG9vbFRpcDooTlNUb29sVGlwVGFnKXRhZyBwb2ludDooTlNQb2ludClwb2ludCB1c2Vy
RGF0YToodm9pZCAqKWRhdGEKIHsKICAgICByZXR1cm4gW1tfcHJpdmF0ZS0+dG9vbFRpcCBjb3B5
XSBhdXRvcmVsZWFzZV07CkBAIC0xNjgyLDEyICsxODY5LDM3IEBAIC0gKHZvaWQpX2hhbmRsZUF1
dG9zY3JvbGxGb3JNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAogICAgIFtzZWxmIGF1dG9z
Y3JvbGw6ZXZlbnRdOyAKICAgICBbc2VsZiBfc3RhcnRBdXRvc2Nyb2xsVGltZXI6ZXZlbnRdOyAK
IH0gCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogLSAoV2ViUGx1Z2luQ29udHJvbGxlciAq
KV9wbHVnaW5Db250cm9sbGVyCiB7CiAgICAgcmV0dXJuIF9wcml2YXRlLT5wbHVnaW5Db250cm9s
bGVyOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLy8gV0FLVmlldyBvdmVycmlkZS4KKy0gKHZv
aWQpbGF5b3V0SWZOZWVkZWQKK3sKKyAgICBbc2VsZiBfbGF5b3V0SWZOZWVkZWRdOworfQorCisv
LyBXQUtWaWV3IG92ZXJyaWRlLgorLSAodm9pZClzZXRTY2FsZTooZmxvYXQpc2NhbGUKK3sKKyAg
ICBbc3VwZXIgc2V0U2NhbGU6c2NhbGVdOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5zZXRQ
YWdlU2NhbGVGYWN0b3Ioc2NhbGUsIEludFBvaW50KCkpOworCisgICAgW1tzZWxmIF93ZWJWaWV3
XSBfZG9jdW1lbnRTY2FsZUNoYW5nZWRdOworfQorCisjZW5kaWYKKworI2lmICFQTEFURk9STShJ
T1MpCiAtICh2b2lkKV9sYXlvdXRGb3JQcmludGluZwogewogICAgIC8vIFNldCBwcmludGluZyBt
b2RlIHRlbXBvcmFyaWx5IHNvIHdlIGNhbiBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIHZpZXcuIFRo
aXMgd2lsbCBhbGxvdwpAQCAtMTY5Nyw3ICsxOTA5LDkgQEAgLSAodm9pZClfbGF5b3V0Rm9yUHJp
bnRpbmcKICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZp
ZXdTaXplXTsKICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKIH0K
KyNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKHZvaWQpX3NtYXJ0SW5zZXJ0Rm9yU3Ry
aW5nOihOU1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxhY2luZ1JhbmdlOihET01SYW5nZSAqKXJh
bmdlVG9SZXBsYWNlIGJlZm9yZVN0cmluZzooTlNTdHJpbmcgKiopYmVmb3JlU3RyaW5nIGFmdGVy
U3RyaW5nOihOU1N0cmluZyAqKilhZnRlclN0cmluZwogewogICAgIGlmICghcGFzdGVTdHJpbmcg
fHwgIXJhbmdlVG9SZXBsYWNlIHx8ICFbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZF0pIHsKQEAgLTE3MTcsNiArMTkzMSw5IEBAIC0gKEJPT0wpX2NhblNtYXJ0UmVwbGFj
ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiB9CiAKIC0gKHZvaWQp
X3N0YXJ0QXV0b3Njcm9sbFRpbWVyOihOU0V2ZW50ICopdHJpZ2dlckV2ZW50CisjZWxzZQorLSAo
dm9pZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6IChXZWJFdmVudCAqKXRyaWdnZXJFdmVudAorI2Vu
ZGlmCiB7CiAgICAgaWYgKF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPT0gbmlsKSB7CiAgICAg
ICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGltZXJX
aXRoVGltZUludGVydmFsOkFVVE9TQ1JPTExfSU5URVJWQUwKQEAgLTE3MzYsNyArMTk1MywxMiBA
QCAtICh2b2lkKV9zdG9wQXV0b3Njcm9sbFRpbWVyCiB7CiAgICAgTlNUaW1lciAqdGltZXIgPSBf
cHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyOwogICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIg
PSBuaWw7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmln
Z2VyRXZlbnQgcmVsZWFzZV07CisjZWxzZQorICAgIGlmIChfcHJpdmF0ZS0+YXV0b3Njcm9sbFRy
aWdnZXJFdmVudCkKKyAgICAgICAgQ0ZSZWxlYXNlIChfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdn
ZXJFdmVudCk7CisjZW5kaWYKICAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCA9
IG5pbDsKICAgICBbdGltZXIgaW52YWxpZGF0ZV07CiAgICAgW3RpbWVyIHJlbGVhc2VdOwpAQCAt
MTc0NiwxMiArMTk2OCwxNyBAQCAtICh2b2lkKV9hdXRvc2Nyb2xsCiB7CiAgICAgLy8gR3VhcmFu
dGVlIHRoYXQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaXMgaW52YWxpZGF0ZWQsIGV2ZW4gaWYgd2Ug
ZG9uJ3QgcmVjZWl2ZQogICAgIC8vIGEgbW91c2UgdXAgZXZlbnQuCisjaWYgIVBMQVRGT1JNKElP
UykKICAgICBCT09MIGlzU3RpbGxEb3duID0gQ0dFdmVudFNvdXJjZUJ1dHRvblN0YXRlKGtDR0V2
ZW50U291cmNlU3RhdGVDb21iaW5lZFNlc3Npb25TdGF0ZSwga0NHTW91c2VCdXR0b25MZWZ0KTsg
ICAKKyNlbHNlCisgICAgQk9PTCBpc1N0aWxsRG93biA9IE5POworI2VuZGlmCiAgICAgaWYgKCFp
c1N0aWxsRG93bil7CiAgICAgICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCiAgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91
c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlRHJhZ2dlZApAQCAtMTc2Myw2ICsxOTkwLDcgQEAg
LSAodm9pZClfYXV0b3Njcm9sbAogICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBw
cmVzc3VyZTowXTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKICAgICBbc2VsZiBtb3Vz
ZURyYWdnZWQ6ZmFrZUV2ZW50XTsKKyNlbmRpZgogfQogCiAtIChCT09MKV9jYW5FZGl0CkBAIC0x
ODE2LDYgKzIwNDQsNyBAQCAtICh2b2lkKV9zZXRUcmFuc3BhcmVudEJhY2tncm91bmQ6KEJPT0wp
ZgogICAgIF9wcml2YXRlLT50cmFuc3BhcmVudEJhY2tncm91bmQgPSBmOwogfQogCisjaWYgIVBM
QVRGT1JNKElPUykKIC0gKE5TSW1hZ2UgKilfc2VsZWN0aW9uRHJhZ2dpbmdJbWFnZQogewogICAg
IGlmICghW3NlbGYgX2hhc1NlbGVjdGlvbl0pCkBAIC0xODM1LDYgKzIwNjQsNyBAQCAtIChOU1Jl
Y3QpX3NlbGVjdGlvbkRyYWdnaW5nUmVjdAogICAgIC8vIE1haWwgY3VycmVudGx5IGNhbGxzIHRo
aXMgbWV0aG9kLiBXZSBjYW4gZWxpbWluYXRlIGl0IHdoZW4gTWFpbCBubyBsb25nZXIgY2FsbHMg
aXQuCiAgICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RdOwogfQorI2VuZGlmCiAKIC0gKERP
TU5vZGUgKilfaW5zZXJ0T3JkZXJlZExpc3QKIHsKQEAgLTE4OTcsNiArMjEyNyw3IEBAIC0gKHZv
aWQpX3JlbW92ZUhpZ2hsaWdodGVyT2ZUeXBlOihOU1N0cmluZyopdHlwZQogICAgIFtfcHJpdmF0
ZS0+aGlnaGxpZ2h0ZXJzIHJlbW92ZU9iamVjdEZvcktleTp0eXBlXTsKIH0KIAorI2lmICFQTEFU
Rk9STShJT1MpCiAtICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZAogewogICAgIEFTU0VSVChbc2VsZiBfaGFzU2VsZWN0aW9uXSk7CkBA
IC0xOTE1LDYgKzIxNDYsNyBAQCAtICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogICAgIFtzZWxmIF93cml0ZVNlbGVjdGlvbldpdGhQ
YXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgY2FjaGVkQXR0cmli
dXRlZFN0cmluZzphdHRyaWJ1dGVkU3RyaW5nXTsKICAgICBbbXV0YWJsZVR5cGVzIHJlbGVhc2Vd
OwogfQorI2VuZGlmCiAKIC0gKHZvaWQpY2xvc2UKIHsKQEAgLTE5MjYsMTEgKzIxNTgsMTQgQEAg
LSAodm9pZCljbG9zZQogICAgIF9wcml2YXRlLT5jbG9zZWQgPSBZRVM7CiAKICAgICBbc2VsZiBf
Y2xlYXJMYXN0SGl0Vmlld0lmU2VsZl07CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbc2VsZiBf
cmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKICAgICBbc2VsZiBfcmVt
b3ZlV2luZG93T2JzZXJ2ZXJzXTsKICAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJz
XTsKKyNlbmRpZgogICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBkZXN0cm95QWxsUGx1
Z2luc107CiAgICAgW19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyIHNldERhdGFTb3VyY2U6bmls
XTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIHJlbW92ZSB0b29sdGlwcyBiZWZvcmUgY2xl
YXJpbmcgX3ByaXZhdGUgc28gcmVtb3ZlVHJhY2tpbmdSZWN0OiB3aWxsIHdvcmsgY29ycmVjdGx5
CiAgICAgW3NlbGYgcmVtb3ZlQWxsVG9vbFRpcHNdOwogCkBAIC0xOTM4LDYgKzIxNzMsNyBAQCAt
ICh2b2lkKWNsb3NlCiAgICAgICAgIERpc2FibGVTZWN1cmVFdmVudElucHV0KCk7CiAgICAgICAg
IF9wcml2YXRlLT5pc0luU2VjdXJlSW5wdXRTdGF0ZSA9IE5POwogICAgIH0KKyNlbmRpZgogCiAg
ICAgW19wcml2YXRlIGNsZWFyXTsKIH0KQEAgLTE5NTEsNiArMjE4Nyw3IEBAIC0gKEJPT0wpX2hh
c0hUTUxEb2N1bWVudAogICAgIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNIVE1MRG9j
dW1lbnQoKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
clR5cGU6KE5TU3RyaW5nICopcGJvYXJkVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dApAQCAtMjA3
Nyw2ICsyMzE0LDcgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm8KICAgICB9CiAgICAgcmV0dXJu
IG5pbDsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpIAogLSAodm9pZClfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVn
aW5zIApAQCAtMjI0MCwxMiArMjQ3OCwyMiBAQCAtIChDR0Zsb2F0KV9hZGp1c3RlZEJvdHRvbU9m
UGFnZVdpdGhUb3A6KENHRmxvYXQpdG9wIGJvdHRvbTooQ0dGbG9hdClib3R0b20gbGltaQogICAg
ICAgICByZXR1cm4gbmV3Qm90dG9tOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAoaWQpYWNj
ZXNzaWJpbGl0eVJvb3RFbGVtZW50Cit7CisgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIGFjY2Vz
c2liaWxpdHlSb290XTsKK30KKyNlbmRpZgorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBOU1Zp
ZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQogCiAtICh2b2lkKV93ZWJfYWRkRGVzY2VuZGFu
dFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5TTXV0YWJsZUFycmF5ICopYXJyYXkKIHsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgTlNBcnJheSogX3N1YnZpZXdzID0gW3NlbGYgc3Vidmlld3NdOworI2Vu
ZGlmCiAgICAgdW5zaWduZWQgY291bnQgPSBbX3N1YnZpZXdzIGNvdW50XTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBOU1ZpZXcgKmNoaWxkID0g
W19zdWJ2aWV3cyBvYmplY3RBdEluZGV4OmldOwpAQCAtMjI3NCwxMSArMjUyMiwxMyBAQCBAaW1w
bGVtZW50YXRpb24gV2ViSFRNTFZpZXcKIAogKyAodm9pZClpbml0aWFsaXplCiB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBbTlNBcHAgcmVnaXN0ZXJTZXJ2aWNlc01lbnVTZW5kVHlwZXM6W1tz
ZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXSAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuVHlwZXM6W1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9h
cmRUeXBlc11dOwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5p
dGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6aW5p
dGlhbGl6ZU1haW5SdW5Mb29wKCk7CisjZW5kaWYKICAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25N
YWluVGhyZWFkKHNlbGYpOwogfQogCkBAIC0yMjg4LDcgKzI1MzgsOSBAQCAtIChpZClpbml0V2l0
aEZyYW1lOihOU1JlY3QpZnJhbWUKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbc2VsZiBzZXRGb2N1c1JpbmdUeXBlOk5T
Rm9jdXNSaW5nVHlwZU5vbmVdOworI2VuZGlmCiAgICAgCiAgICAgLy8gTWFrZSBhbGwgZHJhd2lu
ZyBnbyB0aHJvdWdoIHVzIGluc3RlYWQgb2Ygc3Vidmlld3MuCiAgICAgW3NlbGYgX3NldERyYXdz
T3duRGVzY2VuZGFudHM6WUVTXTsKQEAgLTIyOTYsNiArMjU0OCwxMSBAQCAtIChpZClpbml0V2l0
aEZyYW1lOihOU1JlY3QpZnJhbWUKICAgICBfcHJpdmF0ZSA9IFtbV2ViSFRNTFZpZXdQcml2YXRl
IGFsbG9jXSBpbml0XTsKIAogICAgIF9wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyID0gW1tXZWJQ
bHVnaW5Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aERvY3VtZW50VmlldzpzZWxmXTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSAK
KyAgICAgICAgICAgIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKG1hcmtlZFRl
eHRVcGRhdGU6KSAKKyAgICAgICAgICAgICAgICAgICBuYW1lOldlYk1hcmtlZFRleHRVcGRhdGVk
Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIHNlbGY7
CiB9CkBAIC0yMzA1LDYgKzI1NjIsMTAgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgaWYgKFdlYkNv
cmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtXZWJIVE1MVmlldyBjbGFzc10s
IHNlbGYpKQogICAgICAgICByZXR1cm47CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6
V2ViTWFya2VkVGV4dFVwZGF0ZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisjZW5kaWYKKwog
ICAgIC8vIFdlIGNhbid0IGFzc2VydCB0aGF0IGNsb3NlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVk
IGJlY2F1c2UKICAgICAvLyB0aGlzIHZpZXcgY2FuIGJlIHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVy
dmlldywgZXZlbiB0aG91Z2gKICAgICAvLyBpdCBjb3VsZCBiZSBuZWVkZWQgbGF0ZXIsIHNvIGNs
b3NlIGlmIG5lZWRlZC4KQEAgLTI1MDUsMTAgKzI3NjYsMTggQEAgV0VCQ09SRV9DT01NQU5EKHVu
c2NyaXB0KQogV0VCQ09SRV9DT01NQU5EKHlhbmspCiBXRUJDT1JFX0NPTU1BTkQoeWFua0FuZFNl
bGVjdCkKIAorI2lmIFBMQVRGT1JNKElPUykKK1dFQkNPUkVfQ09NTUFORChjbGVhclRleHQpCitX
RUJDT1JFX0NPTU1BTkQodG9nZ2xlQm9sZCkKK1dFQkNPUkVfQ09NTUFORCh0b2dnbGVJdGFsaWMp
CitXRUJDT1JFX0NPTU1BTkQodG9nZ2xlVW5kZXJsaW5lKQorI2VuZGlmCisKICN1bmRlZiBXRUJD
T1JFX0NPTU1BTkQKIAogI2RlZmluZSBDT01NQU5EX1BST0xPR1VFIGlmIChbc2VsZiBjYWxsRGVs
ZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6X2NtZF0pIHJldHVybjsKIAorI2lmICFQ
TEFURk9STShJT1MpCiAtIChJQkFjdGlvbil0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KGlk
KXNlbmRlcgogewogICAgIENPTU1BTkRfUFJPTE9HVUUKQEAgLTI1NDMsNiArMjgxMiw3IEBAIC0g
KGlkKXZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6KE5TU3RyaW5nICopc2VuZFR5cGUgcmV0dXJu
VHlwZTooTlNTdHJpbmcgKilyZXR1CiAgICAgICAgIHJldHVybiBzZWxmOwogICAgIHJldHVybiBb
W3NlbGYgbmV4dFJlc3BvbmRlcl0gdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTpzZW5kVHlwZSBy
ZXR1cm5UeXBlOnJldHVyblR5cGVdOwogfQorI2VuZGlmCiAKIC8vIGp1bXBUb1NlbGVjdGlvbiBp
cyB0aGUgb2xkIG5hbWUgZm9yIHdoYXQgQXBwS2l0IG5vdyBjYWxscyBjZW50ZXJTZWxlY3Rpb25J
blZpc2libGVBcmVhLiBTYWZhcmkKIC8vIHdhcyB1c2luZyB0aGUgb2xkIGp1bXBUb1NlbGVjdGlv
biBzZWxlY3RvciBpbiBpdHMgbWVudS4gTmV3ZXIgdmVyc2lvbnMgb2YgU2FmYXJpIHdpbGwgdXNl
IHRoZQpAQCAtMjU1Nyw2ICsyODI3LDcgQEAgLSAodm9pZClqdW1wVG9TZWxlY3Rpb246KGlkKXNl
bmRlcgogICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxO
U1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCiB7CiAgICAgU0VMIGFjdGlvbiA9IFtp
dGVtIGFjdGlvbl07CkBAIC0yNzU0LDYgKzMwMjUsNyBAQCAtIChCT09MKXZhbGlkYXRlVXNlcklu
dGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCiAgICAg
Qk9PTCByZXN1bHQgPSBbc2VsZiB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVn
YXRlOml0ZW1dOwogICAgIHJldHVybiBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4ocmVz
dWx0LCBbc2VsZiBfd2ViVmlld10sIEBzZWxlY3Rvcih3ZWJWaWV3OnZhbGlkYXRlVXNlckludGVy
ZmFjZUl0ZW06ZGVmYXVsdFZhbGlkYXRpb246KSwgaXRlbSwgcmVzdWx0KTsKIH0KKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogCiAtIChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgogewpAQCAt
Mjc2MSwxMiArMzAzMywyMCBAQCAtIChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgogICAgIC8v
IFdlIGhhdmUgdG8gcGFzcyB0aGUgZXZlbnQgZG93biB0aHJvdWdoIFdlYkNvcmUgZmlyc3QgdG8g
YmUgc3VyZSB3ZSBkb24ndCBoaXQgYSBzdWJ2aWV3LgogICAgIC8vIERvIGFjY2VwdCBmaXJzdCBy
ZXNwb25kZXIgYXQgYW55IG90aGVyIHRpbWUsIGZvciBleGFtcGxlIGZyb20ga2V5Ym9hcmQgZXZl
bnRzLAogICAgIC8vIG9yIGZyb20gY2FsbHMgYmFjayBmcm9tIFdlYkNvcmUgb25jZSB3ZSBiZWdp
biBtb3VzZS1kb3duIGV2ZW50IGhhbmRsaW5nLgorI2lmICFQTEFURk9STShJT1MpICAgICAgICAg
ICAgCiAgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKICAgICBpZiAo
W2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93bgogICAgICAgICAgICAgJiYgIV9wcml2YXRl
LT5oYW5kbGluZ01vdXNlRG93bkV2ZW50CiAgICAgICAgICAgICAmJiBOU1BvaW50SW5SZWN0KFtl
dmVudCBsb2NhdGlvbkluV2luZG93XSwgW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgdmlzaWJsZVJl
Y3RdIHRvVmlldzpuaWxdKSkgewogICAgICAgICByZXR1cm4gTk87CiAgICAgfQorI2Vsc2UKKyAg
ICBXZWJFdmVudCAqZXZlbnQgPSBbV0FLV2luZG93IGN1cnJlbnRFdmVudF07CisgICAgaWYgKGV2
ZW50ICYmIGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRNb3VzZURvd24KKyAgICAgICAgICAgICYmICFf
cHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudAorICAgICAgICAgICAgJiYgTlNQb2ludElu
UmVjdChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIHZp
c2libGVSZWN0XSB0b1ZpZXc6bmlsXSkpCisgICAgICAgIHJldHVybiBOTzsKKyNlbmRpZgogICAg
IHJldHVybiBZRVM7CiB9CiAKQEAgLTI4MDgsNiArMzA4OCw3IEBAIC0gKEJPT0wpbWFpbnRhaW5z
SW5hY3RpdmVTZWxlY3Rpb24KICAgICByZXR1cm4gc2VsZWN0aW9uSXNFZGl0YWJsZSAmJiBuZXh0
UmVzcG9uZGVySXNJbldlYlZpZXc7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClh
ZGRNb3VzZU1vdmVkT2JzZXJ2ZXIKIHsKICAgICBpZiAoIV9wcml2YXRlLT5kYXRhU291cmNlIHx8
ICFbc2VsZiBfaXNUb3BIVE1MVmlld10gfHwgX3ByaXZhdGUtPm9ic2VydmluZ01vdXNlTW92ZWRO
b3RpZmljYXRpb25zKQpAQCAtMjkwMyw2ICszMTg0LDcgQEAgLSAodm9pZCl2aWV3RGlkTW92ZVRv
U3VwZXJ2aWV3CiAgICAgfQogI2VuZGlmCiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
LSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKIHsKQEAgLTI5
MTMsMTAgKzMxOTUsMTIgQEAgLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cg
Kil3aW5kb3cKICAgICBpZiAoIV9wcml2YXRlKQogICAgICAgICByZXR1cm47CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIC8vIEZJWE1FOiBTb21lIG9mIHRoZXNlIGNhbGxzIG1heSBub3Qgd29y
ayBiZWNhdXNlIHRoaXMgdmlldyBtYXkgYmUgYWxyZWFkeSByZW1vdmVkIGZyb20gaXQncyBzdXBl
cnZpZXcuCiAgICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxs
eV07CiAgICAgW3NlbGYgX3JlbW92ZVdpbmRvd09ic2VydmVyc107CiAgICAgW3NlbGYgX3JlbW92
ZVN1cGVydmlld09ic2VydmVyc107CisjZW5kaWYKIAogICAgIC8vIEZJWE1FOiBUaGlzIGFjY29t
cGxpc2hlcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUgY2FsbCB0byBzZXRDYW5TdGFydE1lZGlhKGZh
bHNlKSBpbgogICAgIC8vIFdlYlZpZXcuIEl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHNpbmds
ZSBtZWNoYW5pc20gaW5zdGVhZCBvZiB0d28uCkBAIC0yOTM1LDkgKzMyMTksMTEgQEAgLSAodm9p
ZCl2aWV3RGlkTW92ZVRvV2luZG93CiAgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwog
ICAgIGlmIChbc2VsZiB3aW5kb3ddKSB7CiAgICAgICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9z
aXRpb24gPSBbW3NlbGYgc3VwZXJ2aWV3XSBib3VuZHNdLm9yaWdpbjsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgICAgICBbc2VsZiBhZGRXaW5kb3dPYnNlcnZlcnNdOwogICAgICAgICBbc2VsZiBh
ZGRTdXBlcnZpZXdPYnNlcnZlcnNdOwogICAgICAgICBbc2VsZiBhZGRNb3VzZU1vdmVkT2JzZXJ2
ZXJdOworI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgYWNjb21wbGlzaGVzIHRoZSBz
YW1lIHRoaW5nIGFzIHRoZSBjYWxsIHRvIHNldENhblN0YXJ0TWVkaWEodHJ1ZSkgaW4KICAgICAg
ICAgLy8gV2ViVmlldy4gSXQgd291bGQgYmUgbmljZSB0byBoYXZlIGEgc2luZ2xlIG1lY2hhbmlz
bSBpbnN0ZWFkIG9mIHR3by4KQEAgLTI5NjYsMTIgKzMyNTIsMTYgQEAgLSAodm9pZClfd2ViX21h
a2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6
KGlkKW9iamUKIAogLSAodm9pZCl2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KE5TV2luZG93ICop
aG9zdFdpbmRvdwogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgW3NlbGYgX3dlYl9tYWtlUGx1
Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdXaWxsTW92ZVRvSG9zdFdp
bmRvdzopIHdpdGhPYmplY3Q6aG9zdFdpbmRvd107CisjZW5kaWYKIH0KIAogLSAodm9pZCl2aWV3
RGlkTW92ZVRvSG9zdFdpbmRvdwogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgW3NlbGYgX3dl
Yl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdEaWRNb3Zl
VG9Ib3N0V2luZG93KSB3aXRoT2JqZWN0Om5pbF07CisjZW5kaWYKIH0KIAogCkBAIC0yOTc5LDgg
KzMyNjksMTUgQEAgLSAodm9pZClhZGRTdWJ2aWV3OihOU1ZpZXcgKil2aWV3CiB7CiAgICAgW3N1
cGVyIGFkZFN1YnZpZXc6dmlld107CiAKLSAgICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQ
bHVnSW5WaWV3OnZpZXddKQorICAgIGlmIChbV2ViUGx1Z2luQ29udHJvbGxlciBpc1BsdWdJblZp
ZXc6dmlld10pIHsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgV2ViVmlldyAqd2ViVmll
dyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICAgICAgW1t3ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9y
d2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgd2lsbEFkZFBsdWdJblZpZXc6dmlld107CisjZW5kaWYK
KwogICAgICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGFkZFBsdWdpbjp2aWV3XTsKKyAg
ICB9CiB9CiAKIC0gKHZvaWQpd2lsbFJlbW92ZVN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKQEAg
LTMwNTcsNiArMzM1NCw3IEBAIC0gKHZvaWQpbGF5b3V0CiAgICAgW3NlbGYgbGF5b3V0VG9NaW5p
bXVtUGFnZVdpZHRoOjAgaGVpZ2h0OjAgb3JpZ2luYWxQYWdlV2lkdGg6MCBvcmlnaW5hbFBhZ2VI
ZWlnaHQ6MCBtYXhpbXVtU2hyaW5rUmF0aW86MCBhZGp1c3RpbmdWaWV3U2l6ZTpOT107CiB9CiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogLy8gRGVsaXZlciBtb3VzZXVwIGV2ZW50cyB0byB0aGUgRE9N
IGZvciBidXR0b24gMi4KIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsK
QEAgLTMxNDYsNiArMzQ0NCw3IEBAIC0gKE5TTWVudSAqKW1lbnVGb3JFdmVudDooTlNFdmVudCAq
KWV2ZW50CiAgICAgCiAgICAgcmV0dXJuIG1lbnU7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9P
TClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxh
ZwogewpAQCAtMzE2OSw2ICszNDY4LDcgQEAgLSAoQk9PTClpc09wYXF1ZQogICAgIHJldHVybiBb
W3NlbGYgX3dlYlZpZXddIGRyYXdzQmFja2dyb3VuZF07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogLSAodm9pZClzZXRMYXllcjooQ0FMYXllciAqKWxheWVyCiB7CiAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKQEAgLTMxNzgsNiArMzQ3OCw3IEBAIC0gKHZv
aWQpc2V0TGF5ZXI6KENBTGF5ZXIgKilsYXllcgogCiAgICAgW3N1cGVyIHNldExheWVyOmxheWVy
XTsKIH0KKyNlbmRpZgogCiAjaWYgIUxPR19ESVNBQkxFRAogLSAodm9pZClzZXROZWVkc0Rpc3Bs
YXk6KEJPT0wpZmxhZwpAQCAtMzIyOCwyMSArMzUyOSwyNiBAQCAtICh2b2lkKXNldE5lZWRzVG9B
cHBseVN0eWxlczogKEJPT0wpZmxhZwogCiAtICh2b2lkKWRyYXdTaW5nbGVSZWN0OihOU1JlY3Qp
cmVjdAogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVH
cmFwaGljc1N0YXRlXTsKICAgICBOU1JlY3RDbGlwKHJlY3QpOwogICAgICAgICAKICAgICBBU1NF
UlQoW1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2ViQ2xpcFZpZXcgY2xhc3NdXSk7
CiAKICAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSBzZXRBZGRpdGlvbmFsQ2xp
cDpyZWN0XTsKKyNlbmRpZgogCiAgICAgQHRyeSB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAg
ICAgaWYgKFtzZWxmIF90cmFuc3BhcmVudEJhY2tncm91bmRdKSB7CiAgICAgICAgICAgICBbW05T
Q29sb3IgY2xlYXJDb2xvcl0gc2V0XTsKICAgICAgICAgICAgIE5TUmVjdEZpbGwgKHJlY3QpOwog
ICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfZHJhd1JlY3Q6cmVj
dCBjb250ZW50c09ubHk6WUVTXTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIFdlYlZp
ZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CiAKICAgICAgICAgLy8gVGhpcyBoYWNrIGlz
IG5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMjM1NDU+LiBXZSBjYW4gaGl0IGEgcmFjZSBj
b25kaXRpb24gd2hlcmUgZHJhd1JlY3Qgd2lsbCBiZQpAQCAtMzI1NCwxMyArMzU2MCwyMCBAQCAt
ICh2b2lkKWRyYXdTaW5nbGVSZWN0OihOU1JlY3QpcmVjdAogCiAgICAgICAgIGlmIChXZWJOb2Rl
SGlnaGxpZ2h0ICpjdXJyZW50SGlnaGxpZ2h0ID0gW3dlYlZpZXcgY3VycmVudE5vZGVIaWdobGln
aHRdKQogICAgICAgICAgICAgW2N1cnJlbnRIaWdobGlnaHQgc2V0TmVlZHNVcGRhdGVJblRhcmdl
dFZpZXdSZWN0OltzZWxmIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3OltjdXJyZW50SGlnaGxpZ2h0
IHRhcmdldFZpZXddXV07CisjZWxzZQorICAgICAgICAvLyBEb24ndCBzZW5kIGRpZERyYXdSZWN0
LCBpdCBpcyBub3QgdXNlZCBieSBhbnlvbmUgYW5kIGl0IGlzIGNhdXNpbmcgdGhyZWFkIHN5bmNo
cm9uaXphdGlvbiBwcm9ibGVtcy4KKyNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAg
ICAgWyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07
CiAKICAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKKyNl
bmRpZgogICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqbG9jYWxFeGNlcHRpb24pIHsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgICAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSBy
ZXNldEFkZGl0aW9uYWxDbGlwXTsKICAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVH
cmFwaGljc1N0YXRlXTsKKyNlbmRpZgogICAgICAgICBMT0dfRVJST1IoIkV4Y2VwdGlvbiBjYXVn
aHQgd2hpbGUgZHJhd2luZzogJUAiLCBsb2NhbEV4Y2VwdGlvbik7CiAgICAgICAgIFtsb2NhbEV4
Y2VwdGlvbiByYWlzZV07CiAgICAgfQpAQCAtMzI3MSw2ICszNTg0LDcgQEAgLSAodm9pZClkcmF3
UmVjdDooTlNSZWN0KXJlY3QKICAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKICAgICBMT0coVmll
dywgIiVAIGRyYXdpbmciLCBzZWxmKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgY29uc3Qg
TlNSZWN0ICpyZWN0czsKICAgICBOU0ludGVnZXIgY291bnQ7CiAgICAgW3NlbGYgZ2V0UmVjdHNC
ZWluZ0RyYXduOiZyZWN0cyBjb3VudDomY291bnRdOwpAQCAtMzI3OCwxMSArMzU5MiwxMyBAQCAt
ICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogICAgIEJPT0wgc3Vidmlld3NXZXJlU2V0QXNp
ZGUgPSBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZTsKICAgICBpZiAoc3Vidmlld3NXZXJlU2V0
QXNpZGUpCiAgICAgICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOworI2VuZGlmCiAKICNpZmRl
ZiBMT0dfVElNRVMKICAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQo
KTsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBJZiBjb3VudCA9PSAwIGhl
cmUsIHVzZSB0aGUgcmVjdCBwYXNzZWQgaW4gZm9yIGRyYXdpbmcuIFRoaXMgaXMgYSB3b3JrYXJv
dW5kIGZvcjogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM5MDgyODI+IFJFR1JFU1NJT04gKE1h
aWwpOiBObyBkcmFnIGltYWdlIGRyYWdnaW5nIHNlbGVjdGVkIHRleHQgaW4gQmxvdCBhbmQgTWFp
bCAKICAgICAvLyBUaGUgcmVhc29uIGZvciB0aGUgd29ya2Fyb3VuZCBpcyB0aGF0IHRoaXMgbWV0
aG9kIGlzIGNhbGxlZCBleHBsaWNpdGx5IGZyb20gdGhlIGNvZGUgCkBAIC0zMzA5LDE4ICszNjI1
LDIzIEBAIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0OnJl
Y3RzW2ldXTsKICAgICB9CisjZWxzZQorICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0OnJlY3RdOyAg
ICAKKyNlbmRpZgogCiAjaWZkZWYgTE9HX1RJTUVTCiAgICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKICAgICBMT0coVGltaW5nLCAiJXMgZHJh
dyBzZWNvbmRzID0gJWYiLCB3aWRnZXQtPnBhcnQoKS0+YmFzZVVSTCgpLlVSTCgpLmxhdGluMSgp
LCB0aGlzVGltZSk7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKHN1YnZp
ZXdzV2VyZVNldEFzaWRlKQogICAgICAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107CisjZW5k
aWYKIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CiAKLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiAhUExBVEZPUk0oSU9TKQogICAgIC8vIE9ubHkgZG8gdGhlIHN5bmNocm9uaXphdGlvbiBk
YW5jZSBpZiB3ZSdyZSBkcmF3aW5nIGludG8gdGhlIHdpbmRvdywgb3RoZXJ3aXNlCiAgICAgLy8g
d2UgcmlzayBkaXNhYmxpbmcgc2NyZWVuIHVwZGF0ZXMgd2hlbiBubyBmbHVzaCBpcyBwZW5kaW5n
LgogICAgIGlmIChbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdID09IFtbc2VsZiB3
aW5kb3ddIGdyYXBoaWNzQ29udGV4dF0gJiYgW3dlYlZpZXcgX25lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb25dKSB7CkBAIC0zMzM5LDYgKzM2NjAsNyBAQCAtICh2b2lkKWRyYXdSZWN0
OihOU1JlY3QpcmVjdAogICAgICAgICBDYWxsVUlEZWxlZ2F0ZSh3ZWJWaWV3LCBAc2VsZWN0b3Io
d2ViVmlldzpkaWREcmF3RnJhbWU6KSwgW3NlbGYgX2ZyYW1lXSk7CiB9CiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQogLy8gVHVybiBvZmYgdGhlIGFkZGl0aW9uYWwgY2xpcCB3aGlsZSBjb21wdXRpbmcg
b3VyIHZpc2libGVSZWN0LgogLSAoTlNSZWN0KXZpc2libGVSZWN0CiB7CkBAIC0zNDU4LDI1ICsz
NzgwLDQ2IEBAIC0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbgogICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5n
Q2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRl
c3Ryb3lBbGxQbHVnaW5zXTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCisjaWYgIVBM
QVRGT1JNKElPUykKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAorI2Vsc2UK
Ky0gKHZvaWQpc2Nyb2xsV2hlZWw6KFdlYkV2ZW50ICopZXZlbnQKKyNlbmRpZgogeworI2lmICFQ
TEFURk9STShJT1MpCiAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8g
dGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKICAgICAvLyBmZXRj
aGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5k
IHRoZW4gYXV0b3JlbGVhc2luZwogICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRo
YXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgog
ICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisjZW5kaWYKIAogICAgIEZyYW1lKiBm
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAo
IWZyYW1lIHx8ICFmcmFtZS0+ZXZlbnRIYW5kbGVyKCkud2hlZWxFdmVudChldmVudCkpCiAgICAg
ICAgIFtzdXBlciBzY3JvbGxXaGVlbDpldmVudF07CisjZWxzZQorICAgIGlmIChmcmFtZSkKKyAg
ICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLndoZWVsRXZlbnQoZXZlbnQpOworI2VuZGlmCiB9
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAoQk9PTClfaXNTZWxlY3Rpb25FdmVudDooTlNFdmVu
dCAqKWV2ZW50CiB7CiAgICAgTlNQb2ludCBwb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpbZXZl
bnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsKICAgICByZXR1cm4gW1tbc2VsZiBl
bGVtZW50QXRQb2ludDpwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6WUVTXSBvYmplY3RGb3JLZXk6
V2ViRWxlbWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07CiB9CisjZWxzZQorLSAoQk9PTClf
aXNTZWxlY3Rpb25FdmVudDooV2ViRXZlbnQgKilldmVudAoreworICAgIE5TUG9pbnQgcG9pbnQg
PSBbc2VsZiBjb252ZXJ0UG9pbnQ6ZXZlbnQubG9jYXRpb25JbldpbmRvdyBmcm9tVmlldzpuaWxd
OworICAgIHJldHVybiBbW1tzZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50XSBvYmplY3RGb3JLZXk6
V2ViRWxlbWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07Cit9CisjZW5kaWYKIAorI2lmICFQ
TEFURk9STShJT1MpCiAtIChCT09MKV9pc1Njcm9sbEJhckV2ZW50OihOU0V2ZW50ICopZXZlbnQK
IHsKICAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgY29udmVydFBvaW50OltldmVudCBsb2NhdGlv
bkluV2luZG93XSBmcm9tVmlldzpuaWxdOwpAQCAtMzU0MiwyMyArMzg4NSw0NSBAQCAtIChCT09M
KXNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50CiAgICAg
fQogICAgIHJldHVybiBbaGl0VmlldyBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6
ZXZlbnRdOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAorI2Vsc2UKKy0gKHZvaWQpbW91
c2VEb3duOihXZWJFdmVudCAqKWV2ZW50CisjZW5kaWYKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2ls
bCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZl
bnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxl
YXNpbmcKICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2lu
ZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KICAgICBbW2V2ZW50IHJl
dGFpbl0gYXV0b3JlbGVhc2VdOworI2VuZGlmCiAKICAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+
IHByb3RlY3RvciA9IHNlbGY7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoW1tzZWxmIGlu
cHV0Q29udGV4dF0gd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbW3NlbGYgaW5wdXRDb250
ZXh0XSBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKICAgICAgICAgcmV0dXJuOworI2VuZGlmCiAK
ICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IFlFUzsKIAogICAgIC8vIFJl
Y29yZCB0aGUgbW91c2UgZG93biBwb3NpdGlvbiBzbyB3ZSBjYW4gZGV0ZXJtaW5lIGRyYWcgaHlz
dGVyZXNpcy4KICAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOwogCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIFRFWFRJTlBVVDogaWYgdGhlcmUgaXMgbWFya2VkIHRleHQgYW5k
IHRoZSBjdXJyZW50IGlucHV0CisgICAgLy8gbWFuYWdlciB3YW50cyB0byBoYW5kbGUgbW91c2Ug
ZXZlbnRzLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0bworICAgIC8vIHBhc3MgaXQgdG8gdGhlbS4g
SWYgbm90LCB0aGVuIHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBpbnB1dAorICAgIC8vIG1hbmFnZXIg
d2hlbiB0aGUgbWFya2VkIHRleHQgaXMgYWJhbmRvbmVkICh1c2VyIGNsaWNrcyBvdXRzaWRlCisg
ICAgLy8gdGhlIG1hcmtlZCBhcmVhKQorICAgIF9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dl
ZEV2ZW50cyA9IE5POworCisgICAgLy8gTGV0IFdlYkNvcmUgZ2V0IGEgY2hhbmNlIHRvIGRlYWwg
d2l0aCB0aGUgZXZlbnQuIFRoaXMgd2lsbCBjYWxsIGJhY2sgdG8gdXMKKyAgICAvLyB0byBzdGFy
dCB0aGUgYXV0b3Njcm9sbCB0aW1lciBpZiBhcHByb3ByaWF0ZS4KKyAgICBpZiAoRnJhbWUqIGNv
cmVmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRI
YW5kbGVyKCkubW91c2VEb3duKGV2ZW50KTsKKyNlbHNlCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1k
ZWNsYXJhdGlvbnMiCiAgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBb
TlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CkBAIC0zNTc4LDYgKzM5NDMsNyBA
QCAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiAgICAgICAgIH0KICAgICB9CiAj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKIAogICAgIF9wcml2YXRlLT5oYW5k
bGluZ01vdXNlRG93bkV2ZW50ID0gTk87CiB9CkBAIC0zNzIyLDIyICs0MDg4LDI5IEBAIC0gKE5T
QXJyYXkgKiluYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9uOihOU1VSTCAq
KWRyb3BEZXN0aW5hdGlvbgogfQogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9p
ZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKKyNlbHNlCistICh2b2lkKW1vdXNlVXA6KFdlYkV2
ZW50ICopZXZlbnQKKyNlbmRpZgogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gVGhlcmUn
cyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3Rl
ZCBldmVudCBsb29wLCBhbmQKICAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxl
YXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwogICAgIC8v
IHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBp
bnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgogICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVs
ZWFzZV07CisjZW5kaWYKIAogICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOwogCisj
aWYgIVBMQVRGT1JNKElPUykKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAg
ICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdlciBj
dXJyZW50SW5wdXRNYW5hZ2VyXTsKICAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIgd2FudHNU
b0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBoYW5kbGVNb3VzZUV2
ZW50OmV2ZW50XSkKICAgICAgICAgcmV0dXJuOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAotCisjZW5kaWYKICAgICBbc2VsZiByZXRhaW5dOwogCiAgICAgW3NlbGYgX3N0b3BBdXRvc2Ny
b2xsVGltZXJdOwpAQCAtMzc0NSwyMiArNDExOCwyOCBAQCAtICh2b2lkKW1vdXNlVXA6KE5TRXZl
bnQgKilldmVudAogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCiAgICAg
ICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5tb3VzZVVwKGV2ZW50KTsK
ICAgICB9CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0
aEZha2VFdmVudF07CisjZW5kaWYKIAogICAgIFtzZWxmIHJlbGVhc2VdOwogfQogCisjaWYgIVBM
QVRGT1JNKElPUykKIC0gKHZvaWQpbW91c2VNb3ZlZE5vdGlmaWNhdGlvbjooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KIHsKICAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50
Oltbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJOU0V2ZW50Il1dOwogfQor
I2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLy8gcmV0dXJuaW5nIFlFUyBmcm9tIHRoaXMg
bWV0aG9kIGlzIHRoZSB3YXkgd2UgdGVsbCBBcHBLaXQgdGhhdCBpdCBpcyBvayBmb3IgdGhpcyB2
aWV3CiAvLyB0byBiZSBpbiB0aGUga2V5IGxvb3AgZXZlbiB3aGVuICJ0YWIgdG8gYWxsIGNvbnRy
b2xzIiBpcyBub3Qgb24uCiAtIChCT09MKW5lZWRzUGFuZWxUb0JlY29tZUtleQogewogICAgIHJl
dHVybiBZRVM7CiB9CisjZW5kaWYKIAogLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBtYWtlIHN1cmUg
d2UgZG9uJ3QgcmV0dXJuIGFueXRoaW5nIHRocm91Z2ggdGhlIE5TVGV4dElucHV0CiAvLyBBUEkg
d2hlbiBhbiBlZGl0YWJsZSByZWdpb24gaXMgbm90IGN1cnJlbnRseSBmb2N1c2VkLgpAQCAtMzc2
OSwxMyArNDE0OCwxNiBAQCBzdGF0aWMgQk9PTCBpc1RleHRJbnB1dChGcmFtZSogY29yZUZyYW1l
KQogICAgIHJldHVybiBjb3JlRnJhbWUgJiYgIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25l
KCkgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCisj
aWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBCT09MIGlzSW5QYXNzd29yZEZpZWxkKEZyYW1lKiBj
b3JlRnJhbWUpCiB7CiAgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CisjZW5kaWYKIAogc3RhdGljIFBhc3NSZWZQdHI8
S2V5Ym9hcmRFdmVudD4gY3VycmVudEtleWJvYXJkRXZlbnQoRnJhbWUqIGNvcmVGcmFtZSkKIHsK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRF
dmVudF07CiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zNzkxLDYgKzQx
NzMsMTcgQEAgc3RhdGljIFBhc3NSZWZQdHI8S2V5Ym9hcmRFdmVudD4gY3VycmVudEtleWJvYXJk
RXZlbnQoRnJhbWUqIGNvcmVGcmFtZSkKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CisjZWxzZQorICAgIFdlYkV2ZW50ICpldmVudCA9IFtXQUtXaW5kb3cgY3VycmVudEV2
ZW50XTsKKyAgICBpZiAoIWV2ZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBXZWJFdmVudFR5
cGUgdHlwZSA9IGV2ZW50LnR5cGU7CisgICAgaWYgKHR5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8
IHR5cGUgPT0gV2ViRXZlbnRLZXlVcCkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBj
b3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgICAgIHJldHVybiBLZXlib2FyZEV2ZW50OjpjcmVh
dGUoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVu
dCksIGRvY3VtZW50ID8gZG9jdW1lbnQtPmRlZmF1bHRWaWV3KCkgOiAwKTsKKyAgICB9CisgICAg
cmV0dXJuIDA7CisjZW5kaWYKIH0KIAogLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcgpAQCAt
Mzc5OSwxMiArNDE5MiwxNSBAQCAtIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCiAgICAgaWYg
KCFbW3NlbGYgX3dlYlZpZXddIF9pc1BlcmZvcm1pbmdQcm9ncmFtbWF0aWNGb2N1c10pCiAgICAg
ICAgIGRpcmVjdGlvbiA9IFtbc2VsZiB3aW5kb3ddIGtleVZpZXdTZWxlY3Rpb25EaXJlY3Rpb25d
OwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbc2VsZiBfdXBkYXRlRm9udFBhbmVsXTsKKyNl
bmRpZgogICAgIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIFlFUzsKIAorI2lmICFQTEFURk9STShJT1MpCiAg
ICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQgPSBpc1RleHRJbnB1dChmcmFtZSkgJiYgIWlzSW5Q
YXNzd29yZEZpZWxkKGZyYW1lKTsKICAgICBpZiAoZXhwb3NlSW5wdXRDb250ZXh0ICE9IF9wcml2
YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKICAgICAgICAgX3ByaXZhdGUtPmV4cG9zZUlucHV0
Q29udGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsKQEAgLTM4MTQsNiArNDIxMCw3IEBAIC0gKEJP
T0wpYmVjb21lRmlyc3RSZXNwb25kZXIKICAgICBfcHJpdmF0ZS0+X2ZvcmNlVXBkYXRlU2VjdXJl
SW5wdXRTdGF0ZSA9IFlFUzsKICAgICBbc2VsZiBfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CiAg
ICAgX3ByaXZhdGUtPl9mb3JjZVVwZGF0ZVNlY3VyZUlucHV0U3RhdGUgPSBOTzsKKyNlbmRpZgog
CiAgICAgLy8gRklYTUU6IEtpbGwgcmluZyBoYW5kbGluZyBpcyBtb3N0bHkgaW4gV2ViQ29yZSwg
c28gdGhpcyBjYWxsIHNob3VsZCBhbHNvIGJlIG1vdmVkIHRoZXJlLgogICAgIGZyYW1lLT5lZGl0
b3IoKS5zZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UodHJ1ZSk7CkBAIC0zODQxLDE0ICs0MjM4
LDI0IEBAIC0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKIHsKICAgICBCT09MIHJlc2lnbiA9
IFtzdXBlciByZXNpZ25GaXJzdFJlc3BvbmRlcl07CiAgICAgaWYgKHJlc2lnbikgeworI2lmICFQ
TEFURk9STShJT1MpCiAgICAgICAgIGlmIChfcHJpdmF0ZS0+aXNJblNlY3VyZUlucHV0U3RhdGUp
IHsKICAgICAgICAgICAgIERpc2FibGVTZWN1cmVFdmVudElucHV0KCk7CiAgICAgICAgICAgICBf
cHJpdmF0ZS0+aXNJblNlY3VyZUlucHV0U3RhdGUgPSBOTzsKICAgICAgICAgfQogICAgICAgICBb
X3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3Zl
TGVmdDpOT107CisjZW5kaWYKICAgICAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7CiAgICAgICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIHJl
c2lnbjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVu
dCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQtPm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0
ZXJuYXRpdmVzKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cyhEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKKyAgICAgICAgfQorI2VuZGlmCisK
ICAgICAgICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOwogICAgICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgICAgICByZXR1cm4gcmVzaWduOwpAQCAtMzg1OCwxMSArNDI2NSwxNyBAQCAt
IChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCiAgICAgICAgICAgICAgICAgW3NlbGYgY2xlYXJG
b2N1c107CiAgICAgICAgIH0KICAgICAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAg
aWQgbmV4dFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIF9uZXdGaXJzdFJlc3BvbmRlckFmdGVy
UmVzaWduaW5nXTsKICAgICAgICAgYm9vbCBuZXh0UmVzcG9uZGVySXNJbldlYlZpZXcgPSBbbmV4
dFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXQogICAgICAgICAgICAgJiYg
W25leHRSZXNwb25kZXIgaXNEZXNjZW5kYW50T2Y6W1tbc2VsZiBfd2ViVmlld10gbWFpbkZyYW1l
XSBmcmFtZVZpZXddXTsKICAgICAgICAgaWYgKCFuZXh0UmVzcG9uZGVySXNJbldlYlZpZXcpCiAg
ICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkKGZhbHNlKTsKKyNl
bHNlCisgICAgICAgIE5TVmlldyogbmV4dFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIF9uZXdG
aXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5nXTsKKyAgICAgICAgaWYgKG5leHRSZXNwb25kZXIg
JiYgIVtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXddIG1haW5G
cmFtZV0gZnJhbWVWaWV3XV0pCisgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkKGZhbHNlKTsKKyNlbmRpZgogICAgIH0KICAgICByZXR1cm4gcmVzaWduOwogfQpA
QCAtMzg3MiwxNSArNDI4NSwxOSBAQCAtICh2b2lkKXNldERhdGFTb3VyY2U6KFdlYkRhdGFTb3Vy
Y2UgKilkYXRhU291cmNlCiAgICAgQVNTRVJUKGRhdGFTb3VyY2UpOwogICAgIGlmIChfcHJpdmF0
ZS0+ZGF0YVNvdXJjZSAhPSBkYXRhU291cmNlKSB7CiAgICAgICAgIEFTU0VSVCghX3ByaXZhdGUt
PmNsb3NlZCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgQk9PTCBoYWREYXRhU291cmNl
ID0gX3ByaXZhdGUtPmRhdGFTb3VyY2UgIT0gbmlsOworI2VuZGlmCiAKICAgICAgICAgW2RhdGFT
b3VyY2UgcmV0YWluXTsKICAgICAgICAgW19wcml2YXRlLT5kYXRhU291cmNlIHJlbGVhc2VdOwog
ICAgICAgICBfcHJpdmF0ZS0+ZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7CiAgICAgICAgIFtfcHJp
dmF0ZS0+cGx1Z2luQ29udHJvbGxlciBzZXREYXRhU291cmNlOmRhdGFTb3VyY2VdOwogCisjaWYg
IVBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKCFoYWREYXRhU291cmNlKQogICAgICAgICAgICAg
W3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtMzg4
OCwxMiArNDMwNSwxNCBAQCAtICh2b2lkKWRhdGFTb3VyY2VVcGRhdGVkOihXZWJEYXRhU291cmNl
ICopZGF0YVNvdXJjZQogewogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC8vIFRoaXMgaXMgYW4g
b3ZlcnJpZGUgb2YgYW4gTlNDb250cm9sIG1ldGhvZCB0aGF0IHdhbnRzIHRvIHJlcGFpbnQgdGhl
IGVudGlyZSB2aWV3IHdoZW4gdGhlIHdpbmRvdyByZXNpZ25zL2JlY29tZXMKIC8vIGtleS4gIFdl
YkhUTUxWaWV3IGlzIGFuIE5TQ29udHJvbCBvbmx5IGJlY2F1c2UgaXQgaG9zdHMgTlNDZWxscyB0
aGF0IGFyZSBwYWludGVkIGJ5IFdlYkNvcmUncyBBcXVhIHRoZW1lCiAvLyByZW5kZXJlciAoYW5k
IHRob3NlIGNlbGxzIG11c3QgYmUgaG9zdGVkIGJ5IGFuIGVuY2xvc2luZyBOU0NvbnRyb2wgaW4g
b3JkZXIgdG8gcGFpbnQgcHJvcGVybHkpLgogLSAodm9pZCl1cGRhdGVDZWxsOihOU0NlbGwqKWNl
bGwKIHsKIH0KKyNlbmRpZgogCiAvLyBEb2VzIHNldE5lZWRzRGlzcGxheTpOTyBhcyBhIHNpZGUg
ZWZmZWN0IHdoZW4gcHJpbnRpbmcgaXMgZW5kaW5nLgogLy8gcGFnZVdpZHRoICE9IDAgaW1wbGll
cyB3ZSB3aWxsIHJlbGF5b3V0IHRvIGEgbmV3IHdpZHRoCkBAIC0zOTQyLDYgKzQzNjEsNyBAQCAt
ICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmludGluZyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0
aDooZmxvYXQpbWluUGFnZUxvZ2ljYQogICAgIH0KIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAt
IChCT09MKWNhblByaW50SGVhZGVyc0FuZEZvb3RlcnMKIHsKICAgICByZXR1cm4gWUVTOwpAQCAt
NDEyMSwxMyArNDU0MSwyMCBAQCAtICh2b2lkKWVuZERvY3VtZW50CiAgICAgLy8gTm90ZSBzYWRs
eSBhdCB0aGlzIHBvaW50IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdU
b1NjcmVlbl0gaXMgc3RpbGwgTk8gCiAgICAgW3NlbGYgX2VuZFByaW50TW9kZUFuZFJlc3RvcmVX
aW5kb3dBdXRvZGlzcGxheV07CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAorI2lmICFQ
TEFURk9STShJT1MpCiAtICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAorI2Vsc2UKKy0g
KHZvaWQpa2V5RG93bjooV2ViRXZlbnQgKilldmVudAorI2VuZGlmCiB7CisjaWYgIVBMQVRGT1JN
KElPUykKICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2
ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAogICAgIC8vIGZldGNoaW5nIGEg
bmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBh
dXRvcmVsZWFzaW5nCiAgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9t
IGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCiAgICAgW1tl
dmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyNlbmRpZgogCiAgICAgUmV0YWluUHRyPFdlYkhU
TUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsKICAgICBCT09MIGV2ZW50V2FzU2VudFRvV2Vi
Q29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50KTsKQEAgLTQxMzcsNiArNDU2
NCw3IEBAIC0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50CiAgICAgW19wcml2YXRlLT5r
ZXlEb3duRXZlbnQgcmVsZWFzZV07CiAgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVu
dCByZXRhaW5dOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBCT09MIGNvbXBsZXRpb25Qb3B1
cFdhc09wZW4gPSBfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgJiYgW19wcml2YXRlLT5j
b21wbGV0aW9uQ29udHJvbGxlciBwb3B1cFdpbmRvd0lzT3Blbl07CiAgICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFldmVudFdhc1NlbnRUb1dlYkNv
cmUgJiYgY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkua2V5RXZlbnQoZXZl
bnQpKSB7CkBAIC00MTQ4LDE4ICs0NTc2LDMwIEBAIC0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAq
KWV2ZW50CiAgICAgICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0
aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107CiAgICAgICAgIGNhbGxTdXBlciA9IFlFUzsKICAg
ICB9CisjZWxzZQorICAgIEZyYW1lICpjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwor
ICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGNvcmVGcmFtZSkKKyAgICAgICAgY29y
ZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5rZXlFdmVudChldmVudCk7CisjZW5kaWYKKwogICAgIGlm
IChjYWxsU3VwZXIpCiAgICAgICAgIFtzdXBlciBrZXlEb3duOmV2ZW50XTsKICAgICBlbHNlCiAg
ICAgICAgIFtOU0N1cnNvciBzZXRIaWRkZW5VbnRpbE1vdXNlTW92ZXM6WUVTXTsKIH0KIAorI2lm
ICFQTEFURk9STShJT1MpCiAtICh2b2lkKWtleVVwOihOU0V2ZW50ICopZXZlbnQKKyNlbHNlCist
ICh2b2lkKWtleVVwOihXZWJFdmVudCAqKWV2ZW50CisjZW5kaWYKIHsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZl
bnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0Y2hpbmcgYSBu
ZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1
dG9yZWxlYXNpbmcKICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20g
Y2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KICAgICBbW2V2
ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworI2VuZGlmCiAKICAgICBCT09MIGV2ZW50V2FzU2Vu
dFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50KTsKIApAQCAtNDE3
MSw2ICs0NjExLDcgQEAgLSAodm9pZClrZXlVcDooTlNFdmVudCAqKWV2ZW50CiAgICAgICAgIFtz
dXBlciBrZXlVcDpldmVudF07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClmbGFn
c0NoYW5nZWQ6KE5TRXZlbnQgKilldmVudAogewogICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhh
dCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwg
YW5kCkBAIC00MjAyLDYgKzQ2NDMsNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiAgICAgfQogICAgIHJldHVybiBbc3VwZXIgYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOwogfQorI2VuZGlmCiAKIC0g
KGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50CiB7CkBAIC00MjE1LDExICs0NjU3LDE1
IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50CiB7CiAgICAgaWQg
YWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIGFjY2Vzc2liaWxpdHlSb290XTsKICAgICBpZiAoYWNj
VHJlZSkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vz
c2liaWxpdHlIaXRUZXN0OnBvaW50XTsKKyNlbHNlCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiCiAgICAgICAgIE5TUG9pbnQgd2luZG93Q29vcmQgPSBbW3NlbGYgd2luZG93XSBj
b252ZXJ0U2NyZWVuVG9CYXNlOnBvaW50XTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AK
ICAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxpdHlIaXRUZXN0OltzZWxmIGNvbnZl
cnRQb2ludDp3aW5kb3dDb29yZCBmcm9tVmlldzpuaWxdXTsKKyNlbmRpZgogICAgIH0KICAgICBy
ZXR1cm4gc2VsZjsKIH0KQEAgLTQyNDMsNiArNDY4OSw3IEBAIC0gKHZvaWQpY2VudGVyU2VsZWN0
aW9uSW5WaXNpYmxlQXJlYTooaWQpc2VuZGVyCiAgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkucmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMpOwog
fQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TRGF0YSAqKV9zZWxlY3Rpb25TdGFydEZvbnRB
dHRyaWJ1dGVzQXNSVEYKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKQEAgLTQyNjcsMTIgKzQ3MTQsMTQgQEAgLSAoTlNEaWN0aW9uYXJ5ICopX2ZvbnRBdHRy
aWJ1dGVzRnJvbUZvbnRQYXN0ZWJvYXJkCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJu
IFtzdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIDEpXTsKIH0KKyNl
bmRpZgogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX2VtcHR5U3R5bGUKIHsKICAgICBy
ZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVDU1NTdHlsZURlY2xhcmF0
aW9uXTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChOU1N0cmluZyAqKV9jb2xvckFzU3Ry
aW5nOihOU0NvbG9yICopY29sb3IKIHsKICAgICBOU0NvbG9yICpyZ2JDb2xvciA9IFtjb2xvciBj
b2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKQEAgLTQzNzAs
NiArNDgxOSw3IEBAIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9udEF0
dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkKIAogICAgIHJldHVybiBzdHlsZTsK
IH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAtICh2b2lkKV9hcHBseVN0eWxlVG9TZWxl
Y3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooRWRp
dEFjdGlvbil1bmRvQWN0aW9uCiB7CkBAIC00MzgwLDYgKzQ4MzAsNyBAQCAtICh2b2lkKV9hcHBs
eVN0eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5k
b0FjdGlvbjooRQogICAgIH0KIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChCT09MKV9oYW5k
bGVTdHlsZUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAogewogICAgIFdlYlZpZXcgKndl
YlZpZXcgPSBbc2VsZiBfd2ViVmlld107CkBAIC00NzE1LDYgKzUxNjYsNyBAQCAtICh2b2lkKWNo
YW5nZUNvbG9yOihpZClzZW5kZXIKICAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltz
ZWxmIF9zdHlsZUZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOkBzZWxlY3RvcihzZXRDb2xvcjop
XSAKICAgICAgICAgICAgICAgICAgIHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25TZXRDb2xvcl07
CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogLSAodm9pZClfY2hhbmdlV29yZENhc2VX
aXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgogewpAQCAtNDc1MCw2ICs1MjAyLDcgQEAgLSAodm9p
ZCljYXBpdGFsaXplV29yZDooaWQpc2VuZGVyCiAgICAgW3NlbGYgX2NoYW5nZVdvcmRDYXNlV2l0
aFNlbGVjdG9yOkBzZWxlY3RvcihjYXBpdGFsaXplZFN0cmluZyldOwogfQogCisjaWYgIVBMQVRG
T1JNKElPUykKIC0gKHZvaWQpY29tcGxldGU6KGlkKXNlbmRlcgogewogICAgIENPTU1BTkRfUFJP
TE9HVUUKQEAgLTQ5MjIsNiArNTM3NSw3IEBAIC0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0
aW9uUmlnaHRUb0xlZnQ6KGlkKXNlbmRlcgogCiAgICAgW3NlbGYgX2NoYW5nZUJhc2VXcml0aW5n
RGlyZWN0aW9uVG86TlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnRdOwogfQorI2VuZGlmIC8v
ICFQTEFURk9STShJT1MpCiAKIC0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTmF0dXJh
bDooaWQpc2VuZGVyCiB7CkBAIC00OTY1LDcgKzU0MTksNyBAQCAtIChCT09MKV93YW50c0tleURv
d25Gb3JFdmVudDooTlNFdmVudCAqKWV2ZW50CiAgICAgcmV0dXJuIGhhdmVXZWJDb3JlRnJhbWU7
CiB9CiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNpZiAh
UExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAK
IC0gKEJPT0wpX2F1dG9tYXRpY0ZvY3VzUmluZ0Rpc2FibGVkCiB7CiAgICAgLy8gVGhlIGRlZmF1
bHQgc3RhdGUgZm9yIF9hdXRvbWF0aWNGb2N1c1JpbmdEaXNhYmxlZCBpcyBOTywgd2hpY2ggcHJl
dmVudHMgZm9jdXMgcmluZ3MKQEAgLTQ5OTIsMTQgKzU0NDYsMTkgQEAgLSAodm9pZClfdXBkYXRl
Q29udHJvbFRpbnRzCiAvLyB0byBkbyB0aGlzIHdpdGggQVBJLiA8cmRhcjovL3Byb2JsZW0vNTEz
Njc2MD4KIC0gKHZvaWQpX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQogICAgICAgICBbc2VsZiBfdXBkYXRlQ29u
dHJvbFRpbnRzXTsKICAgICBlbHNlCiAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFp
blRocmVhZDpAc2VsZWN0b3IoX3VwZGF0ZUNvbnRyb2xUaW50cykgd2l0aE9iamVjdDpuaWwgd2Fp
dFVudGlsRG9uZTpOT107CisjZWxzZQorICAgIFtzZWxmIF91cGRhdGVDb250cm9sVGludHNdOwor
I2VuZGlmCiAKICAgICBbc3VwZXIgX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZV07CiB9CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogLSAodm9pZClvdGhlck1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7
CiAgICAgaWYgKFtldmVudCBidXR0b25OdW1iZXJdID09IDIpCkBAIC01MDIzLDYgKzU0ODIsNyBA
QCAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiAgICAgZWxzZQogICAgICAg
ICBbc3VwZXIgb3RoZXJNb3VzZVVwOmV2ZW50XTsKIH0KKyNlbmRpZgogCiBAZW5kCiAKQEAgLTUw
MzEsOSArNTQ5MSwxMiBAQCBAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkludGVybmFs
KQogLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZAogewogICAgIFtzZWxmIF91cGRhdGVTZWxlY3Rp
b25Gb3JJbnB1dE1hbmFnZXJdOworI2lmICFQTEFURk9STShJT1MpCiAgICAgW3NlbGYgX3VwZGF0
ZUZvbnRQYW5lbF07CisjZW5kaWYKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtICh2b2lkKV91
cGRhdGVGb250UGFuZWwKIHsKICAgICAvLyBGSVhNRTogTlNUZXh0VmlldyBiYWlscyBvdXQgaWYg
YmVjb21pbmcgb3IgcmVzaWduaW5nIGZpcnN0IHJlc3BvbmRlciwgZm9yIHdoaWNoIGl0IGhhcyBp
dmFyIGZsYWdzLiBOb3QKQEAgLTUwNjIsNiArNTUyNSw3IEBAIC0gKHZvaWQpX3VwZGF0ZUZvbnRQ
YW5lbAogCiAgICAgW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBzZXRTZWxlY3Rl
ZEZvbnQ6Zm9udCBpc011bHRpcGxlOm11bHRpcGxlRm9udHNdOwogfQorI2VuZGlmCiAKIC0gKEJP
T0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlCiB7CkBAIC01MDcxLDEwICs1NTM1LDEyIEBAIC0gKEJP
T0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlCiAgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5OwogfQogCisj
aWYgIVBMQVRGT1JNKElPUykKIC0gKE5TRXZlbnQgKilfbW91c2VEb3duRXZlbnQKIHsKICAgICBy
ZXR1cm4gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50OwogfQorI2VuZGlmCiAKIC0gKGlkPFdlYkhU
TUxIaWdobGlnaHRlcj4pX2hpZ2hsaWdodGVyRm9yVHlwZTooTlNTdHJpbmcqKXR5cGUKIHsKQEAg
LTUwOTIsNiArNTU1OCw3IEBAIC0gKHZvaWQpY2xvc2VJZk5vdEN1cnJlbnRWaWV3CiAgICAgICAg
IFtzZWxmIGNsb3NlXTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChET01Eb2N1bWVudEZy
YWdtZW50KilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilw
YXN0ZWJvYXJkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCBpbkNvbnRleHQ6bmlsIGFsbG93UGxhaW5UZXh0Ok5PXTsKQEAgLTUy
NTIsNiArNTcxOSw3IEBAIC0gKHZvaWQpX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51OihpZClz
ZW5kZXIKIAogICAgIFtzZWxmIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzphdHRy
U3RyaW5nIGF0UG9pbnQ6cmVjdC5vcmlnaW5dOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CiAKIC0gKHZvaWQpX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMKIHsKQEAgLTUyODcsNiAr
NTc1NSw3IEBAIC0gKHZvaWQpX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMKICAgICBwYXJh
bWV0ZXJzLT5leGVjdXRpbmdTYXZlZEtleXByZXNzQ29tbWFuZHMgPSBmYWxzZTsKIH0KIAorI2lm
ICFQTEFURk9STShJT1MpCiAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooS2V5Ym9hcmRFdmVu
dCopZXZlbnQgc2F2aW5nQ29tbWFuZHM6KEJPT0wpc2F2aW5nQ29tbWFuZHMKIHsKICAgICBBU1NF
UlQoY29yZShbc2VsZiBfZnJhbWVdKSA9PSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpLT5kb2N1
bWVudCgpLmZyYW1lKCkpOwpAQCAtNTM1Nyw3ICs1ODI2LDEwOSBAQCAtIChCT09MKV9pbnRlcnBy
ZXRLZXlFdmVudDooS2V5Ym9hcmRFdmVudCopZXZlbnQgc2F2aW5nQ29tbWFuZHM6KEJPT0wpc2F2
aW5nQ29tbQogICAgIC8vIElmIHdlIGhhdmUgYWxyZWFkeSBleGVjdXRlZCBhbGwgY29tbWFuZHMs
IGRvbid0IGRvIGl0IGFnYWluLgogICAgIHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50SW50ZXJwcmV0
YXRpb25IYWRTaWRlRWZmZWN0czsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorICAgIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAKKyNkZWZpbmUga1dlYkVudGVyS2V5ICAgICAgICAgMHgw
MDAzCisjZGVmaW5lIGtXZWJCYWNrc3BhY2VLZXkgICAgIDB4MDAwOAorI2RlZmluZSBrV2ViUmV0
dXJuS2V5ICAgICAgICAweDAwMGQKKyNkZWZpbmUga1dlYkRlbGV0ZUtleSAgICAgICAgMHgwMDdG
CisjZGVmaW5lIGtXZWJMZWZ0QXJyb3dLZXkgICAgIDB4MDBBQworI2RlZmluZSBrV2ViVXBBcnJv
d0tleSAgICAgICAweDAwQUQKKyNkZWZpbmUga1dlYlJpZ2h0QXJyb3dLZXkgICAgMHgwMEFFCisj
ZGVmaW5lIGtXZWJEb3duQXJyb3dLZXkgICAgIDB4MDBBRgorI2RlZmluZSBrV2ViRGVsZXRlRm9y
d2FyZEtleSAweEY3MjgKKyAgICAKKy0gKEJPT0wpX2hhbmRsZUVkaXRpbmdLZXlFdmVudDooS2V5
Ym9hcmRFdmVudCAqKXdjRXZlbnQKK3sKKyAgICAvLyBVc2UgdGhlIGlzRWRpdGFibGUgc3RhdGUg
dG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIHByb2Nlc3MgdGFiIGtleSBldmVudHMuCisg
ICAgLy8gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGlzRWRpdGFibGUgd2lsbCBiZSBOTyB3aGVuIHRo
aXMgV2ViVmlldyBpcyBiZWluZyB1c2VkCisgICAgLy8gaW4gYSBicm93c2VyLCBhbmQgd2UgZGVz
aXJlIHRoZSBiZWhhdmlvciB3aGVyZSB0YWIgbW92ZXMgdG8gdGhlIG5leHQgZWxlbWVudAorICAg
IC8vIGluIHRhYiBvcmRlci4gSWYgaXNFZGl0YWJsZSBpcyBZRVMsIGl0IGlzIGxpa2VseSB0aGF0
IHRoZSBXZWJWaWV3IGlzIGJlaW5nCisgICAgLy8gZW1iZWRkZWQgYXMgdGhlIHdob2xlIHZpZXcs
IGFzIGluIE1haWwsIGFuZCB0YWJzIHNob3VsZCBpbnB1dCB0YWJzIGFzIGV4cGVjdGVkCisgICAg
Ly8gaW4gYSB0ZXh0IGVkaXRvci4KKyAgICAKKyAgICAvLyBGSVhNRSAtIHRoaXMgY29kZSB3aWxs
IGJyZWFrIHdoZW4gY29udGVudCBlZGl0YWJsZSBpcyBzdXBwb3J0ZWQuCisgICAgaWYgKGNvbnN0
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogcGxhdGZvcm1FdmVudCA9IHdjRXZlbnQtPmtleUV2ZW50
KCkpIHsKKyAgICAgICAgV2ViRXZlbnQgKmV2ZW50ID0gcGxhdGZvcm1FdmVudC0+ZXZlbnQoKTsK
KyAgICAgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIGlzRWRpdGFibGVdICYmIGV2ZW50LmlzVGFi
S2V5KSAKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBw
cm9jZXNzIHRoZSBrZXkgbm9ybWFsbHkKKyAgICAgICAgQk9PTCBzaGlmdCA9IHBsYXRmb3JtRXZl
bnQtPnNoaWZ0S2V5KCk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGV2ZW50LmNoYXJhY3Rl
clNldCkgeworICAgICAgICAgICAgY2FzZSBXZWJFdmVudENoYXJhY3RlclNldFN5bWJvbDogewor
ICAgICAgICAgICAgICAgIFNFTCBzZWwgPSAwOworICAgICAgICAgICAgICAgIE5TU3RyaW5nICpz
ID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107CisgICAgICAgICAgICAgICAg
aWYgKFtzIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChbcyBjaGFyYWN0ZXJBdEluZGV4OjBdKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2Uga1dlYkxlZnRBcnJvd0tleToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
bCA9IHNoaWZ0ID8gQHNlbGVjdG9yKG1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uOikgOiBAc2Vs
ZWN0b3IobW92ZUxlZnQ6KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIGtXZWJVcEFycm93S2V5OgorICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsID0gc2hpZnQgPyBAc2VsZWN0b3IobW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uOikgOiBA
c2VsZWN0b3IobW92ZVVwOik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBrV2ViUmlnaHRBcnJvd0tleToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbCA9IHNoaWZ0ID8gQHNlbGVjdG9yKG1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlv
bjopIDogQHNlbGVjdG9yKG1vdmVSaWdodDopOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Uga1dlYkRvd25BcnJvd0tleToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbCA9IHNoaWZ0ID8gQHNlbGVjdG9yKG1vdmVEb3duQW5kTW9kaWZ5
U2VsZWN0aW9uOikgOiBAc2VsZWN0b3IobW92ZURvd246KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2VsKSB7
CisgICAgICAgICAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpzZWwgd2l0aE9iamVj
dDpzZWxmXTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIFdlYkV2ZW50Q2hhcmFjdGVyU2V0QVNDSUk6CisgICAgICAgICAgICBjYXNlIFdlYkV2ZW50
Q2hhcmFjdGVyU2V0VW5pY29kZTogeworICAgICAgICAgICAgICAgIE5TU3RyaW5nICpzID0gW2V2
ZW50IGNoYXJhY3RlcnNdOworICAgICAgICAgICAgICAgIGlmIChbcyBsZW5ndGhdID09IDApCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN3aXRjaCAoW3MgY2hh
cmFjdGVyQXRJbmRleDowXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIGtXZWJCYWNrc3Bh
Y2VLZXk6CisgICAgICAgICAgICAgICAgICAgIGNhc2Uga1dlYkRlbGV0ZUtleToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFtbW3NlbGYgX3dlYlZpZXddIF9VSUtpdERlbGVnYXRlRm9yd2FyZGVy
XSBkZWxldGVGcm9tSW5wdXRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFlFUzsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBrV2ViRW50ZXJLZXk6ICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2Uga1dlYlJldHVybktleToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpDaGFyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFwIFxy
IGZyb20gSFcga2V5Ym9hcmQgdG8gXG4gdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBzb2Z0
IGtleWJvYXJkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUg
dGhlIGZpcnN0IGNhbGwgd2hlbiBVSUtpdCBpbXBsZW1lbnRzIHRoZSBuZXcgbWV0aG9kLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtbW3NlbGYgX3dlYlZpZXddIF9VSUtpdERlbGVnYXRl
Rm9yd2FyZGVyXSBhZGRJbnB1dFN0cmluZzpAIlxuIiBmcm9tVmFyaWFudEtleTpOT107CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW1tbc2VsZiBfd2ViVmlld10gX1VJS2l0RGVsZWdhdGVG
b3J3YXJkZXJdIGFkZElucHV0U3RyaW5nOkAiXG4iIHdpdGhGbGFnczowXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICAgICAgICAgICAgICBj
YXNlIGtXZWJEZWxldGVGb3J3YXJkS2V5OgorICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYg
ZGVsZXRlRm9yd2FyZDpzZWxmXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBZRVM7
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OkNoYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05T
U3RyaW5nICpzdHJpbmcgPSBldmVudC5jaGFyYWN0ZXJzOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIGZpcnN0IGNhbGwgd2hlbiBVSUtpdCBpbXBsZW1l
bnRzIHRoZSBuZXcgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbW3NlbGYg
X3dlYlZpZXddIF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBhZGRJbnB1dFN0cmluZzpldmVudC5j
aGFyYWN0ZXJzIGZyb21WYXJpYW50S2V5OmV2ZW50LnBvcHVwVmFyaWFudF07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW1tbc2VsZiBfd2ViVmlld10gX1VJS2l0RGVsZWdhdGVGb3J3YXJk
ZXJdIGFkZElucHV0U3RyaW5nOmV2ZW50LmNoYXJhY3RlcnMgd2l0aEZsYWdzOmV2ZW50LmtleWJv
YXJkRmxhZ3NdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk87
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTk87Cit9Cisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKFdlYkNvcmU6
OkNhY2hlZEltYWdlKilwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZQogewogICAgIHJldHVybiBf
cHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U7CkBAIC01MzcyLDEyICs1OTQzLDE1
IEBAIC0gKHZvaWQpc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6KFdlYkNvcmU6OkNhY2hl
ZEltYWdlKilzb3VyY2UKICAgICAgICAgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291
cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwogICAgIF9wcml2YXRlLT5w
cm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IHNvdXJjZTsKIH0KKyNlbmRpZgogCiAjdW5kZWYg
Q09NTUFORF9QUk9MT0dVRQogCiAtICh2b2lkKV9sYXlvdXRJZk5lZWRlZAogeworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CisjZW5k
aWYKIAogICAgIGlmIChbc2VsZiBfbmVlZHNMYXlvdXRdKQogICAgICAgICBbc2VsZiBsYXlvdXRd
OwpAQCAtNTQwNCw2ICs1OTc4LDcgQEAgLSAoQk9PTClfbmVlZHNMYXlvdXQKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAtICh2b2lkKWF0dGFjaFJvb3RMYXllcjooQ0FMYXllciop
bGF5ZXIKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghX3ByaXZhdGUtPmxheWVySG9z
dGluZ1ZpZXcpIHsKICAgICAgICAgTlNWaWV3KiBob3N0aW5nVmlldyA9IFtbV2ViTGF5ZXJIb3N0
aW5nRmxpcHBlZFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W3NlbGYgYm91bmRzXV07CiAgICAg
ICAgIFtob3N0aW5nVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihOU1ZpZXdXaWR0aFNpemFibGUg
fCBOU1ZpZXdIZWlnaHRTaXphYmxlKV07CkBAIC01NDM4LDE2ICs2MDEzLDE5IEBAIC0gKHZvaWQp
YXR0YWNoUm9vdExheWVyOihDQUxheWVyKilsYXllcgogCiAgICAgaWYgKFdLRXhlY3V0YWJsZVdh
c0xpbmtlZE9uT3JCZWZvcmVMaW9uKCkpCiAgICAgICAgIFt2aWV3TGF5ZXIgc2V0R2VvbWV0cnlG
bGlwcGVkOllFU107CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIH0KIAogLSAodm9pZClkZXRh
Y2hSb290TGF5ZXIKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChfcHJpdmF0ZS0+bGF5
ZXJIb3N0aW5nVmlldykgewogICAgICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0
TGF5ZXI6bmlsXTsKICAgICAgICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldFdhbnRz
TGF5ZXI6Tk9dOwogICAgICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107CiAgICAgICAgIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gbmlsOwog
ICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKWRyYXdMYXllcjooQ0FMYXllciAqKWxheWVyIGlu
Q29udGV4dDooQ0dDb250ZXh0UmVmKWN0eApAQCAtNTQ2NSw3ICs2MDQzLDExIEBAIC0gKHZvaWQp
ZHJhd0xheWVyOihDQUxheWVyICopbGF5ZXIgaW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4CiAK
IC0gKEJPT0wpX3dlYl9pc0RyYXdpbmdJbnRvTGF5ZXIKIHsKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgcmV0dXJuIFlFUzsKKyNlbHNlCiAgICAgcmV0dXJuIF9wcml2YXRlLT5kcmF3aW5nSW50b0xh
eWVyOworI2VuZGlmCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CkBAIC01NDc0LDYgKzYwNTYsNyBAQCBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmll
dyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0KQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TQXJy
YXkgKil2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0CiB7CiAgICAgc3RhdGljIE5TQXJyYXkg
KnZhbGlkQXR0cmlidXRlczsKQEAgLTU1MTcsNiArNjEwMCw3IEBAIC0gKE5TQXR0cmlidXRlZFN0
cmluZyAqKXRleHRTdG9yYWdlCiAgICAgLy8gV2UgaGF2ZSB0byByZXR1cm4gYW4gZW1wdHkgc3Ry
aW5nIHJhdGhlciB0aGFuIG51bGwgdG8gcHJldmVudCBUU00gZnJvbSBjYWxsaW5nIC1zdHJpbmcK
ICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0IDogW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKIH0KKyNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQogCiAtIChOU1VJbnRlZ2VyKWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQp
dGhlUG9pbnQKIHsKQEAgLTU2MDAsNiArNjE4NCw3IEBAIC0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TQXR0cmli
dXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2UpbnNSYW5n
ZQogewogICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKQEAgLTU2Mjks
NiArNjIxNCw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdG
cm9tUmFuZ2U6KE5TUmFuZ2UpbnNSYW5nZQogICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVk
U3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IFwiJUBcIiIsIG5zUmFuZ2UubG9jYXRpb24s
IG5zUmFuZ2UubGVuZ3RoLCBbcmVzdWx0IHN0cmluZ10pOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CisjZW5kaWYKIAogLSAoTlNJbnRlZ2VyKWNvbnZlcnNhdGlvbklkZW50aWZpZXIKIHsKQEAgLTU2
NjgsNiArNjI1NCw3IEBAIC0gKHZvaWQpdW5tYXJrVGV4dAogICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0
YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBW
ZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiByZXN1bHQpCiB7CiAgICAgaW50IGxlbmd0aCA9
IFtbc3RyaW5nIHN0cmluZ10gbGVuZ3RoXTsKQEAgLTU2ODcsMTUgKzYyNzQsMTggQEAgc3RhdGlj
IHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3Rv
cjxDb21wb3NpdGlvblVuZGUKICAgICAgICAgaSA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVu
Z3RoOwogICAgIH0KIH0KKyNlbmRpZgogCiAtICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmlu
ZyBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCiB7CiAgICAgW3NlbGYgX2V4ZWN1
dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBCT09M
IGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVk
U3RyaW5nIGNsYXNzXV07CiAgICAgQVNTRVJUKGlzQXR0cmlidXRlZFN0cmluZyB8fCBbc3RyaW5n
IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogCiAgICAgTE9HKFRleHRJbnB1dCwg
InNldE1hcmtlZFRleHQ6XCIlQFwiIHNlbGVjdGVkUmFuZ2U6KCV1LCAldSkiLCBpc0F0dHJpYnV0
ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcsIG5ld1NlbFJhbmdlLmxvY2F0aW9u
LCBuZXdTZWxSYW5nZS5sZW5ndGgpOworI2VuZGlmCiAKICAgICAvLyBVc2UgcG9pbnRlciB0byBn
ZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlF
dmVudHMuCiAgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CkBAIC01NzE2
LDYgKzYzMDYsNyBAQCAtICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJh
bmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCiAgICAgTlNTdHJpbmcgKnRleHQ7CiAgICAgTlNSYW5n
ZSByZXBsYWNlbWVudFJhbmdlID0geyBOU05vdEZvdW5kLCAwIH07CiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKICAgICAgICAgLy8gRklYTUU6IFdl
IGlnbm9yZSBtb3N0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBhbiBpbnB1dCBtZXRo
b2QgY2Fubm90IHNwZWNpZnkgZS5nLiBhIGZvbnQgb3IgYSBnbHlwaCB2YXJpYXRpb24uCiAgICAg
ICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107CkBAIC01NzI4LDYgKzYzMTksNyBAQCAtICh2b2lk
KXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJh
bmdlCiAKICAgICAgICAgZXh0cmFjdFVuZGVybGluZXMoc3RyaW5nLCB1bmRlcmxpbmVzKTsKICAg
ICB9IGVsc2UKKyNlbmRpZgogICAgICAgICB0ZXh0ID0gc3RyaW5nOwogCiAgICAgaWYgKHJlcGxh
Y2VtZW50UmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKQEAgLTU3MzYsNiArNjMyOCwxNSBA
QCAtICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihOU1Jhbmdl
KW5ld1NlbFJhbmdlCiAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5zZXRDb21wb3NpdGlvbih0ZXh0
LCB1bmRlcmxpbmVzLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShuZXdTZWxSYW5n
ZSkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAodm9pZCltYXJrZWRUZXh0VXBkYXRlOihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIE5TU3RyaW5nICp0ZXh0ID0gW25v
dGlmaWNhdGlvbiBvYmplY3RdOworICAgIE5TUmFuZ2UgcmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBb
dGV4dCBsZW5ndGhdKTsKKyAgICBbc2VsZiBzZXRNYXJrZWRUZXh0OnRleHQgc2VsZWN0ZWRSYW5n
ZTpyYW5nZV07Cit9CisjZW5kaWYKKwogLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwp
c2VsZWN0b3IKIHsKICAgICBMT0coVGV4dElucHV0LCAiZG9Db21tYW5kQnlTZWxlY3RvcjpcIiVz
XCIiLCBzZWxfZ2V0TmFtZShzZWxlY3RvcikpOwpAQCAtNTc2OCw2ICs2MzY5LDcgQEAgLSAodm9p
ZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKICAgICAgICAgICAgIEVkaXRvcjo6
Q29tbWFuZCBjb21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsK
ICAgICAgICAgICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpCiAgICAgICAgICAgICAgICAg
ZXZlbnRXYXNIYW5kbGVkID0gY29tbWFuZC5leGVjdXRlKGV2ZW50KTsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgV2ViS2l0IGRv
ZXMgbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kLCB3ZSBuZWVkIHRvIHBhc3MgdGhlIHNlbGVjdG9y
IHRvIHN1cGVyLgogICAgICAgICAgICAgICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFu
ZEJ5U2VsZWN0b3IgPSBzZWxlY3RvcjsKQEAgLTU3ODIsNiArNjM4NCw3IEBAIC0gKHZvaWQpZG9D
b21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCiAKICAgICAgICAgICAgICAgICBfcHJpdmF0
ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gMDsKICAgICAgICAgICAgIH0KKyNl
bmRpZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhcmFtZXRlcnMpCkBAIC01NzkzLDEwICs2
Mzk2LDEyIEBAIC0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCiAKIC0g
KHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBC
T09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1
dGVkU3RyaW5nIGNsYXNzXV07CiAgICAgQVNTRVJUKGlzQXR0cmlidXRlZFN0cmluZyB8fCBbc3Ry
aW5nIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogCiAgICAgTE9HKFRleHRJbnB1
dCwgImluc2VydFRleHQ6XCIlQFwiIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmluZyBzdHJp
bmddIDogc3RyaW5nKTsKKyNlbmRpZgogCiAgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1Bh
cmFtZXRlcnM7CiAgICAgaWYgKHBhcmFtZXRlcnMpCkBAIC01ODA4LDYgKzY0MTMsNyBAQCAtICh2
b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwogICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBj
b3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpOwogCiAgICAg
VmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
czsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKICNp
ZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OlRl
eHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4gdGV4dEFsdGVybmF0aXZlczsKQEAgLTU4MjUsNiArNjQz
MSw3IEBAIC0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCiAgICAgICAgICAgICBpc0Zyb21J
bnB1dE1ldGhvZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UKKyNlbmRpZgogICAgICAg
ICB0ZXh0ID0gc3RyaW5nOwogCiAgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQgPSBwYXJhbWV0ZXJz
ID8gcGFyYW1ldGVycy0+ZXZlbnQgOiAwOwpAQCAtNTg2Nyw2ICs2NDc0LDcgQEAgLSAodm9pZClp
bnNlcnRUZXh0OihpZClzdHJpbmcKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRh
dGlvbkhhZFNpZGVFZmZlY3RzIHw9IGV2ZW50SGFuZGxlZDsKIH0KIAorI2lmICFQTEFURk9STShJ
T1MpCiAtICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlCiB7CiAgICAgaWYgKCFbW3NlbGYg
d2luZG93XSBpc0tleVdpbmRvd10gfHwgKFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXSAh
PSBzZWxmICYmICFfcHJpdmF0ZS0+X2ZvcmNlVXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSkpIHsKQEAg
LTU4OTcsOSArNjUwNSwxMSBAQCAtICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlCiAgICAg
ICAgIFRTTVJlbW92ZURvY3VtZW50UHJvcGVydHkoMCwga1RTTURvY3VtZW50RW5hYmxlZElucHV0
U291cmNlc1Byb3BlcnR5VGFnKTsKICAgICB9CiB9CisjZW5kaWYKIAogLSAodm9pZClfdXBkYXRl
U2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNTkyOSw2ICs2NTM5LDE2IEBAIC0gKHZvaWQpX3VwZGF0ZVNl
bGVjdGlvbkZvcklucHV0TWFuYWdlcgogICAgICAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJ
bnB1dE1hbmFnZXJdIG1hcmtlZFRleHRBYmFuZG9uZWQ6c2VsZl07CiAgICAgfQogI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHBvcAorI2Vsc2UKKyAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBj
b2RlOgorICAgIC8vCisgICAgLy8gICAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCktPmdldENv
bXBvc2l0aW9uU2VsZWN0aW9uKHN0YXJ0LCBlbmQpKQorICAgIC8vICAgICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9u
KCk7CisgICAgLy8KKyAgICAvLworICAgIC8vIHdvdWxkIHdvcmsgaWYgZ2V0Q29tcG9zaXRpb25T
ZWxlY3Rpb24gcmV0dXJuZWQgZmFsc2Ugd2hlbiBjb21wb3NpdGlvbiAhPSBzZWxlY3Rpb24uCisg
ICAgLy8gV2h5IGRvZXNuJ3QgaXQ/ICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzY4MzcyNTI+IGZvciBx
dWVzdGlvbnMuCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogfQogCiBAZW5kCkBAIC01OTY2LDcg
KzY1ODYsMTEgQEAgLSAoTlNWaWV3ICopc2VsZWN0aW9uVmlldwogICAgIHJldHVybiBzZWxmOwog
fQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TSW1hZ2UgKilzZWxlY3Rpb25JbWFnZUZvcmNp
bmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKKyNlbHNlCistIChDR0ltYWdlUmVmKXNl
bGVjdGlvbkltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAorI2VuZGlm
CiB7CiAgICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkKICAgICAgICAgcmV0dXJuIG5pbDsK
QEAgLTU5ODQsNiArNjYwOCw3IEBAIC0gKE5TUmVjdClzZWxlY3Rpb25JbWFnZVJlY3QKICAgICBy
ZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uKCkuYm91bmRzKCk7CiB9CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogLSAoTlNBcnJheSAqKXBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlv
bgogewogICAgIGlmIChbc2VsZiBfY2FuU21hcnRDb3B5T3JEZWxldGVdKSB7CkBAIC01OTk5LDYg
KzY2MjQsNyBAQCAtICh2b2lkKXdyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNB
cnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZQogewogICAgIFtzZWxmIF93cml0ZVNl
bGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQg
Y2FjaGVkQXR0cmlidXRlZFN0cmluZzpuaWxdOwogfQorI2VuZGlmCiAKIC0gKHZvaWQpc2VsZWN0
QWxsCiB7CkBAIC02MDIwLDYgKzY2NDYsNyBAQCAtIChOU1N0cmluZyAqKXN0cmluZwogICAgIHJl
dHVybiBbW3NlbGYgX2ZyYW1lXSBfc3RyaW5nRm9yUmFuZ2U6W3NlbGYgX2RvY3VtZW50UmFuZ2Vd
XTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfYXR0
cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7CiAgICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwpAQCAtNjA0NCwxMiArNjY3MSwxNCBAQCAt
IChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCiAgICAgfQogICAgIHJldHVy
biBhdHRyaWJ1dGVkU3RyaW5nOwogfQorI2VuZGlmCiAKIC0gKE5TU3RyaW5nICopc2VsZWN0ZWRT
dHJpbmcKIHsKICAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX3NlbGVjdGVkU3RyaW5nXTsKIH0K
IAorI2lmICFQTEFURk9STShJT1MpCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilzZWxlY3RlZEF0
dHJpYnV0ZWRTdHJpbmcKIHsKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcgPSBbc2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJh
bmdlXV07CkBAIC02MDYyLDYgKzY2OTEsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilzZWxl
Y3RlZEF0dHJpYnV0ZWRTdHJpbmcKICAgICB9CiAgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7
CiB9CisjZW5kaWYKIAogLSAoQk9PTClzdXBwb3J0c1RleHRFbmNvZGluZwogewpAQCAtNjE2OCw2
ICs2Nzk4LDcgQEAgKyAoTlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRhdGFVUkwKIAogQGVuZAogCisj
aWYgIVBMQVRGT1JNKElPUykKIEBpbXBsZW1lbnRhdGlvbiBXZWJSZXNwb25kZXJDaGFpblNpbmsK
IAogLSAoaWQpaW5pdFdpdGhSZXNwb25kZXJDaGFpbjooTlNSZXNwb25kZXIgKiljaGFpbgpAQCAt
NjIwOCwzICs2ODM5LDQgQEAgLSAoQk9PTCl0cnlUb1BlcmZvcm06KFNFTClhY3Rpb24gd2l0aDoo
aWQpb2JqZWN0CiB9CiAKIEBlbmQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJIVE1MVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAppbmRleCAwOGU4Y2YzYTk4MzNmMWRlZGQ4ODYwMGIy
ZGM0MzMzYTE3MDQ0OGUzLi45ODc1NDM5YTYxZGM2MmZhYThlMWIxZmE1OTE0YWIzMDc3ZGM0ZjEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJu
YWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwu
aApAQCAtNDIsMTEgKzQyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQGludGVyZmFjZSBX
ZWJIVE1MVmlldyAoV2ViSW50ZXJuYWwpCiAtICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkOworI2lm
ICFQTEFURk9STShJT1MpCiAtICh2b2lkKV91cGRhdGVGb250UGFuZWw7CisjZW5kaWYKIC0gKEJP
T0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlOwogCiAtIChpZCA8V2ViSFRNTEhpZ2hsaWdodGVyPilf
aGlnaGxpZ2h0ZXJGb3JUeXBlOihOU1N0cmluZyopdHlwZTsKIC0gKFdlYkZyYW1lICopX2ZyYW1l
OworI2lmICFQTEFURk9STShJT1MpCiAtICh2b2lkKV9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVu
dTooaWQpc2VuZGVyOwogLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYkNvcmU6OktleWJv
YXJkRXZlbnQgKilldmVudCBzYXZpbmdDb21tYW5kczooQk9PTClzYXZpbmdDb21tYW5kczsKIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwpAQCAtNTYsNiArNTksOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAtICh2b2lkKXRvZ2dsZUdyYW1tYXJDaGVja2luZzooaWQpc2VuZGVyOwogLSAoV2Vi
Q29yZTo6Q2FjaGVkSW1hZ2UqKXByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOwogLSAodm9pZClz
ZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTooV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXNvdXJj
ZTsKKyNlbHNlCistIChCT09MKV9oYW5kbGVFZGl0aW5nS2V5RXZlbnQ6KFdlYkNvcmU6OktleWJv
YXJkRXZlbnQgKilldmVudDsKKyNlbmRpZgogLSAodm9pZClfd2ViX3VwZGF0ZUxheW91dEFuZFN0
eWxlSWZOZWVkZWRSZWN1cnNpdmU7CiAtICh2b2lkKV9kZXN0cm95QWxsV2ViUGx1Z2luczsKIC0g
KEJPT0wpX25lZWRzTGF5b3V0OwpAQCAtNjYsNCArNzIsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogLSAoQk9PTClfd2ViX2lzRHJhd2luZ0ludG9MYXllcjsKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oSU9TKQorLSAodm9pZClfbGF5b3V0SWZOZWVkZWQ7CisjZW5kaWYKKwogQGVuZAorCisjaWYg
UExBVEZPUk0oSU9TKQorQGludGVyZmFjZSBXZWJIVE1MVmlldyAoUmVtb3ZlZEFwcEtpdFN1cGVy
Y2xhc3NNZXRob2RzKQorLSAodm9pZClkZWxldGU6KGlkKXNlbmRlcjsKKy0gKHZvaWQpdHJhbnNw
b3NlOihpZClzZW5kZXI7CistIChCT09MKWhhc01hcmtlZFRleHQ7CitAZW5kCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGRG9jdW1lbnRFeHRyYXMu
aCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGRG9jdW1lbnRFeHRyYXMuaAppbmRl
eCAwZGNlNDNlODA4OTkwMmY2MDdhYmIwMDNjMmEwMWJjMzY3Nzc3MTNlLi5hODhjZjJmYWVjZTAz
YzhiNWExNWVkMmE5YzdiYjI2ZmI4MDliNzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlBERkRvY3VtZW50RXh0cmFzLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQREZEb2N1bWVudEV4dHJhcy5oCkBAIC0yMyw2ICsyMywxMiBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAorI2lmICFQTEFURk9STShJT1MpCiBAY2xhc3MgUERGRG9jdW1lbnQ7
CisjZW5kaWYKIAorTlNBcnJheSAqYWxsU2NyaXB0c0luUERGRG9jdW1lbnQoQ0dQREZEb2N1bWVu
dFJlZik7CisKKyNpZiAhUExBVEZPUk0oSU9TKQogTlNBcnJheSAqYWxsU2NyaXB0c0luUERGRG9j
dW1lbnQoUERGRG9jdW1lbnQgKik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlBERkRvY3VtZW50RXh0cmFzLm1tCmluZGV4IDI5NWFhODU4OWE5Y2YxMmRmMDc5
OWVmNTM3ODk1OWZmMjJjYzNlMDYuLmQ0NmVkMGE3ZmE3MTZmYWI2OTI3NDdhMjVjM2IzNzIxZThi
NGFjOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGRG9jdW1l
bnRFeHRyYXMubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZEb2N1bWVu
dEV4dHJhcy5tbQpAQCAtMjgsNyArMjgsMTAgQEAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwu
aCIKICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
I2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0IDxQREZLaXQvUERGRG9jdW1lbnQuaD4KKyNlbmRp
ZgogCiBzdGF0aWMgdm9pZCBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQ
REZEaWN0aW9uYXJ5UmVmIHN1YnRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGUmVwcmVzZW50
YXRpb24uaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGUmVwcmVzZW50YXRpb24u
aAppbmRleCBiZTQwYWUxZTFmMmNkZGFkNmI4NzU1ZjIyYTNkYTZkZjdkN2Y1MWRlLi4yMWMwZjRi
NzVjZmRhOTc2ZGRmZjc2ZWVjNjE4MmM2NjYwNjhiYTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlBERlJlcHJlc2VudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJQREZSZXByZXNlbnRhdGlvbi5oCkBAIC0yNiw2ICsyNiw4IEBACiAg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJXZWJEb2N1
bWVudC5oIgogCiBAcHJvdG9jb2wgV2ViRG9jdW1lbnRSZXByZXNlbnRhdGlvbjsKQEAgLTMzLDMg
KzM1LDUgQEAKIEBpbnRlcmZhY2UgV2ViUERGUmVwcmVzZW50YXRpb24gOiBOU09iamVjdCA8V2Vi
RG9jdW1lbnRSZXByZXNlbnRhdGlvbj4KICsgKE5TQXJyYXkgKilzdXBwb3J0ZWRNSU1FVHlwZXM7
CiBAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJQREZSZXByZXNlbnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERG
UmVwcmVzZW50YXRpb24ubW0KaW5kZXggM2Q3ZGU0ZDU3OTlhMTQ2MTU0YWJiNTAyNzYyODA5MmQ3
Y2ZjMjEyNC4uNjBmOWZkMTQ3ODc3OTFlYWRkZDI3NDIwZjcwZjYyMjk2ZWUwNWUwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZSZXByZXNlbnRhdGlvbi5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlJlcHJlc2VudGF0aW9uLm1tCkBA
IC0yNiw2ICsyNiw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQor
CiAjaW1wb3J0ICJXZWJQREZSZXByZXNlbnRhdGlvbi5oIgogCiAjaW1wb3J0ICJXZWJEYXRhU291
cmNlUHJpdmF0ZS5oIgpAQCAtMTY0LDMgKzE2Niw1IEBAIC0gKE5TU3RyaW5nICopdGl0bGUKIH0K
IAogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJQREZWaWV3LmgKaW5kZXggZTQ4MGExYjhmNGUxOGYzYjAyYjA1YzdiOTcyNmFjNjkyOTll
Y2EyZC4uYzYxZWFhNjk1Y2YxNmU0NmZlMWU0NGE4MmIyZDAxZmY2NDExY2E5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3LmgKKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3LmgKQEAgLTI2LDYgKzI2LDggQEAKICAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbXBvcnQgPFdlYktpdC9XZWJEb2N1
bWVudEludGVybmFsLmg+CiAKIEBjbGFzcyBQREZEb2N1bWVudDsKQEAgLTU0LDMgKzU2LDUgQEAK
IC0gKFBERkRvY3VtZW50ICopUERGRG9jdW1lbnQ7CiAKIEBlbmQKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0gYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0KaW5kZXggMWM5NTc2NmFkMTRhMTQyZDgyMmU0
NDk3MTI3ZGRhODdlODY2NTViNC4uODkzNTBjNWE4NDI0OWQyMmM4MzAzZTljNjVmYTdjZjFlM2Y1
MzFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQpAQCAtMjYsNiAr
MjYsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2ltcG9y
dCAiV2ViUERGVmlldy5oIgogCiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKQEAgLTE1ODEs
MyArMTU4Myw1IEBAIC0gKE5TTWV0aG9kU2lnbmF0dXJlICopbWV0aG9kU2lnbmF0dXJlRm9yU2Vs
ZWN0b3I6KFNFTClzZWwKIH0KIAogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCmluZGV4IGZiOWExZWZi
MDAxYzlkZGEyYzg2YmVmZjM4NjY0OTk0MDE3NzVkNTEuLjdiZGIxMmNjZjliMmJmN2U0YjAzZmFl
NmVjMjNjOWNiOWVjMjYzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVm
ZXJlbmNlcy5tbQpAQCAtNTAsNiArNTAsMTIgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9JbWFnZVNvdXJjZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJD
b3JlVGhyZWFkTWVzc2FnZS5oPgorI2VuZGlmCisKIE5TU3RyaW5nICpXZWJQcmVmZXJlbmNlc0No
YW5nZWROb3RpZmljYXRpb24gPSBAIldlYlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiI7
CiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXNSZW1vdmVkTm90aWZpY2F0aW9uID0gQCJXZWJQcmVm
ZXJlbmNlc1JlbW92ZWROb3RpZmljYXRpb24iOwogTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2hh
bmdlZEludGVybmFsTm90aWZpY2F0aW9uID0gQCJXZWJQcmVmZXJlbmNlc0NoYW5nZWRJbnRlcm5h
bE5vdGlmaWNhdGlvbiI7CkBAIC0xMzcsNyArMTQzLDExIEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVs
IGNhY2hlTW9kZWxGb3JNYWluQnVuZGxlKHZvaWQpCiAgICAgICAgIGlmICghaXNMaW5rZWRBZ2Fp
bnN0V2ViS2l0KQogICAgICAgICAgICAgcmV0dXJuIFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdl
cjsgLy8gQXBwcyB0aGF0IGRvbid0IGxpbmsgYWdhaW5zdCBXZWJLaXQgcHJvYmFibHkgYXJlbid0
IG1lYW50IHRvIGJlIGJyb3dzZXJzLgogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgYm9v
bCBpc0xlZ2FjeUFwcCA9ICFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJ
T05fV0lUSF9DQUNIRV9NT0RFTF9BUEkpOworI2Vsc2UKKyAgICAgICAgYm9vbCBpc0xlZ2FjeUFw
cCA9IGZhbHNlOworI2VuZGlmCiAgICAgICAgIGlmIChpc0xlZ2FjeUFwcCkKICAgICAgICAgICAg
IHJldHVybiBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyOyAvLyBUbyBhdm9pZCByZWdyZXNz
aW9ucyBpbiBhcHBzIHRoYXQgZGVwZW5kZWQgb24gb2xkIFdlYktpdCdzIGxhcmdlIGNhY2hlLgog
CkBAIC0xNjEsMTQgKzE3MSwyNyBAQCBwdWJsaWM6CiAgICAgOiBhdXRvc2F2ZXMoTk8pCiAgICAg
LCBhdXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hlTW9kZWwoTk8pCiAgICAgLCBudW1XZWJWaWV3cygw
KQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIHJlYWRXcml0ZVF1ZXVlKGRpc3BhdGNoX3F1ZXVl
X2NyZWF0ZSgiY29tLmFwcGxlLldlYlByZWZlcmVuY2VzLlJlYWRXcml0ZVF1ZXVlIiwgRElTUEFU
Q0hfUVVFVUVfQ09OQ1VSUkVOVCkpCisjZW5kaWYKICAgICB7CiAgICAgfQogCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIH5XZWJQcmVmZXJlbmNlc1ByaXZhdGUoKQorICAgIHsKKyAgICAgICAgZGlz
cGF0Y2hfcmVsZWFzZShyZWFkV3JpdGVRdWV1ZSk7CisgICAgfQorI2VuZGlmCisKICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gdmFsdWVzOwogICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gaWRlbnRpZmllcjsKICAgICBCT09MIGF1dG9zYXZlczsKICAgICBCT09MIGF1dG9tYXRpY2Fs
bHlEZXRlY3RzQ2FjaGVNb2RlbDsKICAgICB1bnNpZ25lZCBudW1XZWJWaWV3czsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgZGlzcGF0Y2hfcXVldWVfdCByZWFkV3JpdGVRdWV1ZTsKKyNlbmRpZgog
fTsKIAogQGludGVyZmFjZSBXZWJQcmVmZXJlbmNlcyAoV2ViRm9yd2FyZERlY2xhcmF0aW9ucykK
QEAgLTE4Niw2ICsyMDksMTIgQEAgLSAodm9pZClfc2V0VW5zaWduZWRMb25nTG9uZ1ZhbHVlOih1
bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKWsKIC0gKHVuc2lnbmVk
IGxvbmcgbG9uZylfdW5zaWduZWRMb25nTG9uZ1ZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleTsK
IEBlbmQKIAorI2lmIFBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgV2ViUHJlZmVyZW5jZXMgKCkK
Ky0gKGlkKWluaXRXaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilhbklkZW50aWZpZXIgc2VuZENo
YW5nZU5vdGlmaWNhdGlvbjooQk9PTClzZW5kQ2hhbmdlTm90aWZpY2F0aW9uOworQGVuZAorI2Vu
ZGlmCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJQcmVmZXJlbmNlcwogCiAtIChpbnN0YW5jZXR5cGUp
aW5pdApAQCAtMjAzLDcgKzIzMiwxOCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdAogICAgIHJldHVy
biBbc2VsZiBpbml0V2l0aElkZW50aWZpZXI6ZmFrZUlkZW50aWZpZXJdOwogfQogCisjaWYgUExB
VEZPUk0oSU9TKQorLSAoaWQpaW5pdFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWFuSWRlbnRp
ZmllcgoreworICAgIHJldHVybiBbc2VsZiBpbml0V2l0aElkZW50aWZpZXI6YW5JZGVudGlmaWVy
IHNlbmRDaGFuZ2VOb3RpZmljYXRpb246WUVTXTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
SU9TKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilhbklk
ZW50aWZpZXIgc2VuZENoYW5nZU5vdGlmaWNhdGlvbjooQk9PTClzZW5kQ2hhbmdlTm90aWZpY2F0
aW9uCisjZWxzZQogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNTdHJpbmcg
KilhbklkZW50aWZpZXIKKyNlbmRpZgogewogICAgIFdlYlByZWZlcmVuY2VzICppbnN0YW5jZSA9
IFtbc2VsZiBjbGFzc10gX2dldEluc3RhbmNlRm9ySWRlbnRpZmllcjphbklkZW50aWZpZXJdOwog
ICAgIGlmIChpbnN0YW5jZSkgewpAQCAtMjIyLDggKzI2MiwxNSBAQCAtIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWFuSWRlbnRpZmllcgogCiAgICAgW1tzZWxm
IGNsYXNzXSBfc2V0SW5zdGFuY2U6c2VsZiBmb3JJZGVudGlmaWVyOl9wcml2YXRlLT5pZGVudGlm
aWVyLmdldCgpXTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoc2VuZENoYW5nZU5vdGlm
aWNhdGlvbikgeworICAgICAgICBbc2VsZiBfcG9zdFByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNh
dGlvbl07CisgICAgICAgIFtzZWxmIF9wb3N0Q2FjaGVNb2RlbENoYW5nZWROb3RpZmljYXRpb25d
OworICAgIH0KKyNlbHNlCiAgICAgW3NlbGYgX3Bvc3RQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmlj
YXRpb25dOwogICAgIFtzZWxmIF9wb3N0Q2FjaGVNb2RlbENoYW5nZWROb3RpZmljYXRpb25dOwor
I2VuZGlmCiAKICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTI4MCwyMyArMzI3LDQ3IEBAIC0gKHZv
aWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICopZW5jb2RlcgogewogICAgIGlmIChbZW5jb2Rl
ciBhbGxvd3NLZXllZENvZGluZ10pewogICAgICAgICBbZW5jb2RlciBlbmNvZGVPYmplY3Q6X3By
aXZhdGUtPmlkZW50aWZpZXIuZ2V0KCkgZm9yS2V5OkAiSWRlbnRpZmllciJdOworI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgZGlzcGF0Y2hfc3luYyhfcHJpdmF0ZS0+cmVhZFdyaXRlUXVldWUs
IF57CisjZW5kaWYKICAgICAgICAgW2VuY29kZXIgZW5jb2RlT2JqZWN0Ol9wcml2YXRlLT52YWx1
ZXMuZ2V0KCkgZm9yS2V5OkAiVmFsdWVzIl07CiAgICAgICAgIExPRyAoRW5jb2RpbmcsICJJZGVu
dGlmaWVyID0gJUAsIFZhbHVlcyA9ICVAXG4iLCBfcHJpdmF0ZS0+aWRlbnRpZmllci5nZXQoKSwg
X3ByaXZhdGUtPnZhbHVlcy5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB9KTsK
KyNlbmRpZgogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaW50IHZlcnNpb24gPSBXZWJQcmVm
ZXJlbmNlc1ZlcnNpb247CiAgICAgICAgIFtlbmNvZGVyIGVuY29kZVZhbHVlT2ZPYmpDVHlwZTpA
ZW5jb2RlKGludCkgYXQ6JnZlcnNpb25dOwogICAgICAgICBbZW5jb2RlciBlbmNvZGVPYmplY3Q6
X3ByaXZhdGUtPmlkZW50aWZpZXIuZ2V0KCldOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAg
ZGlzcGF0Y2hfc3luYyhfcHJpdmF0ZS0+cmVhZFdyaXRlUXVldWUsIF57CisjZW5kaWYKICAgICAg
ICAgW2VuY29kZXIgZW5jb2RlT2JqZWN0Ol9wcml2YXRlLT52YWx1ZXMuZ2V0KCldOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgfSk7CisjZW5kaWYKICAgICB9CiB9CiAKICsgKFdlYlByZWZl
cmVuY2VzICopc3RhbmRhcmRQcmVmZXJlbmNlcwogeworI2lmICFQTEFURk9STShJT1MpCiAgICAg
aWYgKF9zdGFuZGFyZFByZWZlcmVuY2VzID09IG5pbCkgewogICAgICAgICBfc3RhbmRhcmRQcmVm
ZXJlbmNlcyA9IFtbV2ViUHJlZmVyZW5jZXMgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpuaWxd
OwogICAgICAgICBbX3N0YW5kYXJkUHJlZmVyZW5jZXMgc2V0QXV0b3NhdmVzOllFU107CiAgICAg
fQorI2Vsc2UKKyAgICBpZiAoX3N0YW5kYXJkUHJlZmVyZW5jZXMpCisgICAgICAgIHJldHVybiBf
c3RhbmRhcmRQcmVmZXJlbmNlczsKKworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3QgcHJlZDsK
KyAgICBkaXNwYXRjaF9vbmNlKCZwcmVkLCBeeworICAgICAgICBfc3RhbmRhcmRQcmVmZXJlbmNl
cyA9IFtbV2ViUHJlZmVyZW5jZXMgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpuaWwgc2VuZENo
YW5nZU5vdGlmaWNhdGlvbjpOT107CisgICAgICAgIFtfc3RhbmRhcmRQcmVmZXJlbmNlcyBfcG9z
dFByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbl07CisgICAgICAgIFtfc3RhbmRhcmRQcmVm
ZXJlbmNlcyBzZXRBdXRvc2F2ZXM6WUVTXTsKKyAgICB9KTsKKyNlbmRpZgogCiAgICAgcmV0dXJu
IF9zdGFuZGFyZFByZWZlcmVuY2VzOwogfQpAQCAtMzA0LDE4ICszNzUsMzEgQEAgKyAoV2ViUHJl
ZmVyZW5jZXMgKilzdGFuZGFyZFByZWZlcmVuY2VzCiAvLyBpZiB3ZSBldmVyIGhhdmUgbW9yZSB0
aGFuIG9uZSBXZWJQcmVmZXJlbmNlcyBvYmplY3QsIHRoaXMgd291bGQgbW92ZSB0byBpbml0CiAr
ICh2b2lkKWluaXRpYWxpemUKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NN
YWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CisjZW5k
aWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIHVuc2lnbmVkIGRlZmF1bHRNYXhpbXVt
SW1hZ2VTaXplID0gMjAgKiAxMDI0ICogMTAyNDsKKyNlbmRpZgogCiAgICAgTlNEaWN0aW9uYXJ5
ICpkaWN0ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgogICAg
ICAgICBAIlRpbWVzIiwgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFN0YW5kYXJkRm9udFBy
ZWZlcmVuY2VLZXksCiAgICAgICAgIEAiQ291cmllciIsICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0Rml4ZWRGb250UHJlZmVyZW5jZUtleSwKICAgICAgICAgQCJUaW1lcyIsICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRTZXJpZkZvbnRQcmVmZXJlbmNlS2V5LAogICAgICAgICBAIkhlbHZl
dGljYSIsICAgICAgICAgICAgICAgICAgIFdlYktpdFNhbnNTZXJpZkZvbnRQcmVmZXJlbmNlS2V5
LAorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIEAiQXBwbGUgQ2hhbmNlcnkiLCAgICAgICAg
ICAgICAgV2ViS2l0Q3Vyc2l2ZUZvbnRQcmVmZXJlbmNlS2V5LAorI2Vsc2UKKyAgICAgICAgQCJT
bmVsbCBSb3VuZGhhbmQiLCAgICAgICAgICAgICBXZWJLaXRDdXJzaXZlRm9udFByZWZlcmVuY2VL
ZXksCisjZW5kaWYKICAgICAgICAgQCJQYXB5cnVzIiwgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRGYW50YXN5Rm9udFByZWZlcmVuY2VLZXksCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBA
IkFwcGxlQ29sb3JFbW9qaSIsICAgICAgICAgICAgIFdlYktpdFBpY3RvZ3JhcGhGb250UHJlZmVy
ZW5jZUtleSwKKyNlbHNlCiAgICAgICAgIEAiQXBwbGUgQ29sb3IgRW1vamkiLCAgICAgICAgICAg
V2ViS2l0UGljdG9ncmFwaEZvbnRQcmVmZXJlbmNlS2V5LAorI2VuZGlmCiAgICAgICAgIEAiMCIs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TWluaW11bUZvbnRTaXplUHJlZmVyZW5j
ZUtleSwKICAgICAgICAgQCI5IiwgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRNaW5p
bXVtTG9naWNhbEZvbnRTaXplUHJlZmVyZW5jZUtleSwgCiAgICAgICAgIEAiMTYiLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0RGVmYXVsdEZvbnRTaXplUHJlZmVyZW5jZUtleSwKQEAg
LTMyNCwxNyArNDA4LDI4IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5j
ZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRVc2Vy
U3R5bGVTaGVldEVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBAIiIsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdFVzZXJTdHlsZVNoZWV0TG9jYXRpb25QcmVmZXJlbmNlS2V5
LAorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpO
T10sICAgV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXksCiAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0VGV4dEFyZWFzQXJlUmVzaXph
YmxlUHJlZmVyZW5jZUtleSwKKyNlbmRpZgogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6Tk9dLCAgIFdlYktpdFNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXRQcmVmZXJlbmNlS2V5
LAorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZ
RVNdLCAgV2ViS2l0SmF2YUVuYWJsZWRQcmVmZXJlbmNlS2V5LAorI2VuZGlmCiAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWRQcmVm
ZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktp
dFdlYlNlY3VyaXR5RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNQ
cmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdl
YktpdEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc1ByZWZlcmVuY2VLZXksCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdEph
dmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHlQcmVmZXJlbmNlS2V5LAorI2Vsc2UK
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRKYXZhU2NyaXB0
Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5UHJlZmVyZW5jZUtleSwKKyNlbmRpZgogICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdFBsdWdpbnNFbmFibGVkUHJl
ZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJL
aXREYXRhYmFzZXNFbmFibGVkUHJlZmVyZW5jZUtleSwKKyNpZiBQTEFURk9STShJT1MpCisgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0U3RvcmFnZVRyYWNrZXJF
bmFibGVkUHJlZmVyZW5jZUtleSwKKyNlbmRpZgogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6WUVTXSwgIFdlYktpdExvY2FsU3RvcmFnZUVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdEV4cGVyaW1lbnRhbE5v
dGlmaWNhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOllFU10sICBXZWJLaXRBbGxvd0FuaW1hdGVkSW1hZ2VzUHJlZmVyZW5jZUtleSwK
QEAgLTM0MiwxOCArNDM3LDI0IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdERpc3BsYXlJbWFnZXNLZXksCiAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0TG9hZFNpdGVJY29uc0tleSwK
ICAgICAgICAgQCIxODAwIiwgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRCYWNrRm9yd2Fy
ZENhY2hlRXhwaXJhdGlvbkludGVydmFsS2V5LAorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVu
Y2VLZXksCisjZW5kaWYKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBX
ZWJLaXRQcml2YXRlQnJvd3NpbmdFbmFibGVkUHJlZmVyZW5jZUtleSwKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdFJlc3Bl
Y3RTdGFuZGFyZFN0eWxlS2V5RXF1aXZhbGVudHNQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdFNob3dzVVJMc0luVG9vbFRpcHNQcmVm
ZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktp
dFNob3dzVG9vbFRpcE92ZXJUcnVuY2F0ZWRUZXh0UHJlZmVyZW5jZUtleSwKICAgICAgICAgQCIx
IiwgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQREZEaXNwbGF5TW9kZVByZWZlcmVu
Y2VLZXksCiAgICAgICAgIEAiMCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UERG
U2NhbGVGYWN0b3JQcmVmZXJlbmNlS2V5LAorI2VuZGlmCiAgICAgICAgIEAiMCIsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0VXNlU2l0ZVNwZWNpZmljU3Bvb2ZpbmdQcmVmZXJlbmNl
S2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpXZWJLaXRFZGl0YWJsZUxpbmtE
ZWZhdWx0QmVoYXZpb3JdLCBXZWJLaXRFZGl0YWJsZUxpbmtCZWhhdmlvclByZWZlcmVuY2VLZXks
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6V2Vi
VGV4dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNhbGx5SW5jbHVkZWRdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFRleHREaXJlY3Rpb25TdWJtZW51SW5j
bHVzaW9uQmVoYXZpb3JQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6Tk9dLCAgIFdlYktpdERPTVBhc3RlQWxsb3dlZFByZWZlcmVuY2VLZXksCisjZW5kaWYK
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRVc2VzUGFnZUNh
Y2hlUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Y2FjaGVN
b2RlbEZvck1haW5CdW5kbGUoKV0sIFdlYktpdENhY2hlTW9kZWxQcmVmZXJlbmNlS2V5LAogICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdFBhZ2VDYWNoZVN1cHBv
cnRzUGx1Z2luc1ByZWZlcmVuY2VLZXksCkBAIC0zNzMsMjEgKzQ3NCwzMSBAQCArICh2b2lkKWlu
aXRpYWxpemUKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIFdlYktpdENT
U1JlZ2lvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOllFU10sIFdlYktpdENTU0NvbXBvc2l0aW5nRW5hYmxlZFByZWZlcmVuY2VLZXksCiAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICBXZWJLaXRDU1NHcmlkTGF5b3V0
RW5hYmxlZFByZWZlcmVuY2VLZXksCisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9T
X1NJTVVMQVRPUikKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJL
aXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkUHJlZmVyZW5jZUtleSwKKyAgICAgICAgW05TTnVt
YmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3
aW5nUHJlZmVyZW5jZUtleSwKKyNlbHNlCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9v
bDpOT10sICBXZWJLaXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkUHJlZmVyZW5jZUtleSwKICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgIFdlYktpdENhbnZhc1VzZXNBY2Nl
bGVyYXRlZERyYXdpbmdQcmVmZXJlbmNlS2V5LAorI2VuZGlmCiAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0U2hvd0RlYnVnQm9yZGVyc1ByZWZlcmVuY2VLZXks
CiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0U2hvd1JlcGFp
bnRDb3VudGVyUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10sICBXZWJLaXRXZWJHTEVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdE11bHRpdGhyZWFkZWRXZWJHTEVuYWJsZWRQ
cmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgV2Vi
S2l0Rm9yY2VTb2Z0d2FyZVdlYkdMUmVuZGVyaW5nUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZFByZWZlcmVuY2VLZXksCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdEZyYW1lRmxhdHRlbmluZ0VuYWJsZWRQcmVmZXJl
bmNlS2V5LAorI2Vsc2UKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBX
ZWJLaXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkUHJlZmVyZW5jZUtleSwKKyNlbmRpZgogICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdFNwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpO
T10sICBXZWJLaXRETlNQcmVmZXRjaGluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdEZ1bGxTY3JlZW5FbmFibGVkUHJl
ZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJL
aXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0SHlwZXJsaW5rQXVkaXRpbmdF
bmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5P
XSwgICBXZWJLaXRVc2VQcmVIVE1MNVBhcnNlclF1aXJrc0tleSwKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdEFWRm91bmRh
dGlvbkVuYWJsZWRLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAg
V2ViS2l0TWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmVQcmVmZXJlbmNlS2V5LAogICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdE1lZGlhUGxheWJhY2tB
bGxvd3NJbmxpbmVQcmVmZXJlbmNlS2V5LApAQCAtNDAwLDEwICs1MTEsMjcgQEAgKyAodm9pZClp
bml0aWFsaXplCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0
U2hvdWxkRGlzcGxheVRleHREZXNjcmlwdGlvbnNQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdE5vdGlmaWNhdGlvbnNFbmFibGVkS2V5
LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdFNob3VsZFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uS2V5LAorI2Vsc2UKKyAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOk5PXSwgICBXZWJLaXRBVkZvdW5kYXRpb25FbmFibGVkS2V5LAorICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdE1lZGlhUGxheWJhY2tSZXF1aXJl
c1VzZXJHZXN0dXJlUHJlZmVyZW5jZUtleSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhC
b29sOk5PXSwgICBXZWJLaXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lUHJlZmVyZW5jZUtleSwK
KyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRNZWRpYVBsYXli
YWNrQWxsb3dzQWlyUGxheVByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoVW5zaWduZWRJbnQ6QXVkaW9TZXNzaW9uOjpOb25lXSwgIFdlYktpdEF1ZGlvU2Vzc2lvbkNh
dGVnb3J5T3ZlcnJpZGUsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6V2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0
aW9uQ2FjaGVUb3RhbFF1b3RhLAorCisgICAgICAgIC8vIFBlci1PcmlnaW4gUXVvdGEgb24gaU9T
IGlzIDI1TUIuIFdoZW4gdGhlIHF1b3RhIGlzIHJlYWNoZWQgZm9yIGEgcGFydGljdWxhciBvcmln
aW4KKyAgICAgICAgLy8gdGhlIHF1b3RhIGZvciB0aGF0IG9yaWdpbiBjYW4gYmUgaW5jcmVhc2Vk
LiBTZWUgYWxzbyB3ZWJWaWV3OmV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9y
U2VjdXJpdHlPcmlnaW46dG90YWxTcGFjZU5lZWRlZCBpbiBXZWJVSS9XZWJVSURlbGVnYXRlLm0u
CisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6KDI1ICogMTAyNCAqIDEwMjQp
XSwgV2ViS2l0QXBwbGljYXRpb25DYWNoZURlZmF1bHRPcmlnaW5RdW90YSwKKworICAgICAgICAv
LyBFbmFibGUgV2ViQXVkaW8gYnkgZGVmYXVsdCBpbiBhbGwgaU9TIFVJV2ViVmlld3MKKyAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICAgV2ViS2l0V2ViQXVkaW9FbmFibGVk
UHJlZmVyZW5jZUtleSwKKworICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwg
ICBXZWJLaXRTaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbktleSwKKyNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0
UmVxdWVzdEFuaW1hdGlvbkZyYW1lRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0V2FudHNCYWxhbmNlZFNldERlZmVyc0xv
YWRpbmdCZWhhdmlvcktleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwg
ICBXZWJLaXREaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWRLZXksCi0jaWYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOk5PXSwKICNlbHNlCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNd
LApAQCAtNDExLDYgKzUzOSwyNCBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRTY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5h
YmxlZEtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6V2ViQWxsb3dBbGxTdG9y
YWdlXSwgV2ViS2l0U3RvcmFnZUJsb2NraW5nUG9saWN5S2V5LAogICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdFBsdWdJblNuYXBzaG90dGluZ0VuYWJsZWRQcmVm
ZXJlbmNlS2V5LAorCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aFVuc2lnbmVkSW50OmRlZmF1bHRNYXhpbXVtSW1hZ2VTaXplXSwgV2ViS2l0TWF4aW11bUlt
YWdlU2l6ZVByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpO
T10sICAgV2ViS2l0VGVsZXBob25lUGFyc2luZ0VuYWJsZWRQcmVmZXJlbmNlS2V5LAorICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDotMV0sICAgICAgV2ViS2l0TGF5b3V0SW50ZXJ2YWxQ
cmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Oi0xLjBmXSwg
V2ViS2l0TWF4UGFyc2VEdXJhdGlvblByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpOT10sICAgICBXZWJLaXRBbGxvd011bHRpRWxlbWVudEltcGxpY2l0Rm9y
bVN1Ym1pc3Npb25QcmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dDotMV0sICAgICAgV2ViS2l0UGFnZUNhY2hlU2l6ZVByZWZlcmVuY2VLZXksCisgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoSW50Oi0xXSwgICAgICBXZWJLaXRPYmplY3RDYWNoZVNpemVQcmVm
ZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDotMV0sICAgICAgV2Vi
S2l0TlNVUkxNZW1vcnlDYWNoZVNpemVQcmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDotMV0sICAgICAgV2ViS2l0TlNVUkxEaXNrQ2FjaGVTaXplUHJlZmVyZW5j
ZUtleSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICAgIFdlYktpdEFs
d2F5c1JlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25QcmVmZXJlbmNlS2V5LAorICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpJbnRlcnBvbGF0aW9uTG93XSwgV2ViS2l0SW50ZXJwb2xh
dGlvblF1YWxpdHlQcmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6WUVTXSwgICAgV2ViS2l0UGFzc3dvcmRFY2hvRW5hYmxlZFByZWZlcmVuY2VLZXksCisgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Mi4wZl0sICBXZWJLaXRQYXNzd29yZEVjaG9E
dXJhdGlvblByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpO
T10sICAgICBXZWJLaXROZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkUHJlZmVyZW5jZUtl
eSwKKyAgICAgICAgQCIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdv
cmtJbnRlcmZhY2VOYW1lUHJlZmVyZW5jZUtleSwKKyNlbmRpZgogI2lmIEVOQUJMRShJT1NfVEVY
VF9BVVRPU0laSU5HKQogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OldLR2V0TWlu
aW11bVpvb21Gb250U2l6ZSgpXSwgV2ViS2l0TWluaW11bVpvb21Gb250U2l6ZVByZWZlcmVuY2VL
ZXksCiAjZW5kaWYKQEAgLTQzMCwxNSArNTc2LDE4IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAg
ICAgICAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6Tk9dLCAgIFdlYktpdFZpZGVvUGx1Z2luUHJveHlFbmFibGVkS2V5LAorI2Vsc2UKKyAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICAgV2ViS2l0VmlkZW9QbHVnaW5Qcm94
eUVuYWJsZWRLZXksCiAjZW5kaWYKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCBXZWJLaXRNZWRpYVNvdXJjZUVuYWJsZWRQcmVm
ZXJlbmNlS2V5LAogI2VuZGlmCiAgICAgICAgIG5pbF07CiAKLQorI2lmICFQTEFURk9STShJT1Mp
CiAgICAgLy8gVGhpcyB2YWx1ZSBzaG91bGRuJ3QgZXZlciBjaGFuZ2UsIHdoaWNoIGlzIGFzc3Vt
ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIFdlYktpdFBERkRpc3BsYXlNb2RlUHJlZmVyZW5j
ZUtleSBhYm92ZQogICAgIEFTU0VSVChrUERGRGlzcGxheVNpbmdsZVBhZ2VDb250aW51b3VzID09
IDEpOworI2VuZGlmCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10g
cmVnaXN0ZXJEZWZhdWx0czpkaWN0XTsKIH0KIApAQCAtNDU2LDcgKzYwNSwxNCBAQCAtIChOU1N0
cmluZyAqKWlkZW50aWZpZXIKIC0gKGlkKV92YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKIHsK
ICAgICBOU1N0cmluZyAqX2tleSA9IEtFWShrZXkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBf
X2Jsb2NrIGlkIG8gPSBuaWw7CisgICAgZGlzcGF0Y2hfc3luYyhfcHJpdmF0ZS0+cmVhZFdyaXRl
UXVldWUsIF57CisgICAgICAgIG8gPSBbX3ByaXZhdGUtPnZhbHVlcy5nZXQoKSBvYmplY3RGb3JL
ZXk6X2tleV07CisgICAgfSk7CisjZWxzZQogICAgIGlkIG8gPSBbX3ByaXZhdGUtPnZhbHVlcy5n
ZXQoKSBvYmplY3RGb3JLZXk6X2tleV07CisjZW5kaWYKICAgICBpZiAobykKICAgICAgICAgcmV0
dXJuIG87CiAgICAgbyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9i
amVjdEZvcktleTpfa2V5XTsKQEAgLTQ3Niw3ICs2MzIsMTMgQEAgLSAodm9pZClfc2V0U3RyaW5n
VmFsdWU6KE5TU3RyaW5nICopdmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKWtleQogICAgIGlmIChb
W3NlbGYgX3N0cmluZ1ZhbHVlRm9yS2V5OmtleV0gaXNFcXVhbFRvU3RyaW5nOnZhbHVlXSkKICAg
ICAgICAgcmV0dXJuOwogICAgIE5TU3RyaW5nICpfa2V5ID0gS0VZKGtleSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIGRpc3BhdGNoX2JhcnJpZXJfc3luYyhfcHJpdmF0ZS0+cmVhZFdyaXRlUXVl
dWUsIF57CisjZW5kaWYKICAgICBbX3ByaXZhdGUtPnZhbHVlcy5nZXQoKSBzZXRPYmplY3Q6dmFs
dWUgZm9yS2V5Ol9rZXldOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB9KTsKKyNlbmRpZgogICAg
IGlmIChfcHJpdmF0ZS0+YXV0b3NhdmVzKQogICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBzZXRPYmplY3Q6dmFsdWUgZm9yS2V5Ol9rZXldOwogICAgIFtzZWxm
IF9wb3N0UHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uXTsKQEAgLTQ5MywxMiArNjU1LDM4
IEBAIC0gKHZvaWQpX3NldEludGVnZXJWYWx1ZTooaW50KXZhbHVlIGZvcktleTooTlNTdHJpbmcg
KilrZXkKICAgICBpZiAoW3NlbGYgX2ludGVnZXJWYWx1ZUZvcktleTprZXldID09IHZhbHVlKQog
ICAgICAgICByZXR1cm47CiAgICAgTlNTdHJpbmcgKl9rZXkgPSBLRVkoa2V5KTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgZGlzcGF0Y2hfYmFycmllcl9zeW5jKF9wcml2YXRlLT5yZWFkV3JpdGVR
dWV1ZSwgXnsKKyNlbmRpZgogICAgIFtfcHJpdmF0ZS0+dmFsdWVzLmdldCgpIF93ZWJraXRfc2V0
SW50OnZhbHVlIGZvcktleTpfa2V5XTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgfSk7CisjZW5k
aWYKICAgICBpZiAoX3ByaXZhdGUtPmF1dG9zYXZlcykKICAgICAgICAgW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0SW50ZWdlcjp2YWx1ZSBmb3JLZXk6X2tleV07CiAg
ICAgW3NlbGYgX3Bvc3RQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb25dOwogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorLSAodW5zaWduZWQgaW50KV91bnNpZ25lZEludFZhbHVlRm9yS2V5OihO
U1N0cmluZyAqKWtleQoreworICAgIGlkIG8gPSBbc2VsZiBfdmFsdWVGb3JLZXk6a2V5XTsKKyAg
ICByZXR1cm4gW28gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih1bnNpZ25lZEludFZhbHVl
KV0gPyBbbyB1bnNpZ25lZEludFZhbHVlXSA6IDA7Cit9CisKKy0gKHZvaWQpX3NldFVuc2lnbmVk
SW50VmFsdWU6KHVuc2lnbmVkIGludCl2YWx1ZSBmb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7ICAg
IGlmIChbc2VsZiBfdW5zaWduZWRJbnRWYWx1ZUZvcktleTprZXldID09IHZhbHVlKQorICAgICAg
ICByZXR1cm47CisgICAgTlNTdHJpbmcgKl9rZXkgPSBLRVkoa2V5KTsKKyAgICBkaXNwYXRjaF9i
YXJyaWVyX3N5bmMoX3ByaXZhdGUtPnJlYWRXcml0ZVF1ZXVlLCBeeworICAgIFtfcHJpdmF0ZS0+
dmFsdWVzLmdldCgpIF93ZWJraXRfc2V0VW5zaWduZWRJbnQ6dmFsdWUgZm9yS2V5Ol9rZXldOwor
ICAgIH0pOworICAgIGlmIChfcHJpdmF0ZS0+YXV0b3NhdmVzKQorICAgICAgICBbW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhVbnNpZ25lZEludDp2YWx1ZV0gZm9yS2V5Ol9rZXldOworICAgIFtzZWxmIF9wb3N0UHJlZmVy
ZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uXTsKK30KKyNlbmRpZgorCiAtIChmbG9hdClfZmxvYXRW
YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKIHsKICAgICBpZCBvID0gW3NlbGYgX3ZhbHVlRm9y
S2V5OmtleV07CkBAIC01MTAsNyArNjk4LDEzIEBAIC0gKHZvaWQpX3NldEZsb2F0VmFsdWU6KGZs
b2F0KXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoW3NlbGYgX2Zsb2F0VmFs
dWVGb3JLZXk6a2V5XSA9PSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIE5TU3RyaW5nICpf
a2V5ID0gS0VZKGtleSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGRpc3BhdGNoX2JhcnJpZXJf
c3luYyhfcHJpdmF0ZS0+cmVhZFdyaXRlUXVldWUsIF57CisjZW5kaWYKICAgICBbX3ByaXZhdGUt
PnZhbHVlcy5nZXQoKSBfd2Via2l0X3NldEZsb2F0OnZhbHVlIGZvcktleTpfa2V5XTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgfSk7CisjZW5kaWYKICAgICBpZiAoX3ByaXZhdGUtPmF1dG9zYXZl
cykKICAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0Rmxv
YXQ6dmFsdWUgZm9yS2V5Ol9rZXldOwogICAgIFtzZWxmIF9wb3N0UHJlZmVyZW5jZXNDaGFuZ2Vk
Tm90aWZpY2F0aW9uXTsKQEAgLTUyNiw3ICs3MjAsMTMgQEAgLSAodm9pZClfc2V0Qm9vbFZhbHVl
OihCT09MKXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoW3NlbGYgX2Jvb2xW
YWx1ZUZvcktleTprZXldID09IHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgTlNTdHJpbmcg
Kl9rZXkgPSBLRVkoa2V5KTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgZGlzcGF0Y2hfYmFycmll
cl9zeW5jKF9wcml2YXRlLT5yZWFkV3JpdGVRdWV1ZSwgXnsKKyNlbmRpZgogICAgIFtfcHJpdmF0
ZS0+dmFsdWVzLmdldCgpIF93ZWJraXRfc2V0Qm9vbDp2YWx1ZSBmb3JLZXk6X2tleV07CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIH0pOworI2VuZGlmCiAgICAgaWYgKF9wcml2YXRlLT5hdXRvc2F2
ZXMpCiAgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEJv
b2w6dmFsdWUgZm9yS2V5Ol9rZXldOwogICAgIFtzZWxmIF9wb3N0UHJlZmVyZW5jZXNDaGFuZ2Vk
Tm90aWZpY2F0aW9uXTsKQEAgLTU0Myw3ICs3NDMsMTMgQEAgLSAodm9pZClfc2V0TG9uZ0xvbmdW
YWx1ZToobG9uZyBsb25nKXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoW3Nl
bGYgX2xvbmdMb25nVmFsdWVGb3JLZXk6a2V5XSA9PSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIE5TU3RyaW5nICpfa2V5ID0gS0VZKGtleSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGRp
c3BhdGNoX2JhcnJpZXJfc3luYyhfcHJpdmF0ZS0+cmVhZFdyaXRlUXVldWUsIF57CisjZW5kaWYK
ICAgICBbX3ByaXZhdGUtPnZhbHVlcy5nZXQoKSBfd2Via2l0X3NldExvbmdMb25nOnZhbHVlIGZv
cktleTpfa2V5XTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgfSk7CisjZW5kaWYKICAgICBpZiAo
X3ByaXZhdGUtPmF1dG9zYXZlcykKICAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c10gc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6dmFsdWVd
IGZvcktleTpfa2V5XTsKICAgICBbc2VsZiBfcG9zdFByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNh
dGlvbl07CkBAIC01NjAsNyArNzY2LDEzIEBAIC0gKHZvaWQpX3NldFVuc2lnbmVkTG9uZ0xvbmdW
YWx1ZToodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrCiAgICAg
aWYgKFtzZWxmIF91bnNpZ25lZExvbmdMb25nVmFsdWVGb3JLZXk6a2V5XSA9PSB2YWx1ZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIE5TU3RyaW5nICpfa2V5ID0gS0VZKGtleSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIGRpc3BhdGNoX2JhcnJpZXJfc3luYyhfcHJpdmF0ZS0+cmVhZFdyaXRlUXVl
dWUsIF57CisjZW5kaWYKICAgICBbX3ByaXZhdGUtPnZhbHVlcy5nZXQoKSBfd2Via2l0X3NldFVu
c2lnbmVkTG9uZ0xvbmc6dmFsdWUgZm9yS2V5Ol9rZXldOworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB9KTsKKyNlbmRpZgogICAgIGlmIChfcHJpdmF0ZS0+YXV0b3NhdmVzKQogICAgICAgICBbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRPYmplY3Q6W05TTnVtYmVyIG51
bWJlcldpdGhVbnNpZ25lZExvbmdMb25nOnZhbHVlXSBmb3JLZXk6X2tleV07CiAgICAgW3NlbGYg
X3Bvc3RQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb25dOwpAQCAtNjc2LDYgKzg4OCw3IEBA
IC0gKHZvaWQpc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopZW5jb2RpbmcK
ICAgICBbc2VsZiBfc2V0U3RyaW5nVmFsdWU6IGVuY29kaW5nIGZvcktleTogV2ViS2l0RGVmYXVs
dFRleHRFbmNvZGluZ05hbWVQcmVmZXJlbmNlS2V5XTsKIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiAtIChCT09MKXVzZXJTdHlsZVNoZWV0RW5hYmxlZAogewogICAgIHJldHVybiBbc2VsZiBfYm9v
bFZhbHVlRm9yS2V5OiBXZWJLaXRVc2VyU3R5bGVTaGVldEVuYWJsZWRQcmVmZXJlbmNlS2V5XTsK
QEAgLTcxMyw3ICs5MjYsNDIgQEAgLSAodm9pZClzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uOihO
U1VSTCAqKVVSTAogCiAgICAgW3NlbGYgX3NldFN0cmluZ1ZhbHVlOmxvY2F0aW9uU3RyaW5nIGZv
cktleTogV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXldOwogfQorI2Vs
c2UKKworLy8gVGhlc2UgbWV0aG9kcyBoYXZlIGhhZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgcmVt
b3ZlZCBvbiBpT1Mgc2luY2UgaXQKKy8vIGlzIHdyb25nIHRvIGhhdmUgc3VjaCBhIHNldHRpbmcg
c3RvcmVkIGluIHByZWZlcmVuY2VzIHRoYXQsIHdoZW4gcmVhZCwKKy8vIGlzIGFwcGxpZWQgdG8g
YWxsIFdlYlZpZXdzIGluIGEgaU9TIHByb2Nlc3MuIFN1Y2ggYSBkZXNpZ24gbWlnaHQgd29yawor
Ly8gT0sgZm9yIGFuIGFwcGxpY2F0aW9uIGxpa2UgU2FmYXJpIG9uIE1hYyBPUyBYLCB3aGVyZSB0
aGUgb25seSBXZWJWaWV3cworLy8gaW4gdXNlIGRpc3BsYXkgd2ViIGNvbnRlbnQgaW4gYSBzdHJh
aWdodGZvcndhcmQgbWFubmVyLiBIb3dldmVyLCBpdCBpcworLy8gd3JvbmcgZm9yIGlPUywgd2hl
cmUgV2ViVmlld3MgYXJlIHVzZWQgZm9yIHZhcmlvdXMgcHVycG9zZXMsIGxpa2UKKy8vIHRleHQg
ZWRpdGluZywgdGV4dCByZW5kZXJpbmcsIGFuZCBkaXNwbGF5aW5nIHdlYiBjb250ZW50LgorLy8g
CisvLyBJIGhhdmUgY2hhbmdlZCB0aGUgdXNlciBzdHlsZSBzaGVldCBtZWNoYW5pc20gdG8gYmUg
YSBwZXItV2ViVmlldworLy8gc2V0dGluZywgcmF0aGVyIHRoYW4gYSBwZXItcHJvY2VzcyBwcmVm
ZXJlbmNlLiBUaGlzIHNlZW1zIHRvIGdpdmUgdGhlCisvLyBiZWhhdmlvciB3ZSB3YW50IGZvciBp
T1MuCisKKy0gKEJPT0wpdXNlclN0eWxlU2hlZXRFbmFibGVkCit7CisgICAgcmV0dXJuIE5POwor
fQogCistICh2b2lkKXNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDooQk9PTClmbGFnCit7CisgICAg
Ly8gbm8tb3AKK30KKworLSAoTlNVUkwgKil1c2VyU3R5bGVTaGVldExvY2F0aW9uCit7CisgICAg
cmV0dXJuIG5pbDsKK30KKworLSAodm9pZClzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uOihOU1VS
TCAqKVVSTAoreworICAgIC8vIG5vLW9wCit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCisj
aWYgIVBMQVRGT1JNKElPUykKIC0gKEJPT0wpc2hvdWxkUHJpbnRCYWNrZ3JvdW5kcwogewogICAg
IHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OiBXZWJLaXRTaG91bGRQcmludEJhY2tncm91
bmRzUHJlZmVyZW5jZUtleV07CkBAIC03MjMsNiArOTcxLDcgQEAgLSAodm9pZClzZXRTaG91bGRQ
cmludEJhY2tncm91bmRzOihCT09MKWZsYWcKIHsKICAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOiBm
bGFnIGZvcktleTogV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXldOwog
fQorI2VuZGlmCiAKIC0gKEJPT0wpaXNKYXZhRW5hYmxlZAogewpAQCAtODA0LDYgKzEwNTMsNyBA
QCAtIChCT09MKWF1dG9zYXZlcwogICAgIHJldHVybiBfcHJpdmF0ZS0+YXV0b3NhdmVzOwogfQog
CisjaWYgIVBMQVRGT1JNKElPUykKIC0gKHZvaWQpc2V0VGFic1RvTGlua3M6KEJPT0wpZmxhZwog
ewogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6IGZsYWcgZm9yS2V5OiBXZWJLaXRUYWJUb0xpbmtz
UHJlZmVyZW5jZUtleV07CkBAIC04MTMsNiArMTA2Myw3IEBAIC0gKEJPT0wpdGFic1RvTGlua3MK
IHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRUYWJUb0xpbmtzUHJl
ZmVyZW5jZUtleV07CiB9CisjZW5kaWYKIAogLSAodm9pZClzZXRQcml2YXRlQnJvd3NpbmdFbmFi
bGVkOihCT09MKWZsYWcKIHsKQEAgLTgzNiwxMCArMTA4NywxMiBAQCAtIChCT09MKXVzZXNQYWdl
Q2FjaGUKIAogLSAodm9pZClfcG9zdENhY2hlTW9kZWxDaGFuZ2VkTm90aWZpY2F0aW9uCiB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7CiAgICAgICAg
IFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6bmlsIHdh
aXRVbnRpbERvbmU6Tk9dOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2VuZGlmCiAKICAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1l
OldlYlByZWZlcmVuY2VzQ2FjaGVNb2RlbENoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBvYmpl
Y3Q6c2VsZiB1c2VySW5mbzpuaWxdOwogfQpAQCAtODcxLDYgKzExMjQsMTIgQEAgQGVuZAogCiBA
aW1wbGVtZW50YXRpb24gV2ViUHJlZmVyZW5jZXMgKFdlYlByaXZhdGUpCiAKKyNpZiBQTEFURk9S
TShJT1MpICYmICEoX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gNjAwMDApCist
ICh2b2lkKSBzZXRXZWJJbnNwZWN0b3JTZXJ2ZXJFbmFibGVkOihCT09MKWZsYWcKK3sKK30KKyNl
bmRpZgorCiAtIChCT09MKWlzRE5TUHJlZmV0Y2hpbmdFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtz
ZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0RE5TUHJlZmV0Y2hpbmdFbmFibGVkUHJlZmVyZW5j
ZUtleV07CkBAIC05OTAsNiArMTI0OSw3IEBAIC0gKHZvaWQpc2V0WFNTQXVkaXRvckVuYWJsZWQ6
KEJPT0wpZmxhZwogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0WFNT
QXVkaXRvckVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAt
IChCT09MKXJlc3BlY3RTdGFuZGFyZFN0eWxlS2V5RXF1aXZhbGVudHMKIHsKICAgICByZXR1cm4g
W3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRSZXNwZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2
YWxlbnRzUHJlZmVyZW5jZUtleV07CkBAIC0xMDI5LDYgKzEyODksNyBAQCAtICh2b2lkKXNldFRl
eHRBcmVhc0FyZVJlc2l6YWJsZTooQk9PTClmbGFnCiB7CiAgICAgW3NlbGYgX3NldEJvb2xWYWx1
ZTogZmxhZyBmb3JLZXk6IFdlYktpdFRleHRBcmVhc0FyZVJlc2l6YWJsZVByZWZlcmVuY2VLZXld
OwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIC0gKEJPT0wpc2hyaW5rc1N0YW5kYWxv
bmVJbWFnZXNUb0ZpdAogewpAQCAtMTA5NSw2ICsxMzU2LDMzIEBAIC0gKE5TVGltZUludGVydmFs
KV9iYWNrRm9yd2FyZENhY2hlRXhwaXJhdGlvbkludGVydmFsCiAgICAgcmV0dXJuIChOU1RpbWVJ
bnRlcnZhbClbc2VsZiBfZmxvYXRWYWx1ZUZvcktleTpXZWJLaXRCYWNrRm9yd2FyZENhY2hlRXhw
aXJhdGlvbkludGVydmFsS2V5XTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKHNpemVfdClf
bWF4aW11bUltYWdlU2l6ZQoreworICAgIHJldHVybiBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBpbnRlZ2VyRm9yS2V5OldlYktpdE1heGltdW1JbWFnZVNpemVQcmVmZXJl
bmNlS2V5XTsKK30KKworLSAoQk9PTClfc3RhbmRhbG9uZQoreworICAgIHJldHVybiBbc2VsZiBf
Ym9vbFZhbHVlRm9yS2V5OldlYktpdFN0YW5kYWxvbmVQcmVmZXJlbmNlS2V5XTsKK30KKworLSAo
dm9pZClfc2V0U3RhbmRhbG9uZTooQk9PTClmbGFnCit7CisgICAgW3NlbGYgX3NldEJvb2xWYWx1
ZTpmbGFnIGZvcktleTpXZWJLaXRTdGFuZGFsb25lUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZv
aWQpX3NldFRlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICBb
c2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdFRlbGVwaG9uZVBhcnNpbmdFbmFi
bGVkUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKEJPT0wpX3RlbGVwaG9uZU51bWJlclBhcnNpbmdF
bmFibGVkCit7CisgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0VGVsZXBo
b25lUGFyc2luZ0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxF
KElPU19URVhUX0FVVE9TSVpJTkcpCiAtICh2b2lkKV9zZXRNaW5pbXVtWm9vbUZvbnRTaXplOihm
bG9hdClzaXplCiB7CkBAIC0xMTA3LDYgKzEzOTUsMTMwIEBAIC0gKGZsb2F0KV9taW5pbXVtWm9v
bUZvbnRTaXplCiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKHZvaWQpX3NldExh
eW91dEludGVydmFsOihpbnQpbAoreworICAgIFtzZWxmIF9zZXRJbnRlZ2VyVmFsdWU6bCBmb3JL
ZXk6V2ViS2l0TGF5b3V0SW50ZXJ2YWxQcmVmZXJlbmNlS2V5XTsKK30KKworLSAoaW50KV9sYXlv
dXRJbnRlcnZhbAoreworICAgIHJldHVybiBbc2VsZiBfaW50ZWdlclZhbHVlRm9yS2V5OldlYktp
dExheW91dEludGVydmFsUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpX3NldE1heFBhcnNl
RHVyYXRpb246KGZsb2F0KWQKK3sKKyAgICBbc2VsZiBfc2V0RmxvYXRWYWx1ZTpkIGZvcktleTpX
ZWJLaXRNYXhQYXJzZUR1cmF0aW9uUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKGZsb2F0KV9tYXhQ
YXJzZUR1cmF0aW9uCit7CisgICAgcmV0dXJuIFtzZWxmIF9mbG9hdFZhbHVlRm9yS2V5OldlYktp
dE1heFBhcnNlRHVyYXRpb25QcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClfc2V0UGFnZUNh
Y2hlU2l6ZTooaW50KXNpemUKK3sKKyAgICBbc2VsZiBfc2V0SW50ZWdlclZhbHVlOnNpemUgZm9y
S2V5OldlYktpdFBhZ2VDYWNoZVNpemVQcmVmZXJlbmNlS2V5XTsKK30KKworLSAoaW50KV9wYWdl
Q2FjaGVTaXplCit7CisgICAgcmV0dXJuIFtzZWxmIF9pbnRlZ2VyVmFsdWVGb3JLZXk6V2ViS2l0
UGFnZUNhY2hlU2l6ZVByZWZlcmVuY2VLZXldOworfQorCistICh2b2lkKV9zZXRPYmplY3RDYWNo
ZVNpemU6KGludClzaXplCit7CisgICAgW3NlbGYgX3NldEludGVnZXJWYWx1ZTpzaXplIGZvcktl
eTpXZWJLaXRPYmplY3RDYWNoZVNpemVQcmVmZXJlbmNlS2V5XTsKK30KKworLSAoaW50KV9vYmpl
Y3RDYWNoZVNpemUKK3sKKyAgICByZXR1cm4gW3NlbGYgX2ludGVnZXJWYWx1ZUZvcktleTpXZWJL
aXRPYmplY3RDYWNoZVNpemVQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClfc2V0TlNVUkxN
ZW1vcnlDYWNoZVNpemU6KGludClzaXplCit7CisgICAgW3NlbGYgX3NldEludGVnZXJWYWx1ZTpz
aXplIGZvcktleTpXZWJLaXROU1VSTE1lbW9yeUNhY2hlU2l6ZVByZWZlcmVuY2VLZXldOworfQor
CistIChpbnQpX05TVVJMTWVtb3J5Q2FjaGVTaXplCit7CisgICAgcmV0dXJuIFtzZWxmIF9pbnRl
Z2VyVmFsdWVGb3JLZXk6V2ViS2l0TlNVUkxNZW1vcnlDYWNoZVNpemVQcmVmZXJlbmNlS2V5XTsK
K30KKworLSAodm9pZClfc2V0TlNVUkxEaXNrQ2FjaGVTaXplOihpbnQpc2l6ZQoreworICAgIFtz
ZWxmIF9zZXRJbnRlZ2VyVmFsdWU6c2l6ZSBmb3JLZXk6V2ViS2l0TlNVUkxEaXNrQ2FjaGVTaXpl
UHJlZmVyZW5jZUtleV07Cit9CisKKy0gKGludClfTlNVUkxEaXNrQ2FjaGVTaXplCit7CisgICAg
cmV0dXJuIFtzZWxmIF9pbnRlZ2VyVmFsdWVGb3JLZXk6V2ViS2l0TlNVUkxEaXNrQ2FjaGVTaXpl
UHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpX3NldEFsd2F5c1VzZUJhc2VsaW5lT2ZQcmlt
YXJ5Rm9udDooQk9PTClmbGFnCit7CisgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktl
eTpXZWJLaXRBbHdheXNVc2VCYXNlbGluZU9mUHJpbWFyeUZvbnRQcmVmZXJlbmNlS2V5XTsKK30K
KworLSAoQk9PTClfYWx3YXlzVXNlQmFzZWxpbmVPZlByaW1hcnlGb250Cit7CisgICAgcmV0dXJu
IFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0QWx3YXlzVXNlQmFzZWxpbmVPZlByaW1hcnlG
b250UHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpX3NldEFsbG93TXVsdGlFbGVtZW50SW1w
bGljaXRGb3JtU3VibWlzc2lvbjooQk9PTClmbGFnCit7CisgICAgW3NlbGYgX3NldEJvb2xWYWx1
ZTpmbGFnIGZvcktleTpXZWJLaXRBbGxvd011bHRpRWxlbWVudEltcGxpY2l0Rm9ybVN1Ym1pc3Np
b25QcmVmZXJlbmNlS2V5XTsKK30KKworLSAoQk9PTClfYWxsb3dNdWx0aUVsZW1lbnRJbXBsaWNp
dEZvcm1TdWJtaXNzaW9uCit7CisgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2Vi
S2l0QWxsb3dNdWx0aUVsZW1lbnRJbXBsaWNpdEZvcm1TdWJtaXNzaW9uUHJlZmVyZW5jZUtleV07
Cit9CisKKy0gKHZvaWQpX3NldEFsd2F5c1JlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb246KEJP
T0wpZmxhZworeworICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0QWx3
YXlzUmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvblByZWZlcmVuY2VLZXldOworfQorCistIChC
T09MKV9hbHdheXNSZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uCit7CisgICAgcmV0dXJuIFtz
ZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0QWx3YXlzUmVxdWVzdEdlb2xvY2F0aW9uUGVybWlz
c2lvblByZWZlcmVuY2VLZXldOworfQorCistICh2b2lkKV9zZXRBbHdheXNVc2VBY2NlbGVyYXRl
ZE92ZXJmbG93U2Nyb2xsOihCT09MKWZsYWcKK3sKKyAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZs
YWcgZm9yS2V5OldlYktpdEFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGxQcmVmZXJl
bmNlS2V5XTsKK30KKworLSAoQk9PTClfYWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9s
bAoreworICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdEFsd2F5c1VzZUFj
Y2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGxQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClfc2V0
SW50ZXJwb2xhdGlvblF1YWxpdHk6KGludClxdWFsaXR5Cit7CisgICAgW3NlbGYgX3NldEludGVn
ZXJWYWx1ZTpxdWFsaXR5IGZvcktleTpXZWJLaXRJbnRlcnBvbGF0aW9uUXVhbGl0eVByZWZlcmVu
Y2VLZXldOworfQorCistIChpbnQpX2ludGVycG9sYXRpb25RdWFsaXR5Cit7CisgICAgcmV0dXJu
IFtzZWxmIF9pbnRlZ2VyVmFsdWVGb3JLZXk6V2ViS2l0SW50ZXJwb2xhdGlvblF1YWxpdHlQcmVm
ZXJlbmNlS2V5XTsKK30KKworLSAoQk9PTClfYWxsb3dQYXNzd29yZEVjaG8KK3sKKyAgICByZXR1
cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRQYXNzd29yZEVjaG9FbmFibGVkUHJlZmVy
ZW5jZUtleV07Cit9CisKKy0gKGZsb2F0KV9wYXNzd29yZEVjaG9EdXJhdGlvbgoreworICAgIHJl
dHVybiBbc2VsZiBfZmxvYXRWYWx1ZUZvcktleTpXZWJLaXRQYXNzd29yZEVjaG9EdXJhdGlvblBy
ZWZlcmVuY2VLZXldOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCisjaWYgIVBMQVRG
T1JNKElPUykKIC0gKGZsb2F0KVBERlNjYWxlRmFjdG9yCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9m
bG9hdFZhbHVlRm9yS2V5OldlYktpdFBERlNjYWxlRmFjdG9yUHJlZmVyZW5jZUtleV07CkBAIC0x
MTE2LDYgKzE1MjgsNyBAQCAtICh2b2lkKXNldFBERlNjYWxlRmFjdG9yOihmbG9hdClmYWN0b3IK
IHsKICAgICBbc2VsZiBfc2V0RmxvYXRWYWx1ZTpmYWN0b3IgZm9yS2V5OldlYktpdFBERlNjYWxl
RmFjdG9yUHJlZmVyZW5jZUtleV07CiB9CisjZW5kaWYKIAogLSAoaW50NjRfdClhcHBsaWNhdGlv
bkNhY2hlVG90YWxRdW90YQogewpAQCAtMTE0MCw2ICsxNTUzLDcgQEAgLSAodm9pZClzZXRBcHBs
aWNhdGlvbkNhY2hlRGVmYXVsdE9yaWdpblF1b3RhOihpbnQ2NF90KXF1b3RhCiAgICAgW3NlbGYg
X3NldExvbmdMb25nVmFsdWU6cXVvdGEgZm9yS2V5OldlYktpdEFwcGxpY2F0aW9uQ2FjaGVEZWZh
dWx0T3JpZ2luUXVvdGFdOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKFBERkRpc3BsYXlN
b2RlKVBERkRpc3BsYXlNb2RlCiB7CiAgICAgUERGRGlzcGxheU1vZGUgdmFsdWUgPSBbc2VsZiBf
aW50ZWdlclZhbHVlRm9yS2V5OldlYktpdFBERkRpc3BsYXlNb2RlUHJlZmVyZW5jZUtleV07CkBA
IC0xMTU0LDYgKzE1NjgsNyBAQCAtICh2b2lkKXNldFBERkRpc3BsYXlNb2RlOihQREZEaXNwbGF5
TW9kZSltb2RlCiB7CiAgICAgW3NlbGYgX3NldEludGVnZXJWYWx1ZTptb2RlIGZvcktleTpXZWJL
aXRQREZEaXNwbGF5TW9kZVByZWZlcmVuY2VLZXldOwogfQorI2VuZGlmCiAKIC0gKFdlYktpdEVk
aXRhYmxlTGlua0JlaGF2aW9yKWVkaXRhYmxlTGlua0JlaGF2aW9yCiB7CkBAIC0xMjEyLDYgKzE2
MjcsMTggQEAgLSAodm9pZClzZXREYXRhYmFzZXNFbmFibGVkOihCT09MKWRhdGFiYXNlc0VuYWJs
ZWQKICAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmRhdGFiYXNlc0VuYWJsZWQgZm9yS2V5OldlYktp
dERhdGFiYXNlc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykK
Ky0gKEJPT0wpc3RvcmFnZVRyYWNrZXJFbmFibGVkCit7CisgICAgcmV0dXJuIFtzZWxmIF9ib29s
VmFsdWVGb3JLZXk6V2ViS2l0U3RvcmFnZVRyYWNrZXJFbmFibGVkUHJlZmVyZW5jZUtleV07Cit9
CisKKy0gKHZvaWQpc2V0U3RvcmFnZVRyYWNrZXJFbmFibGVkOihCT09MKXN0b3JhZ2VUcmFja2Vy
RW5hYmxlZAoreworICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6c3RvcmFnZVRyYWNrZXJFbmFibGVk
IGZvcktleTpXZWJLaXRTdG9yYWdlVHJhY2tlckVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKK30KKyNl
bmRpZgorCiAtIChCT09MKWxvY2FsU3RvcmFnZUVuYWJsZWQKIHsKICAgICByZXR1cm4gW3NlbGYg
X2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRMb2NhbFN0b3JhZ2VFbmFibGVkUHJlZmVyZW5jZUtleV07
CkBAIC0xMjcxLDEwICsxNjk4LDEyIEBAICsgKHZvaWQpX3JlbW92ZVJlZmVyZW5jZUZvcklkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnQKIAogLSAodm9pZClfcG9zdFByZWZlcmVuY2VzQ2hhbmdl
ZE5vdGlmaWNhdGlvbgogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFwdGhyZWFkX21h
aW5fbnAoKSkgewogICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2Nt
ZCB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5PXTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyNlbmRpZgogCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBw
b3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJQcmVmZXJlbmNlc0NoYW5nZWRJbnRlcm5hbE5vdGlmaWNh
dGlvbiBvYmplY3Q6c2VsZiB1c2VySW5mbzpuaWxdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViUHJlZmVyZW5jZXNDaGFu
Z2VkTm90aWZpY2F0aW9uIG9iamVjdDpzZWxmIHVzZXJJbmZvOm5pbF07CkBAIC0xNjk1LDYgKzIx
MjQsNzYgQEAgLSAoQk9PTClpc0hpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCistIChCT09MKW1lZGlhUGxheWJh
Y2tBbGxvd3NBaXJQbGF5Cit7CisgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2Vi
S2l0TWVkaWFQbGF5YmFja0FsbG93c0FpclBsYXlQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9p
ZClzZXRNZWRpYVBsYXliYWNrQWxsb3dzQWlyUGxheTooQk9PTClmbGFnCit7CisgICAgW3NlbGYg
X3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRNZWRpYVBsYXliYWNrQWxsb3dzQWlyUGxh
eVByZWZlcmVuY2VLZXldOworfQorCistICh1bnNpZ25lZClhdWRpb1Nlc3Npb25DYXRlZ29yeU92
ZXJyaWRlCit7CisgICAgcmV0dXJuIFtzZWxmIF91bnNpZ25lZEludFZhbHVlRm9yS2V5OldlYktp
dEF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGVdOworfQorCistICh2b2lkKXNldEF1ZGlvU2Vz
c2lvbkNhdGVnb3J5T3ZlcnJpZGU6KHVuc2lnbmVkKW92ZXJyaWRlCit7CisgICAgaWYgKG92ZXJy
aWRlID4gQXVkaW9TZXNzaW9uOjpBdWRpb1Byb2Nlc3NpbmcpIHsKKyAgICAgICAgLy8gQ2xpZW50
cyBhcmUgcGFzc2luZyB1cyBPU1R5cGVzIHZhbHVlcyBmcm9tIEF1ZGlvVG9vbGJveC9BdWRpb1Nl
c3Npb24uaCwKKyAgICAgICAgLy8gd2hpY2ggbmVlZCB0byBiZSB0cmFuc2xhdGVkIGludG8gQXVk
aW9TZXNzaW9uOjpDYXRlZ29yeVR5cGU6CisgICAgICAgIHN3aXRjaCAob3ZlcnJpZGUpIHsKKyAg
ICAgICAgY2FzZSBrQXVkaW9TZXNzaW9uQ2F0ZWdvcnlfQW1iaWVudFNvdW5kOgorICAgICAgICAg
ICAgb3ZlcnJpZGUgPSBBdWRpb1Nlc3Npb246OkFtYmllbnRTb3VuZDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIGtBdWRpb1Nlc3Npb25DYXRlZ29yeV9Tb2xvQW1iaWVudFNvdW5k
OgorICAgICAgICAgICAgb3ZlcnJpZGUgPSBBdWRpb1Nlc3Npb246OlNvbG9BbWJpZW50U291bmQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQXVkaW9TZXNzaW9uQ2F0ZWdvcnlf
TWVkaWFQbGF5YmFjazoKKyAgICAgICAgICAgIG92ZXJyaWRlID0gQXVkaW9TZXNzaW9uOjpNZWRp
YVBsYXliYWNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0F1ZGlvU2Vzc2lv
bkNhdGVnb3J5X1JlY29yZEF1ZGlvOgorICAgICAgICAgICAgb3ZlcnJpZGUgPSBBdWRpb1Nlc3Np
b246OlJlY29yZEF1ZGlvOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0F1ZGlv
U2Vzc2lvbkNhdGVnb3J5X1BsYXlBbmRSZWNvcmQ6CisgICAgICAgICAgICBvdmVycmlkZSA9IEF1
ZGlvU2Vzc2lvbjo6UGxheUFuZFJlY29yZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGtBdWRpb1Nlc3Npb25DYXRlZ29yeV9BdWRpb1Byb2Nlc3Npbmc6CisgICAgICAgICAgICBv
dmVycmlkZSA9IEF1ZGlvU2Vzc2lvbjo6QXVkaW9Qcm9jZXNzaW5nOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBvdmVycmlkZSA9IEF1ZGlvU2Vzc2lv
bjo6Tm9uZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgW3Nl
bGYgX3NldFVuc2lnbmVkSW50VmFsdWU6b3ZlcnJpZGUgZm9yS2V5OldlYktpdEF1ZGlvU2Vzc2lv
bkNhdGVnb3J5T3ZlcnJpZGVdOworfQorCistIChCT09MKW5ldHdvcmtEYXRhVXNhZ2VUcmFja2lu
Z0VuYWJsZWQKK3sKKyAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXROZXR3
b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQp
c2V0TmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDooYm9vbCl0cmFja2luZ0VuYWJsZWQK
K3sKKyAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOnRyYWNraW5nRW5hYmxlZCBmb3JLZXk6V2ViS2l0
TmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZFByZWZlcmVuY2VLZXldOworfQorCistIChO
U1N0cmluZyAqKW5ldHdvcmtJbnRlcmZhY2VOYW1lCit7CisgICAgcmV0dXJuIFtzZWxmIF9zdHJp
bmdWYWx1ZUZvcktleTpXZWJLaXROZXR3b3JrSW50ZXJmYWNlTmFtZVByZWZlcmVuY2VLZXldOwor
fQorCistICh2b2lkKXNldE5ldHdvcmtJbnRlcmZhY2VOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sK
KyAgICBbc2VsZiBfc2V0U3RyaW5nVmFsdWU6bmFtZSBmb3JLZXk6V2ViS2l0TmV0d29ya0ludGVy
ZmFjZU5hbWVQcmVmZXJlbmNlS2V5XTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIC0g
KEJPT0wpbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUKIHsKICAgICByZXR1cm4gW3Nl
bGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVy
ZVByZWZlcmVuY2VLZXldOwpAQCAtMTc1Niw2ICsyMjU1LDM4IEBAIC0gKHZvaWQpc2V0UGFnZUNh
Y2hlU3VwcG9ydHNQbHVnaW5zOihCT09MKWZsYWcKIAogfQogCisjaWYgUExBVEZPUk0oSU9TKQor
LSAodm9pZClfaW52YWxpZGF0ZUNhY2hlZFByZWZlcmVuY2VzCit7CisgICAgZGlzcGF0Y2hfYmFy
cmllcl9zeW5jKF9wcml2YXRlLT5yZWFkV3JpdGVRdWV1ZSwgXnsKKyAgICAgICAgaWYgKF9wcml2
YXRlLT52YWx1ZXMpCisgICAgICAgICAgICBfcHJpdmF0ZS0+dmFsdWVzID0gYWRvcHROUyhbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICB9KTsKKworICAgIC8vIFRlbGwg
YW55IGxpdmUgV2ViVmlld3MgdG8gcmVmcmVzaCB0aGVpciBwcmVmZXJlbmNlcworICAgIFtzZWxm
IF9wb3N0UHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uXTsKK30KKworLSAodm9pZClfc3lu
Y2hyb25pemVXZWJTdG9yYWdlUG9saWN5V2l0aENvb2tpZVBvbGljeQoreworICAgIE5TSFRUUENv
b2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBbW05TSFRUUENvb2tpZVN0b3Jh
Z2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZUFjY2VwdFBvbGljeV07CisgICAgV2Vi
U3RvcmFnZUJsb2NraW5nUG9saWN5IHN0b3JhZ2VCbG9ja2luZ1BvbGljeTsKKyAgICBzd2l0Y2gg
KGNvb2tpZUFjY2VwdFBvbGljeSkgeworICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
QWx3YXlzOgorICAgICAgICBzdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBXZWJBbGxvd0FsbFN0b3Jh
Z2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25s
eUZyb21NYWluRG9jdW1lbnREb21haW46CisgICAgICAgIHN0b3JhZ2VCbG9ja2luZ1BvbGljeSA9
IFdlYkJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNI
VFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI6CisgICAgICAgIHN0b3JhZ2VCbG9ja2luZ1BvbGlj
eSA9IFdlYkJsb2NrQWxsU3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgfSAgICAKKworICAg
IFtzZWxmIHNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeTpzdG9yYWdlQmxvY2tpbmdQb2xpY3ldOwor
fQorI2VuZGlmCisKIC0gKHZvaWQpc2V0QmFja3NwYWNlS2V5TmF2aWdhdGlvbkVuYWJsZWQ6KEJP
T0wpZmxhZwogewogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0QmFj
a3NwYWNlS2V5TmF2aWdhdGlvbkVuYWJsZWRLZXldOwpAQCAtMTg2OCw3ICsyMzk5LDcgQEAgLSAo
dm9pZClzZXREaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQ6KEJPT0wpZW5hYmxlZAogCiBzdGF0aWMg
Ym9vbCBuZWVkc1NjcmVlbkZvbnRzRW5hYmxlZFF1aXJrKCkKIHsKLSNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBzdGF0aWMgYm9vbCBpczFQYXNz
d29yZE5lZWRpbmdTY3JlZW5Gb250c1F1aXJrID0gV0tFeGVjdXRhYmxlV2FzTGlua2VkT25PckJl
Zm9yZU1vdW50YWluTGlvbigpCiAgICAgICAgICYmIFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1
bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAIndzLmFnaWxlLjFQYXNzd29yZCJdOwog
ICAgIHJldHVybiBpczFQYXNzd29yZE5lZWRpbmdTY3JlZW5Gb250c1F1aXJrOwpAQCAtMTg5MSw3
ICsyNDIyLDEzIEBAIC0gKHZvaWQpc2V0U2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJP
T0wpZW5hYmxlZAogCiAtICh2b2lkKXNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeTooV2ViU3RvcmFn
ZUJsb2NraW5nUG9saWN5KXN0b3JhZ2VCbG9ja2luZ1BvbGljeQogeworI2lmIFBMQVRGT1JNKElP
UykKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdyaXRlIHRoZSBzZXR0aW5nIG91dCwgc28gd2Ug
anVzdCByZXNldCB0aGUgZGVmYXVsdCBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIG5ldyBzZXR0aW5n
LgorICAgIE5TRGljdGlvbmFyeSAqZGljdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhP
YmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c3RvcmFnZUJsb2NraW5nUG9saWN5XSBmb3JL
ZXk6V2ViS2l0U3RvcmFnZUJsb2NraW5nUG9saWN5S2V5XTsKKyAgICBbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOmRpY3RdOworI2Vsc2UKICAg
ICBbc2VsZiBfc2V0SW50ZWdlclZhbHVlOnN0b3JhZ2VCbG9ja2luZ1BvbGljeSBmb3JLZXk6V2Vi
S2l0U3RvcmFnZUJsb2NraW5nUG9saWN5S2V5XTsKKyNlbmRpZgogfQogCiAtIChXZWJTdG9yYWdl
QmxvY2tpbmdQb2xpY3kpc3RvcmFnZUJsb2NraW5nUG9saWN5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlc291cmNlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJSZXNvdXJjZS5tbQppbmRleCAxZDk2MDZiMzBhOGQ4ZjNjYWUwNWJhMDMzNTI5YTBi
NjhkZWE0YTllLi5lZTMxNGM3YjY1ZTU2OTUzZWRhNzFjZGJiOTk2MWIzMTE0YTgwMTMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlc291cmNlLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVzb3VyY2UubW0KQEAgLTY2LDkgKzY2LDExIEBA
IEBpbXBsZW1lbnRhdGlvbiBXZWJSZXNvdXJjZVByaXZhdGUKIAogKyAodm9pZClpbml0aWFsaXpl
CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsK
ICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZCgpOwogICAg
IFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOworI2VuZGlmCiAgICAgV2ViQ29yZU9i
akNGaW5hbGl6ZU9uTWFpblRocmVhZChzZWxmKTsKIH0KIApAQCAtMjU0LDcgKzI1NiwxMSBAQCAt
IChOU1N0cmluZyAqKWZyYW1lTmFtZQogCiAtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCiB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCI8JUAgJUA+IiwgW3NlbGYgY2xhc3NOYW1lXSwgW3NlbGYgVVJMXV07CisjZWxzZQorICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlQD4iLCBOU1N0cmluZ0Zyb21D
bGFzcyhbc2VsZiBjbGFzc10pLCBbc2VsZiBVUkxdXTsKKyNlbmRpZgogfQogCiBAZW5kCkBAIC0z
NDgsNiArMzU0LDcgQEAgLSAoTlNTdHJpbmcgKilfc3VnZ2VzdGVkRmlsZW5hbWUKICAgICByZXR1
cm4gc3VnZ2VzdGVkRmlsZW5hbWU7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAoTlNGaWxl
V3JhcHBlciAqKV9maWxlV3JhcHBlclJlcHJlc2VudGF0aW9uCiB7CiAgICAgTlNGaWxlV3JhcHBl
ciAqd3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhD
b250ZW50czpbc2VsZiBkYXRhXV0gYXV0b3JlbGVhc2VdOwpAQCAtMzU3LDYgKzM2NCw3IEBAIC0g
KE5TRmlsZVdyYXBwZXIgKilfZmlsZVdyYXBwZXJSZXByZXNlbnRhdGlvbgogICAgIFt3cmFwcGVy
IHNldFByZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsKICAgICByZXR1cm4gd3JhcHBlcjsKIH0K
KyNlbmRpZgogCiAtIChOU1VSTFJlc3BvbnNlICopX3Jlc3BvbnNlCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaApp
bmRleCAxNThlOWI4YzQ3M2YyNjk0M2VjY2MyZjk5MGE3NGRjNmQ3NWI4MDMwLi45NDVlNDcxZmIw
MDM3NmEzMGQyYjM3ZDRhZjdiZjExZTgxYWZiYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgKQEAgLTIzLDYg
KzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiBA
Y2xhc3MgV2ViVmlldzsKIEBjbGFzcyBXZWJIVE1MVmlldzsKIApAQCAtNDMsMyArNDUsNSBAQAog
LSAoQk9PTClmaWx0ZXJLZXlEb3duOihOU0V2ZW50ICopZXZlbnQ7CiAtICh2b2lkKV9yZWZsZWN0
U2VsZWN0aW9uOwogQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJUZXh0SXRlcmF0b3IubW0KaW5kZXggZTg5MTRkOTcyZDY5MDMyNDI5ZGQ0NTFlYzQ0ODI1ZTU3
Mzk2NGRkMy4uMGVhZTE1YTE2ZWRjNGU4MWFmNmNlYWVhZjExM2E2ZjQ3Mzg2YzAzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KQEAgLTQ4LDkgKzQ4
LDExIEBAIEBpbXBsZW1lbnRhdGlvbiBXZWJUZXh0SXRlcmF0b3JQcml2YXRlCiAKICsgKHZvaWQp
aW5pdGlhbGl6ZQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgSlNDOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZFRvUHJvY2Vzc01haW5UaHJl
YWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKKyNlbmRpZgogICAg
IFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA4YTRhNTVhYTFkNmUzYzZiZDhjMWQzNGZkMjQ5NmI3
NjUzMmJhNzMwLi42YWM1YzNkMjc5NmYyMzY3Y2ExYzBhN2EyMzg0MTViZjFmMDY2ODcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0yMDIsNiArMjAyLDQ4IEBACiAjaW1w
b3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2ltcG9ydCAiTWVtb3J5TWVhc3VyZS5oIgorI2ltcG9ydCAiV2ViQ2Fy
ZXRDaGFuZ2VMaXN0ZW5lci5oIgorI2ltcG9ydCAiV2ViQ2hyb21lQ2xpZW50SU9TLmgiCisjaW1w
b3J0ICJXZWJEZWZhdWx0Rm9ybURlbGVnYXRlLmgiCisjaW1wb3J0ICJXZWJEZWZhdWx0RnJhbWVM
b2FkRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYkRlZmF1bHRSZXNvdXJjZUxvYWREZWxlZ2F0ZS5o
IgorI2ltcG9ydCAiV2ViRGVmYXVsdFVJS2l0RGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYkZpeGVk
UG9zaXRpb25Db250ZW50LmgiCisjaW1wb3J0ICJXZWJNYWlsRGVsZWdhdGUuaCIKKyNpbXBvcnQg
IldlYk5TVXNlckRlZmF1bHRzRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJQREZWaWV3SU9TLmgiCisj
aW1wb3J0ICJXZWJQbGFpbldoaXRlVmlldy5oIgorI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxl
ci5oIgorI2ltcG9ydCAiV2ViUG9saWN5RGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJT
UUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2Vy
UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViVUlLaXRTdXBwb3J0LmgiCisjaW1wb3J0ICJXZWJWaXNp
YmxlUG9zaXRpb24uaCIKKyNpbXBvcnQgPENGTmV0d29yay9DRlVSTENhY2hlUHJpdi5oPgorI2lt
cG9ydCA8TW9iaWxlR2VzdGFsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9JY29uQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RhdGVOb3RpZmllci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NtYXJ0UmVwbGFj
ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0UnVuLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dBS1dp
bmRvdy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRSdW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViRXZlbnQuaD4KKyNpbXBvcnQgPGRpc3BhdGNo
L3ByaXZhdGUuaAorI2ltcG9ydCA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2Vu
ZGlmCisjZW5kaWYKKwogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICNpbXBvcnQgPFdl
YktpdC9XZWJEYXNoYm9hcmRSZWdpb24uaD4KICNlbmRpZgpAQCAtMjIxLDYgKzI2Myw3IEBACiAj
aW1wb3J0IDxnbGliLmg+CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiBAaW50ZXJmYWNl
IE5TU3BlbGxDaGVja2VyIChXZWJOU1NwZWxsQ2hlY2tlckRldGFpbHMpCiAtICh2b2lkKV9wcmVm
bGlnaHRDaG9zZW5TcGVsbFNlcnZlcjsKIEBlbmQKQEAgLTIzNyw2ICsyODAsNyBAQCAtICh2b2lk
KV9lbmFibGVTY3JlZW5VcGRhdGVzSWZOZWVkZWQ7CiAtIChCT09MKV93cmFwc0NhcmJvbldpbmRv
dzsKIC0gKEJPT0wpX2hhc0tleUFwcGVhcmFuY2U7CiBAZW5kCisjZW5kaWYKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMjQ2LDggKzI5MCwxMCBA
QCB1c2luZyBuYW1lc3BhY2UgSlNDOwogI2VsaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5l
ZChfX3g4Nl82NF9fKQogI2RlZmluZSBQUk9DRVNTT1IgIkludGVsIgogI2Vsc2UKKyNpZiAhUExB
VEZPUk0oSU9TKQogI2Vycm9yIFVua25vd24gYXJjaGl0ZWN0dXJlCiAjZW5kaWYKKyNlbmRpZgog
CiAjZGVmaW5lIEZPUl9FQUNIX1JFU1BPTkRFUl9TRUxFQ1RPUihtYWNybykgXAogbWFjcm8oYWxp
Z25DZW50ZXIpIFwKQEAgLTM4NiwyMCArNDMyLDU1IEBAIG1hY3JvKHlhbmtBbmRTZWxlY3QpIFwK
IHN0YXRpYyBCT09MIHNfZGlkU2V0Q2FjaGVNb2RlbDsKIHN0YXRpYyBXZWJDYWNoZU1vZGVsIHNf
Y2FjaGVNb2RlbCA9IFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjsKIAorI2lmIFBMQVRGT1JN
KElPUykKK3N0YXRpYyBDbGFzcyBzX3BkZlJlcHJlc2VudGF0aW9uQ2xhc3M7CitzdGF0aWMgQ2xh
c3Mgc19wZGZWaWV3Q2xhc3M7CisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBjb25z
dCBjaGFyIHdlYlZpZXdJc09wZW5bXSA9ICJBdCBsZWFzdCBvbmUgV2ViVmlldyBpcyBzdGlsbCBv
cGVuLiI7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgV2ViVmlldyhX
ZWJWaWV3UHJpdmF0ZSkKKy0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5j
ZXMgKilwcmVmZXJvaWQpX3VwZGF0ZVNjcmVlblNjYWxlRnJvbVdpbmRvdzsKK0BlbmQKKworQGlu
dGVyZmFjZSBOU1VSTENhY2hlIChXZWJQcml2YXRlKQorLSAoQ0ZVUkxDYWNoZVJlZilfQ0ZVUkxD
YWNoZTsKK0BlbmQKKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKElPUykKIEBpbnRlcmZhY2UgTlNP
YmplY3QgKFdlYlZhbGlkYXRlV2l0aG91dERlbGVnYXRlKQogLSAoQk9PTCl2YWxpZGF0ZVVzZXJJ
bnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNl
SXRlbT4paXRlbTsKIEBlbmQKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorQGNsYXNzIF9X
ZWJTYWZlRm9yd2FyZGVyOworCitAaW50ZXJmYWNlIF9XZWJTYWZlQXN5bmNGb3J3YXJkZXIgOiBO
U09iamVjdCB7CisgICAgX1dlYlNhZmVGb3J3YXJkZXIgKl9mb3J3YXJkZXI7Cit9CistIChpZClp
bml0V2l0aEZvcndhcmRlcjooX1dlYlNhZmVGb3J3YXJkZXIgKilmb3J3YXJkZXI7CitAZW5kCisj
ZW5kaWYKIAogQGludGVyZmFjZSBfV2ViU2FmZUZvcndhcmRlciA6IE5TT2JqZWN0CiB7CiAgICAg
aWQgdGFyZ2V0OyAvLyBOb24tcmV0YWluZWQuIERvbid0IHJldGFpbiBkZWxlZ2F0ZXMuCiAgICAg
aWQgZGVmYXVsdFRhcmdldDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgX1dlYlNhZmVBc3luY0Zv
cndhcmRlciAqYXN5bmNGb3J3YXJkZXI7CisgICAgZGlzcGF0Y2hfb25jZV90IGFzeW5jRm9yd2Fy
ZGVyUHJlZDsKKyNlbmRpZgogfQogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGFyZ2V0OihpZCl0
YXJnZXQgZGVmYXVsdFRhcmdldDooaWQpZGVmYXVsdFRhcmdldDsKKyNpZiBQTEFURk9STShJT1Mp
CistICh2b2lkKWNsZWFyVGFyZ2V0OworLSAoaWQpYXN5bmNGb3J3YXJkZXI7CisjZW5kaWYKIEBl
bmQKIAogRmluZE9wdGlvbnMgY29yZU9wdGlvbnMoV2ViRmluZE9wdGlvbnMgb3B0aW9ucykKQEAg
LTQ2MSw3ICs1NDIsOSBAQCBzdGF0aWMgV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSBraXQoUGFnZVZp
c2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUpCiB9CiAKIEBpbnRlcmZhY2UgV2ViVmlldyAo
V2ViRmlsZUludGVybmFsKQorI2lmICFQTEFURk9STShJT1MpCiAtIChmbG9hdClfZGV2aWNlU2Nh
bGVGYWN0b3I7CisjZW5kaWYKIC0gKEJPT0wpX2lzTG9hZGluZzsKIC0gKFdlYkZyYW1lVmlldyAq
KV9mcmFtZVZpZXdBdFdpbmRvd1BvaW50OihOU1BvaW50KXBvaW50OwogLSAoV2ViRnJhbWUgKilf
Zm9jdXNlZEZyYW1lOwpAQCAtNDkzLDcgKzU3NiwxMiBAQCBOU1N0cmluZyAqV2ViRWxlbWVudElz
Q29udGVudEVkaXRhYmxlS2V5ID0gIEAiV2ViRWxlbWVudElzQ29udGVudEVkaXRhYmxlS2V5IjsK
IAogTlNTdHJpbmcgKldlYlZpZXdQcm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24gPSAgICAgICAg
ICBAIldlYlByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbiI7CiBOU1N0cmluZyAqV2ViVmlld1By
b2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uID0gIEAiV2ViUHJvZ3Jlc3NFc3RpbWF0
ZUNoYW5nZWROb3RpZmljYXRpb24iOworI2lmICFQTEFURk9STShJT1MpCiBOU1N0cmluZyAqV2Vi
Vmlld1Byb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24gPSAgICAgICAgIEAiV2ViUHJvZ3Jlc3NG
aW5pc2hlZE5vdGlmaWNhdGlvbiI7CisjZWxzZQorTlNTdHJpbmcgKiBjb25zdCBXZWJWaWV3UHJv
Z3Jlc3NFc3RpbWF0ZWRQcm9ncmVzc0tleSA9IEAiV2ViUHJvZ3Jlc3NFc3RpbWF0ZWRQcm9ncmVz
c0tleSI7CitOU1N0cmluZyAqIGNvbnN0IFdlYlZpZXdQcm9ncmVzc0JhY2tncm91bmRDb2xvcktl
eSA9ICAgQCJXZWJQcm9ncmVzc0JhY2tncm91bmRDb2xvcktleSI7CisjZW5kaWYKIAogTlNTdHJp
bmcgKiBjb25zdCBXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uID0gICAgICAgICBA
IldlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24iOwogTlNTdHJpbmcgKiBjb25zdCBX
ZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uID0gICAgICAgICAgICAgICBAIldlYlZpZXdEaWRD
aGFuZ2VOb3RpZmljYXRpb24iOwpAQCAtNTA3LDYgKzU5NSw3IEBAIGVudW0geyBXZWJWaWV3VmVy
c2lvbiA9IDQgfTsKIAogc3RhdGljIE5TTXV0YWJsZVNldCAqc2NoZW1lc1dpdGhSZXByZXNlbnRh
dGlvbnNTZXQ7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogTlNTdHJpbmcgKl9XZWJDYW5Hb0JhY2tL
ZXkgPSAgICAgICAgICAgIEAiY2FuR29CYWNrIjsKIE5TU3RyaW5nICpfV2ViQ2FuR29Gb3J3YXJk
S2V5ID0gICAgICAgICBAImNhbkdvRm9yd2FyZCI7CiBOU1N0cmluZyAqX1dlYkVzdGltYXRlZFBy
b2dyZXNzS2V5ID0gICAgQCJlc3RpbWF0ZWRQcm9ncmVzcyI7CkBAIC01MTUsNiArNjA0LDcgQEAg
TlNTdHJpbmcgKl9XZWJNYWluRnJhbWVJY29uS2V5ID0gICAgICAgIEAibWFpbkZyYW1lSWNvbiI7
CiBOU1N0cmluZyAqX1dlYk1haW5GcmFtZVRpdGxlS2V5ID0gICAgICAgQCJtYWluRnJhbWVUaXRs
ZSI7CiBOU1N0cmluZyAqX1dlYk1haW5GcmFtZVVSTEtleSA9ICAgICAgICAgQCJtYWluRnJhbWVV
UkwiOwogTlNTdHJpbmcgKl9XZWJNYWluRnJhbWVEb2N1bWVudEtleSA9ICAgIEAibWFpbkZyYW1l
RG9jdW1lbnQiOworI2VuZGlmCiAKIE5TU3RyaW5nICpfV2ViVmlld0RpZFN0YXJ0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ05vdGlmaWNhdGlvbiA9IEAiX1dlYlZpZXdEaWRTdGFydEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmciOwogTlNTdHJpbmcgKiBjb25zdCBXZWJWaWV3V2lsbENsb3NlTm90aWZpY2F0
aW9uID0gQCJXZWJWaWV3V2lsbENsb3NlTm90aWZpY2F0aW9uIjsKQEAgLTUzOCwxMiArNjI4LDE0
IEBAIEBpbXBsZW1lbnRhdGlvbiBXZWJQcm9ncmVzc0l0ZW0KIEBlbmQKIAogc3RhdGljIEJPT0wg
Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworI2lmICFQTEFURk9STShJT1MpCiBzdGF0
aWMgQk9PTCBncmFtbWFyQ2hlY2tpbmdFbmFibGVkOwogc3RhdGljIEJPT0wgYXV0b21hdGljUXVv
dGVTdWJzdGl0dXRpb25FbmFibGVkOwogc3RhdGljIEJPT0wgYXV0b21hdGljTGlua0RldGVjdGlv
bkVuYWJsZWQ7CiBzdGF0aWMgQk9PTCBhdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDsK
IHN0YXRpYyBCT09MIGF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ7CiBzdGF0aWMgQk9P
TCBhdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOworI2VuZGlmCiAKIEBpbXBsZW1l
bnRhdGlvbiBXZWJWaWV3IChBbGxXZWJWaWV3cykKIApAQCAtNTg0LDYgKzY3Niw3IEBAIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlByaXZhdGUpCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogc3RhdGljIE5TU3RyaW5nICpzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uRm9yVXNlckFnZW50
U3RyaW5nKCkKIHsKICAgICAvLyBVc2UgdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBkb3RzIGJlY2F1
c2Ugd2hlbiB3ZSBmaXJzdCBhZGRlZCB0aGUgTWFjIE9TIFggdmVyc2lvbiB0byB0aGUgdXNlciBh
Z2VudCBzdHJpbmcKQEAgLTU5MSw2ICs2ODQsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKnN5c3RlbU1h
cmtldGluZ1ZlcnNpb25Gb3JVc2VyQWdlbnRTdHJpbmcoKQogICAgIC8vIGJ1dCB3ZSdyZSBzdGlj
a2luZyB3aXRoIHRoZSB1bmRlcnNjb3JlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBmb3Jt
YXQgdXNlZCBieSBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkuCiAgICAgcmV0dXJuIFtzeXN0ZW1N
YXJrZXRpbmdWZXJzaW9uKCkgc3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAi
LiIgd2l0aFN0cmluZzpAIl8iXTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgTlNTdHJpbmcgKmNyZWF0
ZVVzZXJWaXNpYmxlV2ViS2l0VmVyc2lvblN0cmluZygpCiB7CkBAIC02MDUsNiArNjk5LDcgQEAg
c3RhdGljIE5TU3RyaW5nICpjcmVhdGVVc2VyVmlzaWJsZVdlYktpdFZlcnNpb25TdHJpbmcoKQog
ICAgIHJldHVybiBbZnVsbFZlcnNpb24gY29weV07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQog
KyAoTlNTdHJpbmcgKilfc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lOihOU1N0
cmluZyAqKWFwcGxpY2F0aW9uTmFtZQogewogICAgIC8vIE5vdGU6IERvICpub3QqIG1vdmUgdGhl
IGluaXRpYWxpemF0aW9uIG9mIG9zVmVyc2lvbiBub3Igd2ViS2l0VmVyc2lvbiBpbnRvIHRoZSBk
ZWNsYXJhdGlvbi4KQEAgLTYxOSw2ICs3MTQsNTQgQEAgKyAoTlNTdHJpbmcgKilfc3RhbmRhcmRV
c2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lOihOU1N0cmluZyAqKWFwcGxpY2F0aW9uTmFtZQog
ICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJNb3ppbGxhLzUuMCAo
TWFjaW50b3NoOyAiIFBST0NFU1NPUiAiIE1hYyBPUyBYICVAKSBBcHBsZVdlYktpdC8lQCAoS0hU
TUwsIGxpa2UgR2Vja28pICVAIiwgb3NWZXJzaW9uLCB3ZWJLaXRWZXJzaW9uLCBhcHBsaWNhdGlv
bk5hbWVdOwogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk1vemlsbGEv
NS4wIChNYWNpbnRvc2g7ICIgUFJPQ0VTU09SICIgTWFjIE9TIFggJUApIEFwcGxlV2ViS2l0LyVA
IChLSFRNTCwgbGlrZSBHZWNrbykiLCBvc1ZlcnNpb24sIHdlYktpdFZlcnNpb25dOwogfQorI2Vs
c2UKKysgKE5TU3RyaW5nICopX3N0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZToo
TlNTdHJpbmcgKilhcHBsaWNhdGlvbk5hbWUgb3NNYXJrZXRpbmdWZXJzaW9uOihOU1N0cmluZyAq
KW9zTWFya2V0aW5nVmVyc2lvbgoreworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBh
IHVzZXIgYWdlbnQgb3ZlcnJpZGUgZm9yIGFsbCBXZWJLaXQgY2xpZW50cy4KKyAgICBDRlByb3Bl
cnR5TGlzdFJlZiBvdmVycmlkZSA9IENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoQ0ZTVFIoIlVz
ZXJBZ2VudCIpLCBDRlNUUigiY29tLmFwcGxlLldlYkZvdW5kYXRpb24iKSk7CisgICAgaWYgKG92
ZXJyaWRlKSB7CisgICAgICAgIGlmIChDRkdldFR5cGVJRChvdmVycmlkZSkgPT0gQ0ZTdHJpbmdH
ZXRUeXBlSUQoKSkKKyAgICAgICAgICAgIHJldHVybiAoTlNTdHJpbmcgKilDRkJyaWRnaW5nUmVs
ZWFzZShvdmVycmlkZSk7CisgICAgICAgIENGUmVsZWFzZShvdmVycmlkZSk7CisgICAgfQorCisg
ICAgc3RhdGljIE5TU3RyaW5nICp3ZWJLaXRWZXJzaW9uOworICAgIGlmICghd2ViS2l0VmVyc2lv
bikKKyAgICAgICAgd2ViS2l0VmVyc2lvbiA9IGNyZWF0ZVVzZXJWaXNpYmxlV2ViS2l0VmVyc2lv
blN0cmluZygpOworICAgIGlmIChbYXBwbGljYXRpb25OYW1lIGxlbmd0aF0pCisgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk1vemlsbGEvNS4wICglQDsgQ1BVICVA
ICVAIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LyVAIChLSFRNTCwgbGlrZSBHZWNrbykgJUAi
LCBXS0dldERldmljZU5hbWUoKSwgV0tHZXRPU05hbWVGb3JVc2VyQWdlbnQoKSwgb3NNYXJrZXRp
bmdWZXJzaW9uLCB3ZWJLaXRWZXJzaW9uLCBhcHBsaWNhdGlvbk5hbWVdOworICAgIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk1vemlsbGEvNS4wICglQDsgQ1BVICVAICVAIGxp
a2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LyVAIChLSFRNTCwgbGlrZSBHZWNrbykiLCBXS0dldERl
dmljZU5hbWUoKSwgV0tHZXRPU05hbWVGb3JVc2VyQWdlbnQoKSwgb3NNYXJrZXRpbmdWZXJzaW9u
LCAgd2ViS2l0VmVyc2lvbl07Cit9CisKKysgKE5TU3RyaW5nICopX3N0YW5kYXJkVXNlckFnZW50
V2l0aEFwcGxpY2F0aW9uTmFtZTooTlNTdHJpbmcgKilhcHBsaWNhdGlvbk5hbWUKK3sKKyAgICBz
dGF0aWMgTlNTdHJpbmcgKm9zTWFya2V0aW5nVmVyc2lvbjsKKyAgICBpZiAoIW9zTWFya2V0aW5n
VmVyc2lvbikgeworI2lmICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQorICAgICAgICBOU0RpY3Rp
b25hcnkgKnN5c3RlbUluZm8gPSBbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDb250ZW50
c09mRmlsZTpAIi9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlz
dCJdOworI2Vsc2UKKyAgICAgICAgTlNTdHJpbmcgKnJvb3REaXJlY3RvcnkgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aFVURjhTdHJpbmc6V2ViS2l0UGxhdGZvcm1TeXN0ZW1Sb290RGlyZWN0b3J5KCld
OworICAgICAgICBOU0RpY3Rpb25hcnkgKnN5c3RlbUluZm8gPSBbW05TRGljdGlvbmFyeSBhbGxv
Y10gaW5pdFdpdGhDb250ZW50c09mRmlsZTpbcm9vdERpcmVjdG9yeSBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6QCJTeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvU3lzdGVtVmVyc2lv
bi5wbGlzdCJdXTsKKyNlbmRpZgorICAgICAgICBOU1N0cmluZyAqcHJvZHVjdFZlcnNpb24gPSBb
c3lzdGVtSW5mbyBvYmplY3RGb3JLZXk6QCJQcm9kdWN0VmVyc2lvbiJdOworICAgICAgICAvLyBE
dWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzM3ODc5OTY+LCB3ZSBtdXN0IHVzZSBzb21ldGhpbmcgb3Ro
ZXIgdGhhbiBwZXJpb2RzIHRvIGRlbGltaXQgdGhlIG1hcmtldGluZyB2ZXJzaW9uLiAgVXNpbmcg
dW5kZXJzY29yZXMgdG8gbWF0Y2ggTGVvcGFyZCdzIG5ldyBjb252ZW50aW9uLgorICAgICAgICBv
c01hcmtldGluZ1ZlcnNpb24gPSAhcHJvZHVjdFZlcnNpb24gPyBAIiIgOiBbW3Byb2R1Y3RWZXJz
aW9uIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIi4iIHdpdGhTdHJpbmc6
QCJfIl0gcmV0YWluXTsKKyAgICAgICAgW3N5c3RlbUluZm8gcmVsZWFzZV07CisgICAgfQorICAg
IHJldHVybiBbc2VsZiBfc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lOmFwcGxp
Y2F0aW9uTmFtZSBvc01hcmtldGluZ1ZlcnNpb246b3NNYXJrZXRpbmdWZXJzaW9uXTsKK30KKwor
LSAodm9pZClfc2V0QnJvd3NlclVzZXJBZ2VudFByb2R1Y3RWZXJzaW9uOihOU1N0cmluZyAqKXBy
b2R1Y3RWZXJzaW9uIGJ1aWxkVmVyc2lvbjooTlNTdHJpbmcgKilidWlsZFZlcnNpb24gYnVuZGxl
VmVyc2lvbjooTlNTdHJpbmcgKilidW5kbGVWZXJzaW9uCit7CisgICAgW3NlbGYgc2V0QXBwbGlj
YXRpb25OYW1lRm9yVXNlckFnZW50OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVmVyc2lv
bi8lQCBNb2JpbGUvJUAgU2FmYXJpLyVAIiwgcHJvZHVjdFZlcnNpb24sIGJ1aWxkVmVyc2lvbiwg
YnVuZGxlVmVyc2lvbl1dOworfQorCistICh2b2lkKV9zZXRVSVdlYlZpZXdVc2VyQWdlbnRXaXRo
QnVpbGRWZXJzaW9uOihOU1N0cmluZyAqKWJ1aWxkVmVyc2lvbgoreworICAgIFtzZWxmIHNldEFw
cGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDpbQCJNb2JpbGUvIiBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpidWlsZFZlcnNpb25dXTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAogKyAo
dm9pZClfcmVwb3J0RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvbiBpbkNvbnRleHQ6KEpT
Q29udGV4dFJlZiljb250ZXh0CiB7CkBAIC02NDQsNiArNzg3LDEwIEBAIHN0YXRpYyB2b2lkIFdl
YktpdEluaXRpYWxpemVBcHBsaWNhdGlvbkNhY2hlUGF0aElmTmVjZXNzYXJ5KCkKICAgICBOU1N0
cmluZyAqYXBwTmFtZSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07
CiAgICAgaWYgKCFhcHBOYW1lKQogICAgICAgICBhcHBOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHBy
b2Nlc3NJbmZvXSBwcm9jZXNzTmFtZV07CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChXZWJD
b3JlOjphcHBsaWNhdGlvbklzTW9iaWxlU2FmYXJpKCkgfHwgV2ViQ29yZTo6YXBwbGljYXRpb25J
c1dlYkFwcCgpKQorICAgICAgICBhcHBOYW1lID0gQCJjb20uYXBwbGUuV2ViQXBwQ2FjaGUiOwor
I2VuZGlmCiAKICAgICBBU1NFUlQoYXBwTmFtZSk7CiAKQEAgLTY2MCw3ICs4MDcsMTEgQEAgc3Rh
dGljIGJvb2wgc2hvdWxkRW5hYmxlTG9hZERlZmVycmluZygpCiAKIHN0YXRpYyBib29sIHNob3Vs
ZFJlc3RyaWN0V2luZG93Rm9jdXMoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4g
dHJ1ZTsKKyNlbHNlCiAgICAgcmV0dXJuICFhcHBsaWNhdGlvbklzSFJCbG9jaygpOworI2VuZGlm
CiB9CiAKIC0gKHZvaWQpX2Rpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cwpAQCAtNjY4LDYgKzgx
OSw3IEBAIC0gKHZvaWQpX2Rpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cwogICAgIHJlc291cmNl
TG9hZFNjaGVkdWxlcigpLT5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCisjaWYgIVBMQVRG
T1JNKElPUykKIC0gKHZvaWQpX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzCiB7CiAgICAgTlNBcnJheSAq
ZWRpdGFibGVUeXBlcyA9IFtXZWJIVE1MVmlldyBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc107
CkBAIC02OTgsMTggKzg1MCw1MSBAQCAtKHZvaWQpX2luamVjdE91dGxvb2tRdWlya3NTY3JpcHQK
ICAgICBjb3JlKHNlbGYpLT5ncm91cCgpLmFkZFVzZXJTY3JpcHRUb1dvcmxkKCpjb3JlKFtXZWJT
Y3JpcHRXb3JsZCB3b3JsZF0pLAogICAgICAgICBvdXRsb29rUXVpcmtzU2NyaXB0Q29udGVudHMs
IFVSTCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigpLCBJbmplY3RBdERvY3Vt
ZW50RW5kLCBJbmplY3RJbkFsbEZyYW1lcyk7CiB9CisjZW5kaWYKIAogc3RhdGljIGJvb2wgc2hv
dWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkKIHsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgc3RhdGljIGJvb2wgaXNTdGFuemFOZWVkaW5nQXR0cmlidXRlU2V0dGVyUXVp
cmsgPSAhV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhfQ1NT
X0FUVFJJQlVURV9TRVRURVJTX0lHTk9SSU5HX1BSSU9SSVRZKQorICAgICAgICAmJiBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20u
bGV4Y3ljbGUuc3RhbnphIl07CisgICAgcmV0dXJuIGlzU3RhbnphTmVlZGluZ0F0dHJpYnV0ZVNl
dHRlclF1aXJrOworI2Vsc2UKICAgICBzdGF0aWMgYm9vbCBpc0lBZFByb2R1Y2VyTmVlZGluZ0F0
dHJpYnV0ZVNldHRlclF1aXJrID0gIVdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1Rf
VkVSU0lPTl9XSVRIX0NTU19BVFRSSUJVVEVfU0VUVEVSU19JR05PUklOR19QUklPUklUWSkKICAg
ICAgICAgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVh
bFRvU3RyaW5nOkAiY29tLmFwcGxlLmlBZFByb2R1Y2VyIl07CiAgICAgcmV0dXJuIGlzSUFkUHJv
ZHVjZXJOZWVkaW5nQXR0cmlidXRlU2V0dGVyUXVpcms7CisjZW5kaWYKK30KKworI2lmIFBMQVRG
T1JNKElPUykKK3N0YXRpYyBib29sIHNob3VsZFRyYW5zZm9ybXNBZmZlY3RPdmVyZmxvdygpCit7
CisgICAgc3RhdGljIGJvb2wgc2hvdWxkVHJhbnNmb3Jtc0FmZmVjdE92ZXJmbG93ID0gIWFwcGxp
Y2F0aW9uSXNPa0N1cGlkKCkgfHwgV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9W
RVJTSU9OX1dJVEhfQ1NTX1RSQU5TRk9STVNfQUZGRUNUSU5HX09WRVJGTE9XKTsKKyAgICByZXR1
cm4gc2hvdWxkVHJhbnNmb3Jtc0FmZmVjdE92ZXJmbG93OworfQorCitzdGF0aWMgYm9vbCBzaG91
bGREaXNwYXRjaEphdmFTY3JpcHRXaW5kb3dPbkVycm9yRXZlbnRzKCkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBzaG91bGREaXNwYXRjaEphdmFTY3JpcHRXaW5kb3dPbkVycm9yRXZlbnRzID0gIWFwcGxp
Y2F0aW9uSXNGYWNlYm9vaygpIHx8IFdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1Rf
VkVSU0lPTl9XSVRIX1dJTkRPV19PTl9FUlJPUik7CisgICAgcmV0dXJuIHNob3VsZERpc3BhdGNo
SmF2YVNjcmlwdFdpbmRvd09uRXJyb3JFdmVudHM7Cit9CisKK3N0YXRpYyBib29sIGlzSW50ZXJu
YWxJbnN0YWxsKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc0ludGVybmFsID0gTUdHZXRCb29sQW5z
d2VyKGtNR1FBcHBsZUludGVybmFsSW5zdGFsbENhcGFiaWxpdHkpOworICAgIHJldHVybiBpc0lu
dGVybmFsOwogfQogCitzdGF0aWMgYm9vbCBkaWRPbmVUaW1lSW5pdGlhbGl6YXRpb24gPSBmYWxz
ZTsKKyNlbmRpZgorCiBzdGF0aWMgYm9vbCBzaG91bGRVc2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNo
b3J0aGFuZEJlaGF2aW9yKCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIGJvb2wg
c2hvdWxkVXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9ICFXZWJLaXRM
aW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9MRUdBQ1lfQkFDS0dS
T1VORFNJWkVfU0hPUlRIQU5EX0JFSEFWSU9SKTsKKyNlbHNlCiAgICAgc3RhdGljIGJvb2wgc2hv
dWxkVXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9IGFwcGxpY2F0aW9u
SXNWZXJzaW9ucygpCiAgICAgICAgICYmICFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJ
UlNUX1ZFUlNJT05fV0lUSE9VVF9MRUdBQ1lfQkFDS0dST1VORFNJWkVfU0hPUlRIQU5EX0JFSEFW
SU9SKTsKKyNlbmRpZgogICAgIHJldHVybiBzaG91bGRVc2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNo
b3J0aGFuZEJlaGF2aW9yOwogfQogCkBAIC03MjcsNyArOTEyLDExIEBAIC0gKHZvaWQpX2NvbW1v
bkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTooTlNTdHJpbmcgKilmcmFtZU5hbWUgZ3JvdXBO
YW1lOihOU1N0CiAgICAgX3ByaXZhdGUtPnByZWZlcmVuY2VzID0gW3N0YW5kYXJkUHJlZmVyZW5j
ZXMgcmV0YWluXTsKICAgICBfcHJpdmF0ZS0+bWFpbkZyYW1lRG9jdW1lbnRSZWFkeSA9IE5POwog
ICAgIF9wcml2YXRlLT5kcmF3c0JhY2tncm91bmQgPSBZRVM7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBfcHJpdmF0ZS0+YmFja2dyb3VuZENvbG9yID0gW1tOU0NvbG9yIGNvbG9yV2l0aERldmlj
ZVdoaXRlOjEgYWxwaGE6MV0gcmV0YWluXTsKKyNlbHNlCisgICAgX3ByaXZhdGUtPmJhY2tncm91
bmRDb2xvciA9IENHQ29sb3JSZXRhaW4oY2FjaGVkQ0dDb2xvcihDb2xvcjo6d2hpdGUsIENvbG9y
U3BhY2VEZXZpY2VSR0IpKTsKKyNlbmRpZgogICAgIF9wcml2YXRlLT5pbmNsdWRlc0ZsYXR0ZW5l
ZENvbXBvc2l0aW5nTGF5ZXJzV2hlbkRyYXdpbmdUb0JpdG1hcCA9IFlFUzsKIAogICAgIE5TUmVj
dCBmID0gW3NlbGYgZnJhbWVdOwpAQCAtNzM2LDcgKzkyNSw5IEBAIC0gKHZvaWQpX2NvbW1vbklu
aXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTooTlNTdHJpbmcgKilmcmFtZU5hbWUgZ3JvdXBOYW1l
OihOU1N0CiAgICAgW3NlbGYgYWRkU3VidmlldzpmcmFtZVZpZXddOwogICAgIFtmcmFtZVZpZXcg
cmVsZWFzZV07CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBib29sIGRpZE9uZVRp
bWVJbml0aWFsaXphdGlvbiA9IGZhbHNlOworI2VuZGlmCiAgICAgaWYgKCFkaWRPbmVUaW1lSW5p
dGlhbGl6YXRpb24pIHsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIFdlYktpdEluaXRpYWxp
emVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOwpAQCAtNzQ4LDkgKzkzOSwxOCBAQCAtICh2
b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVO
YW1lIGdyb3VwTmFtZTooTlNTdAogICAgICAgICBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmluaXRp
YWxpemVJZk5lY2Vzc2FyeSgpOwogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIC8vIFNldCB0aGUgV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xp
ZW50LgorICAgICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OnNldENsaWVudChXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQ6OnNoYXJlZFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVu
dCgpKTsKKworICAgICAgICBpZiAoW3N0YW5kYXJkUHJlZmVyZW5jZXMgZGF0YWJhc2VzRW5hYmxl
ZF0pCisjZW5kaWYKICAgICAgICAgW1dlYkRhdGFiYXNlTWFuYWdlciBzaGFyZWRXZWJEYXRhYmFz
ZU1hbmFnZXJdOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpICAgICAgICAKKyAgICAgICAg
aWYgKFtzdGFuZGFyZFByZWZlcmVuY2VzIHN0b3JhZ2VUcmFja2VyRW5hYmxlZF0pCisjZW5kaWYK
ICAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgpOwogICAgICAgICBX
ZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSgpOwogI2lmIEVO
QUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFURk9STShJT1MpCkBAIC03NjUsMTMgKzk2NSwx
OCBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6KE5TU3RyaW5n
ICopZnJhbWVOYW1lIGdyb3VwTmFtZTooTlNTdAogICAgIH0KIAogICAgIFBhZ2U6OlBhZ2VDbGll
bnRzIHBhZ2VDbGllbnRzOworI2lmICFQTEFURk9STShJT1MpCiAgICAgcGFnZUNsaWVudHMuY2hy
b21lQ2xpZW50ID0gbmV3IFdlYkNocm9tZUNsaWVudChzZWxmKTsKICAgICBwYWdlQ2xpZW50cy5j
b250ZXh0TWVudUNsaWVudCA9IG5ldyBXZWJDb250ZXh0TWVudUNsaWVudChzZWxmKTsKLSAgICBw
YWdlQ2xpZW50cy5lZGl0b3JDbGllbnQgPSBuZXcgV2ViRWRpdG9yQ2xpZW50KHNlbGYpOwogI2lm
IEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgcGFnZUNsaWVudHMuZHJhZ0NsaWVudCA9IG5ldyBX
ZWJEcmFnQ2xpZW50KHNlbGYpOwogI2VuZGlmCiAgICAgcGFnZUNsaWVudHMuaW5zcGVjdG9yQ2xp
ZW50ID0gbmV3IFdlYkluc3BlY3RvckNsaWVudChzZWxmKTsKKyNlbHNlCisgICAgcGFnZUNsaWVu
dHMuY2hyb21lQ2xpZW50ID0gbmV3IFdlYkNocm9tZUNsaWVudElPUyhzZWxmKTsKKyAgICBwYWdl
Q2xpZW50cy5pbnNwZWN0b3JDbGllbnQgPSBuZXcgV2ViSW5zcGVjdG9yQ2xpZW50KHNlbGYpOwor
I2VuZGlmCisgICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gbmV3IFdlYkVkaXRvckNsaWVu
dChzZWxmKTsKICAgICBwYWdlQ2xpZW50cy5hbHRlcm5hdGl2ZVRleHRDbGllbnQgPSBuZXcgV2Vi
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50KHNlbGYpOwogICAgIHBhZ2VDbGllbnRzLmxvYWRlckNsaWVu
dEZvck1haW5GcmFtZSA9IG5ldyBXZWJGcmFtZUxvYWRlckNsaWVudDsKICAgICBfcHJpdmF0ZS0+
cGFnZSA9IG5ldyBQYWdlKHBhZ2VDbGllbnRzKTsKQEAgLTc4Miw4ICs5ODcsMTAgQEAgLSAodm9p
ZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOihOU1N0cmluZyAqKWZyYW1lTmFt
ZSBncm91cE5hbWU6KE5TU3QKICAgICBXZWJDb3JlOjpwcm92aWRlTm90aWZpY2F0aW9uKF9wcml2
YXRlLT5wYWdlLCBuZXcgV2ViTm90aWZpY2F0aW9uQ2xpZW50KHNlbGYpKTsKICNlbmRpZgogI2lm
IEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBXZWJD
b3JlOjpwcm92aWRlRGV2aWNlT3JpZW50YXRpb25UbyhfcHJpdmF0ZS0+cGFnZSwgbmV3IFdlYkRl
dmljZU9yaWVudGF0aW9uQ2xpZW50KHNlbGYpKTsKICNlbmRpZgorI2VuZGlmCiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKICAgICBXZWJDb3JlOjpwcm92aWRlVXNlck1lZGlhVG8oX3ByaXZhdGUt
PnBhZ2UsIG5ldyBXZWJVc2VyTWVkaWFDbGllbnQoc2VsZikpOwogI2VuZGlmCkBAIC03OTYsMjIg
KzEwMDMsMzcgQEAgLSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOihO
U1N0cmluZyAqKWZyYW1lTmFtZSBncm91cE5hbWU6KE5TU3QKICAgICBfcHJpdmF0ZS0+cGFnZS0+
c2V0dGluZ3MoKS5zZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoW1tzZWxmIHByZWZlcmVuY2Vz
XSBfbG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoXSk7CiAgICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRp
bmdzKCkuc2V0VXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcihzaG91bGRV
c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yKCkpOwogCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBpZiAobmVlZHNPdXRsb29rUXVpcmtzU2NyaXB0KCkpIHsKICAgICAgICAg
X3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0U2hvdWxkSW5qZWN0VXNlclNjcmlwdHNJbklu
aXRpYWxFbXB0eURvY3VtZW50KHRydWUpOwogICAgICAgICBbc2VsZiBfaW5qZWN0T3V0bG9va1F1
aXJrc1NjcmlwdF07CiAgICAgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8g
UHJlc2VydmUgdGhlIGJlaGF2aW9yIHdlIGhhZCBiZWZvcmUgPHJkYXI6Ly9wcm9ibGVtLzc1ODA4
Njc+CisgICAgLy8gYnkgZW5mb3JjaW5nIGEgNU1CIGxpbWl0IGZvciBzZXNzaW9uIHN0b3JhZ2Uu
CisgICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0U2Vzc2lvblN0b3JhZ2VRdW90YSg1
ICogMTAyNCAqIDEwMjQpOworCisgICAgW3NlbGYgX3VwZGF0ZVNjcmVlblNjYWxlRnJvbVdpbmRv
d107CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfd2FrV2luZG93U2NyZWVuU2NhbGVDaGFuZ2VkOikg
bmFtZTpXQUtXaW5kb3dTY3JlZW5TY2FsZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmls
XTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVy
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93YWtXaW5kb3dWaXNpYmlsaXR5Q2hhbmdlZDopIG5h
bWU6V0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsK
KyAgICBfcHJpdmF0ZS0+X2ZpeGVkUG9zaXRpb25Db250ZW50ID0gW1tXZWJGaXhlZFBvc2l0aW9u
Q29udGVudCBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OnNlbGZdOworI2VuZGlmCiAKICAgICBpZiAo
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OldlYlNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0pCiAgICAgICAgIFtzZWxmIHNldFNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZDpbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9y
S2V5OldlYlNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF1dOwogCiAgICAgW1dlYkZyYW1lIF9jcmVh
dGVNYWluRnJhbWVXaXRoUGFnZTpfcHJpdmF0ZS0+cGFnZSBmcmFtZU5hbWU6ZnJhbWVOYW1lIGZy
YW1lVmlldzpmcmFtZVZpZXddOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1J1bkxvb3Ag
KnJ1bkxvb3AgPSBbTlNSdW5Mb29wIG1haW5SdW5Mb29wXTsKIAogICAgIGlmIChXZWJLaXRMaW5r
ZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9MT0FESU5HX0RVUklOR19DT01N
T05fUlVOTE9PUF9NT0RFUykpCiAgICAgICAgIFtzZWxmIHNjaGVkdWxlSW5SdW5Mb29wOnJ1bkxv
b3AgZm9yTW9kZTooTlNTdHJpbmcgKilrQ0ZSdW5Mb29wQ29tbW9uTW9kZXNdOwogICAgIGVsc2UK
ICAgICAgICAgW3NlbGYgc2NoZWR1bGVJblJ1bkxvb3A6cnVuTG9vcCBmb3JNb2RlOk5TRGVmYXVs
dFJ1bkxvb3BNb2RlXTsKKyNlbmRpZgogCiAgICAgW3NlbGYgX2FkZFRvQWxsV2ViVmlld3NTZXRd
OwogICAgIFtzZWxmIHNldEdyb3VwTmFtZTpncm91cE5hbWVdOwpAQCAtODI4LDcgKzEwNTAsOSBA
QCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6KE5TU3RyaW5nICop
ZnJhbWVOYW1lIGdyb3VwTmFtZTooTlNTdAogICAgIGlmIChbW3NlbGYgY2xhc3NdIHNob3VsZElu
Y2x1ZGVJbldlYktpdFN0YXRpc3RpY3NdKQogICAgICAgICArK1dlYlZpZXdDb3VudDsKIAorI2lm
ICFQTEFURk9STShJT1MpCiAgICAgW3NlbGYgX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXTsKKyNlbmRp
ZgogCiAgICAgW3NlbGYgX3NldFZpc2liaWxpdHlTdGF0ZTooW3NlbGYgX2lzVmlld1Zpc2libGVd
ID8gV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUgOiBXZWJQYWdlVmlzaWJpbGl0eVN0YXRl
SGlkZGVuKSBpc0luaXRpYWxTdGF0ZTpZRVNdOwogCkBAIC04MzYsOCArMTA2MCwxNSBAQCAtICh2
b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVO
YW1lIGdyb3VwTmFtZTooTlNTdAogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3ByZWZlcmVuY2VzQ2hh
bmdlZE5vdGlmaWNhdGlvbjopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZTpXZWJQcmVmZXJlbmNlc0NoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlv
biBvYmplY3Q6cHJlZnNdOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbc2VsZiBfcHJlZmVy
ZW5jZXNDaGFuZ2VkOltzZWxmIHByZWZlcmVuY2VzXV07CiAgICAgW1tzZWxmIHByZWZlcmVuY2Vz
XSBfcG9zdFByZWZlcmVuY2VzQ2hhbmdlZEFQSU5vdGlmaWNhdGlvbl07CisjZWxzZQorICAgIC8v
IGRvIHRoaXMgb24gdGhlIGN1cnJlbnQgdGhyZWFkIG9uIGlPUywgc2luY2UgdGhlIHdlYiB0aHJl
YWQgY291bGQgYmUgYmxvY2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQsCisgICAgLy8gYW5kIHByZWZz
IG5lZWQgdG8gYmUgY2hhbmdlZCBzeW5jaHJvbm91c2x5IDxyZGFyOi8vcHJvYmxlbS81ODQxNTU4
PgorICAgIFtzZWxmIF9wcmVmZXJlbmNlc0NoYW5nZWQ6cHJlZnNdOworICAgIF9wcml2YXRlLT5w
YWdlLT5zZXR0aW5ncygpLnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyh0cnVlKTsK
KyNlbmRpZgogCiAgICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaW5zdGFsbCgpOwogCkBAIC04
NTAsOCArMTA4MSwxMCBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5h
bWU6KE5TU3RyaW5nICopZnJhbWVOYW1lIGdyb3VwTmFtZTooTlNTdAogICAgICAgICBTZWN1cml0
eVBvbGljeTo6c2V0TG9jYWxMb2FkUG9saWN5KFNlY3VyaXR5UG9saWN5OjpBbGxvd0xvY2FsTG9h
ZHNGb3JMb2NhbEFuZFN1YnN0aXR1dGVEYXRhKTsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIGlmICghV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJ
VEhPVVRfQ09OVEVOVF9TTklGRklOR19GT1JfRklMRV9VUkxTKSkKICAgICAgICAgUmVzb3VyY2VI
YW5kbGU6OmZvcmNlQ29udGVudFNuaWZmaW5nKCk7CisjZW5kaWYKIAogI2lmIFVTRShHTElCKQog
ICAgIFtzZWxmIF9zY2hlZHVsZUdsaWJDb250ZXh0SXRlcmF0aW9uc107CkBAIC04ODMsNyArMTEx
Niw5IEBAIC0gKGlkKV9pbml0V2l0aEZyYW1lOihOU1JlY3QpZiBmcmFtZU5hbWU6KE5TU3RyaW5n
ICopZnJhbWVOYW1lIGdyb3VwTmFtZTooTlNTdHJpCiAgICAgX3ByaXZhdGUgPSBbW1dlYlZpZXdQ
cml2YXRlIGFsbG9jXSBpbml0XTsKICAgICBbc2VsZiBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRo
RnJhbWVOYW1lOmZyYW1lTmFtZSBncm91cE5hbWU6Z3JvdXBOYW1lXTsKICAgICBbc2VsZiBzZXRN
YWludGFpbnNCYWNrRm9yd2FyZExpc3Q6IFlFU107CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBf
cHJpdmF0ZS0+cGFnZS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoW3NlbGYgX2RldmljZVNjYWxlRmFj
dG9yXSk7CisjZW5kaWYKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtOTAxLDYgKzExMzYsNyBA
QCArIChOU0FycmF5ICopX3N1cHBvcnRlZE1JTUVUeXBlcwogICAgIHJldHVybiBbW1dlYkZyYW1l
VmlldyBfdmlld1R5cGVzQWxsb3dJbWFnZVR5cGVPbWlzc2lvbjpOT10gYWxsS2V5c107CiB9CiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogKyAoTlNBcnJheSAqKV9zdXBwb3J0ZWRGaWxlRXh0ZW5zaW9u
cwogewogICAgIE5TTXV0YWJsZVNldCAqZXh0ZW5zaW9ucyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9j
XSBpbml0XTsKQEAgLTkxNyw2ICsxMTUzLDI2MiBAQCArIChOU0FycmF5ICopX3N1cHBvcnRlZEZp
bGVFeHRlbnNpb25zCiAgICAgW2V4dGVuc2lvbnMgcmVsZWFzZV07CiAgICAgcmV0dXJuIHVuaXF1
ZUV4dGVuc2lvbnM7CiB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKysgKHZvaWQpZW5h
YmxlV2ViVGhyZWFkCit7CisgICAgc3RhdGljIEJPT0wgaXNXZWJUaHJlYWRFbmFibGVkID0gTk87
CisgICAgaWYgKCFpc1dlYlRocmVhZEVuYWJsZWQpIHsKKyAgICAgICAgV2ViQ29yZU9iakNEZWFs
bG9jT25XZWJUaHJlYWQoW1dlYkJhc2VQbHVnaW5QYWNrYWdlIGNsYXNzXSk7CisgICAgICAgIFdl
YkNvcmVPYmpDRGVhbGxvY09uV2ViVGhyZWFkKFtXZWJEYXRhU291cmNlIGNsYXNzXSk7CisgICAg
ICAgIFdlYkNvcmVPYmpDRGVhbGxvY09uV2ViVGhyZWFkKFtXZWJGcmFtZSBjbGFzc10pOworICAg
ICAgICBXZWJDb3JlT2JqQ0RlYWxsb2NPbldlYlRocmVhZChbV2ViSFRNTFZpZXcgY2xhc3NdKTsK
KyAgICAgICAgV2ViQ29yZU9iakNEZWFsbG9jT25XZWJUaHJlYWQoW1dlYkhpc3RvcnlJdGVtIGNs
YXNzXSk7CisgICAgICAgIFdlYkNvcmVPYmpDRGVhbGxvY09uV2ViVGhyZWFkKFtXZWJQbGFpbldo
aXRlVmlldyBjbGFzc10pOworICAgICAgICBXZWJDb3JlT2JqQ0RlYWxsb2NPbldlYlRocmVhZChb
V2ViUG9saWN5RGVjaXNpb25MaXN0ZW5lciBjbGFzc10pOworICAgICAgICBXZWJDb3JlT2JqQ0Rl
YWxsb2NPbldlYlRocmVhZChbV2ViVmlldyBjbGFzc10pOworICAgICAgICBXZWJDb3JlT2JqQ0Rl
YWxsb2NPbldlYlRocmVhZChbV2ViVmlzaWJsZVBvc2l0aW9uIGNsYXNzXSk7CisgICAgICAgIGlm
IChhcHBsaWNhdGlvbklzVGhlRWNvbm9taXN0T25JUGhvbmUoKSAmJiAhV2ViS2l0TGlua2VkT25P
ckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhfREVMRUdBVEVfQ0FMTFNfSU5fQ09NTU9O
X1JVTkxPT1BfTU9ERVMpKQorICAgICAgICAgICAgV2ViVGhyZWFkU2V0RGVsZWdhdGVTb3VyY2VS
dW5Mb29wTW9kZShrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAgICAgICBXZWJUaHJlYWRFbmFi
bGUoKTsKKyAgICAgICAgaXNXZWJUaHJlYWRFbmFibGVkID0gWUVTOworICAgIH0KK30KKworLSAo
aWQpaW5pdFNpbXBsZUhUTUxEb2N1bWVudFdpdGhTdHlsZTooTlNTdHJpbmcgKilzdHlsZSBmcmFt
ZTooQ0dSZWN0KWZyYW1lIHByZWZlcmVuY2VzOihXZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2Vz
IGdyb3VwTmFtZTooTlNTdHJpbmcgKilncm91cE5hbWUKK3sgICAgCisgICAgc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEZyYW1lOmZyYW1lXTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgCisgICAgX3ByaXZhdGUgPSBbW1dlYlZpZXdQcml2YXRlIGFsbG9jXSBpbml0XTsK
KyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXI6OnN1
cHByZXNzTWVzc2FnZXMod2ViVmlld0lzT3Blbik7CisjZW5kaWYKKyAgICAKKyAgICBpZiAoIXBy
ZWZlcmVuY2VzKQorICAgICAgICBwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFy
ZFByZWZlcmVuY2VzXTsKKyAgICBbcHJlZmVyZW5jZXMgd2lsbEFkZFRvV2ViVmlld107CisgICAg
CisgICAgX3ByaXZhdGUtPnByZWZlcmVuY2VzID0gW3ByZWZlcmVuY2VzIHJldGFpbl07CisgICAg
X3ByaXZhdGUtPm1haW5GcmFtZURvY3VtZW50UmVhZHkgPSBOTzsKKyAgICBfcHJpdmF0ZS0+ZHJh
d3NCYWNrZ3JvdW5kID0gWUVTOworICAgIF9wcml2YXRlLT5iYWNrZ3JvdW5kQ29sb3IgPSBDR0Nv
bG9yUmV0YWluKGNhY2hlZENHQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdC
KSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICAvLyBQcm9kdWN0aW9uIGlu
c3RhbGxzIGFsd2F5cyBkaXNhbGxvdyBkZWJ1Z2dpbmcgc2ltcGxlIEhUTUwgZG9jdW1lbnRzLgor
ICAgIC8vIEludGVybmFsIGluc3RhbGxzIGFsbG93IGRlYnVnZ2luZyBzaW1wbGUgSFRNTCBkb2N1
bWVudHMgKFRleHRGaWVsZHMpIGlmIHRoZSBJbnRlcm5hbCBTZXR0aW5nIGlzIGVuYWJsZWQuCisg
ICAgaWYgKCFpc0ludGVybmFsSW5zdGFsbCgpKQorICAgICAgICBfcHJpdmF0ZS0+YWxsb3dzUmVt
b3RlSW5zcGVjdGlvbiA9IE5POworICAgIGVsc2UgeworICAgICAgICBzdGF0aWMgQk9PTCB0ZXh0
RmllbGRJbnNwZWN0aW9uRW5hYmxlZCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGJvb2xGb3JLZXk6V2ViS2l0VGV4dEZpZWxkUmVtb3RlSW5zcGVjdGlvbkVuYWJsZWRQ
cmVmZXJlbmNlS2V5XTsKKyAgICAgICAgX3ByaXZhdGUtPmFsbG93c1JlbW90ZUluc3BlY3Rpb24g
PSB0ZXh0RmllbGRJbnNwZWN0aW9uRW5hYmxlZDsKKyAgICAgICAgaWYgKF9wcml2YXRlLT5hbGxv
d3NSZW1vdGVJbnNwZWN0aW9uICYmIGF1dG9TdGFydFJlbW90ZUluc3BlY3RvcikKKyAgICAgICAg
ICAgIFtXZWJWaWV3IF9lbmFibGVSZW1vdGVJbnNwZWN0b3JdOworICAgIH0KKyNlbmRpZgorICAg
IAorICAgIFdlYkZyYW1lVmlldyAqZnJhbWVWaWV3ID0gbmlsOworICAgIGZyYW1lVmlldyA9IFtb
V2ViRnJhbWVWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOiBDR1JlY3RNYWtlKDAsMCxmcmFtZS5z
aXplLndpZHRoLGZyYW1lLnNpemUuaGVpZ2h0KV07CisgICAgW2ZyYW1lVmlldyBzZXRBdXRvcmVz
aXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOworICAg
IFtzZWxmIGFkZFN1YnZpZXc6ZnJhbWVWaWV3XTsKKyAgICBbZnJhbWVWaWV3IHJlbGVhc2VdOwor
CisgICAgCisgICAgUGFnZTo6UGFnZUNsaWVudHMgcGFnZUNsaWVudHM7CisgICAgcGFnZUNsaWVu
dHMuY2hyb21lQ2xpZW50ID0gbmV3IFdlYkNocm9tZUNsaWVudElPUyhzZWxmKTsKKyNpZiBFTkFC
TEUoRFJBR19TVVBQT1JUKQorICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBuZXcgV2ViRHJh
Z0NsaWVudChzZWxmKTsKKyNlbmRpZgorICAgIHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCA9IG5l
dyBXZWJFZGl0b3JDbGllbnQoc2VsZik7CisgICAgcGFnZUNsaWVudHMuaW5zcGVjdG9yQ2xpZW50
ID0gbmV3IFdlYkluc3BlY3RvckNsaWVudChzZWxmKTsKKyAgICBwYWdlQ2xpZW50cy5sb2FkZXJD
bGllbnRGb3JNYWluRnJhbWUgPSBuZXcgV2ViRnJhbWVMb2FkZXJDbGllbnQ7CisgICAgX3ByaXZh
dGUtPnBhZ2UgPSBuZXcgUGFnZShwYWdlQ2xpZW50cyk7CisgICAgCisgICAgW3NlbGYgc2V0U21h
cnRJbnNlcnREZWxldGVFbmFibGVkOllFU107CisgICAgCisgICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS82ODUxNDUxPiBTaG91bGQgcmVzcGVjdCBwcmVmZXJlbmNlcyBpbiBmYXN0IHBhdGgg
V2ViVmlldyBpbml0aWFsaXphdGlvbgorICAgIC8vIFdlIGFyZSBpZ25vcmluZyB0aGUgcHJlZmVy
ZW5jZXMgb2JqZWN0IG9uIGZhc3QgcGF0aCBhbmQganVzdCB1c2luZyBTZXR0aW5ncyBkZWZhdWx0
cyAoZXZlcnl0aGluZyBmYW5jeSBvZmYpLgorICAgIC8vIFRoaXMgbWF0Y2hlcyBob3cgVUlLaXQg
c2V0cyB1cCB0aGUgcHJlZmVyZW5jZXMuIFdlIG5lZWQgdG8gc2V0ICBkZWZhdWx0IHZhbHVlcyBm
b3IgZm9udHMgdGhvdWdoLCA8cmRhcjovL3Byb2JsZW0vNjg1MDYxMT4uCisgICAgLy8gVGhpcyBz
aG91bGQgYmUgcmV2aXNpdGVkIGxhdGVyLiBUaGVyZSBpcyBzb21lIHJpc2sgaW52b2x2ZWQsIF9w
cmVmZXJlbmNlc0NoYW5nZWQgdXNlZCB0byBzaG93IHVwIGJhZGx5IGluIFNoYXJrLgorICAgIF9w
cml2YXRlLT5wYWdlLT5zZXR0aW5ncygpLnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoOSk7Cisg
ICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0RGVmYXVsdEZvbnRTaXplKFtfcHJpdmF0
ZS0+cHJlZmVyZW5jZXMgZGVmYXVsdEZvbnRTaXplXSk7CisgICAgX3ByaXZhdGUtPnBhZ2UtPnNl
dHRpbmdzKCkuc2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTMpOworICAgIF9wcml2YXRlLT5wYWdl
LT5zZXR0aW5ncygpLnNldERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZChmYWxzZSk7Cisg
ICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZChbcHJlZmVyZW5jZXMgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZF0pOworICAgIF9wcml2YXRl
LT5wYWdlLT5zZXR0aW5ncygpLnNldFNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKGZhbHNl
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzczOTQzNzA+IEFsd2F5cyB1
c2UgcHJpbWFyeSBmb250IGJhc2VsaW5lIGluIHRleHQgZmllbGQgYmFzZSBsaW5lIGNhbGN1bGF0
aW9uLCBpZ25vcmUgZmFsbGJhY2sgZm9udHMuCisgICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdz
KCkuc2V0QWx3YXlzVXNlQmFzZWxpbmVPZlByaW1hcnlGb250KFtwcmVmZXJlbmNlcyBfYWx3YXlz
VXNlQmFzZWxpbmVPZlByaW1hcnlGb250XSk7CisKKyAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0dGlu
Z3MoKS5zZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHModHJ1ZSk7CisgICAgX3ByaXZh
dGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0UGljdG9ncmFwaEZvbnRGYW1pbHkoIkFwcGxlQ29sb3JF
bW9qaSIpOworICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJk
YXI6Ly9wcm9ibGVtLzExNTE4Njg4PiBSRUdSRVNTSU9OOiBRdW90ZWQgdGV4dCBmb250IGNoYW5n
ZXMgd2hlbiByZXBseWluZyB0byBjZXJ0YWluIGVtYWlsCisgICAgX3ByaXZhdGUtPnBhZ2UtPnNl
dHRpbmdzKCkuc2V0U3RhbmRhcmRGb250RmFtaWx5KFtfcHJpdmF0ZS0+cHJlZmVyZW5jZXMgc3Rh
bmRhcmRGb250RmFtaWx5XSk7CisgICAgCisgICAgLy8gRklYTUU6IHRoaXMgaXMgYSB3b3JrYXJv
dW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMTE4MjAwOTA+IFF1b3RlZCB0ZXh0IGNoYW5nZXMgaW4g
c2l6ZSB3aGVuIHJlcGx5aW5nIHRvIGNlcnRhaW4gZW1haWwKKyAgICBfcHJpdmF0ZS0+cGFnZS0+
c2V0dGluZ3MoKS5zZXRNaW5pbXVtRm9udFNpemUoW19wcml2YXRlLT5wcmVmZXJlbmNlcyBtaW5p
bXVtRm9udFNpemVdKTsKKworICAgIF9wcml2YXRlLT5wYWdlLT5zZXRHcm91cE5hbWUoZ3JvdXBO
YW1lKTsKKworICAgIFtXZWJGcmFtZSBfY3JlYXRlTWFpbkZyYW1lV2l0aFNpbXBsZUhUTUxEb2N1
bWVudFdpdGhQYWdlOl9wcml2YXRlLT5wYWdlIGZyYW1lVmlldzpmcmFtZVZpZXcgc3R5bGU6c3R5
bGVdOworICAgIAorICAgIFtzZWxmIF9hZGRUb0FsbFdlYlZpZXdzU2V0XTsKKyAgICAKKyAgICAr
K1dlYlZpZXdDb3VudDsKKyAgICAKKyAgICBTZWN1cml0eVBvbGljeTo6c2V0TG9jYWxMb2FkUG9s
aWN5KFNlY3VyaXR5UG9saWN5OjpBbGxvd0xvY2FsTG9hZHNGb3JMb2NhbEFuZFN1YnN0aXR1dGVE
YXRhKTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworKyAodm9pZClfaGFuZGxlTWVtb3J5
V2FybmluZworeworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgV2ViS2l0
OjpNZW1vcnlNZWFzdXJlIHRvdGFsTWVtb3J5KCJNZW1vcnkgd2FybmluZzogT3ZlcmFsbCBtZW1v
cnkgY2hhbmdlIGZyb20gW1dlYlZpZXcgX2hhbmRsZU1lbW9yeVdhcm5pbmddLiIpOworCisgICAg
Ly8gQWx3YXlzIHBlZm9ybSB0aGUgZm9sbG93aW5nLgorICAgIFtXZWJWaWV3IHB1cmdlSW5hY3Rp
dmVGb250RGF0YV07CisKKyAgICAvLyBPbmx5IHBlcmZvcm0gdGhlIHJlbWFpbmluZyBpZiBhIG5v
bi1zaW1wbGUgZG9jdW1lbnQgd2FzIGNyZWF0ZWQuCisgICAgaWYgKCFkaWRPbmVUaW1lSW5pdGlh
bGl6YXRpb24pCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hF
KQorICAgIHsKKyAgICAgICAgV2ViS2l0OjpNZW1vcnlNZWFzdXJlIG1lYXN1cmVyKCJNZW1vcnkg
d2FybmluZzogZmx1c2hpbmcgaW1hZ2VzIHRvIGRpc2suIik7CisgICAgICAgIFdlYkNvcmU6Om1l
bW9yeUNhY2hlKCktPmZsdXNoQ2FjaGVkSW1hZ2VzVG9EaXNrKCk7CisgICAgfQorI2VuZGlmCisK
KyAgICBbV2ViU3RvcmFnZU1hbmFnZXIgY2xvc2VJZGxlTG9jYWxTdG9yYWdlRGF0YWJhc2VzXTsK
KworICAgIFtXZWJWaWV3IF9yZWxlYXNlTWVtb3J5Tm93XTsKK30KKworKyAodm9pZClyZWdpc3Rl
ckZvck1lbW9yeU5vdGlmaWNhdGlvbnMKK3sKKyAgICBCT09MIHNob3VsZEF1dG9DbGVhclByZXNz
dXJlT25NZW1vcnlSZWxlYXNlID0gIVdlYkNvcmU6OmFwcGxpY2F0aW9uSXNNb2JpbGVTYWZhcmko
KTsKKworICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlcigpLmluc3RhbGxNZW1vcnlSZWxlYXNlQmxv
Y2soXnsKKyAgICAgICAgW1dlYlZpZXcgX2hhbmRsZU1lbW9yeVdhcm5pbmddOworICAgIH0sIHNo
b3VsZEF1dG9DbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlKTsKKworICAgIHN0YXRpYyBkaXNw
YXRjaF9zb3VyY2VfdCBtZW1vcnlOb3RpZmljYXRpb25FdmVudFNvdXJjZSA9IGRpc3BhdGNoX3Nv
dXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfVk0sIDAsIERJU1BBVENIX1ZNX1BSRVNT
VVJFLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RF
RkFVTFQsIDApKTsKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIobWVtb3J5
Tm90aWZpY2F0aW9uRXZlbnRTb3VyY2UsIF57CisgICAgICAgIC8vIFNldCBtZW1vcnkgcHJlc3N1
cmUgZmxhZyBhbmQgc2NoZWR1bGUgcmVsZWFzaW5nIG1lbW9yeSBpbiB3ZWIgdGhyZWFkIHJ1bmxv
b3AgZXhpdC4KKyAgICAgICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuc2V0UmVjZWl2ZWRNZW1v
cnlQcmVzc3VyZShXZWJDb3JlOjpNZW1vcnlQcmVzc3VyZVJlYXNvblZNUHJlc3N1cmUpOworICAg
IH0pOworCisgICAgZGlzcGF0Y2hfcmVzdW1lKG1lbW9yeU5vdGlmaWNhdGlvbkV2ZW50U291cmNl
KTsKKworICAgIGlmICghc2hvdWxkQXV0b0NsZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVhc2UpIHsK
KyAgICAgICAgLy8gTGlzdGVuIHRvIG1lbW9yeSBzdGF0dXMgbm90aWZpY2F0aW9uIHRvIHJlc2V0
IHRoZSBtZW1vcnkgcHJlc3N1cmUgZmxhZy4KKyAgICAgICAgc3RhdGljIGRpc3BhdGNoX3NvdXJj
ZV90IG1lbW9yeVN0YXR1c0V2ZW50U291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQ
QVRDSF9TT1VSQ0VfVFlQRV9NRU1PUllTVEFUVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElTUEFUQ0hfTUVNT1JZU1RBVFVTX1BS
RVNTVVJFX1dBUk4gfCBESVNQQVRDSF9NRU1PUllTVEFUVVNfUFJFU1NVUkVfTk9STUFMLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRD
SF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSk7CisgICAgICAgIGRpc3BhdGNoX3NvdXJjZV9z
ZXRfZXZlbnRfaGFuZGxlcihtZW1vcnlTdGF0dXNFdmVudFNvdXJjZSwgXnsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgY3VycmVudFN0YXR1cyA9IGRpc3BhdGNoX3NvdXJjZV9nZXRfZGF0YSht
ZW1vcnlTdGF0dXNFdmVudFNvdXJjZSk7CisgICAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyA9
PSBESVNQQVRDSF9NRU1PUllTVEFUVVNfUFJFU1NVUkVfTk9STUFMKQorICAgICAgICAgICAgICAg
IG1lbW9yeVByZXNzdXJlSGFuZGxlcigpLmNsZWFyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gRElTUEFUQ0hfTUVNT1JZU1RBVFVTX1BSRVNT
VVJFX1dBUk4pCisgICAgICAgICAgICAgICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuc2V0UmVj
ZWl2ZWRNZW1vcnlQcmVzc3VyZShXZWJDb3JlOjpNZW1vcnlQcmVzc3VyZVJlYXNvblZNU3RhdHVz
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKG1lbW9yeVN0YXR1c0V2
ZW50U291cmNlKTsKKyAgICB9Cit9CisKKysgKHZvaWQpX3JlbGVhc2VNZW1vcnlOb3cKK3sKKyAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFtXZWJWaWV3IGRpc2NhcmRBbGxD
b21waWxlZENvZGVdOworICAgIFtXZWJWaWV3IGdhcmJhZ2VDb2xsZWN0Tm93XTsKKyAgICBbV2Vi
VmlldyBwdXJnZUluYWN0aXZlRm9udERhdGFdOworICAgIFtXZWJWaWV3IGRyYWluTGF5ZXJQb29s
XTsKKyAgICBbV2ViQ2FjaGUgZW1wdHlJbk1lbW9yeVJlc291cmNlc107CisgICAgW1dlYlZpZXcg
cmVsZWFzZUZhc3RNYWxsb2NNZW1vcnlPbkN1cnJlbnRUaHJlYWRdOworCisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgLy8gQ2xlYXIgdGhl
IG1haW4gdGhyZWFkJ3MgVENNYWxsb2MgdGhyZWFkIGNhY2hlLgorICAgICAgICBbV2ViVmlldyBy
ZWxlYXNlRmFzdE1hbGxvY01lbW9yeU9uQ3VycmVudFRocmVhZF07CisgICAgfSk7Cit9CisKKysg
KHZvaWQpX2NsZWFyUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbkNvb2tpZVN0b3JhZ2UKK3sKKyAgICBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpjbGVhclByaXZhdGVCcm93c2luZ1Nlc3Npb25Db29r
aWVTdG9yYWdlKCk7Cit9CisKKy0gKHZvaWQpX3JlcGxhY2VDdXJyZW50SGlzdG9yeUl0ZW06KFdl
Ykhpc3RvcnlJdGVtICopaXRlbQoreworICAgIEZyYW1lKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29y
ZUZyYW1lXTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5
KCkucmVwbGFjZUN1cnJlbnRJdGVtKGNvcmUoaXRlbSkpOworfQorCisrICh2b2lkKXdpbGxFbnRl
ckJhY2tncm91bmRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpaGFuZGxlcgor
eworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBbV2ViVmlldyBfcmVsZWFzZU1lbW9yeU5v
d107CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIGhh
bmRsZXIpOworICAgIH0pOworfQorCisrICh2b2lkKXJlbGVhc2VGYXN0TWFsbG9jTWVtb3J5T25D
dXJyZW50VGhyZWFkCit7CisgICAgV2ViS2l0OjpNZW1vcnlNZWFzdXJlIG1lYXN1cmVyKCJNZW1v
cnkgd2FybmluZzogUmVsZWFzaW5nIGZhc3QgbWFsbG9jIG1lbW9yeSB0byBzeXN0ZW0uIik7Cisg
ICAgV1RGOjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKTsKK30KKworKyAodm9pZClnYXJi
YWdlQ29sbGVjdE5vdworeworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAg
V2ViS2l0OjpNZW1vcnlNZWFzdXJlIG1lYXN1cmVyKCJNZW1vcnkgd2FybmluZzogQ2FsbGluZyBK
YXZhU2NyaXB0IEdDLiIpOworICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0Tm93KCk7
Cit9CisKKysgKHZvaWQpcHVyZ2VJbmFjdGl2ZUZvbnREYXRhCit7CisgICAgQVNTRVJUKFdlYlRo
cmVhZElzQ3VycmVudCgpKTsKKyAgICBXZWJLaXQ6Ok1lbW9yeU1lYXN1cmUgbWVhc3VyZXIoIk1l
bW9yeSB3YXJuaW5nOiBQdXJnaW5nIGluYWN0aXZlIGZvbnQgZGF0YS4iKTsKKyAgICBmb250Q2Fj
aGUoKS0+cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCk7Cit9CisKKysgKHZvaWQpZHJhaW5MYXllclBv
b2wKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFdlYktpdDo6TWVt
b3J5TWVhc3VyZSBtZWFzdXJlcigiTWVtb3J5IHdhcm5pbmc6IERyYWluaW5nIGxheWVyIHBvb2wu
Iik7CisgICAgV2ViQ29yZTo6VGlsZUNhY2hlOjpkcmFpbkxheWVyUG9vbCgpOworfQorCisrICh2
b2lkKWRpc2NhcmRBbGxDb21waWxlZENvZGUKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJy
ZW50KCkpOworICAgIFdlYktpdDo6TWVtb3J5TWVhc3VyZSBtZWFzdXJlcigiTWVtb3J5IHdhcm5p
bmc6IERpc2NhcmRpbmcgSklUJ2VkIGNvZGUuIik7CisgICAgZ2NDb250cm9sbGVyKCkuZGlzY2Fy
ZEFsbENvbXBpbGVkQ29kZSgpOworfQorCisrIChCT09MKWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNl
RXhlbXB0Oih1bmljaGFyKWNoYXJhY3RlciBpc1ByZXZpb3VzQ2hhcmFjdGVyOihCT09MKWIKK3sK
KyAgICByZXR1cm4gV2ViQ29yZTo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQoY2hhcmFj
dGVyLCBiKTsKK30KKworLSAodm9pZCl1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVTaGVl
dHMKK3sKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBb
c2VsZiBfbWFpbkNvcmVGcmFtZV07IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpIHsKKyAgICAgICAgICAgIERvY3VtZW50ICpkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOworICAgICAgICAgICAgaWYgKGRvY3VtZW50KQorICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgfQor
ICAgIH0pOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAogc3RhdGljIE5TTXV0YWJsZVNl
dCAqa25vd25QbHVnaW5NSU1FVHlwZXMoKQogewpAQCAtOTQzLDcgKzE0MzUsMTMgQEAgKyAoQk9P
TClfdmlld0NsYXNzOihDbGFzcyAqKXZDbGFzcyBhbmRSZXByZXNlbnRhdGlvbkNsYXNzOihDbGFz
cyAqKXJDbGFzcyBmb3JNSU0KICAgICBDbGFzcyB2aWV3Q2xhc3MgPSBbW1dlYkZyYW1lVmlldyBf
dmlld1R5cGVzQWxsb3dJbWFnZVR5cGVPbWlzc2lvbjpZRVNdIF93ZWJraXRfb2JqZWN0Rm9yTUlN
RVR5cGU6TUlNRVR5cGVdOwogICAgIENsYXNzIHJlcENsYXNzID0gW1tXZWJEYXRhU291cmNlIF9y
ZXBUeXBlc0FsbG93SW1hZ2VUeXBlT21pc3Npb246WUVTXSBfd2Via2l0X29iamVjdEZvck1JTUVU
eXBlOk1JTUVUeXBlXTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgV2ViUERGVmlldyAo
W1dlYlZpZXcgX2dldFBERlZpZXdDbGFzc10pCisjZW5kaWYKICAgICBpZiAoIXZpZXdDbGFzcyB8
fCAhcmVwQ2xhc3MgfHwgW1tXZWJQREZWaWV3IHN1cHBvcnRlZE1JTUVUeXBlc10gY29udGFpbnNP
YmplY3Q6TUlNRVR5cGVdKSB7CisjaWYgUExBVEZPUk0oSU9TKQorI3VuZGVmIFdlYlBERlZpZXcK
KyNlbmRpZgogICAgICAgICAvLyBPdXIgb3B0aW1pemF0aW9uIHRvIGF2b2lkIGxvYWRpbmcgdGhl
IHBsdWctaW4gREIgYW5kIGltYWdlIHR5cGVzIGZvciB0aGUgSFRNTCBjYXNlIGZhaWxlZC4KIAog
ICAgICAgICBpZiAoYWxsb3dQbHVnaW5zKSB7CkBAIC05ODYsNyArMTQ4NCw3IEBAIC0gKEJPT0wp
X3ZpZXdDbGFzczooQ2xhc3MgKil2Q2xhc3MgYW5kUmVwcmVzZW50YXRpb25DbGFzczooQ2xhc3Mg
KilyQ2xhc3MgZm9yTUlNCiB7CiAgICAgaWYgKFtbc2VsZiBjbGFzc10gX3ZpZXdDbGFzczp2Q2xh
c3MgYW5kUmVwcmVzZW50YXRpb25DbGFzczpyQ2xhc3MgZm9yTUlNRVR5cGU6TUlNRVR5cGUgYWxs
b3dpbmdQbHVnaW5zOltfcHJpdmF0ZS0+cHJlZmVyZW5jZXMgYXJlUGx1Z0luc0VuYWJsZWRdXSkK
ICAgICAgICAgcmV0dXJuIFlFUzsKLQorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKF9wcml2
YXRlLT5wbHVnaW5EYXRhYmFzZSkgewogICAgICAgICBXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGx1
Z2luUGFja2FnZSA9IFtfcHJpdmF0ZS0+cGx1Z2luRGF0YWJhc2UgcGx1Z2luRm9yTUlNRVR5cGU6
TUlNRVR5cGVdOwogICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkgewpAQCAtOTk3LDE0ICsxNDk1
LDE2IEBAIC0gKEJPT0wpX3ZpZXdDbGFzczooQ2xhc3MgKil2Q2xhc3MgYW5kUmVwcmVzZW50YXRp
b25DbGFzczooQ2xhc3MgKilyQ2xhc3MgZm9yTUlNCiAgICAgICAgICAgICByZXR1cm4gWUVTOwog
ICAgICAgICB9CiAgICAgfQotICAgIAorI2VuZGlmCiAgICAgcmV0dXJuIE5POwogfQogCisjaWYg
IVBMQVRGT1JNKElPUykKICsgKHZvaWQpX3NldEFsd2F5c1VzZUFUU1U6KEJPT0wpZgogewogICAg
IFtzZWxmIF9zZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aDpmXTsKIH0KKyNlbmRpZgog
CiArICh2b2lkKV9zZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aDooQk9PTClmCiB7CkBA
IC0xMDQzLDIyICsxNTQzLDEzOSBAQCArIChCT09MKWNhblNob3dGaWxlOihOU1N0cmluZyAqKXBh
dGgKICAgICByZXR1cm4gW1tzZWxmIGNsYXNzXSBjYW5TaG93TUlNRVR5cGU6W1dlYlZpZXcgX01J
TUVUeXBlRm9yRmlsZTpwYXRoXV07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogKyAoTlNTdHJp
bmcgKilzdWdnZXN0ZWRGaWxlRXh0ZW5zaW9uRm9yTUlNRVR5cGU6KE5TU3RyaW5nICopdHlwZQog
ewogICAgIHJldHVybiBXS0dldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKHR5cGUpOwog
fQorI2VuZGlmCiAKIC0gKEJPT0wpX2lzQ2xvc2VkCiB7CiAgICAgcmV0dXJuICFfcHJpdmF0ZSB8
fCBfcHJpdmF0ZS0+Y2xvc2VkOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAodm9pZClfZGlz
cGF0Y2hVbmxvYWRFdmVudAoreworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBXZWJGcmFt
ZSAqbWFpbkZyYW1lID0gW3NlbGYgbWFpbkZyYW1lXTsKKyAgICAgICAgRnJhbWUgKmNvcmVNYWlu
RnJhbWUgPSBjb3JlKG1haW5GcmFtZSk7CisgICAgICAgIGlmIChjb3JlTWFpbkZyYW1lKSB7Cisg
ICAgICAgICAgICBEb2N1bWVudCAqZG9jdW1lbnQgPSBjb3JlTWFpbkZyYW1lLT5kb2N1bWVudCgp
OworICAgICAgICAgICAgaWYgKGRvY3VtZW50KQorICAgICAgICAgICAgICAgIGRvY3VtZW50LT5k
aXNwYXRjaFdpbmRvd0V2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50
LCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCistIChET01DU1NTdHls
ZURlY2xhcmF0aW9uICopc3R5bGVBdFNlbGVjdGlvblN0YXJ0Cit7CisgICAgV2ViRnJhbWUgKm1h
aW5GcmFtZSA9IFtzZWxmIG1haW5GcmFtZV07CisgICAgRnJhbWUgKmNvcmVNYWluRnJhbWUgPSBj
b3JlKG1haW5GcmFtZSk7CisgICAgaWYgKCFjb3JlTWFpbkZyYW1lKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIHJldHVybiBjb3JlTWFpbkZyYW1lLT5zdHlsZUF0U2VsZWN0aW9uU3RhcnQoKTsK
K30KKworLSAoTlNVSW50ZWdlcilfcmVuZGVyVHJlZVNpemUKK3sKKyAgICBpZiAoIV9wcml2YXRl
LT5wYWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gX3ByaXZhdGUtPnBhZ2UtPnJl
bmRlclRyZWVTaXplKCk7Cit9CisKKy0gKHZvaWQpX2Rpc3BhdGNoVGlsZURpZERyYXc6KENBTGF5
ZXIqKXRpbGUKK3sKKyAgICBpZCBtYWlsRGVsZWdhdGUgPSBbc2VsZiBfd2ViTWFpbERlbGVnYXRl
XTsKKyAgICBpZiAoW21haWxEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJ0aHJlYWRfd2ViVmlldzp0aWxlRGlkRHJhdzopXSkgeworICAgICAgICBbbWFpbERlbGVnYXRl
IF93ZWJ0aHJlYWRfd2ViVmlldzpzZWxmIHRpbGVEaWREcmF3OnRpbGVdOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFPU0F0b21pY0NvbXBhcmVBbmRTd2FwMzIoMCwgMSwgJl9w
cml2YXRlLT5kaWREcmF3VGlsZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJUaHJlYWRM
b2NrKCk7CisKKyAgICBbW1tzZWxmIF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBhc3luY0Zvcndh
cmRlcl0gd2ViVmlld0RpZERyYXdUaWxlczpzZWxmXTsKK30KKworLSAodm9pZClfd2lsbFN0YXJ0
U2Nyb2xsaW5nT3Jab29taW5nCit7CisgICAgLy8gUGF1c2UgdGltZXJzIGR1cmluZyB0b3AgbGV2
ZWwgaW50ZXJhY3Rpb24KKyAgICBpZiAoX3ByaXZhdGUtPm1haW5WaWV3SXNTY3JvbGxpbmdPclpv
b21pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBfcHJpdmF0ZS0+bWFpblZpZXdJc1Njcm9sbGlu
Z09yWm9vbWluZyA9IFlFUzsKKworICAgIC8vIFRoaXMgc3VzcGVuZHMgYWN0aXZlIERPTSBvYmpl
Y3RzIGxpa2UgdGltZXJzLCBidXQgbm90IG1lZGlhLgorICAgIFtbc2VsZiBtYWluRnJhbWVdIHNl
dFRpbWVvdXRzUGF1c2VkOllFU107CisKKyAgICAvLyBUaGlzIGRlZmVycyBsb2FkaW5nIGNhbGxi
YWNrcyBvbmx5LgorICAgIC8vIFdBUk5JTkc6IFRoaXMgYmVoYXZpb3IgY291bGQgY2hhbmdlIGlm
IEJ1ZyA0OTQwMSBsYW5kcyBpbiBvcGVuIHNvdXJjZSBXZWJLaXQgYWdhaW4uCisgICAgW3NlbGYg
c2V0RGVmZXJzQ2FsbGJhY2tzOllFU107Cit9CisKKy0gKHZvaWQpX2RpZEZpbmlzaFNjcm9sbGlu
Z09yWm9vbWluZworeworICAgIGlmICghX3ByaXZhdGUtPm1haW5WaWV3SXNTY3JvbGxpbmdPclpv
b21pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBfcHJpdmF0ZS0+bWFpblZpZXdJc1Njcm9sbGlu
Z09yWm9vbWluZyA9IE5POworICAgIFtzZWxmIHNldERlZmVyc0NhbGxiYWNrczpOT107CisgICAg
W1tzZWxmIG1haW5GcmFtZV0gc2V0VGltZW91dHNQYXVzZWQ6Tk9dOworfQorCistICh2b2lkKV9z
ZXRSZXNvdXJjZUxvYWRTY2hlZHVsZXJTdXNwZW5kZWQ6KEJPT0wpc3VzcGVuZAoreworICAgIGlm
IChzdXNwZW5kKQorICAgICAgICByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c3VzcGVuZFBlbmRp
bmdSZXF1ZXN0cygpOworICAgIGVsc2UKKyAgICAgICAgcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkt
PnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOworfQorCisrICh2b2lkKV9zZXRBY2NlbGVyYXRlZElt
YWdlRGVjb2Rpbmc6KEJPT0wpZW5hYmxlZAoreworICAgIEltYWdlU291cmNlOjpzZXRBY2NlbGVy
YXRlZEltYWdlRGVjb2RpbmdFbmFibGVkKGVuYWJsZWQpOworfQorCisrIChCT09MKV9hY2NlbGVy
YXRlZEltYWdlRGVjb2RpbmcKK3sKKyAgICByZXR1cm4gSW1hZ2VTb3VyY2U6OmFjY2VsZXJhdGVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQoKTsKK30KKworKyAodm9pZClfc2V0QWxsb3dDb29raWVzOihC
T09MKWFsbG93Cit7CisgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RGVmYXVsdEFsbG93Q29v
a2llcyhhbGxvdyk7Cit9CisKKysgKEJPT0wpX2FsbG93Q29va2llcworeworICAgIHJldHVybiBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWZhdWx0QWxsb3dDb29raWVzKCk7Cit9CisKKysgKEJPT0wp
X2lzVW5kZXJNZW1vcnlQcmVzc3VyZQoreworICAgIHJldHVybiBtZW1vcnlQcmVzc3VyZUhhbmRs
ZXIoKS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCk7Cit9CisKKysgKHZvaWQpX2NsZWFyTWVt
b3J5UHJlc3N1cmUKK3sKKyAgICBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5jbGVhck1lbW9yeVBy
ZXNzdXJlKCk7Cit9CisKKysgKEJPT0wpX3Nob3VsZFdhaXRGb3JNZW1vcnlDbGVhck1lc3NhZ2UK
K3sKKyAgICByZXR1cm4gbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuc2hvdWxkV2FpdEZvck1lbW9y
eUNsZWFyTWVzc2FnZSgpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogLSAodm9pZClf
Y2xvc2VQbHVnaW5EYXRhYmFzZXMKIHsKICAgICBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50LS07
CiAKICAgICAvLyBDbG9zZSBib3RoIHNldHMgb2YgcGx1Zy1pbiBkYXRhYmFzZXMgYmVjYXVzZSBw
bHVnLWlucyBuZWVkIGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIGZpbGVzLCBldGMuCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFVubG9hZCB0aGUgV2ViVmlldyBsb2NhbCBwbHVnLWlu
IGRhdGFiYXNlLiAKICAgICBpZiAoX3ByaXZhdGUtPnBsdWdpbkRhdGFiYXNlKSB7CiAgICAgICAg
IFtfcHJpdmF0ZS0+cGx1Z2luRGF0YWJhc2UgZGVzdHJveUFsbFBsdWdpbkluc3RhbmNlVmlld3Nd
OwpAQCAtMTA2Niw2ICsxNjgzLDcgQEAgLSAodm9pZClfY2xvc2VQbHVnaW5EYXRhYmFzZXMKICAg
ICAgICAgW19wcml2YXRlLT5wbHVnaW5EYXRhYmFzZSByZWxlYXNlXTsKICAgICAgICAgX3ByaXZh
dGUtPnBsdWdpbkRhdGFiYXNlID0gbmlsOwogICAgIH0KKyNlbmRpZgogICAgIAogICAgIC8vIEtl
ZXAgdGhlIGdsb2JhbCBwbHVnLWluIGRhdGFiYXNlIGFjdGl2ZSB1bnRpbCB0aGUgYXBwIHRlcm1p
bmF0ZXMgdG8gYXZvaWQgaGF2aW5nIHRvIHJlbG9hZCBwbHVnLWluIGJ1bmRsZXMuCiAgICAgaWYg
KCFwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50ICYmIGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZykK
QEAgLTEwNzgsNyArMTY5Niw5IEBAIC0gKHZvaWQpX2Nsb3NlV2l0aEZhc3RUZWFyZG93bgogICAg
IFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyOjpzdXBwcmVzc01lc3NhZ2VzKCJBdCBsZWFzdCBv
bmUgV2ViVmlldyB3YXMgY2xvc2VkIHdpdGggZmFzdCB0ZWFyZG93bi4iKTsKICNlbmRpZgogCisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBbW05TRGlzdHJpYnV0ZWROb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisjZW5kaWYKICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwogCiAg
ICAgW3NlbGYgX2Nsb3NlUGx1Z2luRGF0YWJhc2VzXTsKQEAgLTExMDcsNiArMTcyNywxNiBAQCBz
dGF0aWMgYm9vbCBmYXN0RG9jdW1lbnRUZWFyZG93bkVuYWJsZWQoKQogLy8gcHVibGljIG1ldGhv
ZCAtY2xvc2UgaW5zdGVhZC4KIC0gKHZvaWQpX2Nsb3NlCiB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIC8vIEFsd2F5cyBjbGVhciBkZWxlZ2F0ZXMgb24gY2FsbGluZyB0aHJlYWQsIGJlY2FzdWUg
Y2FsbGVyIGNhbiBkZWFsbG9jYXRlIGRlbGVnYXRlcyByaWdodCBhZnRlciBjYWxsaW5nIC1jbG9z
ZQorICAgIC8vIChhbmQgY291bGQgaW4gZmFjdCBhbHJlYWR5IGJlIGluIGRlbGVnYXRlJ3MgLWRl
YWxsb2MgbWV0aG9kLCBhcyBzZWVuIGluIDxyZGFyOi8vcHJvYmxlbS8xMTU0MDk3Mj4pLgorCisg
ICAgW3NlbGYgX2NsZWFyRGVsZWdhdGVzXTsKKworICAgIC8vIEZpeCBmb3IgcHJvYmxlbXMgc3Vj
aCBhcyA8cmRhcjovL3Byb2JsZW0vNTc3NDU4Nz4gQ3Jhc2ggY2xvc2luZyB0YWIgaW4gV2ViQ29y
ZTo6RnJhbWU6OnBhZ2UoKSBmcm9tIC1bV2ViQ29yZUZyYW1lQnJpZGdlIHBhdXNlVGltZW91dHNd
CisgICAgV2ViVGhyZWFkUnVuKF57CisjZW5kaWYgICAgICAgICAgICAKKwogICAgIGlmICghX3By
aXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTI2LDE1
ICsxNzU2LDIwIEBAIC0gKHZvaWQpX2Nsb3NlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNp
ZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKFZJREVPKSAmJiAhUExBVEZPUk0oSU9TKQogICAg
IFtzZWxmIF9leGl0RnVsbHNjcmVlbl07CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBfcHJpdmF0ZS0+Y2xvc2luZyA9IFlFUzsKKyNlbmRpZgorCiAgICAgaWYgKEZyYW1lKiBtYWlu
RnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV0pCiAgICAgICAgIG1haW5GcmFtZS0+bG9hZGVy
KCkuZGV0YWNoRnJvbVBhcmVudCgpOwogCiAgICAgW3NlbGYgc2V0SG9zdFdpbmRvdzpuaWxdOwog
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbc2VsZiBzZXREb3dubG9hZERlbGVnYXRlOm5pbF07
CiAgICAgW3NlbGYgc2V0RWRpdGluZ0RlbGVnYXRlOm5pbF07CiAgICAgW3NlbGYgc2V0RnJhbWVM
b2FkRGVsZWdhdGU6bmlsXTsKQEAgLTExNDQsOSArMTc3OSwxMiBAQCAtICh2b2lkKV9jbG9zZQog
ICAgIFtzZWxmIHNldFVJRGVsZWdhdGU6bmlsXTsKIAogICAgIFtfcHJpdmF0ZS0+aW5zcGVjdG9y
IHdlYlZpZXdDbG9zZWRdOworI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFRv
IGF2b2lkIGxlYWtzLCBjYWxsIHJlbW92ZURyYWdDYXJldCBpbiBjYXNlIGl0IHdhc24ndCBjYWxs
ZWQgYWZ0ZXIgbW92ZURyYWdDYXJldFRvUG9pbnQuCiAgICAgW3NlbGYgcmVtb3ZlRHJhZ0NhcmV0
XTsKKyNlbmRpZgogCiAgICAgLy8gRGVsZXRlaW5nIHRoZSBXZWJDb3JlOjpQYWdlIHdpbGwgY2xl
YXIgdGhlIHBhZ2UgY2FjaGUgc28gd2UgY2FsbCBkZXN0cm95IG9uIAogICAgIC8vIGFsbCB0aGUg
cGx1Zy1pbnMgaW4gdGhlIHBhZ2UgY2FjaGUgdG8gYnJlYWsgYW55IHJldGFpbiBjeWNsZXMuCkBA
IC0xMTU1LDEwICsxNzkzLDEyIEBAIC0gKHZvaWQpX2Nsb3NlCiAgICAgX3ByaXZhdGUtPnBhZ2Ug
PSAwOwogICAgIGRlbGV0ZSBwYWdlOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoX3By
aXZhdGUtPmhhc1NwZWxsQ2hlY2tlckRvY3VtZW50VGFnKSB7CiAgICAgICAgIFtbTlNTcGVsbENo
ZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnOl9wcml2
YXRlLT5zcGVsbENoZWNrZXJEb2N1bWVudFRhZ107CiAgICAgICAgIF9wcml2YXRlLT5oYXNTcGVs
bENoZWNrZXJEb2N1bWVudFRhZyA9IE5POwogICAgIH0KKyNlbmRpZgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJGbHVzaENvbnRyb2xs
ZXIpIHsKQEAgLTExNzMsNyArMTgxMyw5IEBAIC0gKHZvaWQpX2Nsb3NlCiAKICAgICBbW3NlbGYg
X25vdGlmaWNhdGlvblByb3ZpZGVyXSB1bnJlZ2lzdGVyV2ViVmlldzpzZWxmXTsKIAorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgW1tOU0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworI2VuZGlmCiAgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKIAogICAgIFtX
ZWJQcmVmZXJlbmNlcyBfcmVtb3ZlUmVmZXJlbmNlRm9ySWRlbnRpZmllcjpbc2VsZiBwcmVmZXJl
bmNlc0lkZW50aWZpZXJdXTsKQEAgLTExOTIsNiArMTgzNCwxMCBAQCAtICh2b2lkKV9jbG9zZQog
ICAgICAgICBbV2ViQ2FjaGUgc2V0RGlzYWJsZWQ6WUVTXTsKICAgICB9CiAjZW5kaWYKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gRml4IGZvciBwcm9ibGVtcyBzdWNoIGFzIDxyZGFyOi8vcHJv
YmxlbS81Nzc0NTg3PiBDcmFzaCBjbG9zaW5nIHRhYiBpbiBXZWJDb3JlOjpGcmFtZTo6cGFnZSgp
IGZyb20gLVtXZWJDb3JlRnJhbWVCcmlkZ2UgcGF1c2VUaW1lb3V0c10KKyAgICB9KTsKKyNlbmRp
ZiAgICAgICAgICAgIAogfQogCiAvLyBJbmRpY2F0ZXMgaWYgdGhlIFdlYlZpZXcgaXMgaW4gdGhl
IG1pZHN0IG9mIGEgdXNlciBnZXN0dXJlLgpAQCAtMTIwMiwxMyArMTg0OCwxNyBAQCAtIChCT09M
KV9pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZQogCiArIChOU1N0cmluZyAqKV9NSU1FVHlwZUZvckZp
bGU6KE5TU3RyaW5nICopcGF0aAogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNTdHJpbmcg
KmV4dGVuc2lvbiA9IFtwYXRoIHBhdGhFeHRlbnNpb25dOworI2VuZGlmCiAgICAgTlNTdHJpbmcg
Kk1JTUVUeXBlID0gbmlsOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBHZXQgdGhlIE1J
TUUgdHlwZSBmcm9tIHRoZSBleHRlbnNpb24uCiAgICAgaWYgKFtleHRlbnNpb24gbGVuZ3RoXSAh
PSAwKSB7CiAgICAgICAgIE1JTUVUeXBlID0gV0tHZXRNSU1FVHlwZUZvckV4dGVuc2lvbihleHRl
bnNpb24pOwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8gSWYgd2UgY2FuJ3QgZ2V0IGEga25vd24g
TUlNRSB0eXBlIGZyb20gdGhlIGV4dGVuc2lvbiwgc25pZmYuCiAgICAgaWYgKFtNSU1FVHlwZSBs
ZW5ndGhdID09IDAgfHwgW01JTUVUeXBlIGlzRXF1YWxUb1N0cmluZzpAImFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbSJdKSB7CkBAIC0xMzU1LDYgKzIwMDUsNyBAQCAtIChXZWJDb3JlOjpQYWdlKilw
YWdlCiAgICAgcmV0dXJuIF9wcml2YXRlLT5wYWdlOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykK
IC0gKE5TTWVudSAqKV9tZW51Rm9yRWxlbWVudDooTlNEaWN0aW9uYXJ5ICopZWxlbWVudCBkZWZh
dWx0SXRlbXM6KE5TQXJyYXkgKilpdGVtcwogewogICAgIE5TQXJyYXkgKmRlZmF1bHRNZW51SXRl
bXMgPSBbW1dlYkRlZmF1bHRVSURlbGVnYXRlIHNoYXJlZFVJRGVsZWdhdGVdIHdlYlZpZXc6c2Vs
ZiBjb250ZXh0TWVudUl0ZW1zRm9yRWxlbWVudDplbGVtZW50IGRlZmF1bHRNZW51SXRlbXM6aXRl
bXNdOwpAQCAtMTM3OSw2ICsyMDMwLDcgQEAgLSAoTlNNZW51ICopX21lbnVGb3JFbGVtZW50OihO
U0RpY3Rpb25hcnkgKillbGVtZW50IGRlZmF1bHRJdGVtczooTlNBcnJheSAqKWl0ZW0KIAogICAg
IHJldHVybiBbbWVudSBhdXRvcmVsZWFzZV07CiB9CisjZW5kaWYKIAogLSAodm9pZClfbW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQ6KE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgbW9kaWZpZXJGbGFn
czooTlNVSW50ZWdlciltb2RpZmllckZsYWdzCiB7CkBAIC0xNDMyLDYgKzIwODQsMTEgQEAgLSAo
dm9pZClfbG9hZEJhY2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZXc6KFdlYlZpZXcgKilvdGhlclZp
ZXcKIC0gKHZvaWQpX3NldEZvcm1EZWxlZ2F0ZTogKGlkPFdlYkZvcm1EZWxlZ2F0ZT4pZGVsZWdh
dGUKIHsKICAgICBfcHJpdmF0ZS0+Zm9ybURlbGVnYXRlID0gZGVsZWdhdGU7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIFtfcHJpdmF0ZS0+Zm9ybURlbGVnYXRlRm9yd2FyZGVyIGNsZWFyVGFyZ2V0
XTsKKyAgICBbX3ByaXZhdGUtPmZvcm1EZWxlZ2F0ZUZvcndhcmRlciByZWxlYXNlXTsKKyAgICBf
cHJpdmF0ZS0+Zm9ybURlbGVnYXRlRm9yd2FyZGVyID0gbmlsOworI2VuZGlmCiB9CiAKIC0gKGlk
PFdlYkZvcm1EZWxlZ2F0ZT4pX2Zvcm1EZWxlZ2F0ZQpAQCAtMTQzOSw2ICsyMDk2LDMyIEBAIC0g
KGlkPFdlYkZvcm1EZWxlZ2F0ZT4pX2Zvcm1EZWxlZ2F0ZQogICAgIHJldHVybiBfcHJpdmF0ZS0+
Zm9ybURlbGVnYXRlOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAoaWQpX2Zvcm1EZWxlZ2F0
ZUZvcndhcmRlcgoreworICAgIGlmIChfcHJpdmF0ZS0+Y2xvc2luZykKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIGlmICghX3ByaXZhdGUtPmZvcm1EZWxlZ2F0ZUZvcndhcmRlcikKKyAgICAg
ICAgX3ByaXZhdGUtPmZvcm1EZWxlZ2F0ZUZvcndhcmRlciA9IFtbX1dlYlNhZmVGb3J3YXJkZXIg
YWxsb2NdIGluaXRXaXRoVGFyZ2V0OltzZWxmIF9mb3JtRGVsZWdhdGVdIGRlZmF1bHRUYXJnZXQ6
W1dlYkRlZmF1bHRGb3JtRGVsZWdhdGUgc2hhcmVkRm9ybURlbGVnYXRlXV07CisgICAgcmV0dXJu
IF9wcml2YXRlLT5mb3JtRGVsZWdhdGVGb3J3YXJkZXI7Cit9CisKKy0gKGlkKV9mb3JtRGVsZWdh
dGVGb3JTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAgaWQgZGVsZWdhdGUgPSBzZWxmLT5f
cHJpdmF0ZS0+Zm9ybURlbGVnYXRlOworICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOnNlbGVjdG9yXSkKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlOworCisgICAgZGVsZWdhdGUg
PSBbV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZSBzaGFyZWRGb3JtRGVsZWdhdGVdOworICAgIGlmIChb
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlOworCisgICAgcmV0dXJuIG5pbDsKK30KKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKElP
UykKIC0gKEJPT0wpX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrCiB7CiAgICAgc3RhdGlj
IEJPT0wgbmVlZHNRdWlyayA9IFdLQXBwVmVyc2lvbkNoZWNrTGVzc1RoYW4oQCJjb20uYWRvYmUu
QWNyb2JhdCIsIC0xLCA5LjApCkBAIC0xNDg2LDkgKzIxNjksMTEgQEAgc3RhdGljIGJvb2wgbmVl
ZHNTZWxmUmV0YWluV2hpbGVMb2FkaW5nUXVpcmsoKQogICAgIHN0YXRpYyBib29sIG5lZWRzUXVp
cmsgPSBhcHBsaWNhdGlvbklzQXBlcnR1cmUoKTsKICAgICByZXR1cm4gbmVlZHNRdWlyazsKIH0K
KyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAtIChCT09MKV9uZWVkc1ByZUhUTUw1UGFyc2Vy
UXVpcmtzCiB7ICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gQU9MIEluc3RhbnQgTWVz
c2VuZ2VyIGFuZCBNaWNyb3NvZnQgTXkgRGF5IGNvbnRhaW4gbWFya3VwIGluY29tcGF0aWJsZQog
ICAgIC8vIHdpdGggdGhlIG5ldyBIVE1MNSBwYXJzZXIuIElmIHRoZXNlIGFwcGxpY2F0aW9ucyB3
ZXJlIGxpbmtlZCBhZ2FpbnN0IGEKICAgICAvLyB2ZXJzaW9uIG9mIFdlYktpdCBwcmlvciB0byB0
aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBIVE1MNSBwYXJzZXIsIGVuYWJsZQpAQCAtMTUwOSwxOCAr
MjE5NCw0OSBAQCAtIChCT09MKV9uZWVkc1ByZUhUTUw1UGFyc2VyUXVpcmtzCiAgICAgICAgIHx8
IChfcHJpdmF0ZS0+cGFnZSAmJiBfcHJpdmF0ZS0+cGFnZS0+c2V0dGluZ3MoKS51c2VzRGFzaGJv
YXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQogI2VuZGlmCiAgICAgICAgIHx8IFtbc2Vs
ZiBwcmVmZXJlbmNlc10gdXNlUHJlSFRNTDVQYXJzZXJRdWlya3NdOworI2Vsc2UKKyAgICBzdGF0
aWMgYm9vbCBpc0FwcGxpY2F0aW9uTmVlZGluZ1BhcnNlclF1aXJrcyA9ICFXZWJLaXRMaW5rZWRP
bk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9IVE1MNV9QQVJTRVIpICYmIGFwcGxp
Y2F0aW9uSXNEYWlqaXNlbkRpY3Rpb25hcnkoKTsKKyAgICByZXR1cm4gaXNBcHBsaWNhdGlvbk5l
ZWRpbmdQYXJzZXJRdWlya3MgfHwgW1tzZWxmIHByZWZlcmVuY2VzXSB1c2VQcmVIVE1MNVBhcnNl
clF1aXJrc107CisjZW5kaWYKIH0KIAogLSAoQk9PTClfbmVlZHNVbnJlc3RyaWN0ZWRHZXRNYXRj
aGVkQ1NTUnVsZXMKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBib29sIG5lZWRz
VW5yZXN0cmljdGVkR2V0TWF0Y2hlZENTU1J1bGVzID0gIVdlYktpdExpbmtlZE9uT3JBZnRlcihX
RUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIX0dFVF9NQVRDSEVEX0NTU19SVUxFU19SRVNUUklDVElP
TlMpICYmIGFwcGxpY2F0aW9uSXNTYWZhcmkoKTsKICAgICByZXR1cm4gbmVlZHNVbnJlc3RyaWN0
ZWRHZXRNYXRjaGVkQ1NTUnVsZXM7CisjZWxzZQorICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2Js
ZW0vODk2MzY4ND4gSW1wbGVtZW50IGxpbmtlZC1vbi1vci1hZnRlciBjaGVjayBmb3IgbmVlZHNV
bnJlc3RyaWN0ZWRHZXRNYXRjaGVkQ1NTUnVsZXMKKyAgICByZXR1cm4gTk87CisjZW5kaWYKIH0K
IAogLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGb3IgV2ViVmll
d3MgdGhhdCBsb2FkIHN5bmNocm9ub3VzbHksIHByZWZlcmVuY2UgY2hhbmdlcyBuZWVkIHRvIGJl
IHByb3BhZ2F0ZWQKKyAgICAvLyBkb3duIHRvIFdlYkNvcmUgc3luY2hyb25vdXNseSBzbyB0aGF0
IGxvYWRzIGluIHRoYXQgV2ViVmlldyBoYXZlIHRoZSBjb3JyZWN0CisgICAgLy8gdXAtdG8tZGF0
ZSBzZXR0aW5ncy4KKyAgICBpZiAoIVdlYlRocmVhZElzTG9ja2VkKCkpCisgICAgICAgIFdlYlRo
cmVhZExvY2soKTsKKyAgICBpZiAoW1tzZWxmIG1haW5GcmFtZV0gX2xvYWRzU3luY2hyb25vdXNs
eV0pIHsKKyNlbmRpZgorCiAgICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gKFdlYlBy
ZWZlcmVuY2VzICopW25vdGlmaWNhdGlvbiBvYmplY3RdOwogICAgIFtzZWxmIF9wcmVmZXJlbmNl
c0NoYW5nZWQ6cHJlZmVyZW5jZXNdOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIH0gZWxzZSB7
CisgICAgICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICAgICAgLy8gSXQgaXMgcG9zc2libGUg
dGhhdCB0aGUgcHJlZnMgb2JqZWN0IGhhcyBhbHJlYWR5IGNoYW5nZWQgYmVmb3JlIHRoZSBpbnZv
Y2F0aW9uIGNvdWxkIGJlIGNhbGxlZAorICAgICAgICAgICAgLy8gb24gdGhlIHdlYiB0aHJlYWQu
IFRoaXMgaXMgbm90IHBvc3NpYmxlIG9uIFRPVCB3aGljaCBpcyB3aHkgdGhleSBoYXZlIGEgc2lt
cGxlIEFTU0VSVC4KKyAgICAgICAgICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IChX
ZWJQcmVmZXJlbmNlcyAqKVtub3RpZmljYXRpb24gb2JqZWN0XTsKKyAgICAgICAgICAgIGlmIChw
cmVmZXJlbmNlcyAhPSBbc2VsZiBwcmVmZXJlbmNlc10pCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgW3NlbGYgX3ByZWZlcmVuY2VzQ2hhbmdlZDpwcmVmZXJlbmNlc107Cisg
ICAgICAgIH0pOworICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5n
ZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKQEAgLTE1MzUsNiArMjI1MSwyNCBAQCAt
ICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMK
ICAgICAvLyBVcGRhdGUgY29ycmVzcG9uZGluZyBXZWJDb3JlIFNldHRpbmdzIG9iamVjdC4KICAg
ICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gaU9TIHdhaXRzIHRvIGNhbGwgW1dlYkRhdGFiYXNlTWFuYWdlciBzaGFyZWRX
ZWJEYXRhYmFzZU1hbmFnZXJdIHVudGlsCisgICAgLy8gZGlkT25lVGltZUluaXRpYWxpemF0aW9u
IGlzIHRydWUgc28gdGhhdCB3ZSBkb24ndCBpbml0aWFsaXplIGRhdGFiYXNlcworICAgIC8vIHVu
dGlsIHRoZSBmaXJzdCBXZWJWaWV3IGhhcyBiZWVuIGNyZWF0ZWQuIFRoaXMgaXMgYmVjYXVzZSBk
YXRhYmFzZQorICAgIC8vIGluaXRpYWxpemF0aW9uIGN1cnJlbnQgcmVxdWlyZXMgZGlzayBhY2Nl
c3MgdG8gcG9wdWxhdGUgdGhlIG9yaWdpbnMKKyAgICAvLyBxdW90YSBtYXAgYW5kIHdlIHdhbnQg
dG8gZG8gdGhpcyBsYXppbHkgYnkgd2FpdGluZyB1bnRpbCBXZWJLaXQgaXMKKyAgICAvLyB1c2Vk
IHRvIGRpc3BsYXkgd2ViIGNvbnRlbnQgaW4gYSBXZWJWaWV3LiBUaGUgcG9zc2libGUgY2FzZXMg
YXJlOgorICAgIC8vICAgLSBvbiBvbmUgdGltZSBpbml0aWFsaXplICh0aGUgZmlyc3QgV2ViVmll
dyBjcmVhdGlvbikgaWYgZGF0YWJhc2VzIGFyZSBlbmFibGVkIChkZWZhdWx0KQorICAgIC8vICAg
LSB3aGVuIGRhdGFiYXNlcyBhcmUgZHluYW1pY2FsbHkgZW5hYmxlZCBsYXRlciwgYW5kIHRoZXkg
d2VyZSBkaXNhYmxlZCBhdCBzdGFydHVwICh0aGlzIGNhc2UpCisgICAgaWYgKGRpZE9uZVRpbWVJ
bml0aWFsaXphdGlvbikgeworICAgICAgICBpZiAoW3ByZWZlcmVuY2VzIGRhdGFiYXNlc0VuYWJs
ZWRdKQorICAgICAgICAgICAgW1dlYkRhdGFiYXNlTWFuYWdlciBzaGFyZWRXZWJEYXRhYmFzZU1h
bmFnZXJdOworICAgICAgICAKKyAgICAgICAgaWYgKFtwcmVmZXJlbmNlcyBzdG9yYWdlVHJhY2tl
ckVuYWJsZWRdKQorICAgICAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2Fy
eSgpOworICAgIH0KKyNlbmRpZgogICAgIAogICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IF9wcml2
YXRlLT5wYWdlLT5zZXR0aW5ncygpOwogCkBAIC0xNTQ2LDcgKzIyODAsNyBAQCAtICh2b2lkKV9w
cmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKICAgICBzZXR0
aW5ncy5zZXRGYW50YXN5Rm9udEZhbWlseShbcHJlZmVyZW5jZXMgZmFudGFzeUZvbnRGYW1pbHld
KTsKICAgICBzZXR0aW5ncy5zZXRGaXhlZEZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIGZpeGVkRm9u
dEZhbWlseV0pOwogICAgIHNldHRpbmdzLnNldFNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVk
KAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmICFQTEFU
Rk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAg
ICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAi
TlNGb250RGVmYXVsdFNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkIl0gfHwKICNlbmRpZgog
ICAgICAgICBbcHJlZmVyZW5jZXMgc2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWRdCkBAIC0x
NTY4LDcgKzIzMDIsOSBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVu
Y2VzICopcHJlZmVyZW5jZXMKICAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5zZXRJc0F2
YWlsYWJsZShbcHJlZmVyZW5jZXMgZGF0YWJhc2VzRW5hYmxlZF0pOwogI2VuZGlmCiAgICAgc2V0
dGluZ3Muc2V0TG9jYWxTdG9yYWdlRW5hYmxlZChbcHJlZmVyZW5jZXMgbG9jYWxTdG9yYWdlRW5h
YmxlZF0pOworI2lmICFQTEFURk9STShJT1MpCiAgICAgc2V0dGluZ3Muc2V0RXhwZXJpbWVudGFs
Tm90aWZpY2F0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2VzIGV4cGVyaW1lbnRhbE5vdGlmaWNhdGlv
bnNFbmFibGVkXSk7CisjZW5kaWYKIAogICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9
IFtwcmVmZXJlbmNlcyBwcml2YXRlQnJvd3NpbmdFbmFibGVkXTsKICNpZiBQTEFURk9STShNQUMp
IHx8IFVTRShDRk5FVFdPUkspCkBAIC0xNTg0LDggKzIzMjAsMTIgQEAgLSAodm9pZClfcHJlZmVy
ZW5jZXNDaGFuZ2VkOihXZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAgICAgc2V0dGluZ3Mu
c2V0U3RhbmRhcmRGb250RmFtaWx5KFtwcmVmZXJlbmNlcyBzdGFuZGFyZEZvbnRGYW1pbHldKTsK
ICAgICBzZXR0aW5ncy5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoW3ByZWZlcmVuY2VzIGxv
YWRzSW1hZ2VzQXV0b21hdGljYWxseV0pOwogICAgIHNldHRpbmdzLnNldExvYWRzU2l0ZUljb25z
SWdub3JpbmdJbWFnZUxvYWRpbmdTZXR0aW5nKFtwcmVmZXJlbmNlcyBsb2Fkc1NpdGVJY29uc0ln
bm9yaW5nSW1hZ2VMb2FkaW5nUHJlZmVyZW5jZV0pOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBz
ZXR0aW5ncy5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKHRydWUpOworI2Vsc2UKICAgICBzZXR0
aW5ncy5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKFtwcmVmZXJlbmNlcyBzaG91bGRQcmludEJh
Y2tncm91bmRzXSk7CiAgICAgc2V0dGluZ3Muc2V0VGV4dEFyZWFzQXJlUmVzaXphYmxlKFtwcmVm
ZXJlbmNlcyB0ZXh0QXJlYXNBcmVSZXNpemFibGVdKTsKKyNlbmRpZgogICAgIHNldHRpbmdzLnNl
dFNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQoW3ByZWZlcmVuY2VzIHNocmlua3NTdGFuZGFs
b25lSW1hZ2VzVG9GaXRdKTsKICAgICBzZXR0aW5ncy5zZXRFZGl0YWJsZUxpbmtCZWhhdmlvcihj
b3JlKFtwcmVmZXJlbmNlcyBlZGl0YWJsZUxpbmtCZWhhdmlvcl0pKTsKICAgICBzZXR0aW5ncy5z
ZXRUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yKGNvcmUoW3ByZWZlcmVuY2Vz
IHRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3JdKSk7CkBAIC0xNTkzLDEyICsy
MzMzLDE1IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilw
cmVmZXJlbmNlcwogICAgIHNldHRpbmdzLnNldFVzZXNQYWdlQ2FjaGUoW3NlbGYgdXNlc1BhZ2VD
YWNoZV0pOwogICAgIHNldHRpbmdzLnNldFBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyhbcHJlZmVy
ZW5jZXMgcGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zXSk7CiAgICAgc2V0dGluZ3Muc2V0QmFja0Zv
cndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbChbcHJlZmVyZW5jZXMgX2JhY2tGb3J3YXJkQ2Fj
aGVFeHBpcmF0aW9uSW50ZXJ2YWxdKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHNldHRpbmdz
LnNldFNob3dzVVJMc0luVG9vbFRpcHMoW3ByZWZlcmVuY2VzIHNob3dzVVJMc0luVG9vbFRpcHNd
KTsKICAgICBzZXR0aW5ncy5zZXRTaG93c1Rvb2xUaXBPdmVyVHJ1bmNhdGVkVGV4dChbcHJlZmVy
ZW5jZXMgc2hvd3NUb29sVGlwT3ZlclRydW5jYXRlZFRleHRdKTsKKyNlbmRpZgogICAgIHNldHRp
bmdzLnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoW3ByZWZlcmVuY2VzIGRldmVsb3BlckV4dHJh
c0VuYWJsZWRdKTsKICAgICBzZXR0aW5ncy5zZXRKYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVk
KFtwcmVmZXJlbmNlcyBqYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkXSk7CiAgICAgc2V0dGlu
Z3Muc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoW3ByZWZlcmVuY2VzIGF1dGhvckFuZFVz
ZXJTdHlsZXNFbmFibGVkXSk7CiAgICAgc2V0dGluZ3Muc2V0QXBwbGljYXRpb25DaHJvbWVNb2Rl
KFtwcmVmZXJlbmNlcyBhcHBsaWNhdGlvbkNocm9tZU1vZGVFbmFibGVkXSk7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBpZiAoW3ByZWZlcmVuY2VzIHVzZXJTdHlsZVNoZWV0RW5hYmxlZF0pIHsK
ICAgICAgICAgTlNTdHJpbmcqIGxvY2F0aW9uID0gW1twcmVmZXJlbmNlcyB1c2VyU3R5bGVTaGVl
dExvY2F0aW9uXSBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXTsKICAgICAgICAgaWYgKFtsb2Nh
dGlvbiBpc0VxdWFsVG9TdHJpbmc6QCJhcHBsZS1kYXNoYm9hcmQ6Ly9zdHlsZXNoZWV0Il0pCkBA
IC0xNjA5LDEzICsyMzUyLDI2IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJl
ZmVyZW5jZXMgKilwcmVmZXJlbmNlcwogICAgIHNldHRpbmdzLnNldE5lZWRzQWRvYmVGcmFtZVJl
bG9hZGluZ1F1aXJrKFtzZWxmIF9uZWVkc0Fkb2JlRnJhbWVSZWxvYWRpbmdRdWlya10pOwogICAg
IHNldHRpbmdzLnNldFRyZWF0c0FueVRleHRDU1NMaW5rQXNTdHlsZXNoZWV0KFtzZWxmIF9uZWVk
c0xpbmtFbGVtZW50VGV4dENTU1F1aXJrXSk7CiAgICAgc2V0dGluZ3Muc2V0TmVlZHNLZXlib2Fy
ZEV2ZW50RGlzYW1iaWd1YXRpb25RdWlya3MoW3NlbGYgX25lZWRzS2V5Ym9hcmRFdmVudERpc2Ft
YmlndWF0aW9uUXVpcmtzXSk7CisjZWxzZQorICAgIC8vIGlPUy1zcGVjaWZpYyBzZXR0aW5ncwor
ICAgIHNldHRpbmdzLnNldFN0YW5kYWxvbmUoW3ByZWZlcmVuY2VzIF9zdGFuZGFsb25lXSk7Cisg
ICAgc2V0dGluZ3Muc2V0TWF4aW11bURlY29kZWRJbWFnZVNpemUoW3ByZWZlcmVuY2VzIF9tYXhp
bXVtSW1hZ2VTaXplXSk7CisgICAgc2V0dGluZ3Muc2V0VGVsZXBob25lTnVtYmVyUGFyc2luZ0Vu
YWJsZWQoW3ByZWZlcmVuY2VzIF90ZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZF0pOworICAg
IHNldHRpbmdzLnNldEFsd2F5c1VzZUJhc2VsaW5lT2ZQcmltYXJ5Rm9udChbcHJlZmVyZW5jZXMg
X2Fsd2F5c1VzZUJhc2VsaW5lT2ZQcmltYXJ5Rm9udF0pOworICAgIHNldHRpbmdzLnNldEFsbG93
TXVsdGlFbGVtZW50SW1wbGljaXRTdWJtaXNzaW9uKFtwcmVmZXJlbmNlcyBfYWxsb3dNdWx0aUVs
ZW1lbnRJbXBsaWNpdEZvcm1TdWJtaXNzaW9uXSk7CisgICAgc2V0dGluZ3Muc2V0TGF5b3V0SW50
ZXJ2YWwoW3ByZWZlcmVuY2VzIF9sYXlvdXRJbnRlcnZhbF0pOworICAgIHNldHRpbmdzLnNldE1h
eFBhcnNlRHVyYXRpb24oW3ByZWZlcmVuY2VzIF9tYXhQYXJzZUR1cmF0aW9uXSk7CisgICAgc2V0
dGluZ3Muc2V0QWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbChbcHJlZmVyZW5jZXMg
X2Fsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGxdKTsKKyNlbmRpZgogICAgIHNldHRp
bmdzLnNldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKF9wcml2YXRlLT51c2VTaXRlU3BlY2lmaWNT
cG9vZmluZyk7CiAgICAgc2V0dGluZ3Muc2V0V2ViQXJjaGl2ZURlYnVnTW9kZUVuYWJsZWQoW3By
ZWZlcmVuY2VzIHdlYkFyY2hpdmVEZWJ1Z01vZGVFbmFibGVkXSk7CiAgICAgc2V0dGluZ3Muc2V0
TG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZChbcHJlZmVyZW5jZXMgbG9jYWxGaWxlQ29u
dGVudFNuaWZmaW5nRW5hYmxlZF0pOwogICAgIHNldHRpbmdzLnNldE9mZmxpbmVXZWJBcHBsaWNh
dGlvbkNhY2hlRW5hYmxlZChbcHJlZmVyZW5jZXMgb2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVF
bmFibGVkXSk7CiAgICAgc2V0dGluZ3Muc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChb
cHJlZmVyZW5jZXMgamF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZF0pOwogICAgIHNldHRpbmdz
LnNldFhTU0F1ZGl0b3JFbmFibGVkKFtwcmVmZXJlbmNlcyBpc1hTU0F1ZGl0b3JFbmFibGVkXSk7
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBzZXR0aW5ncy5zZXRFbmZvcmNlQ1NTTUlNRVR5cGVJ
bk5vUXVpcmtzTW9kZSghV0tBcHBWZXJzaW9uQ2hlY2tMZXNzVGhhbihAImNvbS5hcHBsZS5pV2Vi
IiwgLTEsIDIuMSkpOworI2VuZGlmCiAgICAgc2V0dGluZ3Muc2V0RE5TUHJlZmV0Y2hpbmdFbmFi
bGVkKFtwcmVmZXJlbmNlcyBpc0ROU1ByZWZldGNoaW5nRW5hYmxlZF0pOwogICAgIAogICAgIC8v
IEZJWE1FOiBFbmFibGluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB3aGVuIFdlYkdMIGlzIGVu
YWJsZWQgY2F1c2VzIHRlc3RzIHRvIGZhaWwgb24gTGVvcGFyZCB3aGljaCBleHBlY3QgSFcgY29t
cG9zaXRpbmcgdG8gYmUgZGlzYWJsZWQuCkBAIC0xNjI2LDcgKzIzODIsMTAgQEAgLSAodm9pZClf
cHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAgICAgc2V0
dGluZ3Muc2V0U2hvd0RlYnVnQm9yZGVycyhbcHJlZmVyZW5jZXMgc2hvd0RlYnVnQm9yZGVyc10p
OwogICAgIHNldHRpbmdzLnNldFNob3dSZXBhaW50Q291bnRlcihbcHJlZmVyZW5jZXMgc2hvd1Jl
cGFpbnRDb3VudGVyXSk7CiAgICAgc2V0dGluZ3Muc2V0V2ViR0xFbmFibGVkKFtwcmVmZXJlbmNl
cyB3ZWJHTEVuYWJsZWRdKTsKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgZW5hYmxlIHRoaXMgZm9sbG93aW5nIDxyZGFyOi8vcHJvYmxlbS8xNTI5MDQwND4/CiAg
ICAgc2V0dGluZ3Muc2V0TXVsdGl0aHJlYWRlZFdlYkdMRW5hYmxlZChbcHJlZmVyZW5jZXMgbXVs
dGl0aHJlYWRlZFdlYkdMRW5hYmxlZF0pOworI2VuZGlmCiAgICAgc2V0dGluZ3Muc2V0Rm9yY2VT
b2Z0d2FyZVdlYkdMUmVuZGVyaW5nKFtwcmVmZXJlbmNlcyBmb3JjZVNvZnR3YXJlV2ViR0xSZW5k
ZXJpbmddKTsKICAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChbcHJl
ZmVyZW5jZXMgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWRdKTsKICAgICBzZXR0aW5ncy5zZXRM
b2FkRGVmZXJyaW5nRW5hYmxlZChzaG91bGRFbmFibGVMb2FkRGVmZXJyaW5nKCkpOwpAQCAtMTY2
MSw2ICsyNDIwLDEyIEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5j
ZXMgKilwcmVmZXJlbmNlcwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBzZXR0aW5ncy5zZXRRVEtp
dEVuYWJsZWQoW3ByZWZlcmVuY2VzIGlzUVRLaXRFbmFibGVkXSk7CiAjZW5kaWYKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgc2V0dGluZ3Muc2V0TWVkaWFQbGF5YmFja0FsbG93c0FpclBsYXkoW3By
ZWZlcmVuY2VzIG1lZGlhUGxheWJhY2tBbGxvd3NBaXJQbGF5XSk7CisgICAgc2V0dGluZ3Muc2V0
QXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZShbcHJlZmVyZW5jZXMgYXVkaW9TZXNzaW9uQ2F0
ZWdvcnlPdmVycmlkZV0pOworICAgIHNldHRpbmdzLnNldE5ldHdvcmtEYXRhVXNhZ2VUcmFja2lu
Z0VuYWJsZWQoW3ByZWZlcmVuY2VzIG5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWRdKTsK
KyAgICBzZXR0aW5ncy5zZXROZXR3b3JrSW50ZXJmYWNlTmFtZShbcHJlZmVyZW5jZXMgbmV0d29y
a0ludGVyZmFjZU5hbWVdKTsKKyNlbmRpZgogICAgIHNldHRpbmdzLnNldE1lZGlhUGxheWJhY2tS
ZXF1aXJlc1VzZXJHZXN0dXJlKFtwcmVmZXJlbmNlcyBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2Vy
R2VzdHVyZV0pOwogICAgIHNldHRpbmdzLnNldE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUoW3By
ZWZlcmVuY2VzIG1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmVdKTsKICAgICBzZXR0aW5ncy5zZXRT
dXBwcmVzc2VzSW5jcmVtZW50YWxSZW5kZXJpbmcoW3ByZWZlcmVuY2VzIHN1cHByZXNzZXNJbmNy
ZW1lbnRhbFJlbmRlcmluZ10pOwpAQCAtMTY3Niw3ICsyNDQxLDkgQEAgLSAodm9pZClfcHJlZmVy
ZW5jZXNDaGFuZ2VkOihXZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAjZW5kaWYKIAogICAg
IHNldHRpbmdzLnNldFNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKFtwcmVmZXJlbmNlcyBz
aG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbl0pOworI2lmICFQTEFURk9STShJT1MpCiAgICAg
c2V0dGluZ3Muc2V0TmVlZHNJc0xvYWRpbmdJbkFQSVNlbnNlUXVpcmsoW3NlbGYgX25lZWRzSXNM
b2FkaW5nSW5BUElTZW5zZVF1aXJrXSk7CisjZW5kaWYKICAgICBzZXR0aW5ncy5zZXRSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVFbmFibGVkKFtwcmVmZXJlbmNlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVF
bmFibGVkXSk7CiAgICAgc2V0dGluZ3Muc2V0RGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKFtwcmVm
ZXJlbmNlcyBkaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWRdKTsKICAgICBzZXR0aW5ncy5zZXRMb3dQ
b3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZChbcHJlZmVyZW5jZXMgbG93UG93ZXJWaWRl
b0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWRdKTsKQEAgLTE2ODQsNyArMjQ1MSw3IEBAIC0gKHZvaWQp
X3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlcwogICAgIHNl
dHRpbmdzLnNldFVzZUxlZ2FjeVRleHRBbGlnblBvc2l0aW9uZWRFbGVtZW50QmVoYXZpb3IoW3By
ZWZlcmVuY2VzIHVzZUxlZ2FjeVRleHRBbGlnblBvc2l0aW9uZWRFbGVtZW50QmVoYXZpb3JdKTsK
IAogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgIHNldHRpbmdzLT5zZXRW
aWRlb1BsdWdpblByb3h5RW5hYmxlZChbcHJlZmVyZW5jZXMgaXNWaWRlb1BsdWdpblByb3h5RW5h
YmxlZF0pOworICAgIHNldHRpbmdzLnNldFZpZGVvUGx1Z2luUHJveHlFbmFibGVkKFtwcmVmZXJl
bmNlcyBpc1ZpZGVvUGx1Z2luUHJveHlFbmFibGVkXSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCkBAIC0xNzEzLDcgKzI0ODAsOCBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0No
YW5nZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKICNlbmRpZgogCiAgICAgLy8gV2Ug
aGF2ZSBlbmFibGVkIHRoaXMgc2V0dGluZyBpbiBXZWJLaXQyIGZvciB0aGUgc2FrZSBvZiBzb21l
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHdvcmsuCi0gICAgLy8gVG8gYXZvaWQgcG9zc2libGUgcmVu
ZGVyaW5nIGRpZmZlcmVuY2VzLCB3ZSBzaG91bGQgZW5hYmxlIGl0IGZvciBXZWJLaXQxIHRvby4K
KyAgICAvLyBUbyBhdm9pZCBwb3NzaWJsZSByZW5kZXJpbmcgZGlmZmVyZW5jZXMsIHdlIHNob3Vs
ZCBlbmFibGUgaXQgZm9yIFdlYktpdDEgdG9vLiBXZSBhbHNvCisgICAgLy8gd2FudCB0byBrZWVw
IHRoaXMgc2V0dGluZyBlbmFibGVkIGZvciBpT1MuIFNlZSA8cmRhcjovL3Byb2JsZW0vOTgxMzI2
Mj4gZm9yIG1vcmUgZGV0YWlscy4KICAgICBzZXR0aW5ncy5zZXRGaXhlZFBvc2l0aW9uQ3JlYXRl
c1N0YWNraW5nQ29udGV4dCh0cnVlKTsKICAgICAKICAgICBOU1RpbWVJbnRlcnZhbCB0aW1lb3V0
ID0gW3ByZWZlcmVuY2VzIGluY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb25UaW1lb3V0SW5T
ZWNvbmRzXTsKQEAgLTE3MzMsNiArMjUwMSwyMiBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5n
ZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKICAgICBkaXNrSW1hZ2VDYWNoZS5zZXRN
aW5pbXVtSW1hZ2VTaXplKFtwcmVmZXJlbmNlcyBkaXNrSW1hZ2VDYWNoZU1pbmltdW1JbWFnZVNp
emVdKTsKICAgICBkaXNrSW1hZ2VDYWNoZS5zZXRNYXhpbXVtQ2FjaGVTaXplKFtwcmVmZXJlbmNl
cyBkaXNrSW1hZ2VDYWNoZU1heGltdW1DYWNoZVNpemVdKTsKICNlbmRpZgorCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIFtbc2VsZiB3aW5kb3ddIHNldFRpbGVCb3JkZXJzVmlzaWJsZTpbcHJlZmVy
ZW5jZXMgc2hvd0RlYnVnQm9yZGVyc11dOworICAgIFtbc2VsZiB3aW5kb3ddIHNldFRpbGVQYWlu
dENvdW50c1Zpc2libGU6W3ByZWZlcmVuY2VzIHNob3dSZXBhaW50Q291bnRlcl1dOworICAgIFtb
c2VsZiB3aW5kb3ddIHNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ6W3ByZWZlcmVuY2VzIGFj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWRdXTsKKyAgICBbV0FLVmlldyBfc2V0SW50ZXJwb2xhdGlv
blF1YWxpdHk6W3ByZWZlcmVuY2VzIF9pbnRlcnBvbGF0aW9uUXVhbGl0eV1dOworICAgIHNldHRp
bmdzLnNldERlbGVnYXRlc1BhZ2VTY2FsaW5nKHRydWUpOworICAgIAorICAgIHNldHRpbmdzLnNl
dFNob3VsZFRyYW5zZm9ybXNBZmZlY3RPdmVyZmxvdyhzaG91bGRUcmFuc2Zvcm1zQWZmZWN0T3Zl
cmZsb3coKSk7CisgICAgc2V0dGluZ3Muc2V0U2hvdWxkRGlzcGF0Y2hKYXZhU2NyaXB0V2luZG93
T25FcnJvckV2ZW50cyhzaG91bGREaXNwYXRjaEphdmFTY3JpcHRXaW5kb3dPbkVycm9yRXZlbnRz
KCkpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc2V0dGluZ3MucGFnZUNhY2hlU3VwcG9ydHNQ
bHVnaW5zKCksICJQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMgc2hvdWxkIGJlIGVuYWJsZWQgb24g
aU9TLiIpOworCisgICAgLy8gUGFzc3dvcmQgZWNobworICAgIHNldHRpbmdzLnNldFBhc3N3b3Jk
RWNob0VuYWJsZWQoW3ByZWZlcmVuY2VzIF9hbGxvd1Bhc3N3b3JkRWNob10pOworICAgIHNldHRp
bmdzLnNldFBhc3N3b3JkRWNob0R1cmF0aW9uSW5TZWNvbmRzKFtwcmVmZXJlbmNlcyBfcGFzc3dv
cmRFY2hvRHVyYXRpb25dKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIElNUCBnZXRNZXRo
b2QoaWQgbywgU0VMIHMpCkBAIC0xNzQwLDYgKzI1MjQsMTggQEAgc3RhdGljIGlubGluZSBJTVAg
Z2V0TWV0aG9kKGlkIG8sIFNFTCBzKQogICAgIHJldHVybiBbbyByZXNwb25kc1RvU2VsZWN0b3I6
c10gPyBbbyBtZXRob2RGb3JTZWxlY3RvcjpzXSA6IDA7CiB9CiAKKyNpZiBQTEFURk9STShJT1Mp
CistIChpZClfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcgoreworICAgIGlmIChfcHJpdmF0ZS0+Y2xv
c2luZykKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgCisgICAgaWYgKCFfcHJpdmF0ZS0+
VUlLaXREZWxlZ2F0ZUZvcndhcmRlcikKKyAgICAgICAgX3ByaXZhdGUtPlVJS2l0RGVsZWdhdGVG
b3J3YXJkZXIgPSBbW19XZWJTYWZlRm9yd2FyZGVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpfcHJp
dmF0ZS0+VUlLaXREZWxlZ2F0ZSBkZWZhdWx0VGFyZ2V0OltXZWJEZWZhdWx0VUlLaXREZWxlZ2F0
ZSBzaGFyZWRVSUtpdERlbGVnYXRlXV07CisgICAgcmV0dXJuIF9wcml2YXRlLT5VSUtpdERlbGVn
YXRlRm9yd2FyZGVyOworfQorI2VuZGlmCisKIC0gKHZvaWQpX2NhY2hlUmVzb3VyY2VMb2FkRGVs
ZWdhdGVJbXBsZW1lbnRhdGlvbnMKIHsKICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSAqY2FjaGUgPSAmX3ByaXZhdGUtPnJlc291cmNlTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpb25zOwpAQCAtMTc1OCw2ICsyNTU0LDE5IEBAIC0gKHZvaWQpX2NhY2hlUmVzb3VyY2VM
b2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRI
X0NBTExCQUNLKQogICAgIGNhY2hlLT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6cmVzb3VyY2U6
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTpmb3JEYXRhU291cmNlOikpOwog
I2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgY2FjaGUtPmNvbm5lY3Rpb25Qcm9wZXJ0
aWVzRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6Y29ubmVjdGlv
blByb3BlcnRpZXNGb3JSZXNvdXJjZTpkYXRhU291cmNlOikpOworICAgIGNhY2hlLT53ZWJUaHJl
YWREaWRGaW5pc2hMb2FkaW5nRnJvbURhdGFTb3VyY2VGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRl
LCBAc2VsZWN0b3Iod2ViVGhyZWFkV2ViVmlldzpyZXNvdXJjZTpkaWRGaW5pc2hMb2FkaW5nRnJv
bURhdGFTb3VyY2U6KSk7CisgICAgY2FjaGUtPndlYlRocmVhZERpZEZhaWxMb2FkaW5nV2l0aEVy
cm9yRnJvbURhdGFTb3VyY2VGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Iod2Vi
VGhyZWFkV2ViVmlldzpyZXNvdXJjZTpkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjpmcm9tRGF0YVNv
dXJjZTopKTsKKyAgICBjYWNoZS0+d2ViVGhyZWFkSWRlbnRpZmllckZvclJlcXVlc3RGdW5jID0g
Z2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Iod2ViVGhyZWFkV2ViVmlldzppZGVudGlmaWVy
Rm9ySW5pdGlhbFJlcXVlc3Q6ZnJvbURhdGFTb3VyY2U6KSk7CisgICAgY2FjaGUtPndlYlRocmVh
ZERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUs
IEBzZWxlY3Rvcih3ZWJUaHJlYWRXZWJWaWV3OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZTpyZXNwb25zZTpsZW5ndGg6ZnJvbURhdGFTb3VyY2U6KSk7CisgICAgY2FjaGUtPndlYlRocmVh
ZFdpbGxTZW5kUmVxdWVzdEZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJU
aHJlYWRXZWJWaWV3OnJlc291cmNlOndpbGxTZW5kUmVxdWVzdDpyZWRpcmVjdFJlc3BvbnNlOmZy
b21EYXRhU291cmNlOikpOworICAgIGNhY2hlLT53ZWJUaHJlYWREaWRSZWNlaXZlUmVzcG9uc2VG
dW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Iod2ViVGhyZWFkV2ViVmlldzpyZXNv
dXJjZTpkaWRSZWNlaXZlUmVzcG9uc2U6ZnJvbURhdGFTb3VyY2U6KSk7CisgICAgY2FjaGUtPndl
YlRocmVhZERpZFJlY2VpdmVDb250ZW50TGVuZ3RoRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwg
QHNlbGVjdG9yKHdlYlRocmVhZFdlYlZpZXc6cmVzb3VyY2U6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5n
dGg6ZnJvbURhdGFTb3VyY2U6KSk7CisgICAgY2FjaGUtPndlYlRocmVhZFdpbGxDYWNoZVJlc3Bv
bnNlRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlRocmVhZFdlYlZpZXc6
cmVzb3VyY2U6d2lsbENhY2hlUmVzcG9uc2U6ZnJvbURhdGFTb3VyY2U6KSk7CisjZW5kaWYKKwog
ICAgIGNhY2hlLT5kaWRSZWNlaXZlQ29udGVudExlbmd0aEZ1bmMgPSBnZXRNZXRob2QoZGVsZWdh
dGUsIEBzZWxlY3Rvcih3ZWJWaWV3OnJlc291cmNlOmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoOmZy
b21EYXRhU291cmNlOikpOwogICAgIGNhY2hlLT5kaWRSZWNlaXZlUmVzcG9uc2VGdW5jID0gZ2V0
TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Iod2ViVmlldzpyZXNvdXJjZTpkaWRSZWNlaXZlUmVz
cG9uc2U6ZnJvbURhdGFTb3VyY2U6KSk7CiAgICAgY2FjaGUtPmlkZW50aWZpZXJGb3JSZXF1ZXN0
RnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6aWRlbnRpZmllckZv
ckluaXRpYWxSZXF1ZXN0OmZyb21EYXRhU291cmNlOikpOwpAQCAtMTgwOSw2ICsyNjE4LDkgQEAg
LSAodm9pZClfY2FjaGVGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucwogICAgIGNhY2hl
LT5kaWRSdW5JbnNlY3VyZUNvbnRlbnRGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0
b3Iod2ViVmlldzpkaWRSdW5JbnNlY3VyZUNvbnRlbnQ6KSk7CiAgICAgY2FjaGUtPmRpZERldGVj
dFhTU0Z1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZERldGVj
dFhTUzopKTsKICAgICBjYWNoZS0+ZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5RnVuYyA9IGdl
dE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkUmVtb3ZlRnJhbWVGcm9tSGll
cmFyY2h5OikpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBjYWNoZS0+d2ViVGhyZWFkRGlkTGF5
b3V0RnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlRocmVhZFdlYlZpZXc6
ZGlkTGF5b3V0OikpOworI2VuZGlmCiAKICAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGdldCBy
aWQgb2YgdGhpcyBjb2RlIGFuZCB0cmFuc2l0aW9uIGFsbCBjbGllbnRzIHRvIHVzaW5nIGRpZExh
eW91dCBpbnN0ZWFkIG9mCiAgICAgLy8gZGlkRmlyc3RMYXlvdXRJbkZyYW1lIGFuZCBkaWRGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRJbkZyYW1lLiBJbiB0aGUgbWVhbnRpbWUsIHRoaXMgaXMg
cmVxdWlyZWQKQEAgLTE4MTYsOCArMjYyOCwxMiBAQCAtICh2b2lkKV9jYWNoZUZyYW1lTG9hZERl
bGVnYXRlSW1wbGVtZW50YXRpb25zCiAgICAgUGFnZSogcGFnZSA9IGNvcmUoc2VsZik7CiAgICAg
aWYgKHBhZ2UpIHsKICAgICAgICAgdW5zaWduZWQgbWlsZXN0b25lcyA9IERpZEZpcnN0TGF5b3V0
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgbWlsZXN0b25lcyB8PSBEaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXQ7CisjZWxzZQogICAgICAgICBpZiAoY2FjaGUtPmRpZEZpcnN0Vmlz
dWFsbHlOb25FbXB0eUxheW91dEluRnJhbWVGdW5jKQogICAgICAgICAgICAgbWlsZXN0b25lcyB8
PSBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQ7CisjZW5kaWYKICAgICAgICAgcGFnZS0+
YWRkTGF5b3V0TWlsZXN0b25lcyhzdGF0aWNfY2FzdDxMYXlvdXRNaWxlc3RvbmVzPihtaWxlc3Rv
bmVzKSk7CiAgICAgfQogfQpAQCAtMTg3MSw2ICsyNjg3LDEwIEBAIC0gKHZvaWQpX2NhY2hlSGlz
dG9yeURlbGVnYXRlSW1wbGVtZW50YXRpb25zCiAKIC0gKGlkKV9wb2xpY3lEZWxlZ2F0ZUZvcndh
cmRlcgogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoX3ByaXZhdGUtPmNsb3NpbmcpCisg
ICAgICAgIHJldHVybiBuaWw7CisjZW5kaWYKICAgICBpZiAoIV9wcml2YXRlLT5wb2xpY3lEZWxl
Z2F0ZUZvcndhcmRlcikKICAgICAgICAgX3ByaXZhdGUtPnBvbGljeURlbGVnYXRlRm9yd2FyZGVy
ID0gW1tfV2ViU2FmZUZvcndhcmRlciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6X3ByaXZhdGUtPnBv
bGljeURlbGVnYXRlIGRlZmF1bHRUYXJnZXQ6W1dlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZSBzaGFy
ZWRQb2xpY3lEZWxlZ2F0ZV1dOwogICAgIHJldHVybiBfcHJpdmF0ZS0+cG9saWN5RGVsZWdhdGVG
b3J3YXJkZXI7CkBAIC0xODc4LDEzICsyNjk4LDM2IEBAIC0gKGlkKV9wb2xpY3lEZWxlZ2F0ZUZv
cndhcmRlcgogCiAtIChpZClfVUlEZWxlZ2F0ZUZvcndhcmRlcgogeworI2lmIFBMQVRGT1JNKElP
UykKKyAgICBpZiAoX3ByaXZhdGUtPmNsb3NpbmcpCisgICAgICAgIHJldHVybiBuaWw7CisjZW5k
aWYKICAgICBpZiAoIV9wcml2YXRlLT5VSURlbGVnYXRlRm9yd2FyZGVyKQogICAgICAgICBfcHJp
dmF0ZS0+VUlEZWxlZ2F0ZUZvcndhcmRlciA9IFtbX1dlYlNhZmVGb3J3YXJkZXIgYWxsb2NdIGlu
aXRXaXRoVGFyZ2V0Ol9wcml2YXRlLT5VSURlbGVnYXRlIGRlZmF1bHRUYXJnZXQ6W1dlYkRlZmF1
bHRVSURlbGVnYXRlIHNoYXJlZFVJRGVsZWdhdGVdXTsKICAgICByZXR1cm4gX3ByaXZhdGUtPlVJ
RGVsZWdhdGVGb3J3YXJkZXI7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCistIChpZClfVUlEZWxl
Z2F0ZUZvclNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZCBkZWxlZ2F0ZSA9IHNlbGYt
Pl9wcml2YXRlLT5VSURlbGVnYXRlOworICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOnNlbGVjdG9yXSkKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlOworCisgICAgZGVsZWdhdGUg
PSBbV2ViRGVmYXVsdFVJRGVsZWdhdGUgc2hhcmVkVUlEZWxlZ2F0ZV07CisgICAgaWYgKFtkZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQorICAgICAgICByZXR1cm4gZGVsZWdh
dGU7CisKKyAgICByZXR1cm4gbmlsOworfQorI2VuZGlmCisKIC0gKGlkKV9lZGl0aW5nRGVsZWdh
dGVGb3J3YXJkZXIKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKF9wcml2YXRlLT5jbG9z
aW5nKQorICAgICAgICByZXR1cm4gbmlsOworI2VuZGlmICAgIAogICAgIC8vIFRoaXMgY2FuIGJl
IGNhbGxlZCBkdXJpbmcgd2luZG93IGRlYWxsb2NhdGlvbiBieSBRVE1vdmllVmlldyBpbiB0aGUg
UXVpY2tUaW1lIENvY29hIFBsdWctaW4uCiAgICAgLy8gTm90IHN1cmUgaWYgdGhhdCBpcyBhIGJ1
ZyBvciBub3QuCiAgICAgaWYgKCFfcHJpdmF0ZSkKQEAgLTE5OTUsNiArMjgzOCw3IEBAIC0gKEJP
T0wpX2lzUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzCiAgICAgcmV0dXJuIF9wcml2YXRlLT5w
cm9ncmFtbWF0aWNGb2N1c0NvdW50ICE9IDA7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAo
dm9pZClfZGlkQ2hhbmdlVmFsdWVGb3JLZXk6IChOU1N0cmluZyAqKWtleQogewogICAgIExPRyAo
QmluZGluZ3MsICJjYWxsaW5nIGRpZENoYW5nZVZhbHVlRm9yS2V5OiAlQCIsIGtleSk7CkBAIC0y
MTc2LDYgKzMwMjAsMjAgQEAgLSAodm9pZClfc2V0SW5pdGlhdGVkRHJhZzooQk9PTClpbml0aWF0
ZWREcmFnCiB9CiAjZW5kaWYKIAorI2Vsc2UKKworLSAodm9pZClfZGlkQ29tbWl0TG9hZEZvckZy
YW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgaWYgKGZyYW1lID09IFtzZWxmIG1haW5GcmFt
ZV0pIHsKKyAgICAgICAgX3ByaXZhdGUtPmRpZERyYXdUaWxlcyA9IDA7CisjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCisgICAgICAgIFtbV2ViVmlldyBzaGFyZWRXZWJJbnNwZWN0b3JTZXJ2
ZXJdIHB1c2hMaXN0aW5nXTsKKyNlbmRpZgorICAgIH0KK30KKworI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykKKwogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKIAogI2RlZmluZSBEQVNIQk9B
UkRfQ09OVFJPTF9MQUJFTCBAImNvbnRyb2wiCkBAIC0yMzY1LDE2ICszMjIzLDEyMSBAQCArIChC
T09MKV9zaG91bGRVc2VGb250U21vb3RoaW5nCiAgICAgcmV0dXJuIEZvbnQ6OnNob3VsZFVzZVNt
b290aGluZygpOwogfQogCi0rICh2b2lkKV9zZXRVc2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcjoo
Qk9PTClmCisjaWYgIVBMQVRGT1JNKElPUykKKysgKHZvaWQpX3NldFVzZXNUZXN0TW9kZUZvY3Vz
UmluZ0NvbG9yOihCT09MKWYKK3sKKyAgICBzZXRVc2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcihm
KTsKK30KKworKyAoQk9PTClfdXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IKK3sKKyAgICByZXR1
cm4gdXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oSU9TKQorLSAodm9pZClfc2V0VUlLaXREZWxlZ2F0ZTooaWQpZGVsZWdhdGUKK3sKKyAgICBf
cHJpdmF0ZS0+VUlLaXREZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgIFtfcHJpdmF0ZS0+VUlLaXRE
ZWxlZ2F0ZUZvcndhcmRlciBjbGVhclRhcmdldF07CisgICAgW19wcml2YXRlLT5VSUtpdERlbGVn
YXRlRm9yd2FyZGVyIHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5VSUtpdERlbGVnYXRlRm9yd2Fy
ZGVyID0gbmlsOworfQorCistIChpZClfVUlLaXREZWxlZ2F0ZQoreworICAgIHJldHVybiBfcHJp
dmF0ZS0+VUlLaXREZWxlZ2F0ZTsKK30KKworLSAodm9pZClzZXRXZWJNYWlsRGVsZWdhdGU6KGlk
KWRlbGVnYXRlCit7CisgICAgX3ByaXZhdGUtPldlYk1haWxEZWxlZ2F0ZSA9IGRlbGVnYXRlOwor
fQorCistIChpZClfd2ViTWFpbERlbGVnYXRlCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5XZWJN
YWlsRGVsZWdhdGU7Cit9CisKKy0gKGlkIDxXZWJDYXJldENoYW5nZUxpc3RlbmVyPiljYXJldENo
YW5nZUxpc3RlbmVyCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5fY2FyZXRDaGFuZ2VMaXN0ZW5l
cjsKK30KKworLSAodm9pZClzZXRDYXJldENoYW5nZUxpc3RlbmVyOihpZCA8V2ViQ2FyZXRDaGFu
Z2VMaXN0ZW5lcj4pbGlzdGVuZXIKK3sKKyAgICBfcHJpdmF0ZS0+X2NhcmV0Q2hhbmdlTGlzdGVu
ZXIgPSBsaXN0ZW5lcjsKK30KKworLSAoTlNTZXQgKiljYXJldENoYW5nZUxpc3RlbmVycworewor
ICAgIHJldHVybiBfcHJpdmF0ZS0+X2NhcmV0Q2hhbmdlTGlzdGVuZXJzOworfQorCistICh2b2lk
KWFkZENhcmV0Q2hhbmdlTGlzdGVuZXI6KGlkIDxXZWJDYXJldENoYW5nZUxpc3RlbmVyPilsaXN0
ZW5lcgoreworICAgIGlmIChfcHJpdmF0ZS0+X2NhcmV0Q2hhbmdlTGlzdGVuZXJzID09IG5pbCkg
eworICAgICAgICBfcHJpdmF0ZS0+X2NhcmV0Q2hhbmdlTGlzdGVuZXJzID0gW1tOU011dGFibGVT
ZXQgYWxsb2NdIGluaXRdOworICAgIH0KKyAgICAKKyAgICBbX3ByaXZhdGUtPl9jYXJldENoYW5n
ZUxpc3RlbmVycyBhZGRPYmplY3Q6bGlzdGVuZXJdOworfQorCistICh2b2lkKXJlbW92ZUNhcmV0
Q2hhbmdlTGlzdGVuZXI6KGlkIDxXZWJDYXJldENoYW5nZUxpc3RlbmVyPilsaXN0ZW5lcgorewor
ICAgIFtfcHJpdmF0ZS0+X2NhcmV0Q2hhbmdlTGlzdGVuZXJzIHJlbW92ZU9iamVjdDpsaXN0ZW5l
cl07Cit9CisKKy0gKHZvaWQpcmVtb3ZlQWxsQ2FyZXRDaGFuZ2VMaXN0ZW5lcnMKK3sKKyAgICBb
X3ByaXZhdGUtPl9jYXJldENoYW5nZUxpc3RlbmVycyByZW1vdmVBbGxPYmplY3RzXTsKK30KKwor
LSAodm9pZCljYXJldENoYW5nZWQKK3sKKyAgICBbX3ByaXZhdGUtPl9jYXJldENoYW5nZUxpc3Rl
bmVyIGNhcmV0Q2hhbmdlZF07CisgICAgTlNTZXQgKmNvcHkgPSBbX3ByaXZhdGUtPl9jYXJldENo
YW5nZUxpc3RlbmVycyBjb3B5XTsKKyAgICBmb3IgKGlkIDxXZWJDYXJldENoYW5nZUxpc3RlbmVy
PiBsaXN0ZW5lciBpbiBjb3B5KSB7CisgICAgICAgIFtsaXN0ZW5lciBjYXJldENoYW5nZWRdOwor
ICAgIH0KKyAgICBbY29weSByZWxlYXNlXTsKK30KKworLSAodm9pZClfY2xlYXJEZWxlZ2F0ZXMK
IHsKLSAgICBzZXRVc2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcihmKTsKKyAgICBBU1NFUlQoV2Vi
VGhyZWFkSXNMb2NrZWQoKSB8fCAhV2ViVGhyZWFkSXNFbmFibGVkKCkpOworICAgIAorICAgIFtz
ZWxmIF9zZXRGb3JtRGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiBfc2V0VUlLaXREZWxlZ2F0ZTpu
aWxdOworICAgIFtzZWxmIHNldENhcmV0Q2hhbmdlTGlzdGVuZXI6bmlsXTsKKyAgICBbc2VsZiBy
ZW1vdmVBbGxDYXJldENoYW5nZUxpc3RlbmVyc107CisgICAgW3NlbGYgc2V0V2ViTWFpbERlbGVn
YXRlOm5pbF07CisgICAgCisgICAgW3NlbGYgc2V0RG93bmxvYWREZWxlZ2F0ZTpuaWxdOworICAg
IFtzZWxmIHNldEVkaXRpbmdEZWxlZ2F0ZTpuaWxdOyAKKyAgICBbc2VsZiBzZXRGcmFtZUxvYWRE
ZWxlZ2F0ZTpuaWxdOworICAgIFtzZWxmIHNldFBvbGljeURlbGVnYXRlOm5pbF07CisgICAgW3Nl
bGYgc2V0UmVzb3VyY2VMb2FkRGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiBzZXRTY3JpcHREZWJ1
Z0RlbGVnYXRlOm5pbF07CisgICAgW3NlbGYgc2V0VUlEZWxlZ2F0ZTpuaWxdOyAgICAgCiB9CiAK
LSsgKEJPT0wpX3VzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yCistIChOU1VSTCAqKV9kaXNwbGF5
VVJMCiB7Ci0gICAgcmV0dXJuIHVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCk7CisgICAgV2Vi
VGhyZWFkTG9jaygpOworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIG1haW5GcmFtZV07Cisg
ICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS82MzYyMzY5PiBXZSB1c2VkIHRvIGdldCBwcm92
aXNpb25hbERhdGFTb3VyY2UgaGVyZSBpZiBpbiBwcm92aXNpb25hbCBzdGF0ZTsgaG93IGRvIHdl
IHRlbGwgdGhhdCBub3c/IElzIHRoaXMgcmlnaHQ/CisgICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNv
dXJjZSA9IFtmcmFtZSBwcm92aXNpb25hbERhdGFTb3VyY2VdOworICAgIGlmICghZGF0YVNvdXJj
ZSkKKyAgICAgICAgZGF0YVNvdXJjZSA9IFtmcmFtZSBkYXRhU291cmNlXTsKKyAgICBOU1VSTCAq
dW5yZWFjaGFibGVVUkwgPSBbZGF0YVNvdXJjZSB1bnJlYWNoYWJsZVVSTF07CisgICAgTlNVUkwg
KlVSTCA9IHVucmVhY2hhYmxlVVJMICE9IG5pbCA/IHVucmVhY2hhYmxlVVJMIDogW1tkYXRhU291
cmNlIHJlcXVlc3RdIFVSTF07CisgICAgW1tVUkwgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAg
cmV0dXJuIFVSTDsKIH0KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogLSAodm9pZClzZXRBbHdheXNTaG93VmVydGljYWxTY3JvbGxlcjooQk9PTClmbGFnCiB7
CiAgICAgV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3ICpzY3JvbGx2aWV3ID0gW1tbc2VsZiBtYWlu
RnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZpZXddOwpAQCAtMjQxNCw2ICszMzc3LDcgQEAgLSAo
Qk9PTClhbHdheXNTaG93SG9yaXpvbnRhbFNjcm9sbGVyCiAgICAgV2ViRHluYW1pY1Njcm9sbEJh
cnNWaWV3ICpzY3JvbGx2aWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld10gX3Njcm9s
bFZpZXddOwogICAgIHJldHVybiBbc2Nyb2xsdmlldyBob3Jpem9udGFsU2Nyb2xsaW5nTW9kZUxv
Y2tlZF0gJiYgW3Njcm9sbHZpZXcgaG9yaXpvbnRhbFNjcm9sbGluZ01vZGVdID09IFNjcm9sbGJh
ckFsd2F5c09uOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIC0gKHZvaWQpX3NldElu
Vmlld1NvdXJjZU1vZGU6KEJPT0wpZmxhZwogewpAQCAtMjQ1NSw2ICszNDE5LDcgQEAgLSAodm9p
ZClfc2V0Q29va2llRW5hYmxlZDooQk9PTCllbmFibGUKICAgICAgICAgX3ByaXZhdGUtPnBhZ2Ut
PnNldHRpbmdzKCkuc2V0Q29va2llRW5hYmxlZChlbmFibGUpOwogfQogCisjaWYgIVBMQVRGT1JN
KElPUykKIC0gKHZvaWQpX3NldEFkZGl0aW9uYWxXZWJQbHVnSW5QYXRoczooTlNBcnJheSAqKW5l
d1BhdGhzCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+cGx1Z2luRGF0YWJhc2UpCkBAIC0yNDYzLDYg
KzM0MjgsMTMwIEBAIC0gKHZvaWQpX3NldEFkZGl0aW9uYWxXZWJQbHVnSW5QYXRoczooTlNBcnJh
eSAqKW5ld1BhdGhzCiAgICAgW19wcml2YXRlLT5wbHVnaW5EYXRhYmFzZSBzZXRQbHVnSW5QYXRo
czpuZXdQYXRoc107CiAgICAgW19wcml2YXRlLT5wbHVnaW5EYXRhYmFzZSByZWZyZXNoXTsKIH0K
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorLSAoQk9PTClfbG9ja2VkX3BsdWdJbnNBcmVS
dW5uaW5nSW5GcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworICAgIC8vIEFzayBwbHVnLWlucyBp
biB0aGlzIGZyYW1lCisgICAgaWQgPFdlYkRvY3VtZW50Vmlldz4gZG9jdW1lbnRWaWV3ID0gW1tm
cmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYgKGRvY3VtZW50VmlldyAmJiBb
ZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKKyAgICAg
ICAgaWYgKFtbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9wbHVnaW5Db250cm9sbGVyXSBw
bHVnSW5zQXJlUnVubmluZ10pCisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKworICAg
IC8vIEFzayBwbHVnLWlucyBpbiBjaGlsZCBmcmFtZXMKKyAgICBOU0FycmF5ICpjaGlsZEZyYW1l
cyA9IFtmcmFtZSBjaGlsZEZyYW1lc107CisgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IFtjaGls
ZEZyYW1lcyBjb3VudF07CisgICAgdW5zaWduZWQgY2hpbGRJbmRleDsKKyAgICBmb3IgKGNoaWxk
SW5kZXggPSAwOyBjaGlsZEluZGV4IDwgY2hpbGRDb3VudDsgY2hpbGRJbmRleCsrKSB7CisgICAg
ICAgIGlmIChbc2VsZiBfbG9ja2VkX3BsdWdJbnNBcmVSdW5uaW5nSW5GcmFtZTpbY2hpbGRGcmFt
ZXMgb2JqZWN0QXRJbmRleDpjaGlsZEluZGV4XV0pCisgICAgICAgICAgICByZXR1cm4gWUVTOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpX3BsdWdpbnNBcmVSdW5u
aW5nCit7CisgICAgV2ViVGhyZWFkTG9jaygpOworICAgIHJldHVybiBbc2VsZiBfbG9ja2VkX3Bs
dWdJbnNBcmVSdW5uaW5nSW5GcmFtZTpbc2VsZiBtYWluRnJhbWVdXTsKK30KKworLSAodm9pZClf
bG9ja2VkX3JlY3Vyc2l2ZWx5UGVyZm9ybVBsdWdJblNlbGVjdG9yOihTRUwpc2VsZWN0b3IgaW5G
cmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworICAgIC8vIFNlbmQgdGhlIG1lc3NhZ2UgdG8gcGx1
Zy1pbnMgaW4gdGhpcyBmcmFtZQorICAgIGlkIDxXZWJEb2N1bWVudFZpZXc+IGRvY3VtZW50Vmll
dyA9IFtbZnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmIChkb2N1bWVudFZp
ZXcgJiYgW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQor
ICAgICAgICBbWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfcGx1Z2luQ29udHJvbGxlcl0g
cGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKKworICAgIC8vIFNlbmQgdGhlIG1lc3NhZ2UgdG8g
cGx1Zy1pbnMgaW4gY2hpbGQgZnJhbWVzCisgICAgTlNBcnJheSAqY2hpbGRGcmFtZXMgPSBbZnJh
bWUgY2hpbGRGcmFtZXNdOworICAgIHVuc2lnbmVkIGNoaWxkQ291bnQgPSBbY2hpbGRGcmFtZXMg
Y291bnRdOworICAgIHVuc2lnbmVkIGNoaWxkSW5kZXg7CisgICAgZm9yIChjaGlsZEluZGV4ID0g
MDsgY2hpbGRJbmRleCA8IGNoaWxkQ291bnQ7IGNoaWxkSW5kZXgrKykgeworICAgICAgICBbc2Vs
ZiBfbG9ja2VkX3JlY3Vyc2l2ZWx5UGVyZm9ybVBsdWdJblNlbGVjdG9yOnNlbGVjdG9yIGluRnJh
bWU6W2NoaWxkRnJhbWVzIG9iamVjdEF0SW5kZXg6Y2hpbGRJbmRleF1dOworICAgIH0KK30KKwor
LSAodm9pZClfZGVzdHJveUFsbFBsdWdJbnMKK3sKKyAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAg
W3NlbGYgX2xvY2tlZF9yZWN1cnNpdmVseVBlcmZvcm1QbHVnSW5TZWxlY3RvcjpAc2VsZWN0b3Io
ZGVzdHJveUFsbFBsdWdpbnMpIGluRnJhbWU6W3NlbGYgbWFpbkZyYW1lXV07Cit9CisKKy0gKHZv
aWQpX2NsZWFyQmFja0ZvcndhcmRDYWNoZQoreworICAgIFdlYlRocmVhZFJ1biheeworICAgICAg
ICBXZWJLaXQ6Ok1lbW9yeU1lYXN1cmUgbWVhc3VyZXIoIltXZWJWaWV3IF9jbGVhckJhY2tGb3J3
YXJkQ2FjaGVdIik7CisgICAgICAgIEJhY2tGb3J3YXJkTGlzdCogYmZMaXN0ID0gY29yZShbc2Vs
ZiBiYWNrRm9yd2FyZExpc3RdKTsKKyAgICAgICAgaWYgKCFiZkxpc3QpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgQk9PTCBkaWRDbGVhckJGQ2FjaGUgPSBiZkxpc3QtPmNsZWFyQWxs
UGFnZUNhY2hlcygpOworICAgICAgICBpZiAoV2ViS2l0OjpNZW1vcnlNZWFzdXJlOjppc0xvZ2dp
bmdFbmFibGVkKCkpCisgICAgICAgICAgICBOU0xvZyhAIltXZWJWaWV3IF9jbGVhckJhY2tGb3J3
YXJkQ2FjaGVdICVAIGVtcHR5IGNhY2hlXG4iLCAoZGlkQ2xlYXJCRkNhY2hlID8gQCJESUQiIDog
QCJkaWQgTk9UIikpOworICAgIH0pOworfQorCistICh2b2lkKV9zdGFydEFsbFBsdWdJbnMKK3sK
KyAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAgW3NlbGYgX2xvY2tlZF9yZWN1cnNpdmVseVBlcmZv
cm1QbHVnSW5TZWxlY3RvcjpAc2VsZWN0b3Ioc3RhcnRBbGxQbHVnaW5zKSBpbkZyYW1lOltzZWxm
IG1haW5GcmFtZV1dOworfQorCistICh2b2lkKV9zdG9wQWxsUGx1Z0lucworeworICAgIFdlYlRo
cmVhZExvY2soKTsKKyAgICBbc2VsZiBfbG9ja2VkX3JlY3Vyc2l2ZWx5UGVyZm9ybVBsdWdJblNl
bGVjdG9yOkBzZWxlY3RvcihzdG9wQWxsUGx1Z2lucykgaW5GcmFtZTpbc2VsZiBtYWluRnJhbWVd
XTsKK30KKworLSAodm9pZClfc3RvcEFsbFBsdWdJbnNGb3JQYWdlQ2FjaGUKK3sKKyAgICBXZWJU
aHJlYWRMb2NrKCk7CisgICAgW3NlbGYgX2xvY2tlZF9yZWN1cnNpdmVseVBlcmZvcm1QbHVnSW5T
ZWxlY3RvcjpAc2VsZWN0b3Ioc3RvcFBsdWdpbnNGb3JQYWdlQ2FjaGUpIGluRnJhbWU6W3NlbGYg
bWFpbkZyYW1lXV07Cit9CisKKy0gKHZvaWQpX3Jlc3RvcmVQbHVnSW5zRnJvbUNhY2hlCit7Cisg
ICAgV2ViVGhyZWFkTG9jaygpOworICAgIFtzZWxmIF9sb2NrZWRfcmVjdXJzaXZlbHlQZXJmb3Jt
UGx1Z0luU2VsZWN0b3I6QHNlbGVjdG9yKHJlc3RvcmVQbHVnaW5zRnJvbUNhY2hlKSBpbkZyYW1l
OltzZWxmIG1haW5GcmFtZV1dOworfQorCistIChCT09MKV9zZXRNZWRpYUxheWVyOihDQUxheWVy
KilsYXllciBmb3JQbHVnaW5WaWV3OihOU1ZpZXcqKXBsdWdpblZpZXcKK3sKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgV2ViVGhyZWFkTG9jaygpOworCisgICAgRnJhbWUq
IG1haW5Db3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBtYWluQ29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CisgICAgICAgIEZyYW1lVmlldyogY29yZVZpZXcgPSBmcmFtZSA/IGZyYW1l
LT52aWV3KCkgOiAwOworICAgICAgICBpZiAoIWNvcmVWaWV3KQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgLy8gR2V0IHRoZSBHcmFwaGljc0xheWVyIGZvciB0aGlzIHdpZGdldC4K
KyAgICAgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JXaWRnZXQgPSBjb3JlVmlldy0+Z3JhcGhp
Y3NMYXllckZvclBsYXRmb3JtV2lkZ2V0KHBsdWdpblZpZXcpOworICAgICAgICBpZiAoIWxheWVy
Rm9yV2lkZ2V0KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAo
bGF5ZXJGb3JXaWRnZXQtPmNvbnRlbnRzTGF5ZXJGb3JNZWRpYSgpICE9IGxheWVyKSB7CisgICAg
ICAgICAgICBsYXllckZvcldpZGdldC0+c2V0Q29udGVudHNUb01lZGlhKGxheWVyKTsKKyAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBsYXllciBoaWVyYWNoeSBjaGFuZ2Ug
aXMgYXBwbGllZCBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgIGlmIChtYWluQ29yZUZyYW1lLT52
aWV3KCkpCisgICAgICAgICAgICAgICAgbWFpbkNvcmVGcmFtZS0+dmlldygpLT5mbHVzaENvbXBv
c2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBZRVM7
CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQp
X3NldE5lZWRzVW5yZXN0cmljdGVkR2V0TWF0Y2hlZENTU1J1bGVzOihCT09MKWZsYWcKK3sKKyAg
ICBpZiAoX3ByaXZhdGUtPnBhZ2UpCisgICAgICAgIF9wcml2YXRlLT5wYWdlLT5zZXR0aW5ncygp
LnNldENyb3NzT3JpZ2luQ2hlY2tJbkdldE1hdGNoZWRDU1NSdWxlc0Rpc2FibGVkKGZsYWcpOwor
fQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAogLSAodm9pZClfYXR0YWNoU2NyaXB0RGVidWdn
ZXJUb0FsbEZyYW1lcwogewpAQCAtMjQ3Niw2ICszNTY1LDcgQEAgLSAodm9pZClfZGV0YWNoU2Ny
aXB0RGVidWdnZXJGcm9tQWxsRnJhbWVzCiAgICAgICAgIFtraXQoZnJhbWUpIF9kZXRhY2hTY3Jp
cHREZWJ1Z2dlcl07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClzZXRCYWNrZ3Jv
dW5kQ29sb3I6KE5TQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3IKIHsKICAgICBpZiAoW19wcml2YXRl
LT5iYWNrZ3JvdW5kQ29sb3IgaXNFcXVhbDpiYWNrZ3JvdW5kQ29sb3JdKQpAQCAtMjQ5Miw2ICsz
NTgyLDI1IEBAIC0gKE5TQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3IKIHsKICAgICByZXR1cm4gX3By
aXZhdGUtPmJhY2tncm91bmRDb2xvcjsKIH0KKyNlbHNlCistICh2b2lkKXNldEJhY2tncm91bmRD
b2xvcjooQ0dDb2xvclJlZiliYWNrZ3JvdW5kQ29sb3IKK3sKKyAgIGlmICghYmFja2dyb3VuZENv
bG9yIHx8IENGRXF1YWwoX3ByaXZhdGUtPmJhY2tncm91bmRDb2xvciwgYmFja2dyb3VuZENvbG9y
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZUeXBlUmVmIG9sZCA9IF9wcml2YXRlLT5iYWNr
Z3JvdW5kQ29sb3I7CisgICAgQ0ZSZXRhaW4oYmFja2dyb3VuZENvbG9yKTsKKyAgICBfcHJpdmF0
ZS0+YmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yOworICAgIENGUmVsZWFzZShvbGQp
OworCisgICAgW1tzZWxmIG1haW5GcmFtZV0gX3VwZGF0ZUJhY2tncm91bmRBbmRVcGRhdGVzV2hp
bGVPZmZzY3JlZW5dOworfQorCistIChDR0NvbG9yUmVmKWJhY2tncm91bmRDb2xvcgoreworICAg
IHJldHVybiBfcHJpdmF0ZS0+YmFja2dyb3VuZENvbG9yOworfQorI2VuZGlmCiAKIC0gKEJPT0wp
ZGVmZXJzQ2FsbGJhY2tzCiB7CkBAIC0yNTA3LDYgKzM2MTYsMTMxIEBAIC0gKHZvaWQpc2V0RGVm
ZXJzQ2FsbGJhY2tzOihCT09MKWRlZmVyCiAgICAgcmV0dXJuIF9wcml2YXRlLT5wYWdlLT5zZXRE
ZWZlcnNMb2FkaW5nKGRlZmVyKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy0gKEJPT0wpX2lz
U3RvcHBpbmcKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmlzU3RvcHBpbmc7Cit9CisKKy0gKEJP
T0wpX2lzQ2xvc2luZworeworICAgIHJldHVybiBfcHJpdmF0ZS0+Y2xvc2luZzsKK30KKworKyAo
TlNBcnJheSAqKV9wcm9kdWN0aXZpdHlEb2N1bWVudE1JTUVUeXBlcworeworI2lmIFVTRShRVUlD
S19MT09LKQorICAgIHJldHVybiBbUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkg
YWxsT2JqZWN0c107CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKworLSAodm9p
ZClfc2V0QWxsb3dzTWVzc2FnaW5nOihCT09MKWFGbGFnCit7CisgICAgX3ByaXZhdGUtPmFsbG93
c01lc3NhZ2luZyA9IGFGbGFnOworfQorCistIChCT09MKV9hbGxvd3NNZXNzYWdpbmcKK3sKKyAg
ICByZXR1cm4gX3ByaXZhdGUtPmFsbG93c01lc3NhZ2luZzsKK30KKworLSAodm9pZClfc2V0TmV0
d29ya1N0YXRlSXNPbmxpbmU6KEJPT0wpaXNPbkxpbmUKK3sKKyAgICBXZWJUaHJlYWRSdW4oXnsK
KyAgICAgICAgbmV0d29ya1N0YXRlTm90aWZpZXIoKS5zZXRJc09uTGluZShpc09uTGluZSk7Cisg
ICAgfSk7Cit9CisKKy0gKHZvaWQpX3NldEZpeGVkTGF5b3V0U2l6ZTooQ0dTaXplKXNpemUKK3sK
KyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWQoKSk7CisgICAgX3ByaXZhdGUtPmZpeGVkTGF5
b3V0U2l6ZSA9IHNpemU7CisgICAgaWYgKEZyYW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1h
aW5GcmFtZV0pKSB7CisgICAgICAgIEludFNpemUgbmV3U2l6ZShzaXplKTsKKyAgICAgICAgbWFp
bkZyYW1lLT52aWV3KCktPnNldEZpeGVkTGF5b3V0U2l6ZShuZXdTaXplKTsKKyAgICAgICAgbWFp
bkZyYW1lLT52aWV3KCktPnNldFVzZUZpeGVkTGF5b3V0KCFuZXdTaXplLmlzRW1wdHkoKSk7Cisg
ICAgICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpZRVNdOworICAgIH0KK30KKworLSAoQ0dTaXpl
KV9maXhlZExheW91dFNpemUKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmZpeGVkTGF5b3V0U2l6
ZTsKK30KKworLSAodm9pZClfc3luY2hyb25pemVDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVj
dAoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZCgpKTsKKworICAgIEludFJlY3QgbmV3
UmVjdDsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihfcHJpdmF0ZS0+cGVuZGlu
Z0ZpeGVkUG9zaXRpb25MYXlvdXRSZWN0TXV0ZXgpOworICAgICAgICBpZiAoQ0dSZWN0SXNOdWxs
KF9wcml2YXRlLT5wZW5kaW5nRml4ZWRQb3NpdGlvbkxheW91dFJlY3QpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBuZXdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChfcHJpdmF0ZS0+cGVu
ZGluZ0ZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KTsKKyAgICAgICAgX3ByaXZhdGUtPnBlbmRpbmdG
aXhlZFBvc2l0aW9uTGF5b3V0UmVjdCA9IENHUmVjdE51bGw7CisgICAgfQorCisgICAgaWYgKEZy
YW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pKQorICAgICAgICBtYWluRnJh
bWUtPnZpZXcoKS0+c2V0Q3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QobmV3UmVjdCk7Cit9
CisKKy0gKHZvaWQpX3NldEN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0SW5XZWJUaHJlYWQ6
KENHUmVjdClyZWN0IHN5bmNocm9uaXplOihCT09MKXN5bmNocm9uaXplCit7CisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIoX3ByaXZhdGUtPnBlbmRpbmdGaXhlZFBvc2l0aW9uTGF5
b3V0UmVjdE11dGV4KTsKKyAgICAgICAgX3ByaXZhdGUtPnBlbmRpbmdGaXhlZFBvc2l0aW9uTGF5
b3V0UmVjdCA9IHJlY3Q7CisgICAgfQorICAgIGlmICghc3luY2hyb25pemUpCisgICAgICAgIHJl
dHVybjsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgW3NlbGYgX3N5bmNocm9uaXplQ3Vz
dG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3RdOworICAgIH0pOworfQorCistICh2b2lkKV9zZXRD
dXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdDooQ0dSZWN0KXJlY3QKK3sKKyAgICBBU1NFUlQo
V2ViVGhyZWFkSXNMb2NrZWQoKSk7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
X3ByaXZhdGUtPnBlbmRpbmdGaXhlZFBvc2l0aW9uTGF5b3V0UmVjdE11dGV4KTsKKyAgICAgICAg
X3ByaXZhdGUtPnBlbmRpbmdGaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCA9IHJlY3Q7CisgICAgfQor
ICAgIFtzZWxmIF9zeW5jaHJvbml6ZUN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0XTsKK30K
KworLSAoQk9PTClfZmV0Y2hDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdDooTlNSZWN0Kily
ZWN0Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKF9wcml2YXRlLT5wZW5kaW5nRml4ZWRQb3Np
dGlvbkxheW91dFJlY3RNdXRleCk7CisgICAgaWYgKENHUmVjdElzTnVsbChfcHJpdmF0ZS0+cGVu
ZGluZ0ZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgKnJlY3QgPSBfcHJpdmF0ZS0+cGVuZGluZ0ZpeGVkUG9zaXRpb25MYXlvdXRSZWN0OworICAg
IF9wcml2YXRlLT5wZW5kaW5nRml4ZWRQb3NpdGlvbkxheW91dFJlY3QgPSBDR1JlY3ROdWxsOwor
ICAgIHJldHVybiB0cnVlOworfQorCistICh2b2lkKV92aWV3R2VvbWV0cnlEaWRDaGFuZ2UKK3sK
KyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWQoKSk7CisgICAgCisgICAgaWYgKEZyYW1lKiBj
b3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV0pCisgICAgICAgIGNvcmVGcmFtZS0+dmll
d3BvcnRPZmZzZXRDaGFuZ2VkKEZyYW1lOjpJbmNyZW1lbnRhbFNjcm9sbE9mZnNldCk7Cit9CisK
Ky0gKHZvaWQpX292ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkVG86KENHUG9pbnQpb2Zmc2V0
IGZvck5vZGU6KERPTU5vZGUgKilkb21Ob2RlIGlzVXNlclNjcm9sbDooQk9PTCl1c2VyU2Nyb2xs
Cit7CisgICAgLy8gRmluZCB0aGUgZnJhbWUKKyAgICBOb2RlKiBub2RlID0gY29yZShkb21Ob2Rl
KTsKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWUtPm92ZXJmbG93U2Nyb2xsUG9z
aXRpb25DaGFuZ2VkRm9yTm9kZShyb3VuZGVkSW50UG9pbnQob2Zmc2V0KSwgbm9kZSwgdXNlclNj
cm9sbCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAvLyBGb3IgYmFja3dhcmRzIGNv
bXBhdGliaWxpdHkgd2l0aCB0aGUgV2ViQmFja0ZvcndhcmRMaXN0IEFQSSwgd2UgaG9ub3IgYm90
aAogLy8gYSBwZXItV2ViVmlldyBhbmQgYSBwZXItcHJlZmVyZW5jZXMgc2V0dGluZyBmb3Igd2hl
dGhlciB0byB1c2UgdGhlIHBhZ2UgY2FjaGUuCiAKQEAgLTI1NTcsMTIgKzM3OTEsMTQgQEAgLSAo
dm9pZCloYW5kbGVBdXRoZW50aWNhdGlvbkZvclJlc291cmNlOihpZClpZGVudGlmaWVyIGNoYWxs
ZW5nZTooTlNVUkxBdXRoZW50aWMKICAgICBbW1dlYlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVy
IHNoYXJlZEhhbmRsZXJdIHN0YXJ0QXV0aGVudGljYXRpb246Y2hhbGxlbmdlIHdpbmRvdzp3aW5k
b3ddOyAKIH0gCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClfY2xlYXJVbmRvUmVkb09w
ZXJhdGlvbnMKIHsKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm47CiAg
ICAgX3ByaXZhdGUtPnBhZ2UtPmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CiB9CisjZW5kaWYK
IAogLSAodm9pZClfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOihOU1N0cmluZyAqKW5hbWUgdmFs
dWU6KE5TU3RyaW5nICopdmFsdWUKIHsKQEAgLTI2MTQsMTAgKzM4NTAsMTIgQEAgLSAoQk9PTClh
cmVNZW1vcnlDYWNoZURlbGVnYXRlQ2FsbHNFbmFibGVkCiAgICAgcmV0dXJuIF9wcml2YXRlLT5w
YWdlLT5hcmVNZW1vcnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCgpOwogfQogCisjaWYgIVBMQVRG
T1JNKElPUykKICsgKE5TQ3Vyc29yICopX3BvaW50aW5nSGFuZEN1cnNvcgogewogICAgIHJldHVy
biBoYW5kQ3Vyc29yKCkucGxhdGZvcm1DdXJzb3IoKTsKIH0KKyNlbmRpZgogCiAtIChCT09MKV9w
b3N0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdOb3RpZmljYXRpb25zCiB7CkBAIC0yNzM2LDEwICsz
OTc0LDEyIEBAIC0gKE5TQXJyYXkqKXRyYWNrZWRSZXBhaW50UmVjdHMKICAgICByZXR1cm4gW3Jl
Y3RzQXJyYXkgYXV0b3JlbGVhc2VdOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TUGFz
dGVib2FyZCAqKV9pbnNlcnRpb25QYXN0ZWJvYXJkCiB7CiAgICAgcmV0dXJuIF9wcml2YXRlID8g
X3ByaXZhdGUtPmluc2VydGlvblBhc3RlYm9hcmQgOiBuaWw7CiB9CisjZW5kaWYKIAogKyAodm9p
ZClfYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlXaXRoU291cmNlT3JpZ2luOihOU1N0cmlu
ZyAqKXNvdXJjZU9yaWdpbiBkZXN0aW5hdGlvblByb3RvY29sOihOU1N0cmluZyAqKWRlc3RpbmF0
aW9uUHJvdG9jb2wgZGVzdGluYXRpb25Ib3N0OihOU1N0cmluZyAqKWRlc3RpbmF0aW9uSG9zdCBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluczooQk9PTClhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cwogewpAQCAtMjc3OSw3ICs0MDE5LDExIEBAIC0gKHZvaWQpX3VwZGF0ZVZpc2liaWxpdHlTdGF0
ZQogLSAodm9pZClfdXBkYXRlQWN0aXZlU3RhdGUKIHsKICAgICBpZiAoX3ByaXZhdGUgJiYgX3By
aXZhdGUtPnBhZ2UpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBfcHJpdmF0ZS0+cGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuc2V0QWN0aXZlKFtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93XSk7
CisjZWxzZQogICAgICAgICBfcHJpdmF0ZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0QWN0
aXZlKFtbc2VsZiB3aW5kb3ddIF9oYXNLZXlBcHBlYXJhbmNlXSk7CisjZW5kaWYKIH0KIAogc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IHRvU3RyaW5nVmVjdG9yKE5TQXJyYXkqIHBhdHRlcm5zKQpAQCAt
MzAxMCw2ICs0MjU0LDcgQEAgLSAodm9pZClfc2V0VXNlRml4ZWRMYXlvdXQ6KEJPT0wpZml4ZWQK
ICAgICAgICAgdmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKEludFNpemUoKSk7CiB9CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogLSAodm9pZClfc2V0Rml4ZWRMYXlvdXRTaXplOihOU1NpemUpc2l6ZQog
ewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CkBAIC0zMDIz
LDYgKzQyNjgsNyBAQCAtICh2b2lkKV9zZXRGaXhlZExheW91dFNpemU6KE5TU2l6ZSlzaXplCiAg
ICAgdmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKEludFNpemUoc2l6ZSkpOwogICAgIHZpZXctPmZv
cmNlTGF5b3V0KCk7CiB9CisjZW5kaWYKIAogLSAoQk9PTClfdXNlRml4ZWRMYXlvdXQKIHsKQEAg
LTMwMzcsNiArNDI4Myw3IEBAIC0gKEJPT0wpX3VzZUZpeGVkTGF5b3V0CiAgICAgcmV0dXJuIHZp
ZXctPnVzZUZpeGVkTGF5b3V0KCk7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAoTlNTaXpl
KV9maXhlZExheW91dFNpemUKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5D
b3JlRnJhbWVdOwpAQCAtMzA0OSw2ICs0Mjk2LDcgQEAgLSAoTlNTaXplKV9maXhlZExheW91dFNp
emUKIAogICAgIHJldHVybiB2aWV3LT5maXhlZExheW91dFNpemUoKTsKIH0KKyNlbmRpZgogCiAt
ICh2b2lkKV9zZXRQYWdpbmF0aW9uTW9kZTooV2ViUGFnaW5hdGlvbk1vZGUpcGFnaW5hdGlvbk1v
ZGUKIHsKQEAgLTMyMDksNiArNDQ1Nyw3IEBAIC0gKE5TVUludGVnZXIpX3BhZ2VDb3VudAogICAg
IHJldHVybiBwYWdlLT5wYWdlQ291bnQoKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtIChD
R0Zsb2F0KV9iYWNraW5nU2NhbGVGYWN0b3IKIHsKICAgICByZXR1cm4gW3NlbGYgX2RldmljZVNj
YWxlRmFjdG9yXTsKQEAgLTMyMjMsNiArNDQ3Miw3IEBAIC0gKHZvaWQpX3NldEN1c3RvbUJhY2tp
bmdTY2FsZUZhY3RvcjooQ0dGbG9hdCljdXN0b21TY2FsZUZhY3RvcgogICAgIGlmIChvbGRTY2Fs
ZUZhY3RvciAhPSBbc2VsZiBfZGV2aWNlU2NhbGVGYWN0b3JdKQogICAgICAgICBfcHJpdmF0ZS0+
cGFnZS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoW3NlbGYgX2RldmljZVNjYWxlRmFjdG9yXSk7CiB9
CisjZW5kaWYKIAogLSAoTlNVSW50ZWdlciltYXJrQWxsTWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5n
ICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgaGlnaGxpZ2h0OihCT09MKWhp
Z2hsaWdodCBsaW1pdDooTlNVSW50ZWdlcilsaW1pdAogewpAQCAtMzI1NSw2ICs0NTA1LDU1IEBA
ICsgKHZvaWQpX3NldEhUVFBQaXBlbGluaW5nRW5hYmxlZDooQk9PTCllbmFibGVkCiAgICAgUmVz
b3VyY2VSZXF1ZXN0OjpzZXRIVFRQUGlwZWxpbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCistIChXZWJGaXhlZFBvc2l0aW9uQ29udGVudCopX2ZpeGVkUG9zaXRp
b25Db250ZW50Cit7CisgICAgcmV0dXJuIF9wcml2YXRlID8gX3ByaXZhdGUtPl9maXhlZFBvc2l0
aW9uQ29udGVudCA6IG5pbDsKK30KKworLSAodm9pZClfZG9jdW1lbnRTY2FsZUNoYW5nZWQKK3sK
KyAgICBpZiAoV2ViTm9kZUhpZ2hsaWdodCAqY3VycmVudEhpZ2hsaWdodCA9IFtzZWxmIGN1cnJl
bnROb2RlSGlnaGxpZ2h0XSkKKyAgICAgICAgW2N1cnJlbnRIaWdobGlnaHQgc2V0TmVlZHNEaXNw
bGF5XTsKKworICAgIGlmIChfcHJpdmF0ZS0+aW5kaWNhdGVMYXllcikgeworICAgICAgICBbX3By
aXZhdGUtPmluZGljYXRlTGF5ZXIgc2V0TmVlZHNMYXlvdXRdOworICAgICAgICBbX3ByaXZhdGUt
PmluZGljYXRlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKKy0gKEJPT0wpX3dh
bnRzVGVsZXBob25lTnVtYmVyUGFyc2luZworeworICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCisg
ICAgICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCku
dGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKTsKK30KKworLSAodm9pZClfc2V0V2FudHNU
ZWxlcGhvbmVOdW1iZXJQYXJzaW5nOihCT09MKWZsYWcKK3sKKyAgICBpZiAoX3ByaXZhdGUtPnBh
Z2UpCisgICAgICAgIF9wcml2YXRlLT5wYWdlLT5zZXR0aW5ncygpLnNldFRlbGVwaG9uZU51bWJl
clBhcnNpbmdFbmFibGVkKGZsYWcpOworfQorCistIChCT09MKV93ZWJHTEVuYWJsZWQKK3sKKyAg
ICBpZiAoIV9wcml2YXRlLT5wYWdlKQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJuIF9w
cml2YXRlLT5wYWdlLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpOworfQorCistICh2b2lkKV9z
ZXRXZWJHTEVuYWJsZWQ6KEJPT0wpZW5hYmxlZAoreworICAgIGlmIChfcHJpdmF0ZS0+cGFnZSkK
KyAgICAgICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuc2V0V2ViR0xFbmFibGVkKGVuYWJs
ZWQpOworfQorCisrICh2b2lkKV9zZXRUaWxlQ2FjaGVMYXllclBvb2xDYXBhY2l0eToodW5zaWdu
ZWQpY2FwYWNpdHkKK3sKKyAgICBUaWxlQ2FjaGU6OnNldExheWVyUG9vbENhcGFjaXR5KGNhcGFj
aXR5KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIC0gKHZvaWQpX3NldFNvdXJjZUFw
cGxpY2F0aW9uQXVkaXREYXRhOihOU0RhdGEgKilzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YQog
ewogICAgIGlmIChfcHJpdmF0ZS0+c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEgPT0gc291cmNl
QXBwbGljYXRpb25BdWRpdERhdGEpCkBAIC0zMjkwLDggKzQ1ODksMzYgQEAgLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoVGFyZ2V0OihpZCl0IGRlZmF1bHRUYXJnZXQ6KGlkKWR0CiAgICAgcmV0dXJu
IHNlbGY7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCistIChpZClhc3luY0ZvcndhcmRlcgorewor
ICAgIGRpc3BhdGNoX29uY2UoJmFzeW5jRm9yd2FyZGVyUHJlZCwgXnsKKyAgICAgICAgYXN5bmNG
b3J3YXJkZXIgPSBbW19XZWJTYWZlQXN5bmNGb3J3YXJkZXIgYWxsb2NdIGluaXRXaXRoRm9yd2Fy
ZGVyOnNlbGZdOworICAgIH0pOworICAgIHJldHVybiBhc3luY0ZvcndhcmRlcjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW2FzeW5jRm9yd2FyZGVyIHJlbGVhc2VdOworICAgIFtzdXBl
ciBkZWFsbG9jXTsKK30KKworLSAodm9pZCljbGVhclRhcmdldAoreworICAgIHRhcmdldCA9IG5p
bDsKK30KKyNlbmRpZgorCiAtICh2b2lkKWZvcndhcmRJbnZvY2F0aW9uOihOU0ludm9jYXRpb24g
KilpbnZvY2F0aW9uCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChXZWJUaHJlYWRJc0N1
cnJlbnQoKSkgeworICAgICAgICBbaW52b2NhdGlvbiByZXRhaW5Bcmd1bWVudHNdOworICAgICAg
ICBXZWJUaHJlYWRDYWxsRGVsZWdhdGUoaW52b2NhdGlvbik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKICAgICBpZiAoW3RhcmdldCByZXNwb25kc1RvU2VsZWN0b3I6W2ludm9jYXRp
b24gc2VsZWN0b3JdXSkgewogICAgICAgICBAdHJ5IHsKICAgICAgICAgICAgIFtpbnZvY2F0aW9u
IGludm9rZVdpdGhUYXJnZXQ6dGFyZ2V0XTsKQEAgLTMzMDcsNiArNDYzNCwxMyBAQCAtICh2b2lk
KWZvcndhcmRJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uCiAgICAgLy8gRG8g
bm90aGluZyBxdWlldGx5IGlmIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQuCiB9CiAKKyNpZiBQTEFU
Rk9STShJT1MpCistIChCT09MKXJlc3BvbmRzVG9TZWxlY3RvcjooU0VMKWFTZWxlY3Rvcgorewor
ICAgIHJldHVybiBbZGVmYXVsdFRhcmdldCByZXNwb25kc1RvU2VsZWN0b3I6YVNlbGVjdG9yXTsK
K30KKyNlbmRpZgorCiAtIChOU01ldGhvZFNpZ25hdHVyZSAqKW1ldGhvZFNpZ25hdHVyZUZvclNl
bGVjdG9yOihTRUwpYVNlbGVjdG9yCiB7CiAgICAgcmV0dXJuIFtkZWZhdWx0VGFyZ2V0IG1ldGhv
ZFNpZ25hdHVyZUZvclNlbGVjdG9yOmFTZWxlY3Rvcl07CkBAIC0zMzE0LDYgKzQ2NDgsNDMgQEAg
LSAoTlNNZXRob2RTaWduYXR1cmUgKiltZXRob2RTaWduYXR1cmVGb3JTZWxlY3RvcjooU0VMKWFT
ZWxlY3RvcgogCiBAZW5kCiAKKyNpZiBQTEFURk9STShJT1MpCitAaW1wbGVtZW50YXRpb24gX1dl
YlNhZmVBc3luY0ZvcndhcmRlcgorCistIChpZClpbml0V2l0aEZvcndhcmRlcjooX1dlYlNhZmVG
b3J3YXJkZXIgKilmb3J3YXJkZXIKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfZm9yd2FyZGVyID0gZm9yd2FyZGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWZvcndhcmRJbnZvY2F0aW9uOihOU0ludm9jYXRpb24g
KilpbnZvY2F0aW9uCit7CisgICAgLy8gU3RvcmUgX2ZvcndhcmRlciBpbiBhbiBpdmFyIHNvIGl0
IGlzIHJldGFpbmVkIGJ5IHRoZSBibG9jay4KKyAgICBfV2ViU2FmZUZvcndhcmRlciAqZm9yd2Fy
ZGVyID0gX2ZvcndhcmRlcjsKKyAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAg
ICAgW2ludm9jYXRpb24gcmV0YWluQXJndW1lbnRzXTsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgICAgIFtmb3J3YXJkZXIgZm9y
d2FyZEludm9jYXRpb246aW52b2NhdGlvbl07CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAg
ICAgICBbZm9yd2FyZGVyIGZvcndhcmRJbnZvY2F0aW9uOmludm9jYXRpb25dOworfQorCistIChC
T09MKXJlc3BvbmRzVG9TZWxlY3RvcjooU0VMKWFTZWxlY3RvcgoreworICAgIHJldHVybiBbX2Zv
cndhcmRlciByZXNwb25kc1RvU2VsZWN0b3I6YVNlbGVjdG9yXTsKK30KKworLSAoTlNNZXRob2RT
aWduYXR1cmUgKiltZXRob2RTaWduYXR1cmVGb3JTZWxlY3RvcjooU0VMKWFTZWxlY3Rvcgorewor
ICAgIHJldHVybiBbX2ZvcndhcmRlciBtZXRob2RTaWduYXR1cmVGb3JTZWxlY3RvcjphU2VsZWN0
b3JdOworfQorCitAZW5kCisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcKIAogKyAo
dm9pZClpbml0aWFsaXplCkBAIC0zMzI0LDI1ICs0Njk1LDM2IEBAICsgKHZvaWQpaW5pdGlhbGl6
ZQogICAgIGluaXRpYWxpemVkID0gWUVTOwogCiAgICAgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UoKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygp
OwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7CiAg
ICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CisjZW5kaWYKIAorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfYXBwbGljYXRpb25XaWxsVGVybWluYXRl
KSBuYW1lOk5TQXBwbGljYXRpb25XaWxsVGVybWluYXRlTm90aWZpY2F0aW9uIG9iamVjdDpOU0Fw
cF07CisjZW5kaWYKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9jYWNoZU1vZGVsQ2hhbmdlZE5vdGlm
aWNhdGlvbjopIG5hbWU6V2ViUHJlZmVyZW5jZXNDYWNoZU1vZGVsQ2hhbmdlZEludGVybmFsTm90
aWZpY2F0aW9uIG9iamVjdDpuaWxdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3ByZWZlcmVuY2Vz
UmVtb3ZlZE5vdGlmaWNhdGlvbjopIG5hbWU6V2ViUHJlZmVyZW5jZXNSZW1vdmVkTm90aWZpY2F0
aW9uIG9iamVjdDpuaWxdOwogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgW2RlZmF1bHRzIHJlZ2lzdGVyRGVmYXVs
dHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6WUVTXSBmb3JLZXk6V2ViS2l0S2VybmluZ0FuZExpZ2F0dXJlc0VuYWJsZWRCeURlZmF1
bHREZWZhdWx0c0tleV1dOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgY29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gTk87CisjZW5kaWYKKworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gW2RlZmF1bHRzIGJvb2xG
b3JLZXk6V2ViQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkXTsKICAgICBncmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViR3JhbW1hckNoZWNraW5nRW5h
YmxlZF07CisjZW5kaWYKIAogICAgIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVkQnlE
ZWZhdWx0RGVmYXVsdHNLZXldID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOwogCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBhdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQgPSBbc2Vs
ZiBfc2hvdWxkQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25CZUVuYWJsZWRdOwogICAgIGF1dG9t
YXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViQXV0b21h
dGljTGlua0RldGVjdGlvbkVuYWJsZWRdOwogICAgIGF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25F
bmFibGVkID0gW3NlbGYgX3Nob3VsZEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25CZUVuYWJsZWRd
OwpAQCAtMzM2MCw4ICs0NzQyLDEwIEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3IoX2RpZENoYW5nZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOikKICAg
ICAgICAgbmFtZTpOU1NwZWxsQ2hlY2tlckRpZENoYW5nZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRp
b25Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07CiAjZW5kaWYKKyNlbmRpZgogfQogCisjaWYgIVBM
QVRGT1JNKElPUykKICsgKEJPT0wpX3Nob3VsZEF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEJlRW5h
YmxlZAogewogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c107CkBAIC0zNDM2LDYgKzQ4MjAsNyBAQCArICh2b2lkKV9hcHBs
aWNhdGlvbldpbGxUZXJtaW5hdGUKIAogICAgIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2Uo
KTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiArIChCT09MKV9jYW5TaG93TUlNRVR5
cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgYWxsb3dpbmdQbHVnaW5zOihCT09MKWFsbG93UGx1Z2lu
cwogewpAQCAtMzQ2MSw4ICs0ODQ2LDEwIEBAIC0gKFdlYkJhc2VQbHVnaW5QYWNrYWdlICopX3Bs
dWdpbkZvck1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlCiAgICAgaWYgKHBsdWdpblBhY2th
Z2UpCiAgICAgICAgIHJldHVybiBwbHVnaW5QYWNrYWdlOwogICAgIAorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaWYgKF9wcml2YXRlLT5wbHVnaW5EYXRhYmFzZSkKICAgICAgICAgcmV0dXJuIFtf
cHJpdmF0ZS0+cGx1Z2luRGF0YWJhc2UgcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdOworI2Vu
ZGlmCiAgICAgCiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTM0NzQsOCArNDg2MSwxMCBAQCAtIChX
ZWJCYXNlUGx1Z2luUGFja2FnZSAqKV92aWRlb1Byb3h5UGx1Z2luRm9yTUlNRVR5cGU6KE5TU3Ry
aW5nICopTUlNRVR5cGUKICAgICBpZiAocGx1Z2luUGFja2FnZSkKICAgICAgICAgcmV0dXJuIHBs
dWdpblBhY2thZ2U7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChfcHJpdmF0ZS0+cGx1
Z2luRGF0YWJhc2UpCiAgICAgICAgIHJldHVybiBbX3ByaXZhdGUtPnBsdWdpbkRhdGFiYXNlIHBs
dWdpbkZvck1JTUVUeXBlOk1JTUVUeXBlXTsKKyNlbmRpZgogCiAgICAgcmV0dXJuIG5pbDsKIH0K
QEAgLTM0OTAsMTIgKzQ4NzksMTUgQEAgLSAoV2ViQmFzZVBsdWdpblBhY2thZ2UgKilfcGx1Z2lu
Rm9yRXh0ZW5zaW9uOihOU1N0cmluZyAqKWV4dGVuc2lvbgogICAgIGlmIChwbHVnaW5QYWNrYWdl
KQogICAgICAgICByZXR1cm4gcGx1Z2luUGFja2FnZTsKICAgICAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIGlmIChfcHJpdmF0ZS0+cGx1Z2luRGF0YWJhc2UpCiAgICAgICAgIHJldHVybiBbX3By
aXZhdGUtPnBsdWdpbkRhdGFiYXNlIHBsdWdpbkZvckV4dGVuc2lvbjpleHRlbnNpb25dOworI2Vu
ZGlmCiAgICAgCiAgICAgcmV0dXJuIG5pbDsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAtICh2
b2lkKWFkZFBsdWdpbkluc3RhbmNlVmlldzooTlNWaWV3ICopdmlldwogewogICAgIGlmICghX3By
aXZhdGUtPnBsdWdpbkRhdGFiYXNlKQpAQCAtMzUxNCw2ICs0OTA2LDcgQEAgLSAodm9pZClyZW1v
dmVQbHVnaW5JbnN0YW5jZVZpZXdzRm9yOihXZWJGcmFtZSopd2ViRnJhbWUKICAgICBpZiAoX3By
aXZhdGUtPnBsdWdpbkRhdGFiYXNlKQogICAgICAgICBbX3ByaXZhdGUtPnBsdWdpbkRhdGFiYXNl
IHJlbW92ZVBsdWdpbkluc3RhbmNlVmlld3NGb3I6d2ViRnJhbWVdOyAgICAKIH0KKyNlbmRpZgog
CiAtIChCT09MKV9pc01JTUVUeXBlUmVnaXN0ZXJlZEFzUGx1Z2luOihOU1N0cmluZyAqKU1JTUVU
eXBlCiB7CkBAIC0zNTIzLDE0ICs0OTE2LDIyIEBAIC0gKEJPT0wpX2lzTUlNRVR5cGVSZWdpc3Rl
cmVkQXNQbHVnaW46KE5TU3RyaW5nICopTUlNRVR5cGUKICAgICBpZiAoW1tXZWJQbHVnaW5EYXRh
YmFzZSBzaGFyZWREYXRhYmFzZV0gaXNNSU1FVHlwZVJlZ2lzdGVyZWQ6TUlNRVR5cGVdKQogICAg
ICAgICByZXR1cm4gWUVTOwogICAgICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChf
cHJpdmF0ZS0+cGx1Z2luRGF0YWJhc2UgJiYgW19wcml2YXRlLT5wbHVnaW5EYXRhYmFzZSBpc01J
TUVUeXBlUmVnaXN0ZXJlZDpNSU1FVHlwZV0pCiAgICAgICAgIHJldHVybiBZRVM7CisjZW5kaWYK
ICAgICAKICAgICByZXR1cm4gTk87CiB9CiAKICsgKEJPT0wpY2FuU2hvd01JTUVUeXBlQXNIVE1M
OihOU1N0cmluZyAqKU1JTUVUeXBlCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1F
OiA8cmRhcjovL3Byb2JsZW0vNzk2MTY1Nj4gK1tXZWJWaWV3IGNhblNob3dNSU1FVHlwZUFzSFRN
TDpdIHJlZ3Jlc3NlZCBzaWduaWZpY2FudGx5IGluIGlPUyA0LjAKKyAgICAvLyBGYXN0IHBhdGgg
Zm9yIHRoZSBjb21tb24gY2FzZSB0byBhdm9pZCBjcmVhdGluZyB0aGUgTUlNRSB0eXBlIHJlZ2lz
dHJ5LgorICAgIGlmIChbTUlNRVR5cGUgaXNFcXVhbFRvU3RyaW5nOkAidGV4dC9odG1sIl0pCisg
ICAgICAgIHJldHVybiBZRVM7CisjZW5kaWYKICAgICByZXR1cm4gW1dlYkZyYW1lVmlldyBfY2Fu
U2hvd01JTUVUeXBlQXNIVE1MOk1JTUVUeXBlXTsKIH0KIApAQCAtMzU2OCw2ICs0OTY5LDcgQEAg
KyAodm9pZClzZXRNSU1FVHlwZXNTaG93bkFzSFRNTDooTlNBcnJheSAqKU1JTUVUeXBlcwogICAg
IFt2aWV3VHlwZXMgcmVsZWFzZV07CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogKyAoTlNVUkwg
KilVUkxGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogewogICAgIHJl
dHVybiBbcGFzdGVib2FyZCBfd2ViX2Jlc3RVUkxdOwpAQCAtMzU3Nyw2ICs0OTc5LDcgQEAgKyAo
TlNTdHJpbmcgKilVUkxUaXRsZUZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJv
YXJkCiB7CiAgICAgcmV0dXJuIFtwYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6V2ViVVJMTmFtZVBi
b2FyZFR5cGVdOwogfQorI2VuZGlmCiAKICsgKHZvaWQpcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2Fs
OihOU1N0cmluZyAqKXByb3RvY29sCiB7CkBAIC0zNTg1LDIxICs0OTg4LDI2IEBAICsgKHZvaWQp
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsOihOU1N0cmluZyAqKXByb3RvY29sCiAKIC0gKGlkKV9p
bml0V2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5ICopIGFyZ3VtZW50cwogeworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgTlNDb2RlciAqZGVjb2RlciA9IFthcmd1bWVudHMgb2JqZWN0Rm9yS2V5
OkAiZGVjb2RlciJdOwogICAgIGlmIChkZWNvZGVyKSB7CiAgICAgICAgIHNlbGYgPSBbc2VsZiBp
bml0V2l0aENvZGVyOmRlY29kZXJdOwogICAgIH0gZWxzZSB7CisjZW5kaWYKICAgICAgICAgQVNT
RVJUKFthcmd1bWVudHMgb2JqZWN0Rm9yS2V5OkAiZnJhbWUiXSk7CiAgICAgICAgIE5TVmFsdWUg
KmZyYW1lVmFsdWUgPSBbYXJndW1lbnRzIG9iamVjdEZvcktleTpAImZyYW1lIl07CiAgICAgICAg
IE5TUmVjdCBmcmFtZSA9IChmcmFtZVZhbHVlID8gW2ZyYW1lVmFsdWUgcmVjdFZhbHVlXSA6IE5T
WmVyb1JlY3QpOwogICAgICAgICBOU1N0cmluZyAqZnJhbWVOYW1lID0gW2FyZ3VtZW50cyBvYmpl
Y3RGb3JLZXk6QCJmcmFtZU5hbWUiXTsKICAgICAgICAgTlNTdHJpbmcgKmdyb3VwTmFtZSA9IFth
cmd1bWVudHMgb2JqZWN0Rm9yS2V5OkAiZ3JvdXBOYW1lIl07CiAgICAgICAgIHNlbGYgPSBbc2Vs
ZiBpbml0V2l0aEZyYW1lOmZyYW1lIGZyYW1lTmFtZTpmcmFtZU5hbWUgZ3JvdXBOYW1lOmdyb3Vw
TmFtZV07CisjaWYgIVBMQVRGT1JNKElPUykKICAgICB9CisjZW5kaWYKIAogICAgIHJldHVybiBz
ZWxmOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBib29sIGNsaWVudE5lZWRzV2Vi
Vmlld0luaXRUaHJlYWRXb3JrYXJvdW5kKCkKIHsKICAgICBpZiAoV2ViS2l0TGlua2VkT25PckFm
dGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfV0VCVklFV19JTklUX1RIUkVBRF9XT1JL
QVJPVU5EKSkKQEAgLTM2MzEsNiArNTAzOSw3IEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0lu
aXRUaHJlYWRXb3JrYXJvdW5kKCkKICAgICBzdGF0aWMgYm9vbCBpc09sZENsaWVudCA9IGNsaWVu
dE5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXJvdW5kKCk7CiAgICAgcmV0dXJuIGlzT2xkQ2xp
ZW50ICYmICFwdGhyZWFkX21haW5fbnAoKTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
CiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWYKIHsKQEAgLTM2MzksMTMg
KzUwNDgsMTYgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmCiAKIC0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihOU1JlY3QpZiBmcmFtZU5hbWU6KE5TU3RyaW5n
ICopZnJhbWVOYW1lIGdyb3VwTmFtZTooTlNTdHJpbmcgKilncm91cE5hbWUKIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIGlmIChuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2Fyb3VuZCgpKQog
ICAgICAgICByZXR1cm4gW1tzZWxmIF93ZWJraXRfaW52b2tlT25NYWluVGhyZWFkXSBpbml0V2l0
aEZyYW1lOmYgZnJhbWVOYW1lOmZyYW1lTmFtZSBncm91cE5hbWU6Z3JvdXBOYW1lXTsKKyNlbmRp
ZgogCiAgICAgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRUd28oKTsKICAgICByZXR1
cm4gW3NlbGYgX2luaXRXaXRoRnJhbWU6ZiBmcmFtZU5hbWU6ZnJhbWVOYW1lIGdyb3VwTmFtZTpn
cm91cE5hbWUgdXNlc0RvY3VtZW50Vmlld3M6WUVTXTsKIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWRlY29kZXIKIHsKICAg
ICBpZiAobmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcm91bmQoKSkKQEAgLTM3NDEsMTIgKzUx
NTMsMTggQEAgLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKillbmNvZGVyCiAKICAg
ICBMT0coRW5jb2RpbmcsICJGcmFtZU5hbWUgPSAlQCwgR3JvdXBOYW1lID0gJUAsIHVzZUJhY2tG
b3J3YXJkTGlzdCA9ICVkXG4iLCBbW3NlbGYgbWFpbkZyYW1lXSBuYW1lXSwgW3NlbGYgZ3JvdXBO
YW1lXSwgKGludCl1c2VCYWNrRm9yd2FyZExpc3QpOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVh
bGxvY2F0ZU9uTWFpblRocmVhZChbV2ViVmlldyBjbGFzc10sIHNlbGYpKQogICAgICAgICByZXR1
cm47CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKF9wcml2YXRlKQorICAgICAgICBbX3By
aXZhdGUtPl9nZW9sb2NhdGlvblByb3ZpZGVyIHN0b3BUcmFja2luZ1dlYlZpZXc6c2VsZl07Cisj
ZW5kaWYKKwogICAgIC8vIGNhbGwgY2xvc2UgdG8gZW5zdXJlIHdlIHRlYXItZG93biBjb21wbGV0
ZWx5CiAgICAgLy8gdGhpcyBtYWludGFpbnMgb3VyIG9sZCBiZWhhdmlvciBmb3IgZXhpc3Rpbmcg
YXBwbGljYXRpb25zCiAgICAgW3NlbGYgY2xvc2VdOwpAQCAtMzc1NCw4ICs1MTcyLDEwIEBAIC0g
KHZvaWQpZGVhbGxvYwogICAgIGlmIChbW3NlbGYgY2xhc3NdIHNob3VsZEluY2x1ZGVJbldlYktp
dFN0YXRpc3RpY3NdKQogICAgICAgICAtLVdlYlZpZXdDb3VudDsKIAorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaWYgKFtzZWxmIF9uZWVkc0ZyYW1lTG9hZERlbGVnYXRlUmV0YWluUXVpcmtdKQog
ICAgICAgICBbX3ByaXZhdGUtPmZyYW1lTG9hZERlbGVnYXRlIHJlbGVhc2VdOworI2VuZGlmCiAg
ICAgICAgIAogICAgIFtfcHJpdmF0ZSByZWxlYXNlXTsKICAgICAvLyBbc3VwZXIgZGVhbGxvY10g
Y2FuIGVuZCB1cCBkaXNwYXRjaGluZyBhZ2FpbnN0IF9wcml2YXRlICgzNDY2MDgyKQpAQCAtMzc3
Nyw2ICs1MTk3LDEzIEBAIC0gKHZvaWQpY2xvc2UKIHsKICAgICAvLyBfY2xvc2UgZXhpc3RlZCBm
aXJzdCwgYW5kIHNvbWUgY2xpZW50cyBtaWdodCBiZSBjYWxsaW5nIG9yIG92ZXJyaWRpbmcgaXQs
IHNvIGNhbGwgdGhyb3VnaC4KICAgICBbc2VsZiBfY2xvc2VdOworCisjaWYgUExBVEZPUk0oSU9T
KSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKF9wcml2YXRlLT5sYXll
ckZsdXNoQ29udHJvbGxlcikgeworICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJGbHVzaENvbnRyb2xs
ZXItPmludmFsaWRhdGUoKTsKKyAgICAgICAgX3ByaXZhdGUtPmxheWVyRmx1c2hDb250cm9sbGVy
ID0gbnVsbHB0cjsKKyAgICB9CisjZW5kaWYKIH0KIAogLSAodm9pZClzZXRTaG91bGRDbG9zZVdp
dGhXaW5kb3c6KEJPT0wpY2xvc2UKQEAgLTM3ODksNiArNTIxNiw3IEBAIC0gKEJPT0wpc2hvdWxk
Q2xvc2VXaXRoV2luZG93CiAgICAgcmV0dXJuIF9wcml2YXRlLT5zaG91bGRDbG9zZVdpdGhXaW5k
b3c7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLy8gRklYTUU6IFVzZSBBcHBLaXQgY29uc3Rh
bnRzIGZvciB0aGVzZSB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4KIHN0YXRpYyBOU1N0cmluZyAq
IGNvbnN0IHdpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzTm90aWZpY2F0aW9uID0gQCJO
U1dpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzTm90aWZpY2F0aW9uIjsKIHN0YXRpYyBO
U1N0cmluZyAqIGNvbnN0IGJhY2tpbmdQcm9wZXJ0eU9sZFNjYWxlRmFjdG9yS2V5ID0gQCJOU0Jh
Y2tpbmdQcm9wZXJ0eU9sZFNjYWxlRmFjdG9yS2V5IjsgCkBAIC0zODY4LDYgKzUyOTYsNyBAQCAt
ICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwogICAgICAgICBb
c2VsZiBhZGRXaW5kb3dPYnNlcnZlcnNGb3JXaW5kb3c6d2luZG93XTsKICAgICB9CiB9CisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKIAogLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93CiB7CkBA
IC0zODgyLDE0ICs1MzExLDI1IEBAIC0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwogICAgICAg
ICBfcHJpdmF0ZS0+cGFnZS0+c2V0Q2FuU3RhcnRNZWRpYSh0cnVlKTsKICAgICAgICAgX3ByaXZh
dGUtPnBhZ2UtPmRpZE1vdmVPbnNjcmVlbigpOwogICAgICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0
SXNJbldpbmRvdyh0cnVlKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgV2ViUHJlZmVy
ZW5jZXMgKnByZWZlcmVuY2VzID0gW3NlbGYgcHJlZmVyZW5jZXNdOworICAgICAgICBOU1dpbmRv
dyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICAgICAgW3dpbmRvdyBzZXRUaWxlQm9yZGVy
c1Zpc2libGU6W3ByZWZlcmVuY2VzIHNob3dEZWJ1Z0JvcmRlcnNdXTsKKyAgICAgICAgW3dpbmRv
dyBzZXRUaWxlUGFpbnRDb3VudHNWaXNpYmxlOltwcmVmZXJlbmNlcyBzaG93UmVwYWludENvdW50
ZXJdXTsKKyAgICAgICAgW3dpbmRvdyBzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOltwcmVm
ZXJlbmNlcyBhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkXV07CisjZW5kaWYKICAgICB9CiAgICAg
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0RGV2aWNlU2NhbGVG
YWN0b3IoW3NlbGYgX2RldmljZVNjYWxlRmFjdG9yXSk7CisjZW5kaWYKIAogICAgIFtzZWxmIF91
cGRhdGVBY3RpdmVTdGF0ZV07CiAgICAgW3NlbGYgX3VwZGF0ZVZpc2liaWxpdHlTdGF0ZV07CiB9
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClkb1dpbmRvd0RpZENoYW5nZVNjcmVlbgog
ewogICAgIGlmIChfcHJpdmF0ZSAmJiBfcHJpdmF0ZS0+cGFnZSkKQEAgLTM5NDgsNiArNTM4OCwy
OSBAQCAtICh2b2lkKV93aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllczooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KIAogICAgIF9wcml2YXRlLT5wYWdlLT5zZXREZXZpY2VTY2Fs
ZUZhY3RvcihuZXdCYWNraW5nU2NhbGVGYWN0b3IpOwogfQorI2Vsc2UKKy0gKHZvaWQpX3dha1dp
bmRvd1NjcmVlblNjYWxlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sK
KyAgICBbc2VsZiBfdXBkYXRlU2NyZWVuU2NhbGVGcm9tV2luZG93XTsKK30KKworLSAodm9pZClf
d2FrV2luZG93VmlzaWJpbGl0eUNoYW5nZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Cit7CisgICAgaWYgKFtub3RpZmljYXRpb24gb2JqZWN0XSA9PSBbc2VsZiB3aW5kb3ddKQorICAg
ICAgICBbc2VsZiBfdXBkYXRlVmlzaWJpbGl0eVN0YXRlXTsKK30KKworLSAodm9pZClfdXBkYXRl
U2NyZWVuU2NhbGVGcm9tV2luZG93Cit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwor
ICAgIGlmIChXQUtXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd10pCisgICAgICAgIHNjYWxl
RmFjdG9yID0gW3dpbmRvdyBzY3JlZW5TY2FsZV07CisgICAgZWxzZQorICAgICAgICBzY2FsZUZh
Y3RvciA9IFdLR2V0U2NyZWVuU2NhbGVGYWN0b3IoKTsKKworICAgIF9wcml2YXRlLT5wYWdlLT5z
ZXREZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3Rvcik7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQogCiAtICh2b2lkKXNldFByZWZlcmVuY2VzOihXZWJQcmVmZXJlbmNlcyAqKXByZWZzCiB7
CkBAIC0zOTk5LDYgKzU0NjIsOSBAQCAtIChOU1N0cmluZyAqKXByZWZlcmVuY2VzSWRlbnRpZmll
cgogLSAodm9pZClzZXRVSURlbGVnYXRlOmRlbGVnYXRlCiB7CiAgICAgX3ByaXZhdGUtPlVJRGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgW19wcml2YXRlLT5VSURl
bGVnYXRlRm9yd2FyZGVyIGNsZWFyVGFyZ2V0XTsKKyNlbmRpZgogICAgIFtfcHJpdmF0ZS0+VUlE
ZWxlZ2F0ZUZvcndhcmRlciByZWxlYXNlXTsKICAgICBfcHJpdmF0ZS0+VUlEZWxlZ2F0ZUZvcndh
cmRlciA9IG5pbDsKIH0KQEAgLTQwMDgsOCArNTQ3NCwyNSBAQCAtIChpZClVSURlbGVnYXRlCiAg
ICAgcmV0dXJuIF9wcml2YXRlLT5VSURlbGVnYXRlOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQor
LSAoaWQpX3Jlc291cmNlTG9hZERlbGVnYXRlRm9yd2FyZGVyCit7CisgICAgaWYgKF9wcml2YXRl
LT5jbG9zaW5nKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKCFfcHJpdmF0ZS0+cmVz
b3VyY2VQcm9ncmVzc0RlbGVnYXRlRm9yd2FyZGVyKQorICAgICAgICBfcHJpdmF0ZS0+cmVzb3Vy
Y2VQcm9ncmVzc0RlbGVnYXRlRm9yd2FyZGVyID0gW1tfV2ViU2FmZUZvcndhcmRlciBhbGxvY10g
aW5pdFdpdGhUYXJnZXQ6W3NlbGYgcmVzb3VyY2VMb2FkRGVsZWdhdGVdIGRlZmF1bHRUYXJnZXQ6
W1dlYkRlZmF1bHRSZXNvdXJjZUxvYWREZWxlZ2F0ZSBzaGFyZWRSZXNvdXJjZUxvYWREZWxlZ2F0
ZV1dOworICAgIHJldHVybiBfcHJpdmF0ZS0+cmVzb3VyY2VQcm9ncmVzc0RlbGVnYXRlRm9yd2Fy
ZGVyOworfQorI2VuZGlmCisKIC0gKHZvaWQpc2V0UmVzb3VyY2VMb2FkRGVsZWdhdGU6IGRlbGVn
YXRlCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFtfcHJpdmF0ZS0+cmVzb3VyY2VQcm9ncmVz
c0RlbGVnYXRlRm9yd2FyZGVyIGNsZWFyVGFyZ2V0XTsKKyAgICBbX3ByaXZhdGUtPnJlc291cmNl
UHJvZ3Jlc3NEZWxlZ2F0ZUZvcndhcmRlciByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZS0+cmVzb3Vy
Y2VQcm9ncmVzc0RlbGVnYXRlRm9yd2FyZGVyID0gbmlsOworI2VuZGlmCiAgICAgX3ByaXZhdGUt
PnJlc291cmNlUHJvZ3Jlc3NEZWxlZ2F0ZSA9IGRlbGVnYXRlOwogICAgIFtzZWxmIF9jYWNoZVJl
c291cmNlTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zXTsKIH0KQEAgLTQwMzMsNiArNTUxNiw5
IEBAIC0gKGlkKWRvd25sb2FkRGVsZWdhdGUKIC0gKHZvaWQpc2V0UG9saWN5RGVsZWdhdGU6ZGVs
ZWdhdGUKIHsKICAgICBfcHJpdmF0ZS0+cG9saWN5RGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgW19wcml2YXRlLT5wb2xpY3lEZWxlZ2F0ZUZvcndhcmRlciBjbGVh
clRhcmdldF07CisjZW5kaWYKICAgICBbX3ByaXZhdGUtPnBvbGljeURlbGVnYXRlRm9yd2FyZGVy
IHJlbGVhc2VdOwogICAgIF9wcml2YXRlLT5wb2xpY3lEZWxlZ2F0ZUZvcndhcmRlciA9IG5pbDsK
IH0KQEAgLTQwNDIsMTcgKzU1MjgsMzUgQEAgLSAoaWQpcG9saWN5RGVsZWdhdGUKICAgICByZXR1
cm4gX3ByaXZhdGUtPnBvbGljeURlbGVnYXRlOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAo
aWQpX2ZyYW1lTG9hZERlbGVnYXRlRm9yd2FyZGVyCit7CisgICAgaWYgKF9wcml2YXRlLT5jbG9z
aW5nKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKCFfcHJpdmF0ZS0+ZnJhbWVMb2Fk
RGVsZWdhdGVGb3J3YXJkZXIpCisgICAgICAgIF9wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0ZUZv
cndhcmRlciA9IFtbX1dlYlNhZmVGb3J3YXJkZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OltzZWxm
IGZyYW1lTG9hZERlbGVnYXRlXSBkZWZhdWx0VGFyZ2V0OltXZWJEZWZhdWx0RnJhbWVMb2FkRGVs
ZWdhdGUgc2hhcmVkRnJhbWVMb2FkRGVsZWdhdGVdXTsKKyAgICByZXR1cm4gX3ByaXZhdGUtPmZy
YW1lTG9hZERlbGVnYXRlRm9yd2FyZGVyOworfQorI2VuZGlmCisKIC0gKHZvaWQpc2V0RnJhbWVM
b2FkRGVsZWdhdGU6ZGVsZWdhdGUKIHsKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjk1MDY2MD4g
LSBEdWUgdG8gc29tZSBzdWJ0bGUgV2ViS2l0IGNoYW5nZXMgLSBwcmVzdW1hYmx5IHRvIGRlbGVn
YXRlIGNhbGxiYWNrIGJlaGF2aW9yIC0gd2UndmUKICAgICAvLyB1bmNvbnZlcmVkIGEgbGF0ZW50
IGJ1ZyBpbiBhdCBsZWFzdCBvbmUgV2ViS2l0IGFwcCB3aGVyZSB0aGUgZGVsZWdhdGUgd2Fzbid0
IHByb3Blcmx5IHJldGFpbmVkIGJ5IHRoZSBhcHAgYW5kCiAgICAgLy8gd2FzIGRlYWxsb2MnZWQg
YmVmb3JlIGJlaW5nIGNsZWFyZWQuCiAgICAgLy8gVGhpcyBpcyBhbiBlZmZvcnQgdG8ga2VlcCBz
dWNoIGFwcHMgd29ya2luZyBmb3Igbm93LgorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKFtz
ZWxmIF9uZWVkc0ZyYW1lTG9hZERlbGVnYXRlUmV0YWluUXVpcmtdKSB7CiAgICAgICAgIFtkZWxl
Z2F0ZSByZXRhaW5dOwogICAgICAgICBbX3ByaXZhdGUtPmZyYW1lTG9hZERlbGVnYXRlIHJlbGVh
c2VdOwogICAgIH0KLSAgICAKKyNlbHNlCisgICAgW19wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0
ZUZvcndhcmRlciBjbGVhclRhcmdldF07CisgICAgW19wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0
ZUZvcndhcmRlciByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZS0+ZnJhbWVMb2FkRGVsZWdhdGVGb3J3
YXJkZXIgPSBuaWw7CisjZW5kaWYKKwogICAgIF9wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0ZSA9
IGRlbGVnYXRlOwogICAgIFtzZWxmIF9jYWNoZUZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRp
b25zXTsKIApAQCAtNDExMiw3ICs1NjE2LDE3IEBAIC0gKEJPT0wpZ29CYWNrCiAgICAgaWYgKCFf
cHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAorI2lmIFBMQVRGT1JNKElP
UykKKyAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwgIVdlYlRocmVhZElzRW5hYmxlZCgp
KQorI2VuZGlmCiAgICAgcmV0dXJuIF9wcml2YXRlLT5wYWdlLT5nb0JhY2soKTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIF9wcml2YXRlLT5wYWdlLT5n
b0JhY2soKTsKKyAgICB9KTsKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzkxNTc1NzI+
IC1bV2ViVmlldyBnb0JhY2tdIGFuZCAtZ29Gb3J3YXJkIGFsd2F5cyByZXR1cm4gWUVTIHdoZW4g
Y2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkCisgICAgcmV0dXJuIFlFUzsKKyNlbmRpZgogfQog
CiAtIChCT09MKWdvRm9yd2FyZApAQCAtNDEyMCw3ICs1NjM0LDE3IEBAIC0gKEJPT0wpZ29Gb3J3
YXJkCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuIE5POwogCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCAhV2ViVGhyZWFk
SXNFbmFibGVkKCkpCisjZW5kaWYKICAgICByZXR1cm4gX3ByaXZhdGUtPnBhZ2UtPmdvRm9yd2Fy
ZCgpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgX3By
aXZhdGUtPnBhZ2UtPmdvRm9yd2FyZCgpOworICAgIH0pOworICAgIC8vIEZJWE1FOiA8cmRhcjov
L3Byb2JsZW0vOTE1NzU3Mj4gLVtXZWJWaWV3IGdvQmFja10gYW5kIC1nb0ZvcndhcmQgYWx3YXlz
IHJldHVybiBZRVMgd2hlbiBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQKKyAgICByZXR1cm4g
WUVTOworI2VuZGlmCiB9CiAKIC0gKEJPT0wpZ29Ub0JhY2tGb3J3YXJkSXRlbTooV2ViSGlzdG9y
eUl0ZW0gKilpdGVtCkBAIC00MzIyLDYgKzU4NDYsNyBAQCAtIChOU1N0cmluZyAqKWN1c3RvbVRl
eHRFbmNvZGluZ05hbWUKIAogLSAoTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzY3JpcHQKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIC8vIFJldHVybiBzdGF0ZW1lbnRzIGFyZSBvbmx5IHZhbGlkIGluIGEgZnVuY3Rpb24gYnV0
IHNvbWUgYXBwbGljYXRpb25zIHBhc3MgaW4gc2NyaXB0cwogICAgIC8vIHByZWZpeGVkIHdpdGgg
cmV0dXJuICg8cmRhcjovL3Byb2JsZW1zLzUxMDM3MjAmNDYxNjg2MD4pIHNpbmNlIG9sZGVyIFdl
YktpdCB2ZXJzaW9ucwogICAgIC8vIHNpbGVudGx5IGlnbm9yZWQgdGhlIHJldHVybi4gSWYgdGhl
IGFwcGxpY2F0aW9uIGlzIGxpbmtlZCBhZ2FpbnN0IGFuIGVhcmxpZXIgdmVyc2lvbgpAQCAtNDMz
MSw2ICs1ODU2LDcgQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
RnJvbVN0cmluZzooTlNTdHJpbmcgKilzY3JpcHQKICAgICAgICAgaWYgKHJldHVyblN0cmluZ1Jh
bmdlLmxlbmd0aCAmJiAhcmV0dXJuU3RyaW5nUmFuZ2UubG9jYXRpb24pCiAgICAgICAgICAgICBz
Y3JpcHQgPSBbc2NyaXB0IHN1YnN0cmluZ0Zyb21JbmRleDpyZXR1cm5TdHJpbmdSYW5nZS5sb2Nh
dGlvbiArIHJldHVyblN0cmluZ1JhbmdlLmxlbmd0aF07CiAgICAgfQorI2VuZGlmCiAKICAgICBO
U1N0cmluZyAqcmVzdWx0ID0gW1tzZWxmIG1haW5GcmFtZV0gX3N0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHRGcm9tU3RyaW5nOnNjcmlwdF07CiAgICAgLy8gVGhlIG9ubHkgd2F5IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nIGNhbiByZXR1cm4gbmlsIGlzIGlmIHRoZSBm
cmFtZSB3YXMgcmVtb3ZlZCBieSB0aGUgc2NyaXB0CkBAIC00MzcwLDE3ICs1ODk2LDIxIEBAIC0g
KHZvaWQpc2V0SG9zdFdpbmRvdzooTlNXaW5kb3cgKilob3N0V2luZG93CiAgICAgICAgIHJldHVy
bjsKIAogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkKICAgICAgICAg
W1tba2l0KGZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gdmlld1dpbGxNb3ZlVG9Ib3N0
V2luZG93Omhvc3RXaW5kb3ddOwogICAgIGlmIChfcHJpdmF0ZS0+aG9zdFdpbmRvdyAmJiBbc2Vs
ZiB3aW5kb3ddICE9IF9wcml2YXRlLT5ob3N0V2luZG93KQogICAgICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRv
d1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6X3ByaXZhdGUtPmhvc3RXaW5kb3ddOwogICAg
IGlmIChob3N0V2luZG93KQogICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5kb3dXaWxsQ2xv
c2U6KSBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVjdDpob3N0V2luZG93
XTsKKyNlbmRpZgogICAgIFtfcHJpdmF0ZS0+aG9zdFdpbmRvdyByZWxlYXNlXTsKICAgICBfcHJp
dmF0ZS0+aG9zdFdpbmRvdyA9IFtob3N0V2luZG93IHJldGFpbl07CiAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KGNvcmVGcmFtZSkpCiAgICAgICAgIFtbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVu
dFZpZXddIHZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93XTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IF9wcml2YXRlLT5wYWdlLT5zZXREZXZpY2VTY2FsZUZhY3Rvcihbc2VsZiBfZGV2aWNlU2NhbGVG
YWN0b3JdKTsKKyNlbmRpZgogfQogCiAtIChOU1dpbmRvdyAqKWhvc3RXaW5kb3cKQEAgLTQ1MTgs
OSArNjA0OCwxMiBAQCAtIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCiAgICAgLy8gVGhpcyB3
b3JrcyB0b2dldGhlciB3aXRoIHNldE5leHRLZXlWaWV3IHRvIHNwbGljZSB0aGUgV2ViVmlldyBp
bnRvCiAgICAgLy8gdGhlIGtleSBsb29wIHNpbWlsYXIgdG8gdGhlIHdheSBOU1Njcm9sbFZpZXcg
ZG9lcyB0aGlzLiBOb3RlIHRoYXQKICAgICAvLyBXZWJGcmFtZVZpZXcgaGFzIHZlcnkgc2ltaWxh
ciBjb2RlLgorI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxm
IHdpbmRvd107CisjZW5kaWYKICAgICBXZWJGcmFtZVZpZXcgKm1haW5GcmFtZVZpZXcgPSBbW3Nl
bGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1Jl
c3BvbmRlciAqcHJldmlvdXNGaXJzdFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIF9vbGRGaXJz
dFJlc3BvbmRlckJlZm9yZUJlY29taW5nXTsKICAgICBCT09MIGZyb21PdXRzaWRlID0gIVtwcmV2
aW91c0ZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dIHx8ICghWyhO
U1ZpZXcgKilwcmV2aW91c0ZpcnN0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOnNlbGZdICYmIHBy
ZXZpb3VzRmlyc3RSZXNwb25kZXIgIT0gc2VsZik7CiAKQEAgLTQ1MzYsMTMgKzYwNjksMTYgQEAg
LSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBO
TzsKICAgICB9CisjZW5kaWYKIAogICAgIGlmIChbbWFpbkZyYW1lVmlldyBhY2NlcHRzRmlyc3RS
ZXNwb25kZXJdKSB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgX3ByaXZhdGUtPmJlY29t
aW5nRmlyc3RSZXNwb25kZXIgPSBZRVM7CiAgICAgICAgIF9wcml2YXRlLT5iZWNvbWluZ0ZpcnN0
UmVzcG9uZGVyRnJvbU91dHNpZGUgPSBmcm9tT3V0c2lkZTsKICAgICAgICAgW3dpbmRvdyBtYWtl
Rmlyc3RSZXNwb25kZXI6bWFpbkZyYW1lVmlld107CiAgICAgICAgIF9wcml2YXRlLT5iZWNvbWlu
Z0ZpcnN0UmVzcG9uZGVyRnJvbU91dHNpZGUgPSBOTzsKICAgICAgICAgX3ByaXZhdGUtPmJlY29t
aW5nRmlyc3RSZXNwb25kZXIgPSBOTzsKKyNlbmRpZgogICAgICAgICByZXR1cm4gWUVTOwogICAg
IH0gCiAKQEAgLTQ2MTYsNiArNjE1Miw3IEBAIC0gKGRvdWJsZSllc3RpbWF0ZWRQcm9ncmVzcwog
ICAgIHJldHVybiBfcHJpdmF0ZS0+cGFnZS0+cHJvZ3Jlc3MoKS5lc3RpbWF0ZWRQcm9ncmVzcygp
OwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TQXJyYXkgKilwYXN0ZWJvYXJkVHlwZXNG
b3JTZWxlY3Rpb24KIHsKICAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50Vmll
dyA9IFtbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3
XTsKQEAgLTQ2NzMsNiArNjIxMCw3IEBAIC0gKHZvaWQpcmVtb3ZlRHJhZ0NhcmV0CiAgICAgICAg
IHBhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VuZGVkKCk7CiAjZW5kaWYKIH0KKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogCiAtICh2b2lkKXNldE1haW5GcmFtZVVSTDooTlNTdHJpbmcgKilV
UkxTdHJpbmcKIHsKQEAgLTQ3MDYsMTAgKzYyNDQsMjMgQEAgLSAoTlNTdHJpbmcgKiltYWluRnJh
bWVUaXRsZQogICAgIHJldHVybiAobWFpbkZyYW1lVGl0bGUgIT0gbmlsKSA/IG1haW5GcmFtZVRp
dGxlIDogKE5TU3RyaW5nICopQCIiOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TSW1h
Z2UgKiltYWluRnJhbWVJY29uCiB7CiAgICAgcmV0dXJuIFtbV2ViSWNvbkRhdGFiYXNlIHNoYXJl
ZEljb25EYXRhYmFzZV0gaWNvbkZvclVSTDpbW1tbc2VsZiBtYWluRnJhbWVdIF9kYXRhU291cmNl
XSBfVVJMXSBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXSB3aXRoU2l6ZTpXZWJJY29uU21hbGxT
aXplXTsKIH0KKyNlbHNlCistIChOU1VSTCAqKW1haW5GcmFtZUljb25VUkwKK3sKKyAgICBXZWJG
cmFtZSAqbWFpbkZyYW1lID0gW3NlbGYgbWFpbkZyYW1lXTsKKyAgICBGcmFtZSAqY29yZU1haW5G
cmFtZSA9IGNvcmUobWFpbkZyYW1lKTsKKyAgICBpZiAoIWNvcmVNYWluRnJhbWUpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBOU1VSTCAqdXJsID0gKE5TVVJMICopY29yZU1haW5GcmFtZS0+
bG9hZGVyKCkuaWNvbigpLnVybCgpOworICAgIHJldHVybiB1cmw7Cit9CisjZW5kaWYKIAogLSAo
RE9NRG9jdW1lbnQgKiltYWluRnJhbWVEb2N1bWVudAogewpAQCAtNDgwMyw3ICs2MzU0LDEyIEBA
IC0gKElCQWN0aW9uKXRha2VTdHJpbmdVUkxGcm9tOiBzZW5kZXIKIAogLSAoQk9PTCljYW5Hb0Jh
Y2sKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgV2ViVGhyZWFkTG9jaygpOworICAgIGlmICgh
X3ByaXZhdGUtPnBhZ2UpCisjZWxzZQogICAgIGlmICghX3ByaXZhdGUtPnBhZ2UgfHwgX3ByaXZh
dGUtPnBhZ2UtPmRlZmVyc0xvYWRpbmcoKSkKKyNlbmRpZgogICAgICAgICByZXR1cm4gTk87CiAK
ICAgICByZXR1cm4gISFfcHJpdmF0ZS0+cGFnZS0+YmFja0ZvcndhcmRDbGllbnQoKS0+YmFja0l0
ZW0oKTsKQEAgLTQ4MTEsNyArNjM2NywxMiBAQCAtIChCT09MKWNhbkdvQmFjawogCiAtIChCT09M
KWNhbkdvRm9yd2FyZAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBXZWJUaHJlYWRMb2NrKCk7
CisgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKKyNlbHNlCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFn
ZSB8fCBfcHJpdmF0ZS0+cGFnZS0+ZGVmZXJzTG9hZGluZygpKQorI2VuZGlmCiAgICAgICAgIHJl
dHVybiBOTzsKIAogICAgIHJldHVybiAhIV9wcml2YXRlLT5wYWdlLT5iYWNrRm9yd2FyZENsaWVu
dCgpLT5mb3J3YXJkSXRlbSgpOwpAQCAtNDgyOSwxMiArNjM5MCw1NSBAQCAtIChJQkFjdGlvbiln
b0ZvcndhcmQ6KGlkKXNlbmRlcgogCiAtIChJQkFjdGlvbilzdG9wTG9hZGluZzooaWQpc2VuZGVy
CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChXZWJUaHJlYWROb3RDdXJyZW50KCkpIHsK
KyAgICAgICAgX3ByaXZhdGUtPmlzU3RvcHBpbmcgPSB0cnVlOworICAgICAgICBXZWJUaHJlYWRT
ZXRTaG91bGRZaWVsZCgpOworICAgIH0KKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgX3By
aXZhdGUtPmlzU3RvcHBpbmcgPSBmYWxzZTsKKyNlbmRpZgogICAgIFtbc2VsZiBtYWluRnJhbWVd
IHN0b3BMb2FkaW5nXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgfSk7CisjZW5kaWYKK30KKwor
I2lmIFBMQVRGT1JNKElPUykKKy0gKHZvaWQpc3RvcExvYWRpbmdBbmRDbGVhcgoreworICAgIGlm
IChXZWJUaHJlYWROb3RDdXJyZW50KCkgJiYgIVdlYlRocmVhZElzTG9ja2VkKCkpIHsKKyAgICAg
ICAgX3ByaXZhdGUtPmlzU3RvcHBpbmcgPSB0cnVlOworICAgICAgICBXZWJUaHJlYWRTZXRTaG91
bGRZaWVsZCgpOworICAgIH0KKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgX3ByaXZhdGUt
PmlzU3RvcHBpbmcgPSBmYWxzZTsKKworICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBt
YWluRnJhbWVdOworICAgICAgICBbZnJhbWUgc3RvcExvYWRpbmddOworICAgICAgICBjb3JlKGZy
YW1lKS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLmVuZCgpOyAvLyBFbmQgdG8gZmlu
aXNoIHBhcnNpbmcgYW5kIGRpc3BsYXkgaW1tZWRpYXRlbHkKKworICAgICAgICBXZWJGcmFtZVZp
ZXcgKm1haW5GcmFtZVZpZXcgPSBbZnJhbWUgZnJhbWVWaWV3XTsKKyAgICAgICAgZmxvYXQgc2Nh
bGUgPSBbW21haW5GcmFtZVZpZXcgZG9jdW1lbnRWaWV3XSBzY2FsZV07CisgICAgICAgIFdlYlBs
YWluV2hpdGVWaWV3ICpwbGFpbldoaXRlVmlldyA9IFtbV2ViUGxhaW5XaGl0ZVZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdF07CisgICAgICAgIFtwbGFpbldoaXRlVmlldyBzZXRT
Y2FsZTpzY2FsZV07CisgICAgICAgIFtwbGFpbldoaXRlVmlldyBzZXRGcmFtZTpbbWFpbkZyYW1l
VmlldyBib3VuZHNdXTsKKyAgICAgICAgW21haW5GcmFtZVZpZXcgX3NldERvY3VtZW50Vmlldzpw
bGFpbldoaXRlVmlld107CisgICAgICAgIFtwbGFpbldoaXRlVmlldyBzZXROZWVkc0Rpc3BsYXk6
WUVTXTsKKyAgICAgICAgW3BsYWluV2hpdGVWaWV3IHJlbGVhc2VdOworICAgIH0pOwogfQorI2Vu
ZGlmCiAKIC0gKElCQWN0aW9uKXJlbG9hZDooaWQpc2VuZGVyCiB7CisjaWYgUExBVEZPUk0oSU9T
KQorICAgIFdlYlRocmVhZFJ1biheeworI2VuZGlmICAgICAgICAgICAgCiAgICAgW1tzZWxmIG1h
aW5GcmFtZV0gcmVsb2FkXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgfSk7CisjZW5kaWYgICAg
ICAgICAgICAKIH0KIAogLSAoSUJBY3Rpb24pcmVsb2FkRnJvbU9yaWdpbjooaWQpc2VuZGVyCkBA
IC00ODc0LDYgKzY0NzgsNyBAQCAtIChJQkFjdGlvbiltYWtlVGV4dFN0YW5kYXJkU2l6ZTooaWQp
c2VuZGVyCiAgICByZXR1cm4gW3NlbGYgX3Jlc2V0Wm9vbTpzZW5kZXIgaXNUZXh0T25seTohW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpXZWJLaXREZWJ1
Z0Z1bGxQYWdlWm9vbVByZWZlcmVuY2VLZXldXTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAt
IChJQkFjdGlvbil0b2dnbGVTbWFydEluc2VydERlbGV0ZTooaWQpc2VuZGVyCiB7CiAgICAgW3Nl
bGYgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOiFbc2VsZiBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWRdXTsKQEAgLTQ5OTAsMTEgKzY1OTUsMTMgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRl
cmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbQogICAgIEJP
T0wgcmVzdWx0ID0gW3NlbGYgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0
ZTppdGVtXTsKICAgICByZXR1cm4gQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKHJlc3Vs
dCwgc2VsZiwgQHNlbGVjdG9yKHdlYlZpZXc6dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpkZWZh
dWx0VmFsaWRhdGlvbjopLCBpdGVtLCByZXN1bHQpOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlBlbmRpbmdQdWJsaWMp
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClzY2hlZHVsZUluUnVuTG9vcDooTlNSdW5M
b29wICopcnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKW1vZGUKIHsKICNpZiBVU0UoQ0ZORVRX
T1JLKQpAQCAtNTAxNiw2ICs2NjIzLDcgQEAgLSAodm9pZCl1bnNjaGVkdWxlRnJvbVJ1bkxvb3A6
KE5TUnVuTG9vcCAqKXJ1bkxvb3AgZm9yTW9kZTooTlNTdHJpbmcgKiltb2RlCiAgICAgaWYgKHJ1
bkxvb3AgJiYgbW9kZSkKICAgICAgICAgY29yZShzZWxmKS0+cmVtb3ZlU2NoZWR1bGVQYWlyKFNj
aGVkdWxlUGFpcjo6Y3JlYXRlKHNjaGVkdWxlUGFpclJ1bkxvb3AsIChDRlN0cmluZ1JlZiltb2Rl
KSk7CiB9CisjZW5kaWYKIAogc3RhdGljIEJPT0wgZmluZFN0cmluZyhOU1ZpZXcgPFdlYkRvY3Vt
ZW50U2VhcmNoaW5nPiAqc2VhcmNoVmlldywgTlNTdHJpbmcgKnN0cmluZywgV2ViRmluZE9wdGlv
bnMgb3B0aW9ucykKIHsKQEAgLTUwOTgsMTAgKzY3MDYsMTIgQEAgLSAodm9pZClzZXRNYWluRnJh
bWVEb2N1bWVudFJlYWR5OihCT09MKW1haW5GcmFtZURvY3VtZW50UmVhZHkKICAgICAvLyB3ZSB1
c2UgdGhpcyB0byB0ZWxsIE5TVHJlZUNvbnRyb2xsZXIgdG8gcmVzZXQgaXRzIG9ic2VydmVycyBh
bmQgY2xlYXIgaXRzIHN0YXRlCiAgICAgaWYgKF9wcml2YXRlLT5tYWluRnJhbWVEb2N1bWVudFJl
YWR5ID09IG1haW5GcmFtZURvY3VtZW50UmVhZHkpCiAgICAgICAgIHJldHVybjsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIFtzZWxmIF93aWxsQ2hhbmdlVmFsdWVGb3JLZXk6X1dlYk1haW5GcmFt
ZURvY3VtZW50S2V5XTsKICAgICBfcHJpdmF0ZS0+bWFpbkZyYW1lRG9jdW1lbnRSZWFkeSA9IG1h
aW5GcmFtZURvY3VtZW50UmVhZHk7CiAgICAgW3NlbGYgX2RpZENoYW5nZVZhbHVlRm9yS2V5Ol9X
ZWJNYWluRnJhbWVEb2N1bWVudEtleV07CiAgICAgLy8gdGhpcyB3aWxsIGNhdXNlIG9ic2VydmVy
cyB0byBjYWxsIG1haW5GcmFtZURvY3VtZW50IHdoZXJlIHRoaXMgZmxhZyB3aWxsIGJlIGNoZWNr
ZWQKKyNlbmRpZgogfQogCiAtICh2b2lkKXNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50czoo
Qk9PTCljeWNsZXNFbGVtZW50cwpAQCAtNTE1MSw2ICs2NzYxLDcgQEAgLSAoQk9PTClzaG91bGRD
bG9zZQogICAgIHJldHVybiBjb3JlRnJhbWUtPmxvYWRlcigpLnNob3VsZENsb3NlKCk7CiB9CiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVz
Y0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiB7CiAg
ICAgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjID0gMDsKQEAgLTUyMTgsNiArNjgyOSw3
IEBAIC0gKE5TQXBwbGVFdmVudERlc2NyaXB0b3IgKilhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29yZUZy
YW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9i
YWxFeGVjKCkpOwogICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShjb3JlRnJhbWUtPnNjcmlw
dCgpLmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwg
cmVzdWx0KTsKIH0KKyNlbmRpZgogCiAtIChCT09MKWNhbk1hcmtBbGxUZXh0TWF0Y2hlcwogewpA
QCAtNTMyOCw2ICs2OTQwLDEzIEBAIC0gKHZvaWQpc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERP
TVJhbmdlICopcmFuZ2UKICAgICBbW1tbcmFuZ2Ugc3RhcnRDb250YWluZXJdIG93bmVyRG9jdW1l
bnRdIHdlYkZyYW1lXSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6cmFuZ2VdOwogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorLSAodm9pZClzY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2Ug
KilyYW5nZSB3aXRoSW5zZXQ6KENHRmxvYXQpaW5zZXQKK3sKKyAgICBbW1tbcmFuZ2Ugc3RhcnRD
b250YWluZXJdIG93bmVyRG9jdW1lbnRdIHdlYkZyYW1lXSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2li
bGU6cmFuZ2Ugd2l0aEluc2V0Omluc2V0XTsKK30KKyNlbmRpZgorCiAtIChCT09MKWFsbG93c1Vu
ZG8KIHsKICAgICByZXR1cm4gX3ByaXZhdGUtPmFsbG93c1VuZG87CkBAIC01NDEwLDggKzcwMjks
MTYgQEAgLSAodm9pZClhZGRWaXNpdGVkTGlua3M6KE5TQXJyYXkgKil2aXNpdGVkTGlua3MKICAg
ICB9CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCistICh2b2lkKXJlbW92ZVZpc2l0ZWRMaW5rOihO
U1VSTCAqKXVybAoreworICAgIGNvcmUoc2VsZiktPmdyb3VwKCkucmVtb3ZlVmlzaXRlZExpbmso
dXJsKTsKK30KKyNlbmRpZgorCiBAZW5kCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogQGltcGxlbWVu
dGF0aW9uIFdlYlZpZXcgKFdlYlZpZXdQcmludGluZ1ByaXZhdGUpCiAKIC0gKGZsb2F0KV9oZWFk
ZXJIZWlnaHQKQEAgLTU1MzcsNiArNzE2NCw4IEBAIC0gKHZvaWQpcmVtb3ZlT2JzZXJ2ZXI6KE5T
T2JqZWN0ICopYW5PYnNlcnZlciBmb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGgKIAogQGVu
ZAogCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwogLy89PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KIC8vIEVkaXRpbmcKIApAQCAtNTU2NSw5ICs3MTk0LDExIEBAIC0gKERPTVJh
bmdlICopZWRpdGFibGVET01SYW5nZUZvclBvaW50OihOU1BvaW50KXBvaW50CiAKIC0gKEJPT0wp
X3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVudFJhbmdlIHRv
RE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25B
ZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCiB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBGSVhNRTogVGhpcyBxdWlyayBpcyBuZWVkZWQgZHVl
IHRvIDxyZGFyOi8vcHJvYmxlbS80OTg1MzIxPiAtIFdlIGNhbiBwaGFzZSBpdCBvdXQgb25jZSBB
cGVydHVyZSBjYW4gYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBvbiB0aGVpciBlbmQKICAgICBpZiAo
IVdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0FQRVJU
VVJFX1FVSVJLKSAmJiBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBp
c0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuQXBlcnR1cmUiXSkKICAgICAgICAgcmV0dXJuIFlF
UzsKKyNlbmRpZgogICAgIHJldHVybiBbW3NlbGYgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzpzZWxmIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Y3VycmVudFJhbmdlIHRv
RE9NUmFuZ2U6cHJvcG9zZWRSYW5nZSBhZmZpbml0eTpzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNl
bGVjdGluZzpmbGFnXTsKIH0KIApAQCAtNTY2Nyw4ICs3Mjk4LDkgQEAgLSAodm9pZClzZXRDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ6KEJPT0wpZmxhZwogICAgICAgICByZXR1cm47CiAK
ICAgICBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmbGFnOworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0Qm9v
bDpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgZm9yS2V5OldlYkNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZF07Ci0KKyNlbmRpZgogICAgIGlmIChbc2VsZiBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZF0pCiAgICAgICAgIFtbc2VsZiBjbGFzc10gX3ByZWZsaWdodFNw
ZWxsQ2hlY2tlcl07CiAgICAgZWxzZQpAQCAtNTY4MCw2ICs3MzEyLDcgQEAgLSAoQk9PTClpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZAogICAgIHJldHVybiAoY29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkICYmIFtzZWxmIF9jb250aW51b3VzQ2hlY2tpbmdBbGxvd2VkXSk7CiB9
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAoTlNJbnRlZ2VyKXNwZWxsQ2hlY2tlckRvY3VtZW50
VGFnCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+aGFzU3BlbGxDaGVja2VyRG9jdW1lbnRUYWcpIHsK
QEAgLTU2ODgsMTcgKzczMjEsMjIgQEAgLSAoTlNJbnRlZ2VyKXNwZWxsQ2hlY2tlckRvY3VtZW50
VGFnCiAgICAgfQogICAgIHJldHVybiBfcHJpdmF0ZS0+c3BlbGxDaGVja2VyRG9jdW1lbnRUYWc7
CiB9CisjZW5kaWYKIAogLSAoTlNVbmRvTWFuYWdlciAqKXVuZG9NYW5hZ2VyCiB7CiAgICAgaWYg
KCFfcHJpdmF0ZS0+YWxsb3dzVW5kbykKICAgICAgICAgcmV0dXJuIG5pbDsKIAorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgTlNVbmRvTWFuYWdlciAqdW5kb01hbmFnZXIgPSBbW3NlbGYgX2VkaXRp
bmdEZWxlZ2F0ZUZvcndhcmRlcl0gdW5kb01hbmFnZXJGb3JXZWJWaWV3OnNlbGZdOwogICAgIGlm
ICh1bmRvTWFuYWdlcikKICAgICAgICAgcmV0dXJuIHVuZG9NYW5hZ2VyOwogCiAgICAgcmV0dXJu
IFtzdXBlciB1bmRvTWFuYWdlcl07CisjZWxzZQorICAgIHJldHVybiBbW3NlbGYgX2VkaXRpbmdE
ZWxlZ2F0ZUZvcndhcmRlcl0gdW5kb01hbmFnZXJGb3JXZWJWaWV3OnNlbGZdOworI2VuZGlmCiB9
CiAKIC0gKHZvaWQpcmVnaXN0ZXJGb3JFZGl0aW5nRGVsZWdhdGVOb3RpZmljYXRpb246KE5TU3Ry
aW5nICopbmFtZSBzZWxlY3RvcjooU0VMKXNlbGVjdG9yCkBAIC01NzQ5LDYgKzczODcsNyBAQCAt
IChET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGVEZWNsYXJhdGlvbldpdGhUZXh0OihOU1N0
cmluZyAqKXRleHQKIAogQGVuZAogCisjaWYgIVBMQVRGT1JNKElPUykKIEBpbXBsZW1lbnRhdGlv
biBXZWJWaWV3IChXZWJWaWV3R3JhbW1hckNoZWNraW5nKQogCiAvLyBGSVhNRTogVGhpcyBtZXRo
b2Qgc2hvdWxkIGJlIG1lcmdlZCBpbnRvIFdlYlZpZXdFZGl0aW5nIHdoZW4gd2UncmUgbm90IGlu
IEFQSSBmcmVlemUKQEAgLTU3ODEsMzQgKzc0MjAsNTcgQEAgLSAodm9pZCl0b2dnbGVHcmFtbWFy
Q2hlY2tpbmc6KGlkKXNlbmRlcgogfQogCiBAZW5kCisjZW5kaWYKIAogQGltcGxlbWVudGF0aW9u
IFdlYlZpZXcgKFdlYlZpZXdUZXh0Q2hlY2tpbmcpCiAKIC0gKEJPT0wpaXNBdXRvbWF0aWNRdW90
ZVN1YnN0aXR1dGlvbkVuYWJsZWQKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIE5P
OworI2Vsc2UKICAgICByZXR1cm4gYXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOwor
I2VuZGlmCiB9CiAKIC0gKEJPT0wpaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZAogewor
I2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gTk87CisjZWxzZQogICAgIHJldHVybiBhdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDsKKyNlbmRpZgogfQogCiAtIChCT09MKWlzQXV0b21h
dGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0
dXJuIE5POworI2Vsc2UKICAgICByZXR1cm4gYXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJs
ZWQ7CisjZW5kaWYKIH0KIAogLSAoQk9PTClpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJs
ZWQKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIE5POworI2Vsc2UKICAgICByZXR1
cm4gYXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDsKKyNlbmRpZgogfQogCiAtIChCT09M
KWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZAogeworI2lmIFBMQVRGT1JNKElP
UykKKyAgICByZXR1cm4gTk87CisjZWxzZQogICAgIHJldHVybiBhdXRvbWF0aWNTcGVsbGluZ0Nv
cnJlY3Rpb25FbmFibGVkOworI2VuZGlmCiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAtICh2
b2lkKXNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnCiB7CiAg
ICAgaWYgKGF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCA9PSBmbGFnKQpAQCAtNTg3
OSw2ICs3NTQxLDggQEAgLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246
KGlkKXNlbmRlcgogICAgIFtzZWxmIHNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQ6IVtzZWxmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZF1dOwogfQogCisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViVmll
dyAoV2ViVmlld1VuZG9hYmxlRWRpdGluZykKQEAgLTU5NTgsNiArNzYyMiwyMiBAQCAtICh2b2lk
KV9wZXJmb3JtUmVzcG9uZGVyT3BlcmF0aW9uOihTRUwpc2VsZWN0b3Igd2l0aDooaWQpcGFyYW1l
dGVyCiAKIEZPUl9FQUNIX1JFU1BPTkRFUl9TRUxFQ1RPUihGT1JXQVJEKQogCisjaWYgUExBVEZP
Uk0oSU9TKQorRk9SV0FSRChjbGVhclRleHQpCitGT1JXQVJEKHRvZ2dsZUJvbGQpCitGT1JXQVJE
KHRvZ2dsZUl0YWxpYykKK0ZPUldBUkQodG9nZ2xlVW5kZXJsaW5lKQorCistICh2b2lkKWluc2Vy
dERpY3RhdGlvblBocmFzZXM6KE5TQXJyYXkgKilkaWN0YXRpb25QaHJhc2VzIG1ldGFkYXRhOihp
ZCltZXRhZGF0YQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3Rl
ZE9yTWFpbkZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmluc2VydERpY3RhdGlvblBocmFzZXModmVjdG9y
Rm9yRGljdGF0aW9uUGhyYXNlc0FycmF5KGRpY3RhdGlvblBocmFzZXMpLCBtZXRhZGF0YSk7Cit9
CisjZW5kaWYKKwogLSAodm9pZClpbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKICAgICBb
c2VsZiBfcGVyZm9ybVJlc3BvbmRlck9wZXJhdGlvbjpfY21kIHdpdGg6dGV4dF07CkBAIC02MDI1
LDYgKzc3MDUsNyBAQCBzdGF0aWMgV2ViRnJhbWVWaWV3ICpjb250YWluaW5nRnJhbWVWaWV3KE5T
VmlldyAqdmlldykKIAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYkZpbGVJbnRlcm5hbCkK
IAorI2lmICFQTEFURk9STShJT1MpCiAtIChmbG9hdClfZGV2aWNlU2NhbGVGYWN0b3IKIHsKICAg
ICBpZiAoX3ByaXZhdGUtPmN1c3RvbURldmljZVNjYWxlRmFjdG9yICE9IDApCkBAIC02MDM4LDYg
Kzc3MTksNyBAQCAtIChmbG9hdClfZGV2aWNlU2NhbGVGYWN0b3IKICAgICAgICAgcmV0dXJuIFto
b3N0V2luZG93IGJhY2tpbmdTY2FsZUZhY3Rvcl07CiAgICAgcmV0dXJuIFtbTlNTY3JlZW4gbWFp
blNjcmVlbl0gYmFja2luZ1NjYWxlRmFjdG9yXTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5l
IHVpbnQ2NF90IHJvdW5kVXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKIHsKQEAgLTYwNjYsNiAr
Nzc0OCw5IEBAICsgKHZvaWQpX3NldENhY2hlTW9kZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2Rl
bAogCiAgICAgTlNVSW50ZWdlciBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSAwOwogICAgIE5T
VUludGVnZXIgbnN1cmxDYWNoZURpc2tDYXBhY2l0eSA9IDA7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIHVuc2lnbmVkIHRpbGVMYXllclBvb2xDYXBhY2l0eSA9IDA7CisjZW5kaWYKIAogICAgIHN3
aXRjaCAoY2FjaGVNb2RlbCkgewogICAgIGNhc2UgV2ViQ2FjaGVNb2RlbERvY3VtZW50Vmlld2Vy
OiB7CkBAIC02MDgxLDYgKzc3NjYsMTAgQEAgKyAodm9pZClfc2V0Q2FjaGVNb2RlbDooV2ViQ2Fj
aGVNb2RlbCljYWNoZU1vZGVsCiAgICAgICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHkgPSAzMiAq
IDEwMjQgKiAxMDI0OwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDUxMikKICAgICAgICAg
ICAgIGNhY2hlVG90YWxDYXBhY2l0eSA9IDE2ICogMTAyNCAqIDEwMjQ7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHkgPSA0ICog
MTAyNCAqIDEwMjQ7IAorI2VuZGlmCiAKICAgICAgICAgY2FjaGVNaW5EZWFkQ2FwYWNpdHkgPSAw
OwogICAgICAgICBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CkBAIC02MDkxLDYgKzc3ODAsMTMg
QEAgKyAodm9pZClfc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbCljYWNoZU1vZGVsCiAgICAg
ICAgIC8vIEZvdW5kYXRpb24gZGlzayBjYWNoZSBjYXBhY2l0eSAoaW4gYnl0ZXMpCiAgICAgICAg
IG5zdXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPSBbbnN1cmxDYWNoZSBkaXNrQ2FwYWNpdHldOwogCisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICAvLyBUaWxlQ2FjaGUgbGF5ZXIgcG9vbCBjYXBhY2l0
eSwgaW4gYnl0ZXMuCisgICAgICAgIGlmIChtZW1TaXplID49IDEwMjQpCisgICAgICAgICAgICB0
aWxlTGF5ZXJQb29sQ2FwYWNpdHkgPSAyNCAqIDEwMjQgKiAxMDI0OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB0aWxlTGF5ZXJQb29sQ2FwYWNpdHkgPSAxMiAqIDEwMjQgKiAxMDI0OworI2Vu
ZGlmCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVu
dEJyb3dzZXI6IHsKQEAgLTYxMzcsOSArNzgzMywyMCBAQCArICh2b2lkKV9zZXRDYWNoZU1vZGVs
OihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWwKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbnN1
cmxDYWNoZURpc2tDYXBhY2l0eSA9IDIwICogMTAyNCAqIDEwMjQ7CiAKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIC8vIFRpbGVDYWNoZSBsYXllciBwb29sIGNhcGFjaXR5LCBpbiBieXRlcy4K
KyAgICAgICAgaWYgKG1lbVNpemUgPj0gMTAyNCkKKyAgICAgICAgICAgIHRpbGVMYXllclBvb2xD
YXBhY2l0eSA9IDI0ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRp
bGVMYXllclBvb2xDYXBhY2l0eSA9IDEyICogMTAyNCAqIDEwMjQ7CisjZW5kaWYKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgV2ViQ2FjaGVNb2RlbFByaW1hcnlXZWJCcm93c2VyOiB7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMg
PSBbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc107CisgICAgICAgIGludCBwcmVm
VmFsdWU7CisjZW5kaWYKICAgICAgICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMp
CiAgICAgICAgIC8vIChSZXNlYXJjaCBpbmRpY2F0ZXMgdGhhdCB2YWx1ZSAvIHBhZ2UgZHJvcHMg
c3Vic3RhbnRpYWxseSBhZnRlciAzIHBhZ2VzLikKICAgICAgICAgaWYgKG1lbVNpemUgPj0gMjA0
OCkKQEAgLTYxNTMsNiArNzg2MCwxNyBAQCArICh2b2lkKV9zZXRDYWNoZU1vZGVsOihXZWJDYWNo
ZU1vZGVsKWNhY2hlTW9kZWwKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFnZUNhY2hlQ2Fw
YWNpdHkgPSAxOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAvLyBDYWNoZSBwYWdlIGxl
c3MgYWdncmVzc2l2ZWx5IGluIGlPUyB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBiZWluZyBqZXR0
aXNvbmVkLgorICAgICAgICAvLyBGSVhNRSAoPHJkYXI6Ly9wcm9ibGVtLzExNzc5ODQ2Pik6IEF2
b2lkaW5nIGpldHRpc29uaW5nIHNob3VsZCBub3QgaGF2ZSB0byByZXF1aXJlIHJlZHVjaW5nIHRo
ZSBwYWdlIGNhY2hlIGNhcGFjaXR5LgorICAgICAgICAvLyBSZWR1Y2luZyB0aGUgY2FwYWNpdHkg
YnkgMSByZWR1Y2VzIG92ZXJhbGwgYmFjay1mb3J3YXJkIHBlcmZvcm1hbmNlLgorICAgICAgICBp
ZiAocGFnZUNhY2hlQ2FwYWNpdHkgPiAwKQorICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkg
LT0gMTsKKyAgICAgICAgcHJlZlZhbHVlID0gW3ByZWZlcmVuY2VzIF9wYWdlQ2FjaGVTaXplXTsK
KyAgICAgICAgaWYgKHByZWZWYWx1ZSA+PSAwKQorICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNp
dHkgPSBwcmVmVmFsdWU7CisjZW5kaWYKKwogICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2FwYWNp
dGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIC8vIChUZXN0aW5nIGluZGljYXRlcyB0aGF0IHZhbHVl
IC8gTUIgZGVwZW5kcyBoZWF2aWx5IG9uIGNvbnRlbnQgYW5kCiAgICAgICAgIC8vIGJyb3dzaW5n
IHBhdHRlcm4uIEV2ZW4gZ3Jvd3RoIGFib3ZlIDEyOE1CIGNhbiBoYXZlIHN1YnN0YW50aWFsIApA
QCAtNjE2Niw2ICs3ODg0LDEyIEBAICsgKHZvaWQpX3NldENhY2hlTW9kZWw6KFdlYkNhY2hlTW9k
ZWwpY2FjaGVNb2RlbAogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDUxMikKICAgICAgICAg
ICAgIGNhY2hlVG90YWxDYXBhY2l0eSA9IDMyICogMTAyNCAqIDEwMjQ7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgICAgIHByZWZWYWx1ZSA9IFtwcmVmZXJlbmNlcyBfb2JqZWN0Q2FjaGVTaXpl
XTsKKyAgICAgICAgaWYgKHByZWZWYWx1ZSA+PSAwKQorICAgICAgICAgICAgY2FjaGVUb3RhbENh
cGFjaXR5ID0gcHJlZlZhbHVlOworI2VuZGlmCisKICAgICAgICAgY2FjaGVNaW5EZWFkQ2FwYWNp
dHkgPSBjYWNoZVRvdGFsQ2FwYWNpdHkgLyA0OwogICAgICAgICBjYWNoZU1heERlYWRDYXBhY2l0
eSA9IGNhY2hlVG90YWxDYXBhY2l0eSAvIDI7CiAKQEAgLTYxNzUsNiArNzg5OSwxNiBAQCArICh2
b2lkKV9zZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWwKIAogICAgICAgICBk
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gNjA7CiAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIGlmIChtZW1TaXplID49IDEwMjQpCisgICAgICAgICAgICBuc3VybENhY2hlTWVt
b3J5Q2FwYWNpdHkgPSAxNiAqIDEwMjQgKiAxMDI0OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSA4ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIAor
ICAgICAgICBwcmVmVmFsdWUgPSBbcHJlZmVyZW5jZXMgX05TVVJMTWVtb3J5Q2FjaGVTaXplXTsK
KyAgICAgICAgaWYgKHByZWZWYWx1ZSA+PSAwKQorICAgICAgICAgICAgbnN1cmxDYWNoZU1lbW9y
eUNhcGFjaXR5ID0gcHJlZlZhbHVlOworI2Vsc2UKICAgICAgICAgLy8gRm91bmRhdGlvbiBtZW1v
cnkgY2FjaGUgY2FwYWNpdHkgKGluIGJ5dGVzKQogICAgICAgICAvLyAoVGhlc2UgdmFsdWVzIGFy
ZSBzbWFsbCBiZWNhdXNlIFdlYkNvcmUgZG9lcyBtb3N0IGNhY2hpbmcgaXRzZWxmLikKICAgICAg
ICAgaWYgKG1lbVNpemUgPj0gMTAyNCkKQEAgLTYxODUsNiArNzkxOSw3IEBAICsgKHZvaWQpX3Nl
dENhY2hlTW9kZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbAogICAgICAgICAgICAgbnN1cmxD
YWNoZU1lbW9yeUNhcGFjaXR5ID0gMSAqIDEwMjQgKiAxMDI0OwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSAgICAgIDUxMiAqIDEwMjQ7IAorI2Vu
ZGlmCiAKICAgICAgICAgLy8gRm91bmRhdGlvbiBkaXNrIGNhY2hlIGNhcGFjaXR5IChpbiBieXRl
cykKICAgICAgICAgaWYgKGRpc2tGcmVlU2l6ZSA+PSAxNjM4NCkKQEAgLTYyMDAsNiArNzkzNSwx
NyBAQCArICh2b2lkKV9zZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWwKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbnN1cmxDYWNoZURpc2tDYXBhY2l0eSA9IDUwICogMTAy
NCAqIDEwMjQ7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHByZWZWYWx1ZSA9IFtwcmVm
ZXJlbmNlcyBfTlNVUkxEaXNrQ2FjaGVTaXplXTsKKyAgICAgICAgaWYgKHByZWZWYWx1ZSA+PSAw
KQorICAgICAgICAgICAgbnN1cmxDYWNoZURpc2tDYXBhY2l0eSA9IHByZWZWYWx1ZTsKKworICAg
ICAgICAvLyBUaWxlQ2FjaGUgbGF5ZXIgcG9vbCBjYXBhY2l0eSwgaW4gYnl0ZXMuCisgICAgICAg
IGlmIChtZW1TaXplID49IDEwMjQpCisgICAgICAgICAgICB0aWxlTGF5ZXJQb29sQ2FwYWNpdHkg
PSA0OCAqIDEwMjQgKiAxMDI0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aWxlTGF5ZXJQ
b29sQ2FwYWNpdHkgPSAyNCAqIDEwMjQgKiAxMDI0OworI2VuZGlmCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBkZWZhdWx0OgpAQCAtNjIxMyw5ICs3OTU5LDIzIEBAICsgKHZvaWQpX3NldENh
Y2hlTW9kZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbAogICAgIG1lbW9yeUNhY2hlKCktPnNl
dENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBj
YWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIG1lbW9yeUNhY2hlKCktPnNldERlYWREZWNvZGVkRGF0
YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7CiAgICAg
cGFnZUNhY2hlKCktPnNldENhcGFjaXR5KHBhZ2VDYWNoZUNhcGFjaXR5KTsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgcGFnZUNhY2hlKCktPnNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVl
KTsKKyAgICBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSBzdGQ6Om1heChuc3VybENhY2hlTWVt
b3J5Q2FwYWNpdHksIFtuc3VybENhY2hlIG1lbW9yeUNhcGFjaXR5XSk7CisgICAgQ0ZVUkxDYWNo
ZVJlZiBjZkNhY2hlOworICAgIGlmIChbbnN1cmxDYWNoZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKF9DRlVSTENhY2hlKV0gJiYgKGNmQ2FjaGUgPSBbbnN1cmxDYWNoZSBfQ0ZVUkxDYWNo
ZV0pKQorICAgICAgICBDRlVSTENhY2hlU2V0TWVtb3J5Q2FwYWNpdHkoY2ZDYWNoZSwgbnN1cmxD
YWNoZU1lbW9yeUNhcGFjaXR5KTsKKyAgICBlbHNlCisgICAgICAgIFtuc3VybENhY2hlIHNldE1l
bW9yeUNhcGFjaXR5Om5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eV07CisjZWxzZQogICAgIFtuc3Vy
bENhY2hlIHNldE1lbW9yeUNhcGFjaXR5Om5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eV07CisjZW5k
aWYKICAgICBbbnN1cmxDYWNoZSBzZXREaXNrQ2FwYWNpdHk6bnN1cmxDYWNoZURpc2tDYXBhY2l0
eV07Ci0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgW1dlYlZpZXcgX3NldFRpbGVDYWNo
ZUxheWVyUG9vbENhcGFjaXR5OnRpbGVMYXllclBvb2xDYXBhY2l0eV07CisjZW5kaWYKKwogICAg
IHNfY2FjaGVNb2RlbCA9IGNhY2hlTW9kZWw7CiAgICAgc19kaWRTZXRDYWNoZU1vZGVsID0gWUVT
OwogfQpAQCAtNjI0MSw2ICs4MDAxLDEwIEBAICsgKFdlYkNhY2hlTW9kZWwpX21heENhY2hlTW9k
ZWxJbkFueUluc3RhbmNlCiAKICsgKHZvaWQpX2NhY2hlTW9kZWxDaGFuZ2VkTm90aWZpY2F0aW9u
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBvbiB0aGUgV2ViIFRocmVhZAorICAgIFdlYlRocmVh
ZFJ1biheeworI2VuZGlmICAgIAogICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IChX
ZWJQcmVmZXJlbmNlcyAqKVtub3RpZmljYXRpb24gb2JqZWN0XTsKICAgICBBU1NFUlQoW3ByZWZl
cmVuY2VzIGlzS2luZE9mQ2xhc3M6W1dlYlByZWZlcmVuY2VzIGNsYXNzXV0pOwogCkBAIC02MjQ5
LDYgKzgwMTMsOSBAQCArICh2b2lkKV9jYWNoZU1vZGVsQ2hhbmdlZE5vdGlmaWNhdGlvbjooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KICAgICAgICAgW3NlbGYgX3NldENhY2hlTW9kZWw6
Y2FjaGVNb2RlbF07CiAgICAgZWxzZSBpZiAoY2FjaGVNb2RlbCA8IFtzZWxmIF9jYWNoZU1vZGVs
XSkKICAgICAgICAgW3NlbGYgX3NldENhY2hlTW9kZWw6c3RkOjptYXgoW1tXZWJQcmVmZXJlbmNl
cyBzdGFuZGFyZFByZWZlcmVuY2VzXSBjYWNoZU1vZGVsXSwgW3NlbGYgX21heENhY2hlTW9kZWxJ
bkFueUluc3RhbmNlXSldOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB9KTsKKyNlbmRpZgogfQog
CiArICh2b2lkKV9wcmVmZXJlbmNlc1JlbW92ZWROb3RpZmljYXRpb246KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uCkBAIC02MjgzLDcgKzgwNTAsMTIgQEAgLSAoV2ViRnJhbWVWaWV3ICop
X2ZyYW1lVmlld0F0V2luZG93UG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsKICAgICBpZiAoX3ByaXZh
dGUtPmNsb3NlZCkKICAgICAgICAgcmV0dXJuIG5pbDsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IE5TVmlldyAqdmlldyA9IFtzZWxmIGhpdFRlc3Q6W1tzZWxmIHN1cGVydmlld10gY29udmVydFBv
aW50OnBvaW50IGZyb21WaWV3Om5pbF1dOworI2Vsc2UKKyAgICAvL1tXZWJWaWV3IHN1cGVydmll
d10gb24gaU9TIGlzIG5pbCwgZG9uJ3QgZG8gYSBjb252ZXJ0UG9pbnQKKyAgICBOU1ZpZXcgKnZp
ZXcgPSBbc2VsZiBoaXRUZXN0OnBvaW50XTsgICAgCisjZW5kaWYKICAgICBpZiAoIVt2aWV3IGlz
RGVzY2VuZGFudE9mOltbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld11dKQogICAgICAgICByZXR1
cm4gbmlsOwogICAgIFdlYkZyYW1lVmlldyAqZnJhbWVWaWV3ID0gY29udGFpbmluZ0ZyYW1lVmll
dyh2aWV3KTsKQEAgLTYyOTMsMTcgKzgwNjUsMjEgQEAgLSAoV2ViRnJhbWVWaWV3ICopX2ZyYW1l
Vmlld0F0V2luZG93UG9pbnQ6KE5TUG9pbnQpcG9pbnQKIAogKyAodm9pZClfcHJlZmxpZ2h0U3Bl
bGxDaGVja2VyTm93OihpZClzZW5kZXIKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFtbTlNT
cGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBfcHJlZmxpZ2h0Q2hvc2VuU3BlbGxTZXJ2
ZXJdOworI2VuZGlmCiB9CiAKICsgKHZvaWQpX3ByZWZsaWdodFNwZWxsQ2hlY2tlcgogeworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgLy8gQXMgQXBwS2l0IGRvZXMsIHdlIHdpc2ggdG8gZGVsYXkg
dGlja2xpbmcgdGhlIHNoYXJlZCBzcGVsbGNoZWNrZXIgaW50byBleGlzdGVuY2Ugb24gYXBwbGlj
YXRpb24gbGF1bmNoLgogICAgIGlmIChbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2Vy
RXhpc3RzXSkgewogICAgICAgICBbc2VsZiBfcHJlZmxpZ2h0U3BlbGxDaGVja2VyTm93OnNlbGZd
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Io
X3ByZWZsaWdodFNwZWxsQ2hlY2tlck5vdzopIHdpdGhPYmplY3Q6c2VsZiBhZnRlckRlbGF5OjIu
MF07CiAgICAgfQorI2VuZGlmCiB9CiAKIC0gKEJPT0wpX2NvbnRpbnVvdXNDaGVja2luZ0FsbG93
ZWQKQEAgLTYzMzUsNiArODExMSw3IEBAIC0gKE5TUmVzcG9uZGVyICopX3Jlc3BvbmRlckZvclJl
c3BvbmRlck9wZXJhdGlvbnMKICAgICByZXR1cm4gcmVzcG9uZGVyOwogfQogCisjaWYgIVBMQVRG
T1JNKElPUykKIC0gKHZvaWQpX29wZW5GcmFtZUluTmV3V2luZG93RnJvbU1lbnU6KE5TTWVudUl0
ZW0gKilzZW5kZXIKIHsKICAgICBBU1NFUlRfQVJHKHNlbmRlciwgW3NlbmRlciBpc0tpbmRPZkNs
YXNzOltOU01lbnVJdGVtIGNsYXNzXV0pOwpAQCAtNjM4Nyw2ICs4MTY0LDcgQEAgLSAodm9pZClf
c2VhcmNoV2l0aFNwb3RsaWdodEZyb21NZW51OihpZClzZW5kZXIKIAogICAgIFtbTlNXb3Jrc3Bh
Y2Ugc2hhcmVkV29ya3NwYWNlXSBzaG93U2VhcmNoUmVzdWx0c0ZvclF1ZXJ5U3RyaW5nOnNlbGVj
dGVkU3RyaW5nXTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgVVNFKEdMSUIp
CiAtICh2b2lkKV9jbGVhckdsaWJMb29wT2JzZXJ2ZXIKQEAgLTY0OTcsMTAgKzgyNzUsMTEgQEAg
LSAodm9pZClfcmV0cmlldmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXJlbmNlczooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KICAgICAvLyBCaXQgMCBpcyBzZXQgaWYgdXNlciBjYW4gc2V0
IHRoZSBmb2N1cyB0byBtZW51cywgdGhlIGRvY2ssIGFuZCB2YXJpb3VzIHdpbmRvd3MgdXNpbmcg
dGhlIGtleWJvYXJkLgogICAgIC8vIEJpdCAxIGlzIHNldCBpZiBjb250cm9scyBvdGhlciB0aGFu
IHRleHQgZmllbGRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgdGFiIG9yZGVyIChXZWJLaXQgYWxzbyBh
bHdheXMgaW5jbHVkZXMgbGlzdHMpLgogICAgIF9wcml2YXRlLT5fa2V5Ym9hcmRVSU1vZGUgPSAo
bW9kZSAmIDB4MikgPyBLZXlib2FyZEFjY2Vzc0Z1bGwgOiBLZXlib2FyZEFjY2Vzc0RlZmF1bHQ7
Ci0KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIGNoZWNrIGZvciB0YWJiaW5nIHRvIGxpbmtz
CiAgICAgaWYgKFtfcHJpdmF0ZS0+cHJlZmVyZW5jZXMgdGFic1RvTGlua3NdKQogICAgICAgICBf
cHJpdmF0ZS0+X2tleWJvYXJkVUlNb2RlID0gKEtleWJvYXJkVUlNb2RlKShfcHJpdmF0ZS0+X2tl
eWJvYXJkVUlNb2RlIHwgS2V5Ym9hcmRBY2Nlc3NUYWJzVG9MaW5rcyk7CisjZW5kaWYKIH0KIAog
LSAoS2V5Ym9hcmRVSU1vZGUpX2tleWJvYXJkVUlNb2RlCkBAIC02NTEwLDkgKzgyODksMTEgQEAg
LSAoS2V5Ym9hcmRVSU1vZGUpX2tleWJvYXJkVUlNb2RlCiAKICAgICAgICAgW3NlbGYgX3JldHJp
ZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6bmlsXTsKICAgICAgICAgCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICAgICAgW1tOU0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIAogICAgICAgICAgICAgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2Vs
ZWN0b3IoX3JldHJpZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6KSAKICAgICAgICAg
ICAgIG5hbWU6S2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07
CisjZW5kaWYKIAogICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IAogICAgICAgICAgICAgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3JldHJp
ZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6KSAKQEAgLTY1MjEsMTAgKzgzMDIsMTIg
QEAgLSAoS2V5Ym9hcmRVSU1vZGUpX2tleWJvYXJkVUlNb2RlCiAgICAgcmV0dXJuIF9wcml2YXRl
LT5fa2V5Ym9hcmRVSU1vZGU7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClfc2V0
SW5zZXJ0aW9uUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogewogICAgIF9w
cml2YXRlLT5pbnNlcnRpb25QYXN0ZWJvYXJkID0gcGFzdGVib2FyZDsKIH0KKyNlbmRpZgogCiAt
IChGcmFtZSopX21haW5Db3JlRnJhbWUKIHsKQEAgLTY1OTYsNiArODM3OSwxMCBAQCAtIChCT09M
KV9mbHVzaENvbXBvc2l0aW5nQ2hhbmdlcwogKi8KIGJvb2wgTGF5ZXJGbHVzaENvbnRyb2xsZXI6
OmZsdXNoTGF5ZXJzKCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgV2ViVGhyZWFkTG9jaygp
OworI2VuZGlmCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1dpbmRvdyAqd2luZG93ID0gW21f
d2ViVmlldyB3aW5kb3ddOwogICAgIAogICAgIC8vIEFuIE5TV2luZG93IG1heSBub3QgZGlzcGxh
eSBpbiB0aGUgbmV4dCBydW5sb29wIGN5Y2xlIGFmdGVyIGRpcnR5aW5nIGR1ZSB0byBkZWxheWVk
IHdpbmRvdyBkaXNwbGF5IGxvZ2ljLApAQCAtNjYxMSwxNSArODM5OCwyNSBAQCBib29sIExheWVy
Rmx1c2hDb250cm9sbGVyOjpmbHVzaExheWVycygpCiAKICAgICBpZiAodmlld3NOZWVkRGlzcGxh
eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gRW5zdXJlIGZpeGVkIHBvc2l0aW9ucyBsYXllcnMgYXJlIHdoZXJlIHRoZXkgc2hvdWxk
IGJlLgorICAgIFttX3dlYlZpZXcgX3N5bmNocm9uaXplQ3VzdG9tRml4ZWRQb3NpdGlvbkxheW91
dFJlY3RdOworI2VuZGlmCisKKyAgICBbbV93ZWJWaWV3IF92aWV3V2lsbERyYXdJbnRlcm5hbF07
CiAKICAgICBbbV93ZWJWaWV3IF92aWV3V2lsbERyYXdJbnRlcm5hbF07CiAKICAgICBpZiAoW21f
d2ViVmlldyBfZmx1c2hDb21wb3NpdGluZ0NoYW5nZXNdKSB7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICAgICAgLy8gQXBwS2l0IG1heSBoYXZlIGRpc2FibGVkIHNjcmVlbiB1cGRhdGVzLCB0aGlu
a2luZyBhbiB1cGNvbWluZyB3aW5kb3cgZmx1c2ggd2lsbCByZS1lbmFibGUgdGhlbS4KICAgICAg
ICAgLy8gSW4gY2FzZSBzZXROZWVkc0Rpc3BsYXlJblJlY3QoKSBoYXMgcHJldmVudGVkIHRoZSB3
aW5kb3cgZnJvbSBuZWVkaW5nIHRvIGJlIGZsdXNoZWQsIHJlLWVuYWJsZSBzY3JlZW4KICAgICAg
ICAgLy8gdXBkYXRlcyBoZXJlLgogICAgICAgICBpZiAoIVt3aW5kb3cgaXNGbHVzaFdpbmRvd0Rp
c2FibGVkXSkKICAgICAgICAgICAgIFt3aW5kb3cgX2VuYWJsZVNjcmVlblVwZGF0ZXNJZk5lZWRl
ZF07CisjZW5kaWYKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02NjI5LDE1ICs4
NDI2LDI4IEBAIGJvb2wgTGF5ZXJGbHVzaENvbnRyb2xsZXI6OmZsdXNoTGF5ZXJzKCkKIAogLSAo
dm9pZClfc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2gKIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgaWYgKF9wcml2YXRlLT5jbG9zaW5nKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwog
ICAgIGlmICghX3ByaXZhdGUtPmxheWVyRmx1c2hDb250cm9sbGVyKQogICAgICAgICBfcHJpdmF0
ZS0+bGF5ZXJGbHVzaENvbnRyb2xsZXIgPSBMYXllckZsdXNoQ29udHJvbGxlcjo6Y3JlYXRlKHNl
bGYpOwogICAgIF9wcml2YXRlLT5sYXllckZsdXNoQ29udHJvbGxlci0+c2NoZWR1bGVMYXllckZs
dXNoKCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCistICh2b2lkKV9zY2hlZHVsZUxheWVyRmx1
c2hGb3JQZW5kaW5nVGlsZUNhY2hlUmVwYWludAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBb
c2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGNvcmVGcmFt
ZS0+dmlldygpKQorICAgICAgICB2aWV3LT5zY2hlZHVsZUxheWVyRmx1c2hBbGxvd2luZ1Rocm90
dGxpbmcoKTsKK30KICNlbmRpZgogCi0jaWYgRU5BQkxFKFZJREVPKQorI2VuZGlmCiAKKyNpZiBF
TkFCTEUoVklERU8pICYmICFQTEFURk9STShJT1MpCiAtICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5G
b3JOb2RlOihXZWJDb3JlOjpOb2RlKilub2RlCiB7CiAgICAgQVNTRVJUKGlzSFRNTFZpZGVvRWxl
bWVudChub2RlKSk7CkBAIC02Njc1LDkgKzg0ODUsOSBAQCAtICh2b2lkKV9leGl0RnVsbHNjcmVl
bgogICAgIF9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciA9IG5pbDsKIH0KIAotI2VuZGlm
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiAhUExBVEZPUk0oSU9TKQogCi0jaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgIVBMQVRGT1JN
KElPUykKIC0gKEJPT0wpX3N1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQ6KGNvbnN0IFdlYkNv
cmU6OkVsZW1lbnQqKWVsZW1lbnQgd2l0aEtleWJvYXJkOihCT09MKXdpdGhLZXlib2FyZAogewog
ICAgIGlmICghW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBmdWxsU2NyZWVu
RW5hYmxlZF0pCkBAIC02ODQ5LDYgKzg2NTksMTcgQEAgLSAodm9pZClfZ2VvbG9jYXRpb25EaWRG
YWlsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopZXJyb3JNZXNzYWdlCiAjZW5kaWYgLy8gRU5BQkxF
KEdFT0xPQ0FUSU9OKQogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAodm9pZClfcmVzZXRBbGxH
ZW9sb2NhdGlvblBlcm1pc3Npb24KK3sKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgRnJh
bWUqIGZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOworICAgIGlmIChmcmFtZSkKKyAgICAg
ICAgZnJhbWUtPnJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uKCk7CisjZW5kaWYKK30KKyNl
bmRpZgorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJWaWV3Tm90aWZpY2F0
aW9uKQpAQCAtNjg5NCw2ICs4NzE1LDM2IEBAIC0gKHVpbnQ2NF90KV9ub3RpZmljYXRpb25JREZv
clRlc3Rpbmc6KEpTVmFsdWVSZWYpanNOb3RpZmljYXRpb24KIH0KIEBlbmQKIAorI2lmIFBMQVRG
T1JNKElPUykKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWV3IChXZWJWaWV3SU9TUERGKQorCisrIChD
bGFzcylfZ2V0UERGUmVwcmVzZW50YXRpb25DbGFzcworeworICAgIGlmIChzX3BkZlJlcHJlc2Vu
dGF0aW9uQ2xhc3MpCisgICAgICAgIHJldHVybiBzX3BkZlJlcHJlc2VudGF0aW9uQ2xhc3M7Cisg
ICAgcmV0dXJuIFtXZWJQREZWaWV3IGNsYXNzXTsgLy8gVGhpcyBpcyBXZWJQREZSZXByZXNlbnRh
dGlvbiBmb3IgUExBVEZPUk0oTUFDKS4KK30KKworKyAodm9pZClfc2V0UERGUmVwcmVzZW50YXRp
b25DbGFzczooQ2xhc3MpcGRmUmVwcmVzZW50YXRpb25DbGFzcworeworICAgIHNfcGRmUmVwcmVz
ZW50YXRpb25DbGFzcyA9IHBkZlJlcHJlc2VudGF0aW9uQ2xhc3M7Cit9CisKKysgKENsYXNzKV9n
ZXRQREZWaWV3Q2xhc3MKK3sKKyAgICBpZiAoc19wZGZWaWV3Q2xhc3MpCisgICAgICAgIHJldHVy
biBzX3BkZlZpZXdDbGFzczsKKyAgICByZXR1cm4gW1dlYlBERlZpZXcgY2xhc3NdOworfQorCisr
ICh2b2lkKV9zZXRQREZWaWV3Q2xhc3M6KENsYXNzKXBkZlZpZXdDbGFzcworeworICAgIHNfcGRm
Vmlld0NsYXNzID0gcGRmVmlld0NsYXNzOworfQorCitAZW5kCisjZW5kaWYKKwogQGltcGxlbWVu
dGF0aW9uIFdlYlZpZXcgKFdlYlZpZXdGdWxsU2NyZWVuKQogCiAtIChOU1ZpZXcqKWZ1bGxTY3Jl
ZW5QbGFjZWhvbGRlclZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0RhdGEuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaApp
bmRleCA0YzI2NzJiODkzZTBjNjliOTZjYTI0Zjk2OTExYjk2NDc3OGZhMjIwLi45MDI3NDc5NGZk
ZDkwNDNmM2I3ZDZhNmU2MmYwOTY2OGRkOTE4MTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3RGF0YS5oCkBAIC0zOCw2ICszOCwxMCBAQAogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaW1wb3J0ICJXZWJDYXJldENoYW5nZUxpc3RlbmVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOwogY2xhc3MgSGlz
dG9yeUl0ZW07CkBAIC02Niw2ICs3MCwxMiBAQCBjbGFzcyBQYWdlOwogQGNsYXNzIFdlYkluZGlj
YXRlTGF5ZXI7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKK0BjbGFzcyBXQUtXaW5kb3c7
CitAY2xhc3MgV2ViRXZlbnQ7CitAY2xhc3MgV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQ7CisjZW5k
aWYKKwogZXh0ZXJuIEJPT0wgYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nOwogZXh0ZXJuIGludCBw
bHVnaW5EYXRhYmFzZUNsaWVudENvdW50OwogCkBAIC0xMjUsNiArMTM1LDEwIEBAIHByaXZhdGU6
CiAgICAgaWQgZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyOwogICAgIGlkIHNjcmlwdERlYnVnRGVs
ZWdhdGU7CiAgICAgaWQgaGlzdG9yeURlbGVnYXRlOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZCByZXNvdXJjZVByb2dyZXNzRGVsZWdhdGVGb3J3YXJkZXI7CisgICAgaWQgZm9ybURlbGVnYXRl
Rm9yd2FyZGVyOworI2VuZGlmCiAKICAgICBXZWJJbnNwZWN0b3IgKmluc3BlY3RvcjsKICAgICBX
ZWJOb2RlSGlnaGxpZ2h0ICpjdXJyZW50Tm9kZUhpZ2hsaWdodDsKQEAgLTE0MCw2ICsxNTQsOSBA
QCBwcml2YXRlOgogICAgIAogICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlczsKICAgICBC
T09MIHVzZVNpdGVTcGVjaWZpY1Nwb29maW5nOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBOU1VS
TCAqdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKKyNlbmRpZgogCiAgICAgTlNXaW5kb3cgKmhvc3RX
aW5kb3c7CiAKQEAgLTE1Myw2ICsxNzAsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgKm9ic2VydmF0
aW9uSW5mbzsKICAgICAKICAgICBCT09MIGNsb3NlZDsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Qk9PTCBjbG9zaW5nOworI2VuZGlmCiAgICAgQk9PTCBzaG91bGRDbG9zZVdpdGhXaW5kb3c7CiAg
ICAgQk9PTCBtYWluRnJhbWVEb2N1bWVudFJlYWR5OwogICAgIEJPT0wgZHJhd3NCYWNrZ3JvdW5k
OwpAQCAtMTYxLDcgKzE4MSwxMSBAQCBwcml2YXRlOgogICAgIEJPT0wgYmVjb21pbmdGaXJzdFJl
c3BvbmRlckZyb21PdXRzaWRlOwogICAgIEJPT0wgdXNlc1BhZ2VDYWNoZTsKIAorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgTlNDb2xvciAqYmFja2dyb3VuZENvbG9yOworI2Vsc2UKKyAgICBDR0Nv
bG9yUmVmIGJhY2tncm91bmRDb2xvcjsKKyNlbmRpZgogCiAgICAgTlNTdHJpbmcgKm1lZGlhU3R5
bGU7CiAgICAgCkBAIC0xNzUsOCArMTk5LDI5IEBAIHByaXZhdGU6CiAgICAgQk9PTCBkYXNoYm9h
cmRCZWhhdmlvckFsbG93V2hlZWxTY3JvbGxpbmc7CiAjZW5kaWYKICAgICAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgQk9PTCBpc1N0b3BwaW5nOworCisgICAgaWQgVUlLaXREZWxlZ2F0ZTsKKyAg
ICBpZCBVSUtpdERlbGVnYXRlRm9yd2FyZGVyOworCisgICAgaWQgV2ViTWFpbERlbGVnYXRlOwor
CisgICAgQk9PTCBhbGxvd3NNZXNzYWdpbmc7CisgICAgTlNNdXRhYmxlU2V0ICpfY2FyZXRDaGFu
Z2VMaXN0ZW5lcnM7CisgICAgaWQgPFdlYkNhcmV0Q2hhbmdlTGlzdGVuZXI+IF9jYXJldENoYW5n
ZUxpc3RlbmVyOworCisgICAgQ0dTaXplIGZpeGVkTGF5b3V0U2l6ZTsKKyAgICBCT09MIG1haW5W
aWV3SXNTY3JvbGxpbmdPclpvb21pbmc7CisgICAgaW50MzJfdCBkaWREcmF3VGlsZXM7CisgICAg
V1RGOjpNdXRleCBwZW5kaW5nRml4ZWRQb3NpdGlvbkxheW91dFJlY3RNdXRleDsKKyAgICBDR1Jl
Y3QgcGVuZGluZ0ZpeGVkUG9zaXRpb25MYXlvdXRSZWN0OworI2VuZGlmCisKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIC8vIFdlYktpdCBoYXMgYm90aCBhIGdsb2JhbCBwbHVnLWluIGRhdGFiYXNl
IGFuZCBhIHNlcGFyYXRlLCBwZXIgV2ViVmlldyBwbHVnLWluIGRhdGFiYXNlLiBEYXNoYm9hcmQg
dXNlcyB0aGUgcGVyIFdlYlZpZXcgZGF0YWJhc2UuCiAgICAgV2ViUGx1Z2luRGF0YWJhc2UgKnBs
dWdpbkRhdGFiYXNlOworI2VuZGlmCiAgICAgCiAgICAgSGFzaE1hcDx1bnNpZ25lZCBsb25nLCBS
ZXRhaW5QdHI8aWQ+PiBpZGVudGlmaWVyTWFwOwogCkBAIC0xOTUsNyArMjQwLDkgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8TGF5ZXJGbHVzaENvbnRyb2xsZXI+IGxheWVyRmx1c2hDb250cm9sbGVy
OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TUGFzdGVib2FyZCAqaW5zZXJ0
aW9uUGFzdGVib2FyZDsKKyNlbmRpZgogICAgICAgICAgICAgCiAgICAgTlNTaXplIGxhc3RMYXlv
dXRTaXplOwogCkBAIC0yMzIsNiArMjc5LDkgQEAgcHJpdmF0ZToKICAgICBpbnQgdmFsaWRhdGlv
bk1lc3NhZ2VUaW1lck1hZ25pZmljYXRpb247CiAKICAgICBmbG9hdCBjdXN0b21EZXZpY2VTY2Fs
ZUZhY3RvcjsKKyNpZiBQTEFURk9STShJT1MpCisgICAgV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQq
IF9maXhlZFBvc2l0aW9uQ29udGVudDsKKyNlbmRpZgogCiAjaWYgVVNFKERJQ1RBVElPTl9BTFRF
Uk5BVElWRVMpCiAgICAgT3duUHRyPFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxl
cj4gbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3RGF0YS5tbQppbmRleCBlYjBiY2JkMGNiMmNjZTU5MjBlNjU5OTEwMjlhYzE5OTgy
MjYwM2RmLi4wYWIzNzNmYzc0NjUxMTRmNTc2MjE1MTNiMGU1ZGNlMWViMjlkZjNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KQEAgLTM5LDYgKzM5LDEwIEBACiAj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAorI2lm
IFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIldlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCIKKyNl
bmRpZgorCiBCT09MIGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZyA9IE5POwogaW50IHBsdWdpbkRh
dGFiYXNlQ2xpZW50Q291bnQgPSAwOwogCkBAIC03Miw5ICs3NiwxMSBAQCBAaW1wbGVtZW50YXRp
b24gV2ViVmlld1ByaXZhdGUKIAogKyAodm9pZClpbml0aWFsaXplCiB7CisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxp
emVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZCgpOwogICAgIFJ1bkxvb3A6OmluaXRpYWxp
emVNYWluUnVuTG9vcCgpOworI2VuZGlmCiAgICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFpblRo
cmVhZChzZWxmKTsKIH0KIApAQCAtOTksNyArMTA1LDE2IEBAIC0gKGlkKWluaXQKICAgICBkYXNo
Ym9hcmRCZWhhdmlvckFsbG93V2hlZWxTY3JvbGxpbmcgPSBZRVM7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKElPUykKKyAgICBpc1N0b3BwaW5nID0gTk87CisgICAgX2dlb2xvY2F0aW9uUHJvdmlk
ZXIgPSBbV2ViR2VvbG9jYXRpb25Qcm92aWRlcklPUyBzaGFyZWRHZW9sb2NhdGlvblByb3ZpZGVy
XTsKKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBzaG91bGRDbG9zZVdpdGhXaW5k
b3cgPSBvYmpjX2NvbGxlY3RpbmdFbmFibGVkKCk7CisjZWxzZQorICAgIHNob3VsZENsb3NlV2l0
aFdpbmRvdyA9IGZhbHNlOworI2VuZGlmCiAKICAgICBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50
Kys7CiAKQEAgLTExNCwxMyArMTI5LDE5IEBAIC0gKHZvaWQpZGVhbGxvYwogeyAgICAKICAgICBB
U1NFUlQoYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nIHx8ICFwYWdlKTsKICAgICBBU1NFUlQoYXBw
bGljYXRpb25Jc1Rlcm1pbmF0aW5nIHx8ICFwcmVmZXJlbmNlcyk7CisjaWYgIVBMQVRGT1JNKElP
UykKICAgICBBU1NFUlQoIWluc2VydGlvblBhc3RlYm9hcmQpOworI2VuZGlmCiAjaWYgRU5BQkxF
KFZJREVPKQogICAgIEFTU0VSVCghZnVsbHNjcmVlbkNvbnRyb2xsZXIpOwogI2VuZGlmCiAKICAg
ICBbYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50IHJlbGVhc2VdOworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgW2JhY2tncm91bmRDb2xvciByZWxlYXNlXTsKKyNlbHNlCisgICAgQ0dDb2xvclJl
bGVhc2UoYmFja2dyb3VuZENvbG9yKTsKKyNlbmRpZgogICAgIFtpbnNwZWN0b3IgcmVsZWFzZV07
CiAgICAgW2N1cnJlbnROb2RlSGlnaGxpZ2h0IHJlbGVhc2VdOwogICAgIFtob3N0V2luZG93IHJl
bGVhc2VdOwpAQCAtMTM4LDEzICsxNTksMjIgQEAgLSAodm9pZClkZWFsbG9jCiAjZW5kaWYKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFtVSUtpdERlbGVnYXRlRm9yd2FyZGVyIHJl
bGVhc2VdOworICAgIFtmb3JtRGVsZWdhdGVGb3J3YXJkZXIgcmVsZWFzZV07CisgICAgW19jYXJl
dENoYW5nZUxpc3RlbmVycyByZWxlYXNlXTsKKyAgICBbX2ZpeGVkUG9zaXRpb25Db250ZW50IHJl
bGVhc2VdOworI2VuZGlmCisKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIC0gKHZvaWQpZmlu
YWxpemUKIHsKICAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIEFTU0VSVCghaW5zZXJ0aW9uUGFzdGVib2FyZCk7CisjZW5kaWYKICNpZiBFTkFCTEUoVklE
RU8pCiAgICAgQVNTRVJUKCFmdWxsc2NyZWVuQ29udHJvbGxlcik7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmggYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IGNkNTRmMDcyNjlkNTFk
ZWEzMjM4YmNiNThlNGM5OGFiNzY4Yjg5ZWEuLjllNjkwNTU1MDI3NDM5ZTg2Yzg5Y2Y4YzgyZjFh
NGVlMTk3NjMyYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
d0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJu
YWwuaApAQCAtMTI0LDYgKzEyNCwxMiBAQCBPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZlczsK
IAogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCitAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJT
YWZlRm9yd2FyZGVyKQorLSAoaWQpYXN5bmNGb3J3YXJkZXI7CitAZW5kCisjZW5kaWYKKwogLy8g
RklYTUU6IFRlbXBvcmFyeSB3YXkgdG8gZXhwb3NlIG1ldGhvZHMgdGhhdCBhcmUgaW4gdGhlIHdy
b25nIGNhdGVnb3J5IGluc2lkZSBXZWJWaWV3LgogQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3
T3RoZXJJbnRlcm5hbCkKIApAQCAtMTM2LDEzICsxNDIsMjUgQEAgT0JKQ19DTEFTUyBOU1RleHRB
bHRlcm5hdGl2ZXM7CiAtIChXVEY6OlN0cmluZylfdXNlckFnZW50U3RyaW5nOwogI2VuZGlmCiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogLSAoTlNNZW51ICopX21lbnVGb3JFbGVtZW50OihOU0RpY3Rp
b25hcnkgKillbGVtZW50IGRlZmF1bHRJdGVtczooTlNBcnJheSAqKWl0ZW1zOworI2VuZGlmCiAt
IChpZClfVUlEZWxlZ2F0ZUZvcndhcmRlcjsKKyNpZiBQTEFURk9STShJT1MpCistIChpZClfVUlE
ZWxlZ2F0ZUZvclNlbGVjdG9yOihTRUwpc2VsZWN0b3I7CisjZW5kaWYKIC0gKGlkKV9lZGl0aW5n
RGVsZWdhdGVGb3J3YXJkZXI7CiAtIChpZClfcG9saWN5RGVsZWdhdGVGb3J3YXJkZXI7CisjaWYg
UExBVEZPUk0oSU9TKQorLSAoaWQpX2ZyYW1lTG9hZERlbGVnYXRlRm9yd2FyZGVyOworLSAoaWQp
X3Jlc291cmNlTG9hZERlbGVnYXRlRm9yd2FyZGVyOworLSAoaWQpX1VJS2l0RGVsZWdhdGVGb3J3
YXJkZXI7CisjZW5kaWYKIC0gKHZvaWQpX3B1c2hQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXM7
CiAtICh2b2lkKV9wb3BQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXM7CisjaWYgIVBMQVRGT1JN
KElPUykKIC0gKHZvaWQpX2RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU6KFdlYkZyYW1l
ICopZnJhbWU7CisjZW5kaWYKICsgKEJPT0wpX3ZpZXdDbGFzczooQ2xhc3MgKil2Q2xhc3MgYW5k
UmVwcmVzZW50YXRpb25DbGFzczooQ2xhc3MgKilyQ2xhc3MgZm9yTUlNRVR5cGU6KE5TU3RyaW5n
ICopTUlNRVR5cGUgYWxsb3dpbmdQbHVnaW5zOihCT09MKWFsbG93UGx1Z2luczsKIC0gKEJPT0wp
X3ZpZXdDbGFzczooQ2xhc3MgKil2Q2xhc3MgYW5kUmVwcmVzZW50YXRpb25DbGFzczooQ2xhc3Mg
KilyQ2xhc3MgZm9yTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGU7CiArICh2b2lkKV9yZWdp
c3RlclBsdWdpbk1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlOwpAQCAtMTU2LDE2ICsxNzQs
MjAgQEAgT0JKQ19DTEFTUyBOU1RleHRBbHRlcm5hdGl2ZXM7CiAtIChCT09MKV9pc1BlcmZvcm1p
bmdQcm9ncmFtbWF0aWNGb2N1czsKIC0gKHZvaWQpX21vdXNlRGlkTW92ZU92ZXJFbGVtZW50OihO
U0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IG1vZGlmaWVyRmxhZ3M6KE5TVUludGVnZXIpbW9kaWZp
ZXJGbGFnczsKIC0gKFdlYlZpZXcgKilfb3Blbk5ld1dpbmRvd1dpdGhSZXF1ZXN0OihOU1VSTFJl
cXVlc3QgKilyZXF1ZXN0OworI2lmICFQTEFURk9STShJT1MpCiAtICh2b2lkKV93cml0ZUltYWdl
Rm9yRWxlbWVudDooTlNEaWN0aW9uYXJ5ICopZWxlbWVudCB3aXRoUGFzdGVib2FyZFR5cGVzOihO
U0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwog
LSAodm9pZClfd3JpdGVMaW5rRWxlbWVudDooTlNEaWN0aW9uYXJ5ICopZWxlbWVudCB3aXRoUGFz
dGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQg
KilwYXN0ZWJvYXJkOwogLSAodm9pZClfb3BlbkZyYW1lSW5OZXdXaW5kb3dGcm9tTWVudTooTlNN
ZW51SXRlbSAqKXNlbmRlcjsKIC0gKHZvaWQpX3NlYXJjaFdpdGhHb29nbGVGcm9tTWVudTooaWQp
c2VuZGVyOwogLSAodm9pZClfc2VhcmNoV2l0aFNwb3RsaWdodEZyb21NZW51OihpZClzZW5kZXI7
CisjZW5kaWYKIC0gKHZvaWQpX3Byb2dyZXNzQ29tcGxldGVkOihXZWJGcmFtZSAqKWZyYW1lOwog
LSAodm9pZClfZGlkQ29tbWl0TG9hZEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lOworI2lmICFQ
TEFURk9STShJT1MpCiAtICh2b2lkKV9kaWRGaW5pc2hMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICop
ZnJhbWU7CiAtICh2b2lkKV9kaWRGYWlsTG9hZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIGZv
ckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lOwogLSAodm9pZClfZGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lOwor
I2VuZGlmCiAtICh2b2lkKV93aWxsQ2hhbmdlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5Owog
LSAodm9pZClfZGlkQ2hhbmdlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5OwogLSAoV2ViQmFz
ZVBsdWdpblBhY2thZ2UgKilfcGx1Z2luRm9yTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGU7
CkBAIC0xNzcsOSArMTk5LDExIEBAIE9CSkNfQ0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOwogLSAo
dm9pZClzZXRDdXJyZW50Tm9kZUhpZ2hsaWdodDooV2ViTm9kZUhpZ2hsaWdodCAqKW5vZGVIaWdo
bGlnaHQ7CiAtIChXZWJOb2RlSGlnaGxpZ2h0ICopY3VycmVudE5vZGVIaWdobGlnaHQ7CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClhZGRQbHVnaW5JbnN0YW5jZVZpZXc6KE5TVmlldyAq
KXZpZXc7CiAtICh2b2lkKXJlbW92ZVBsdWdpbkluc3RhbmNlVmlldzooTlNWaWV3ICopdmlldzsK
IC0gKHZvaWQpcmVtb3ZlUGx1Z2luSW5zdGFuY2VWaWV3c0ZvcjooV2ViRnJhbWUqKXdlYkZyYW1l
OworI2VuZGlmCiAKIC0gKHZvaWQpX2FkZE9iamVjdDooaWQpb2JqZWN0IGZvcklkZW50aWZpZXI6
KHVuc2lnbmVkIGxvbmcpaWRlbnRpZmllcjsKIC0gKGlkKV9vYmplY3RGb3JJZGVudGlmaWVyOih1
bnNpZ25lZCBsb25nKWlkZW50aWZpZXI7CkBAIC0xOTgsMTYgKzIyMiwyNiBAQCBPQkpDX0NMQVNT
IE5TVGV4dEFsdGVybmF0aXZlczsKIAogKyAoQk9PTClfY2FuSGFuZGxlUmVxdWVzdDooTlNVUkxS
ZXF1ZXN0ICopcmVxdWVzdCBmb3JNYWluRnJhbWU6KEJPT0wpZm9yTWFpbkZyYW1lOwogCisjaWYg
IVBMQVRGT1JNKElPUykKIC0gKHZvaWQpX3NldEluc2VydGlvblBhc3RlYm9hcmQ6KE5TUGFzdGVi
b2FyZCAqKXBhc3RlYm9hcmQ7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKy0gKEJPT0wp
X2lzU3RvcHBpbmc7CistIChCT09MKV9pc0Nsb3Npbmc7CisKKy0gKHZvaWQpX2RvY3VtZW50U2Nh
bGVDaGFuZ2VkOworLSAoQk9PTClfZmV0Y2hDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdDoo
TlNSZWN0KilyZWN0OworI2VuZGlmCiAKIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2Vi
UHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlczsKIAotI2lmIEVOQUJMRShWSURFTykgJiYgZGVmaW5l
ZChfX2NwbHVzcGx1cykKKyNpZiBFTkFCTEUoVklERU8pICYmICFQTEFURk9STShJT1MpICYmIGRl
ZmluZWQoX19jcGx1c3BsdXMpCiAtICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOihXZWJD
b3JlOjpOb2RlKilub2RlOwogLSAodm9pZClfZXhpdEZ1bGxzY3JlZW47CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpICYmICFQTEFURk9STShJT1MpICYmIGRlZmluZWQoX19jcGx1c3Bs
dXMpCiAtIChCT09MKV9zdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVtZW50OihXZWJDb3JlOjpFbGVt
ZW50KillbGVtZW50IHdpdGhLZXlib2FyZDooQk9PTCl3aXRoS2V5Ym9hcmQ7CiAtICh2b2lkKV9l
bnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50OihXZWJDb3JlOjpFbGVtZW50KillbGVtZW50OwogLSAo
dm9pZClfZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50OihXZWJDb3JlOjpFbGVtZW50KillbGVtZW50
Owo=
</data>
<flag name="review"
          id="242862"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>