<?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>57649</bug_id>
          
          <creation_ts>2011-04-01 12:01:26 -0700</creation_ts>
          <short_desc>Make WebKit2 text input handling more like WebKit1</short_desc>
          <delta_ts>2011-04-01 14:43:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>377961</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-01 12:01:26 -0700</bug_when>
    <thetext>We cache too much data in UI process, so input methods that ask for information get stale results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377985</commentid>
    <comment_count>1</comment_count>
      <attachid>87897</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-01 12:23:40 -0700</bug_when>
    <thetext>Created attachment 87897
proposed patch

I know of two big remaining differences:
- attributedSubstringFromRange is not implemented (breaking a lot of stuff);
- no equivalent to WebResponderChainSink (not sure what exactly that breaks).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378022</commentid>
    <comment_count>2</comment_count>
      <attachid>87897</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-01 13:19:10 -0700</bug_when>
    <thetext>Comment on attachment 87897
proposed patch

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

Patch doesn’t apply so you are not getting the benefit of EWS.

&gt; Source/WebCore/dom/KeyboardEvent.h:42
&gt; -        String commandName;
&gt; +        String commandName; // Actually, a selector name - it may have a trailing colon, and a name that can be different from an editor command name.

Can we change the data member name to selector or selectorString? Is this used only with selectors, or is it sometimes used for command names?

&gt; Source/WebKit2/Shared/mac/TextInputState.h:42
&gt; +};

This semicolon is incorrect.

&gt; Source/WebKit2/Shared/mac/TextInputState.h:45
&gt; +
&gt; +
&gt; +#endif // TextInputState_h

Extra blank line.

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:256
&gt; +    void setComposition(const String&amp; text, Vector&lt;WebCore::CompositionUnderline&gt; underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeEnd, TextInputState&amp; newState);

const Vector&amp; instead of Vector?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:109
&gt; +};
&gt; +
&gt; +

Extra blank line here.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1063
&gt; +/*
&gt; +        // Make sure that only direct calls to doCommandBySelector: see the parameters by setting to 0.
&gt; +        _data-&gt;interpretKeyEventsParameters = 0;
&gt; +
&gt; +        bool eventWasHandled;
&gt; +
&gt; +        Editor::Command command = [self coreCommandBySelector:selector];
&gt; +        if (command.isSupported())
&gt; +            eventWasHandled = command.execute(event);
&gt; +        else {
&gt; +            // If WebKit does not support this command, we need to pass the selector to super.
&gt; +            _private-&gt;selectorForDoCommandBySelector = selector;
&gt; +
&gt; +            // The sink does two things: 1) Tells us if the responder went unhandled, and
&gt; +            // 2) prevents any NSBeep; we don&apos;t ever want to beep here.
&gt; +            WebResponderChainSink *sink = [[WebResponderChainSink alloc] initWithResponderChain:self];
&gt; +            [super doCommandBySelector:selector];
&gt; +            eventWasHandled = ![sink receivedUnhandledCommand];
&gt; +            [sink detach];
&gt; +            [sink release];
&gt; +
&gt; +            _private-&gt;selectorForDoCommandBySelector = 0;
&gt; +        }
&gt; +
&gt; +        if (parameters)
&gt; +            parameters-&gt;eventInterpretationHadSideEffects |= eventWasHandled;
&gt; +
&gt; +        _private-&gt;interpretKeyEventsParameters = parameters;
&gt; +*/

Are you really planning on checking in all this code commented out? Is there some better placeholder?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1084
&gt; +        // FIXME: We ignore most attributes from the string, so for example inserting from Character Palette loses font and glyph variation data.
&gt; +        // It does not look like any input methods ever use insertText: with attributes other than NSTextInputReplacementRangeAttributeName.

Those two comments seem almost contradictory. Maybe the point is that Character Palette is not an input method.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1102
&gt; +        parameters-&gt;commands-&gt;append(KeypressCommand(&quot;insertText:&quot;, text));

Can we use a string constant for insertText:?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1230
&gt; +    if (result.location == NSNotFound)
&gt; +        LOG(TextInput, &quot;selectedRange -&gt; (NSNotFound, %u)&quot;, result.length);
&gt; +    else
&gt; +        LOG(TextInput, &quot;selectedRange -&gt; (%u, %u)&quot;, result.location, result.length);

I believe that %u is incorrect for 64-bit for NSUInteger; surprised it works. I see code elsewhere making the same mistake.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:168
&gt; -#if !PLATFORM(MAC)
&gt; +#if PLATFORM(MAC)
&gt; +    bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*, bool saveCommands);
&gt; +#else
&gt;      bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);
&gt;  #endif

I wish there was some way we could unify these.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:97
&gt; +    map-&gt;add(&quot;insertNewlineIgnoringFieldEditor:&quot;, &quot;InsertNewline&quot;);
&gt; +    map-&gt;add(&quot;insertParagraphSeparator:&quot;, &quot;InsertNewline&quot;);
&gt; +    map-&gt;add(&quot;insertTabIgnoringFieldEditor:&quot;, &quot;InsertTab&quot;);
&gt; +    map-&gt;add(&quot;pageDown:&quot;, &quot;MovePageDown&quot;);
&gt; +    map-&gt;add(&quot;pageDownAndModifySelection:&quot;, &quot;MovePageDownAndModifySelection&quot;);
&gt; +    map-&gt;add(&quot;pageUp:&quot;, &quot;MovePageUp&quot;);
&gt; +    map-&gt;add(&quot;pageUpAndModifySelection:&quot;, &quot;MovePageUpAndModifySelection&quot;);

It’s a bit annoying to have the mapping from selectors to command names here rather than in the class where the selectors are supported, WKView. I see that you want to avoid converting selectors to editor command names because they may round trip back to the UI process, but still it’s not great to have the rules about selectors distributed between classes.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:155
&gt; +            // FIXME: WebHTMLView sends the event up the responder chain with WebResponderChainSink if it&apos;s not supported by the editor. Should we do the same?

Strange that this comment is here, but the commented-out code is over in WKView.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:523
&gt; +    // FIXME: Commoon behaviors like scrolling down on Space should probably be implemented in WebCore.

Typo: &quot;Commoon&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378051</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-01 13:55:28 -0700</bug_when>
    <thetext>&gt; Can we change the data member name to selector or selectorString? Is this used only with selectors, or is it sometimes used for command names?

Yes, we should. Not in this patch, since I don&apos;t want to add a huge cross-project rename to it.

&gt; Are you really planning on checking in all this code commented out? Is there some better placeholder?

Just an oversight. I&apos;m not sure when having this code this really matters - I do not remember ever seeing doCommandBySelector: called outside keyboard event processing or by input methods in practice.

&gt; Those two comments seem almost contradictory. Maybe the point is that Character Palette is not an input method.

Yes, that&apos;s the idea (it&apos;s an input source, but not an input method). The line seems blurred, or maybe I&apos;m just confused about terminology.

&gt; &gt; +        parameters-&gt;commands-&gt;append(KeypressCommand(&quot;insertText:&quot;, text));
&gt; 
&gt; Can we use a string constant for insertText:?

I think that we should use a separate KeypressCommand constructor, but didn&apos;t&apos; want to change KeypressCommand too much yet.

&gt; I believe that %u is incorrect for 64-bit for NSUInteger; surprised it works. I see code elsewhere making the same mistake.

Hmm. I&apos;ll keep it as is for now then, would hate to break 32-bit build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378066</commentid>
    <comment_count>4</comment_count>
      <attachid>87897</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-04-01 14:09:52 -0700</bug_when>
    <thetext>Comment on attachment 87897
proposed patch

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

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1253
&gt;  }

Is this method called only for input methods or can it be called also when typing without using input methods? Is there a risk we might be making a synchronous call for each keystroke? I completely understand why you did it this way, but I would like to make sure what I suspect isn&apos;t true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378070</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-01 14:14:52 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/82717&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378071</commentid>
    <comment_count>6</comment_count>
      <attachid>87897</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-01 14:18:16 -0700</bug_when>
    <thetext>Comment on attachment 87897
proposed patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1253
&gt;&gt;  }
&gt; 
&gt; Is this method called only for input methods or can it be called also when typing without using input methods? Is there a risk we might be making a synchronous call for each keystroke? I completely understand why you did it this way, but I would like to make sure what I suspect isn&apos;t true.

We&apos;d still have non-zero parameters pointer in that case, and would return a value from parameters-&gt;cachedTextInputState.hasMarkedText. For regular typing, the sequence of method calls is validAttributesForMarkedText, hasMarkedText, insertText: - so there are no saved command to execute in hasMarkedText, and there is a cached state to return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378091</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-01 14:37:22 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82717 might have broken Leopard Intel Debug (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378097</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-01 14:43:42 -0700</bug_when>
    <thetext>The ever surprising string[0] issue... Fixed already in r82720.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87897</attachid>
            <date>2011-04-01 12:23:40 -0700</date>
            <delta_ts>2011-04-01 14:18:16 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>WK2_IM.txt</filename>
            <type>text/plain</type>
            <size>75889</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNzAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDQtMDEgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTWFrZSBXZWJLaXQyIHRleHQgaW5wdXQgaGFuZGxpbmcgbW9y
ZSBsaWtlIFdlYktpdDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3NjQ5CisKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOiAoV2ViQ29yZTo6
S2V5cHJlc3NDb21tYW5kOjpLZXlwcmVzc0NvbW1hbmQpOiBQdXQgYmFjayB0aGUgYXNzZXJ0aW9u
cworICAgICAgICB3ZSB1c2VkIHRvIGhhdmUuIEl0IGlzIGRhbmdlcm91cyB0byBjb25mdXNlIGVk
aXRvciBjb21tYW5kcyBhbmQgc2VsZWN0b3IgbmFtZXMgLSBiZXNpZGVzIHRoZQorICAgICAgICBw
cmVzZW5jZSBvZiBhIHNlbWljb2xvbiwgdGhleSBzb21ldGltZXMgaGF2ZSBkaWZmZXJlbnQgbmFt
ZXMsIGFuZCBXZWJLaXQyIGZhaWxlZCB0byBtYXAgdGhvc2UuCisKIDIwMTEtMDQtMDEgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHI4MjY4Ny4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2Fy
ZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQu
aAkocmV2aXNpb24gODI2MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBzdHJ1Y3QgS2V5cHJlc3NDb21tYW5kIHsKICAgICAgICAg
S2V5cHJlc3NDb21tYW5kKCkgeyB9Ci0gICAgICAgIEtleXByZXNzQ29tbWFuZChjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lKSA6IGNvbW1hbmROYW1lKGNvbW1hbmROYW1lKSB7IH0KLSAgICAgICAg
S2V5cHJlc3NDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
dGV4dCkgOiBjb21tYW5kTmFtZShjb21tYW5kTmFtZSksIHRleHQodGV4dCkgeyB9CisgICAgICAg
IEtleXByZXNzQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKSA6IGNvbW1hbmROYW1l
KGNvbW1hbmROYW1lKSB7IEFTU0VSVChpc0FTQ0lJTG93ZXIoY29tbWFuZE5hbWVbMF0pKTsgfQor
ICAgICAgICBLZXlwcmVzc0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0KSA6IGNvbW1hbmROYW1lKGNvbW1hbmROYW1lKSwgdGV4dCh0ZXh0KSB7IEFT
U0VSVChjb21tYW5kTmFtZSA9PSAiaW5zZXJ0VGV4dDoiKTsgfQogCi0gICAgICAgIFN0cmluZyBj
b21tYW5kTmFtZTsKKyAgICAgICAgU3RyaW5nIGNvbW1hbmROYW1lOyAvLyBBY3R1YWxseSwgYSBz
ZWxlY3RvciBuYW1lIC0gaXQgbWF5IGhhdmUgYSB0cmFpbGluZyBjb2xvbiwgYW5kIGEgbmFtZSB0
aGF0IGNhbiBiZSBkaWZmZXJlbnQgZnJvbSBhbiBlZGl0b3IgY29tbWFuZCBuYW1lLgogICAgICAg
ICBTdHJpbmcgdGV4dDsKICAgICB9OwogI2VuZGlmCkBAIC0xMDgsNyArMTA4LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2tleUxvY2F0aW9uOwogICAgICAgICBi
b29sIG1fYWx0R3JhcGhLZXkgOiAxOwogCi0jaWYgUExBVEZPUk0oTUFDKSAgICAgICAgCisjaWYg
UExBVEZPUk0oTUFDKQorICAgICAgICAvLyBDb21tYW5kcyB0aGF0IHdlcmUgc2VudCBieSBBcHBL
aXQgd2hlbiBpbnRlcnByZXRpbmcgdGhlIGV2ZW50LiBEb2Vzbid0IGluY2x1ZGUgaW5wdXQgbWV0
aG9kIGNvbW1hbmRzLgogICAgICAgICBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiBtX2tleXByZXNz
Q29tbWFuZHM7CiAjZW5kaWYKICAgICB9OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gODI3MDAp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4
NCBAQAorMjAxMS0wNC0wMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIFdlYktp
dDIgdGV4dCBpbnB1dCBoYW5kbGluZyBtb3JlIGxpa2UgV2ViS2l0MQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc2NDkKKworICAgICAgICBXZSBub3cg
c2VuZCBtb3JlIHN5bmMgbWVzc2FnZXMgZnJvbSBVSSBwcm9jZXNzIHRvIFdlYiBwcm9jZXNzIGZv
ciBOU1RleHRJbnB1dCBwcm90b2NvbAorICAgICAgICBtZXRob2RzLiBTb21lIG9mIHRoZSBleGNo
YW5nZXMgYXJlIGF2b2lkZWQgYnkgcHJlLWNhbGN1bGF0aW5nIHRoZSByZXNwb25zZXMgYmVmb3Jl
IGFza2luZworICAgICAgICBVSSBwcm9jZXNzIHRvIGludGVycHJldCBrZXkgZXZlbnRzLCBhbmQg
YWxzbyB3aXRoIGVhY2ggc3luYyBtZXNzYWdlIHNlbnQgZHVyaW5nCisgICAgICAgIGludGVycHJl
dGF0aW9uLCBhbmQgd2hpY2ggY291bGQgY2hhbmdlIHRoZSBzdGF0ZS4KKworICAgICAgICAqIFBs
YXRmb3JtL0NvcmVJUEMvSGFuZGxlTWVzc2FnZS5oOiAoQ29yZUlQQzo6Y2FsbE1lbWJlckZ1bmN0
aW9uKTogQWRkZWQgYSBtaXNzaW5nCisgICAgICAgIHNwZWNpYWxpemF0aW9uIGZvciBhIGZ1bmN0
aW9uIHdpdGggNiBhcmd1bWVudHMgYW5kIDIgcmV0dXJuZWQgdmFsdWVzLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5OiBBZGRlZCBUZXh0SW5wdXRTdGF0ZSB0byBzdHJ1
Y3QgbGlzdC4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDogRml4
ZWQgYSBidWcgaW4gQ29tcG9zaXRpb25VbmRlcmxpbmUgZW5jb2RpbmcsIHdoaWNoIG9ubHkKKyAg
ICAgICAgZW5jb2RlZCBhIHBhcnQgb2YgQ29sb3IgZmllbGQsIGFuZCBkaWRuJ3QgbWF0Y2ggZGVj
b2Rlci4KKworICAgICAgICAqIFNoYXJlZC9tYWMvVGV4dElucHV0U3RhdGUuaDogQWRkZWQuIFRo
aXMgaXMgc3RhdGUgdGhhdCdzIG5lZWRlZCBmb3IgSU0gbWFjaGluZXJ5IGFuZCB0aGF0CisgICAg
ICAgIHdlIGRvbid0IHdhbnQgdG8gc2VuZCBzeW5jIG1lc3NhZ2VzIGZvci4gVGhpcyBpcyBzaW1p
bGFyIHRvIFNlbGVjdGlvblN0YXRlLCBidXQgdGhlIGxhdHRlcgorICAgICAgICBpcyBvbmx5IHVw
ZGF0ZWQgYXN5bmNocm9ub3VzbHksIGFuZCBpcyB0aHVzIGxlc3MgcmVsaWFibGUuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOiBXZSBkb24ndCAiaW50ZXJj
ZXB0Iiwgd2UgImludGVycHJldCIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5tbTogKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmludGVycHJldEtleUV2ZW50
KTogUGFzcworICAgICAgICBjdXJyZW50IHRleHQgaW5wdXQgc3RhdGUsIGFuZCBkb24ndCBleHBl
Y3QgYW55dGhpbmcgaW5wdXQgbWV0aG9kIHJlbGF0ZWQgaW4gcmV0dXJuLCBhcyBpbnB1dAorICAg
ICAgICBtZXRob2RzIGFyZSBub3cgc3luYy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6XSk6Cisg
ICAgICAgICgtW1dLVmlldyBpbnNlcnRUZXh0Ol0pOgorICAgICAgICAoLVtXS1ZpZXcga2V5RG93
bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXSk6
CisgICAgICAgICgtW1dLVmlldyBpbnB1dENvbnRleHRdKToKKyAgICAgICAgKC1bV0tWaWV3IHNl
bGVjdGVkUmFuZ2VdKToKKyAgICAgICAgKC1bV0tWaWV3IGhhc01hcmtlZFRleHRdKToKKyAgICAg
ICAgKC1bV0tWaWV3IHVubWFya1RleHRdKToKKyAgICAgICAgKC1bV0tWaWV3IHNldE1hcmtlZFRl
eHQ6c2VsZWN0ZWRSYW5nZTpdKToKKyAgICAgICAgKC1bV0tWaWV3IG1hcmtlZFJhbmdlXSk6Cisg
ICAgICAgICgtW1dLVmlldyBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOl0pOgorICAgICAg
ICAoLVtXS1ZpZXcgY2hhcmFjdGVySW5kZXhGb3JQb2ludDpdKToKKyAgICAgICAgKC1bV0tWaWV3
IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX2ludGVy
cHJldEtleUV2ZW50OndpdGhDYWNoZWRUZXh0SW5wdXRTdGF0ZTpzYXZpbmdDb21tYW5kc1RvOldl
YkNvcmU6Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6
CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpnZXRTZWxlY3RlZFJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpleGVj
dXRlS2V5cHJlc3NDb21tYW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW50
ZXJwcmV0UXVldWVkS2V5RXZlbnQpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJF
ZGl0b3JDbGllbnRNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6aGFu
ZGxlSW5wdXRNZXRob2RLZXlkb3duKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlU2VsZWN0b3JFeGNlcHRp
b25NYXApOgorICAgICAgICAoV2ViS2l0Ojpjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OmN1cnJlbnRUZXh0SW5wdXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OmZyYW1lRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlS2V5cHJl
c3NDb21tYW5kc0ludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlRWRp
dGluZ0tleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUmFu
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlS2V5cHJlc3NDb21tYW5kcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLZXlF
dmVudCk6CisgICAgICAgIFJld3JvdGUgdG8gYmUgbW9yZSBsaWtlIFdlYktpdDEuCisKIDIwMTEt
MDQtMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9IYW5kbGVNZXNzYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9IYW5kbGVNZXNzYWdlLmgJKHJldmlzaW9uIDgyNjAzKQorKysgU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9IYW5kbGVNZXNzYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0MSw2ICsxNDEsMTIgQEAgdm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29uc3QgQXJndW1l
bnRzNAogICAgIChvYmplY3QtPipmdW5jdGlvbikoYXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1l
bnQyLCBhcmdzLmFyZ3VtZW50MywgYXJncy5hcmd1bWVudDQsIHJlcGx5QXJncy5hcmd1bWVudDEp
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFt
ZSBQNiwgdHlwZW5hbWUgUjE+Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVu
dHM2PFAxLCBQMiwgUDMsIFA0LCBQNSwgUDY+JiBhcmdzLCBBcmd1bWVudHMxPFIxPiYgcmVwbHlB
cmdzLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3QtPipmdW5jdGlvbiko
YXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyLCBhcmdzLmFyZ3VtZW50MywgYXJncy5hcmd1
bWVudDQsIGFyZ3MuYXJndW1lbnQ1LCBhcmdzLmFyZ3VtZW50NiwgcmVwbHlBcmdzLmFyZ3VtZW50
MSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMSwg
dHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgUDUsIHR5cGVu
YW1lIFA2LCB0eXBlbmFtZSBQNywgdHlwZW5hbWUgUjE+CiB2b2lkIGNhbGxNZW1iZXJGdW5jdGlv
bihjb25zdCBBcmd1bWVudHM3PFAxLCBQMiwgUDMsIFA0LCBQNSwgUDYsIFA3PiYgYXJncywgQXJn
dW1lbnRzMTxSMT4mIHJlcGx5QXJncywgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHJldmlzaW9uIDgy
NjAzKQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDcgQEAgZGVmIHN0cnVjdF9vcl9jbGFzcyhuYW1lc3Bh
Y2UsIHR5cGUpOgogICAgICAgICAnV2ViS2l0OjpTZWN1cml0eU9yaWdpbkRhdGEnLAogICAgICAg
ICAnV2ViS2l0OjpTZWxlY3Rpb25TdGF0ZScsCiAgICAgICAgICdXZWJLaXQ6OlRleHRDaGVja2Vy
U3RhdGUnLAorICAgICAgICAnV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZScsCiAgICAgICAgICdXZWJL
aXQ6OldlYk5hdmlnYXRpb25EYXRhU3RvcmUnLAogICAgICAgICAnV2ViS2l0OjpXZWJPcGVuUGFu
ZWxQYXJhbWV0ZXJzOjpEYXRhJywKICAgICAgICAgJ1dlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycycsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCShyZXZpc2lvbiA4MjYwMykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDcgKzQwMSw3IEBAIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZToKIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHsKICAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpD
b21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKENvcmVJUEM6OkluKHVuZGVybGluZS5zdGFydE9mZnNldCwgdW5kZXJsaW5lLmVuZE9m
ZnNldCwgdW5kZXJsaW5lLnRoaWNrLCB1bmRlcmxpbmUuY29sb3IucmdiKCkpKTsKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKHVuZGVybGluZS5zdGFydE9mZnNldCwgdW5kZXJs
aW5lLmVuZE9mZnNldCwgdW5kZXJsaW5lLnRoaWNrLCB1bmRlcmxpbmUuY29sb3IpKTsKICAgICB9
CiAgICAgCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGluZSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvVGV4dElucHV0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1RleHRJbnB1dFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1RleHRJbnB1dFN0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRJbnB1dFN0YXRlX2gKKyNkZWZp
bmUgVGV4dElucHV0U3RhdGVfaAorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBUZXh0SW5wdXRTdGF0ZSB7CisgICAgYm9vbCBoYXNN
YXJrZWRUZXh0OworICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZTsKK307CisKK30KKworbmFt
ZXNwYWNlIENvcmVJUEMgewordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6
OlRleHRJbnB1dFN0YXRlPiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViS2l0OjpUZXh0SW5wdXRT
dGF0ZT4geyB9OworfTsKKworCisjZW5kaWYgLy8gVGV4dElucHV0U3RhdGVfaApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA4MjYwMykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3
ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRz
KCkgPSAwOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0
eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZE5h
bWUsIHVpbnQzMl90IHNlbGVjdGlvblN0YXJ0LCB1aW50MzJfdCBzZWxlY3Rpb25FbmQsIFZlY3Rv
cjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYsIGNvbnN0IFRleHRJbnB1dFN0YXRlJiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFu
ZD4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgY2xpZW50UG9zaXRpb24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFn
SW1hZ2UsIGJvb2wgaXNMaW5rRHJhZykgPSAwOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oV0lOKQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gODI2
MDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk3LDYgKzk3LDcgQEAgY2xhc3MgV2ViV2hlZWxFdmVudDsKIHN0cnVjdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvOwogc3RydWN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YTsKIHN0cnVjdCBQ
cmludEluZm87CitzdHJ1Y3QgVGV4dElucHV0U3RhdGU7CiBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVyczsKIHN0cnVjdCBXZWJQb3B1cEl0ZW07CiAKQEAgLTI1MSw5ICsyNTIsMTYgQEAg
cHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHVwZGF0ZVdpbmRvd0lzVmlzaWJs
ZShib29sIHdpbmRvd0lzVmlzaWJsZSk7CiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0
ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKTsK
KworICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2Vi
Q29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlv
blN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VT
dGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgVGV4dElucHV0U3RhdGUmIG5ld1N0
YXRlKTsKKyAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihUZXh0SW5wdXRTdGF0ZSYgbmV3U3Rh
dGUpOworICAgIGJvb2wgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJl
cGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgVGV4dElu
cHV0U3RhdGUmIG5ld1N0YXRlKTsKICAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBs
b2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CisgICAgdm9pZCBnZXRTZWxlY3RlZFJhbmdlKHVp
bnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAgICAgdWludDY0X3QgY2hhcmFj
dGVySW5kZXhGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCk7CiAgICAgV2ViQ29yZTo6
SW50UmVjdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCwgdWludDY0X3QpOwor
ICAgIGJvb2wgZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoVmVjdG9yPFdlYkNvcmU6OktleXByZXNz
Q29tbWFuZD4mLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpOworCiAgICAgdm9pZCBzZW5kQ29t
cGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRh
aW5pbmdXaW5kb3dHcmFwaGljc0NvbnRleHQoKTsKICNlbmRpZgpAQCAtNTgxLDcgKzU4OSw3IEBA
IHByaXZhdGU6CiAKICAgICAvLyBLZXlib2FyZCBoYW5kbGluZwogI2lmIFBMQVRGT1JNKE1BQykK
LSAgICB2b2lkIGludGVycHJldEtleUV2ZW50KHVpbnQzMl90IGV2ZW50VHlwZSwgVmVjdG9yPFdl
YkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCB1aW50MzJfdCBzZWxlY3Rpb25TdGFydCwgdWludDMy
X3Qgc2VsZWN0aW9uRW5kLCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1
bmRlcmxpbmVzKTsKKyAgICB2b2lkIGludGVycHJldFF1ZXVlZEtleUV2ZW50KGNvbnN0IFRleHRJ
bnB1dFN0YXRlJiwgYm9vbCYgaGFuZGxlZCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFu
ZD4mKTsKICNlbmRpZgogICAgIAogICAgIC8vIEZpbmQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDgyNjAz
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtMTMwLDggKzEzMCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94
eSB7CiAgICAgIyBEaWN0aW9uYXJ5IHN1cHBvcnQuCiAgICAgRGlkUGVyZm9ybURpY3Rpb25hcnlM
b29rdXAoV1RGOjpTdHJpbmcgdGV4dCwgV2ViS2l0OjpEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rp
b25hcnlQb3B1cEluZm8pCiAKLSAgICAjIEtleWJvYXJkIHN1cHBvcnQgbWVzc2FnZXMKLSAgICBJ
bnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKSAtPiAoVmVjdG9yPFdlYkNvcmU6OktleXBy
ZXNzQ29tbWFuZD4gY29tbWFuZE5hbWUsIHVpbnQzMl90IHNlbGVjdGlvblN0YXJ0LCB1aW50MzJf
dCBzZWxlY3Rpb25FbmQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lcykKKyAgICAjIEtleWJvYXJkIGlucHV0IHN1cHBvcnQgbWVzc2FnZXMKKyAgICBJbnRl
cnByZXRRdWV1ZWRLZXlFdmVudChXZWJLaXQ6OlRleHRJbnB1dFN0YXRlIHN0YXRlKSAtPiAoYm9v
bCBoYW5kbGVkLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBzYXZlZENvbW1hbmRz
KQogICAgIAogICAgICMgUmVtb3RlIGFjY2Vzc2liaWxpdHkgbWVzc2FnZXMKICAgICBSZWdpc3Rl
cldlYlByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW4oQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRh
KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCShyZXZpc2lvbiA4MjYwMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQ
dHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci0gICAgdmlydHVhbCB2b2lkIGlu
dGVyY2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0
b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZE5hbWUsIHVpbnQzMl90IHNlbGVj
dGlvblN0YXJ0LCB1aW50MzJfdCBzZWxlY3Rpb25FbmQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3Np
dGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpOworICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRL
ZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgY29uc3QgVGV4dElucHV0U3Rh
dGUmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcpOwog
CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gODI2MDMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjkxLDEwICsyOTEsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbGVhckFs
bEVkaXRDb21tYW5kCiAgICAgW1ttX3drVmlldyB1bmRvTWFuYWdlcl0gcmVtb3ZlQWxsQWN0aW9u
c1dpdGhUYXJnZXQ6bV91bmRvVGFyZ2V0LmdldCgpXTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6aW50ZXJjZXB0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQs
IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kc0xpc3QsIHVpbnQzMl90
IHNlbGVjdGlvblN0YXJ0LCB1aW50MzJfdCBzZWxlY3Rpb25FbmQsIFZlY3RvcjxXZWJDb3JlOjpD
b21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpCitib29sIFBhZ2VDbGllbnRJbXBsOjpp
bnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgY29u
c3QgVGV4dElucHV0U3RhdGUmIHN0YXRlLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiYgY29tbWFuZHMpCiB7Ci0gICAgY29tbWFuZHNMaXN0ID0gW21fd2tWaWV3IF9pbnRlcmNlcHRL
ZXlFdmVudDpldmVudC5uYXRpdmVFdmVudCgpXTsKLSAgICBbbV93a1ZpZXcgX2dldFRleHRJbnB1
dFN0YXRlOnNlbGVjdGlvblN0YXJ0IHNlbGVjdGlvbkVuZDpzZWxlY3Rpb25FbmQgdW5kZXJsaW5l
czp1bmRlcmxpbmVzXTsKKyAgICByZXR1cm4gW21fd2tWaWV3IF9pbnRlcnByZXRLZXlFdmVudDpl
dmVudC5uYXRpdmVFdmVudCgpIHdpdGhDYWNoZWRUZXh0SW5wdXRTdGF0ZTpzdGF0ZSBzYXZpbmdD
b21tYW5kc1RvOmNvbW1hbmRzXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RHJhZ0lt
YWdlKGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGRyYWdJbWFnZSwgYm9vbCBpc0xpbmtEcmFnKQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gODI2MDMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTQx
LDYgKzQxLDcgQEAKICNpbXBvcnQgIlJ1bkxvb3AuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyLmgi
CiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCisjaW1wb3J0ICJUZXh0SW5wdXRTdGF0ZS5o
IgogI2ltcG9ydCAiV0tBUElDYXN0LmgiCiAjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyLmgiCiAjaW1wb3J0ICJXS1ByaW50aW5nVmlldy5oIgpAQCAtODMsNyArODQsNyBAQCAt
IChCT09MKV91cGRhdGVHcm93Qm94Rm9yV2luZG93RnJhbWVDaGFuCiAKIGV4dGVybiAiQyIgewog
ICAgIC8vIE5lZWQgdG8gZGVjbGFyZSB0aGlzIGF0dHJpYnV0ZSBuYW1lIGJlY2F1c2UgQXBwS2l0
IGV4cG9ydHMgaXQgYnV0IGRvZXMgbm90IG1ha2UgaXQgYXZhaWxhYmxlIGluIEFQSSBvciBTUEkg
aGVhZGVycy4KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vODYzMTQ2OD4gdHJhY2tzIHRoZSByZXF1
ZXN0IHRvIG1ha2UgaXQgYXZhaWxhYmxlLiBUaGlzIGNvZGUgc2hvdWxkIGJlIHJlbW92ZWQgd2hl
biB0aGUgYnVnIGlzIGNsb3NlZC4KKyAgICAvLyBGSVhNRTogV2Ugd291bGRuJ3QgbmVlZCB0aGlz
IGlmIHdlIGltcGxlbWVudGVkIE5TVGV4dElucHV0Q2xpZW50IHByb3RvY29sIGluc3RlYWQgb2Yg
ZGVwcmVjYXRlZCBOU1RleHRJbnB1dC4KICAgICBleHRlcm4gTlNTdHJpbmcgKk5TVGV4dElucHV0
UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWU7CiB9CiAKQEAgLTk4LDYgKzk5LDE0IEBAIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZhbGlkYXRpb25WZWN0b3IKIAogfQogCitzdHJ1Y3QgV0tW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyB7CisgICAgVGV4dElucHV0U3RhdGUgY2Fj
aGVkVGV4dElucHV0U3RhdGU7CisgICAgYm9vbCBldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVm
ZmVjdHM7CisgICAgYm9vbCBjb25zdW1lZEJ5SU07CisgICAgVmVjdG9yPEtleXByZXNzQ29tbWFu
ZD4qIGNvbW1hbmRzOworfTsKKworCiBAaW50ZXJmYWNlIFdLVmlld0RhdGEgOiBOU09iamVjdCB7
CiBAcHVibGljCiAgICAgT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBfcGFnZUNsaWVudDsKQEAgLTEy
MiwxOCArMTMxLDEzIEBAIEBpbnRlcmZhY2UgV0tWaWV3RGF0YSA6IE5TT2JqZWN0IHsKICAgICAv
LyB0aGUgYXBwbGljYXRpb24gdG8gZGlzdGluZ3Vpc2ggdGhlIGNhc2Ugb2YgYSBuZXcgZXZlbnQg
ZnJvbSBvbmUgCiAgICAgLy8gdGhhdCBoYXMgYmVlbiBhbHJlYWR5IHNlbnQgdG8gV2ViQ29yZS4K
ICAgICBSZXRhaW5QdHI8TlNFdmVudD4gX2tleURvd25FdmVudEJlaW5nUmVzZW50OwotICAgIGJv
b2wgX2lzSW5JbnRlcnByZXRLZXlFdmVudHM7Ci0gICAgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4g
X2NvbW1hbmRzTGlzdDsKKyAgICBXS1ZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBf
aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKIAogICAgIE5TU2l6ZSBfcmVzaXplU2Nyb2xs
T2Zmc2V0OwogCiAgICAgLy8gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHBsdWctaW4gd2Ugd2FudCB0
byBzZW5kIGNvbXBsZXggdGV4dCBpbnB1dCB0bywgb3IgMCBpZiB0aGVyZSBpcyBub25lLgogICAg
IHVpbnQ2NF90IF9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjsKIAotICAgIFZlY3Rv
cjxDb21wb3NpdGlvblVuZGVybGluZT4gX3VuZGVybGluZXM7Ci0gICAgdW5zaWduZWQgX3NlbGVj
dGlvblN0YXJ0OwotICAgIHVuc2lnbmVkIF9zZWxlY3Rpb25FbmQ7Ci0KICAgICBib29sIF9pbkJl
Y29tZUZpcnN0UmVzcG9uZGVyOwogICAgIGJvb2wgX2luUmVzaWduRmlyc3RSZXNwb25kZXI7CiAg
ICAgTlNFdmVudCAqX21vdXNlRG93bkV2ZW50OwpAQCAtMTAxOCw0NiArMTAyMiw5NSBAQCAtICh2
b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvCiB7CiAgICAgTE9HKFRleHRJbnB1
dCwgImRvQ29tbWFuZEJ5U2VsZWN0b3I6XCIlc1wiIiwgc2VsX2dldE5hbWUoc2VsZWN0b3IpKTsK
IAotICAgIGlmICghX2RhdGEtPl9pc0luSW50ZXJwcmV0S2V5RXZlbnRzKSB7CisgICAgV0tWaWV3
SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9kYXRhLT5faW50ZXJw
cmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgcGFy
YW1ldGVycy0+Y29uc3VtZWRCeUlNID0gZmFsc2U7CisKKyAgICAvLyBBcyBpbiBpbnNlcnRUZXh0
Oiwgd2UgYXNzdW1lIHRoYXQgdGhlIGNhbGwgY29tZXMgZnJvbSBhbiBpbnB1dCBtZXRob2QgaWYg
dGhlcmUgaXMgbWFya2VkIHRleHQuCisgICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IHBhcmFt
ZXRlcnMgJiYgcGFyYW1ldGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUuaGFzTWFya2VkVGV4dDsK
KworICAgIGlmIChwYXJhbWV0ZXJzICYmICFpc0Zyb21JbnB1dE1ldGhvZCkKKyAgICAgICAgcGFy
YW1ldGVycy0+Y29tbWFuZHMtPmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoTlNTdHJpbmdGcm9tU2Vs
ZWN0b3Ioc2VsZWN0b3IpKSk7CisgICAgZWxzZSB7CisvKgorICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCBvbmx5IGRpcmVjdCBjYWxscyB0byBkb0NvbW1hbmRCeVNlbGVjdG9yOiBzZWUgdGhlIHBh
cmFtZXRlcnMgYnkgc2V0dGluZyB0byAwLgorICAgICAgICBfZGF0YS0+aW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycyA9IDA7CisKKyAgICAgICAgYm9vbCBldmVudFdhc0hhbmRsZWQ7CisKKyAg
ICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0
b3I6c2VsZWN0b3JdOworICAgICAgICBpZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKQorICAgICAg
ICAgICAgZXZlbnRXYXNIYW5kbGVkID0gY29tbWFuZC5leGVjdXRlKGV2ZW50KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvLyBJZiBXZWJLaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGNv
bW1hbmQsIHdlIG5lZWQgdG8gcGFzcyB0aGUgc2VsZWN0b3IgdG8gc3VwZXIuCisgICAgICAgICAg
ICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gc2VsZWN0b3I7CisK
KyAgICAgICAgICAgIC8vIFRoZSBzaW5rIGRvZXMgdHdvIHRoaW5nczogMSkgVGVsbHMgdXMgaWYg
dGhlIHJlc3BvbmRlciB3ZW50IHVuaGFuZGxlZCwgYW5kCisgICAgICAgICAgICAvLyAyKSBwcmV2
ZW50cyBhbnkgTlNCZWVwOyB3ZSBkb24ndCBldmVyIHdhbnQgdG8gYmVlcCBoZXJlLgorICAgICAg
ICAgICAgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rICpzaW5rID0gW1tXZWJSZXNwb25kZXJDaGFpblNp
bmsgYWxsb2NdIGluaXRXaXRoUmVzcG9uZGVyQ2hhaW46c2VsZl07CisgICAgICAgICAgICBbc3Vw
ZXIgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07CisgICAgICAgICAgICBldmVudFdhc0hh
bmRsZWQgPSAhW3NpbmsgcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kXTsKKyAgICAgICAgICAgIFtz
aW5rIGRldGFjaF07CisgICAgICAgICAgICBbc2luayByZWxlYXNlXTsKKworICAgICAgICAgICAg
X3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IDA7CisgICAgICAgIH0K
KworICAgICAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50
SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8PSBldmVudFdhc0hhbmRsZWQ7CisKKyAgICAg
ICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwor
Ki8KICAgICAgICAgW3N1cGVyIGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwotICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmIChzZWxlY3RvciAhPSBAc2VsZWN0b3Iobm9vcDopKQot
ICAgICAgICBfZGF0YS0+X2NvbW1hbmRzTGlzdC5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKGNvbW1h
bmROYW1lRm9yU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CiB9CiAKIC0gKHZvaWQpaW5zZXJ0VGV4dDoo
aWQpc3RyaW5nCiB7Ci0gICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2lu
ZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOyAvLyBPdGhlcndpc2UsIE5TU3Ry
aW5nCi0gICAgCisgICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9m
Q2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOworICAgIEFTU0VSVChpc0F0dHJpYnV0
ZWRTdHJpbmcgfHwgW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKKwog
ICAgIExPRyhUZXh0SW5wdXQsICJpbnNlcnRUZXh0OlwiJUBcIiIsIGlzQXR0cmlidXRlZFN0cmlu
ZyA/IFtzdHJpbmcgc3RyaW5nXSA6IHN0cmluZyk7CisgICAgV0tWaWV3SW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFy
YW1ldGVyczsKKyAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgcGFyYW1ldGVycy0+Y29uc3Vt
ZWRCeUlNID0gZmFsc2U7CisKICAgICBOU1N0cmluZyAqdGV4dDsKLSAgICBib29sIGlzRnJvbUlu
cHV0TWV0aG9kID0gX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmhhc0NvbXBvc2l0aW9u
OworICAgIE5TUmFuZ2UgcmVwbGFjZW1lbnRSYW5nZSA9IHsgTlNOb3RGb3VuZCwgMCB9OworICAg
IGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMtPmNhY2hl
ZFRleHRJbnB1dFN0YXRlLmhhc01hcmtlZFRleHQ7CiAKICAgICBpZiAoaXNBdHRyaWJ1dGVkU3Ry
aW5nKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBpZ25vcmUgbW9zdCBhdHRyaWJ1dGVzIGZyb20g
dGhlIHN0cmluZywgc28gZm9yIGV4YW1wbGUgaW5zZXJ0aW5nIGZyb20gQ2hhcmFjdGVyIFBhbGV0
dGUgbG9zZXMgZm9udCBhbmQgZ2x5cGggdmFyaWF0aW9uIGRhdGEuCisgICAgICAgIC8vIEl0IGRv
ZXMgbm90IGxvb2sgbGlrZSBhbnkgaW5wdXQgbWV0aG9kcyBldmVyIHVzZSBpbnNlcnRUZXh0OiB3
aXRoIGF0dHJpYnV0ZXMgb3RoZXIgdGhhbiBOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRy
aWJ1dGVOYW1lLgogICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmddOwotICAgICAgICAvLyBX
ZSBkZWFsIHdpdGggdGhlIE5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUg
YXR0cmlidXRlIGZyb20gTlNBdHRyaWJ1dGVkU3RyaW5nIGhlcmUKLSAgICAgICAgLy8gc2ltcGx5
IGJlY2F1c2UgaXQgaXMgdXNlZCBieSBhdCBsZWFzdCBvbmUgSW5wdXQgTWV0aG9kIC0tIGl0IGNv
cnJlc29uZHMgdG8gdGhlIGtFdmVudFBhcmFtVGV4dElucHV0U2VuZFJlcGxhY2VSYW5nZQotICAg
ICAgICAvLyBldmVudCBpbiBUU00uICBUaGlzIGJlaGF2aW91ciBtYXRjaGVzIHRoYXQgb2YgLVtX
ZWJIVE1MVmlldyBzZXRNYXJrZWRUZXh0OnNlbGVjdGVkUmFuZ2U6XSB3aGVuIGl0IHJlY2VpdmVz
IGFuCi0gICAgICAgIC8vIE5TQXR0cmlidXRlZFN0cmluZwotICAgICAgICBOU1N0cmluZyAqcmFu
Z2VTdHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VB
dHRyaWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0RWZmZWN0aXZlUmFuZ2U6TlVMTCBpblJhbmdl
Ok5TTWFrZVJhbmdlKDAsIFt0ZXh0IGxlbmd0aF0pXTsKKyAgICAgICAgTlNTdHJpbmcgKnJhbmdl
U3RyaW5nID0gW3N0cmluZyBhdHRyaWJ1dGU6TlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0
cmlidXRlTmFtZSBhdEluZGV4OjAgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOjAgaW5SYW5nZTpOU01h
a2VSYW5nZSgwLCBbdGV4dCBsZW5ndGhdKV07CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJSZXBs
YWNlbWVudFJhbmdlOiAlQCIsIHJhbmdlU3RyaW5nKTsKLSAgICAgICAgaWYgKHJhbmdlU3RyaW5n
KQotICAgICAgICAgICAgaXNGcm9tSW5wdXRNZXRob2QgPSBZRVM7CisgICAgICAgIGlmIChyYW5n
ZVN0cmluZykgeworICAgICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZSA9IE5TUmFuZ2VGcm9tU3Ry
aW5nKHJhbmdlU3RyaW5nKTsKKyAgICAgICAgICAgIGlzRnJvbUlucHV0TWV0aG9kID0gdHJ1ZTsK
KyAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICB0ZXh0ID0gc3RyaW5nOwogCisgICAgLy8g
aW5zZXJ0VGV4dCBjYW4gYmUgY2FsbGVkIGZvciBzZXZlcmFsIHJlYXNvbnM6CisgICAgLy8gLSBJ
ZiBpdCdzIGZyb20gbm9ybWFsIGtleSBldmVudCBwcm9jZXNzaW5nIChpbmNsdWRpbmcga2V5IGJp
bmRpbmdzKSwgd2UgbWF5IG5lZWQgdG8gc2F2ZSB0aGUgYWN0aW9uIHRvIHBlcmZvcm0gaXQgbGF0
ZXIuCisgICAgLy8gLSBJZiBpdCdzIGZyb20gYW4gaW5wdXQgbWV0aG9kLCB0aGVuIHdlIHNob3Vs
ZCBnbyBhaGVhZCBhbmQgaW5zZXJ0IHRoZSB0ZXh0IG5vdy4gV2UgYXNzdW1lIGl0J3MgZnJvbSB0
aGUgaW5wdXQgbWV0aG9kIGlmIHdlIGhhdmUgbWFya2VkIHRleHQuCisgICAgLy8gRklYTUU6IElu
IHRoZW9yeSwgdGhpcyBjb3VsZCBiZSB3cm9uZyBmb3Igc29tZSBpbnB1dCBtZXRob2RzLCBzbyB3
ZSBzaG91bGQgdHJ5IHRvIGZpbmQgYW5vdGhlciB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWxs
IGlzIGZyb20gdGhlIGlucHV0IG1ldGhvZC4KKyAgICAvLyAtIElmIGl0J3Mgc2VudCBvdXRzaWRl
IG9mIGtleWJvYXJkIGV2ZW50IHByb2Nlc3NpbmcgKGUuZy4gZnJvbSBDaGFyYWN0ZXIgVmlld2Vy
LCBvciB3aGVuIGNvbmZpcm1pbmcgYW4gaW5saW5lIGlucHV0IGFyZWEgd2l0aCBhIG1vdXNlKSwK
KyAgICAvLyB0aGVuIHdlIGFsc28gZXhlY3V0ZSBpdCBpbW1lZGlhdGVseSwgYXMgdGhlcmUgd2ls
bCBiZSBubyBvdGhlciBjaGFuY2UuCisgICAgaWYgKHBhcmFtZXRlcnMgJiYgIWlzRnJvbUlucHV0
TWV0aG9kKSB7CisgICAgICAgIHBhcmFtZXRlcnMtPmNvbW1hbmRzLT5hcHBlbmQoS2V5cHJlc3ND
b21tYW5kKCJpbnNlcnRUZXh0OiIsIHRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFRleHRJbnB1dFN0YXRlIG5ld1RleHRJbnB1dFN0YXRlOwogICAgIFN0cmluZyBldmVudFRl
eHQgPSB0ZXh0OwotICAgIAotICAgIC8vIFdlJ2QgbmVlZCBhIGRpZmZlcmVudCBjb2RlIHBhdGgg
aGVyZSBpZiB3ZSB3YW50ZWQgdG8gYmUgYWJsZSB0byBoYW5kbGUgdGhpcwotICAgIC8vIG91dHNp
ZGUgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgotICAgIEFTU0VSVChfZGF0YS0+X2lzSW5JbnRlcnBy
ZXRLZXlFdmVudHMpOworICAgIGV2ZW50VGV4dC5yZXBsYWNlKE5TQmFja1RhYkNoYXJhY3Rlciwg
TlNUYWJDaGFyYWN0ZXIpOyAvLyBzYW1lIHRoaW5nIGlzIGRvbmUgaW4gS2V5RXZlbnRNYWMubW0g
aW4gV2ViQ29yZQorICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gX2RhdGEtPl9wYWdlLT5pbnNlcnRU
ZXh0KGV2ZW50VGV4dCwgcmVwbGFjZW1lbnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBs
YWNlbWVudFJhbmdlKSwgbmV3VGV4dElucHV0U3RhdGUpOwogCi0gICAgaWYgKCFpc0Zyb21JbnB1
dE1ldGhvZCkKLSAgICAgICAgX2RhdGEtPl9jb21tYW5kc0xpc3QuYXBwZW5kKEtleXByZXNzQ29t
bWFuZCgiaW5zZXJ0VGV4dCIsIHRleHQpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZXZlbnRUZXh0
LnJlcGxhY2UoTlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNoYXJhY3Rlcik7IC8vIHNhbWUgdGhp
bmcgaXMgZG9uZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJDb3JlCi0gICAgICAgIF9kYXRhLT5f
Y29tbWFuZHNMaXN0LmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoImluc2VydFRleHQiLCBldmVudFRl
eHQpKTsKKyAgICBpZiAocGFyYW1ldGVycykgeworICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudElu
dGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgfD0gZXZlbnRIYW5kbGVkOworICAgICAgICBwYXJh
bWV0ZXJzLT5jYWNoZWRUZXh0SW5wdXRTdGF0ZSA9IG5ld1RleHRJbnB1dFN0YXRlOwogICAgIH0K
IH0KIApAQCAtMTEzMCw5ICsxMTgzLDYgQEAgLSAodm9pZClrZXlEb3duOihOU0V2ZW50ICopdGhl
RXZlbnQKICAgICAgICAgfQogICAgIH0KIAotICAgIF9kYXRhLT5fdW5kZXJsaW5lcy5jbGVhcigp
OwotICAgIF9kYXRhLT5fc2VsZWN0aW9uU3RhcnQgPSAwOwotICAgIF9kYXRhLT5fc2VsZWN0aW9u
RW5kID0gMDsKICAgICAvLyBXZSBjb3VsZCBiZSByZWNlaXZpbmcgYSBrZXkgZG93biBmcm9tIEFw
cEtpdCBpZiB3ZSBoYXZlIHJlLXNlbnQgYW4gZXZlbnQKICAgICAvLyB0aGF0IG1hcHMgdG8gYW4g
YWN0aW9uIHRoYXQgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlIChmb3IgZXhhbXBsZSBhIGNvcHkg
d2hlbgogICAgIC8vIHRoZXJlIGlzIG5vIHJhbmdlIHNlbGVjdGlvbikuCkBAIC0xMTQ0LDggKzEx
OTQsMjIgQEAgLSAodm9pZClrZXlEb3duOihOU0V2ZW50ICopdGhlRXZlbnQKICAgICBfZGF0YS0+
X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh0aGVFdmVu
dCwgc2VsZikpOwogfQogCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQgewot
ICAgIGlmIChfZGF0YS0+X3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyICYmICFfZGF0
YS0+X2lzSW5JbnRlcnByZXRLZXlFdmVudHMpCistICh2b2lkKV9leGVjdXRlU2F2ZWRLZXlwcmVz
c0NvbW1hbmRzCit7CisgICAgV0tWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFy
YW1ldGVycyA9IF9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBpZiAo
IXBhcmFtZXRlcnMgfHwgcGFyYW1ldGVycy0+Y29tbWFuZHMtPmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVGV4dElucHV0U3RhdGUgbmV3VGV4dElucHV0U3RhdGU7CisgICAgcGFy
YW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNpZGVFZmZlY3RzIHw9IF9kYXRhLT5fcGFn
ZS0+ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoKnBhcmFtZXRlcnMtPmNvbW1hbmRzLCBuZXdUZXh0
SW5wdXRTdGF0ZSk7CisgICAgcGFyYW1ldGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUgPSBuZXdU
ZXh0SW5wdXRTdGF0ZTsKKyAgICBwYXJhbWV0ZXJzLT5jb21tYW5kcy0+Y2xlYXIoKTsKK30KKwor
CistIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQKK3sKKyAgICBpZiAoX2RhdGEt
Pl9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciAmJiAhX2RhdGEtPl9pbnRlcnByZXRL
ZXlFdmVudHNQYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4gW1tXS1RleHRJbnB1dFdpbmRvd0Nv
bnRyb2xsZXIgc2hhcmVkVGV4dElucHV0V2luZG93Q29udHJvbGxlcl0gaW5wdXRDb250ZXh0XTsK
IAogICAgIHJldHVybiBbc3VwZXIgaW5wdXRDb250ZXh0XTsKQEAgLTExNTMsMjggKzEyMTcsNTkg
QEAgLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0IHsKIAogLSAoTlNSYW5nZSlz
ZWxlY3RlZFJhbmdlCiB7Ci0gICAgaWYgKF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5p
c05vbmUgfHwgIV9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJs
ZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgIAotICAg
IExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIC0+ICgldSwgJXUpIiwgX2RhdGEtPl9wYWdl
LT5zZWxlY3Rpb25TdGF0ZSgpLnNlbGVjdGVkUmFuZ2VTdGFydCwgX2RhdGEtPl9wYWdlLT5zZWxl
Y3Rpb25TdGF0ZSgpLnNlbGVjdGVkUmFuZ2VMZW5ndGgpOwotICAgIHJldHVybiBOU01ha2VSYW5n
ZShfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuc2VsZWN0ZWRSYW5nZVN0YXJ0LCBfZGF0
YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuc2VsZWN0ZWRSYW5nZUxlbmd0aCk7CisgICAgW3Nl
bGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOworCisgICAgdWludDY0X3Qgc2VsZWN0
aW9uU3RhcnQ7CisgICAgdWludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoOworICAgIF9kYXRhLT5fcGFn
ZS0+Z2V0U2VsZWN0ZWRSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uTGVuZ3RoKTsKKwor
ICAgIE5TUmFuZ2UgcmVzdWx0ID0gTlNNYWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlv
bkxlbmd0aCk7CisgICAgaWYgKHJlc3VsdC5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAg
ICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRSYW5nZSAtPiAoTlNOb3RGb3VuZCwgJXUpIiwgcmVz
dWx0Lmxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRS
YW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAtIChCT09MKWhhc01hcmtlZFRleHQKIHsKLSAgICBMT0co
VGV4dElucHV0LCAiaGFzTWFya2VkVGV4dCAtPiAldSIsIF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9u
U3RhdGUoKS5oYXNDb21wb3NpdGlvbik7Ci0gICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+c2VsZWN0
aW9uU3RhdGUoKS5oYXNDb21wb3NpdGlvbjsKKyAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJl
c3NDb21tYW5kc107CisKKyAgICBXS1ZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzID0gX2RhdGEtPl9pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworCisgICAg
Qk9PTCByZXN1bHQ7CisgICAgaWYgKHBhcmFtZXRlcnMpCisgICAgICAgIHJlc3VsdCA9IHBhcmFt
ZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlLmhhc01hcmtlZFRleHQ7CisgICAgZWxzZSB7Cisg
ICAgICAgIHVpbnQ2NF90IGxvY2F0aW9uOworICAgICAgICB1aW50NjRfdCBsZW5ndGg7CisgICAg
ICAgIF9kYXRhLT5fcGFnZS0+Z2V0TWFya2VkUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7CisgICAg
ICAgIHJlc3VsdCA9IGxvY2F0aW9uICE9IE5TTm90Rm91bmQ7CisgICAgfQorCisgICAgTE9HKFRl
eHRJbnB1dCwgImhhc01hcmtlZFRleHQgLT4gJXUiLCByZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIC0gKHZvaWQpdW5tYXJrVGV4dAogeworICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRL
ZXlwcmVzc0NvbW1hbmRzXTsKKwogICAgIExPRyhUZXh0SW5wdXQsICJ1bm1hcmtUZXh0Iik7CiAK
LSAgICAvLyBXZSdkIG5lZWQgYSBkaWZmZXJlbnQgY29kZSBwYXRoIGhlcmUgaWYgd2Ugd2FudGVk
IHRvIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMKLSAgICAvLyBvdXRzaWRlIG9mIGludGVycHJldEtl
eUV2ZW50cy4KLSAgICBBU1NFUlQoX2RhdGEtPl9pc0luSW50ZXJwcmV0S2V5RXZlbnRzKTsKKyAg
ICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNh
bGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCisgICAgV0tWaWV3SW50ZXJwcmV0S2V5RXZlbnRz
UGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVyczsKKworICAgIGlmIChwYXJhbWV0ZXJzKSB7CisgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50
SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyA9IHRydWU7CisgICAgICAgIHBhcmFtZXRlcnMt
PmNvbnN1bWVkQnlJTSA9IGZhbHNlOworICAgIH0KIAotICAgIF9kYXRhLT5fY29tbWFuZHNMaXN0
LmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoInVubWFya1RleHQiKSk7CisgICAgVGV4dElucHV0U3Rh
dGUgbmV3VGV4dElucHV0U3RhdGU7CisgICAgX2RhdGEtPl9wYWdlLT5jb25maXJtQ29tcG9zaXRp
b24obmV3VGV4dElucHV0U3RhdGUpOworICAgIGlmIChwYXJhbWV0ZXJzKQorICAgICAgICBwYXJh
bWV0ZXJzLT5jYWNoZWRUZXh0SW5wdXRTdGF0ZSA9IG5ld1RleHRJbnB1dFN0YXRlOwogfQogCiAt
IChOU0FycmF5ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dApAQCAtMTIxNywzOCArMTMx
Miw2MSBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiAKIC0gKHZv
aWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2Vs
UmFuZ2UKIHsKLSAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZD
bGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcK
LSAgICAKKyAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CisKKyAgICBC
T09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1
dGVkU3RyaW5nIGNsYXNzXV07CisgICAgQVNTRVJUKGlzQXR0cmlidXRlZFN0cmluZyB8fCBbc3Ry
aW5nIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOworCiAgICAgTE9HKFRleHRJbnB1
dCwgInNldE1hcmtlZFRleHQ6XCIlQFwiIHNlbGVjdGVkUmFuZ2U6KCV1LCAldSkiLCBpc0F0dHJp
YnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcsIG5ld1NlbFJhbmdlLmxvY2F0
aW9uLCBuZXdTZWxSYW5nZS5sZW5ndGgpOworCisgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBh
cmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRz
LgorICAgIFdLVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBf
ZGF0YS0+X2ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisKKyAgICBpZiAocGFyYW1ldGVy
cykgeworICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVj
dHMgPSB0cnVlOworICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKKyAg
ICB9CiAgICAgCi0gICAgTlNTdHJpbmcgKnRleHQgPSBzdHJpbmc7Ci0gICAgCisgICAgVmVjdG9y
PENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgIE5TU3RyaW5nICp0ZXh0Owor
ICAgIE5TUmFuZ2UgcmVwbGFjZW1lbnRSYW5nZSA9IHsgTlNOb3RGb3VuZCwgMCB9OworCiAgICAg
aWYgKGlzQXR0cmlidXRlZFN0cmluZykgeworICAgICAgICAvLyBGSVhNRTogV2UgaWdub3JlIG1v
c3QgYXR0cmlidXRlcyBmcm9tIHRoZSBzdHJpbmcsIHNvIGFuIGlucHV0IG1ldGhvZCBjYW5ub3Qg
c3BlY2lmeSBlLmcuIGEgZm9udCBvciBhIGdseXBoIHZhcmlhdGlvbi4KICAgICAgICAgdGV4dCA9
IFtzdHJpbmcgc3RyaW5nXTsKLSAgICAgICAgZXh0cmFjdFVuZGVybGluZXMoc3RyaW5nLCBfZGF0
YS0+X3VuZGVybGluZXMpOwotICAgIH0KLSAgICAKLSAgICAvLyBXZSdkIG5lZWQgYSBkaWZmZXJl
bnQgY29kZSBwYXRoIGhlcmUgaWYgd2Ugd2FudGVkIHRvIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMK
LSAgICAvLyBvdXRzaWRlIG9mIGludGVycHJldEtleUV2ZW50cy4KLSAgICBBU1NFUlQoX2RhdGEt
Pl9pc0luSW50ZXJwcmV0S2V5RXZlbnRzKTsKKyAgICAgICAgTlNTdHJpbmcgKnJhbmdlU3RyaW5n
ID0gW3N0cmluZyBhdHRyaWJ1dGU6TlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRl
TmFtZSBhdEluZGV4OjAgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOjAgaW5SYW5nZTpOU01ha2VSYW5n
ZSgwLCBbdGV4dCBsZW5ndGhdKV07CisgICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgUmVwbGFj
ZW1lbnRSYW5nZTogJUAiLCByYW5nZVN0cmluZyk7CisgICAgICAgIC8vIFRoZSBBcHBLaXQgYWRk
cyBhICdzZWNyZXQnIHByb3BlcnR5IHRvIHRoZSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgcmVw
bGFjZW1lbnQgcmFuZ2UuCisgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCByYW5nZSBpcyB0aGUg
cmFuZ2Ugb2YgdGhlIHRoZSB0ZXh0IHRoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5l
dyBzdHJpbmcuCisgICAgICAgIGlmIChyYW5nZVN0cmluZykKKyAgICAgICAgICAgIHJlcGxhY2Vt
ZW50UmFuZ2UgPSBOU1JhbmdlRnJvbVN0cmluZyhyYW5nZVN0cmluZyk7CiAKLSAgICBfZGF0YS0+
X2NvbW1hbmRzTGlzdC5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKCJzZXRNYXJrZWRUZXh0IiwgdGV4
dCkpOwotICAgIF9kYXRhLT5fc2VsZWN0aW9uU3RhcnQgPSBuZXdTZWxSYW5nZS5sb2NhdGlvbjsK
LSAgICBfZGF0YS0+X3NlbGVjdGlvbkVuZCA9IE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2UpOworICAg
ICAgICBleHRyYWN0VW5kZXJsaW5lcyhzdHJpbmcsIHVuZGVybGluZXMpOworICAgIH0gZWxzZQor
ICAgICAgICB0ZXh0ID0gc3RyaW5nOworCisgICAgVGV4dElucHV0U3RhdGUgbmV3VGV4dElucHV0
U3RhdGU7CisgICAgX2RhdGEtPl9wYWdlLT5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVz
LCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShuZXdTZWxSYW5nZSksIHJlcGxhY2Vt
ZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVwbGFjZW1lbnRSYW5nZSksIG5ld1RleHRJ
bnB1dFN0YXRlKTsKKyAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgcGFyYW1ldGVycy0+Y2Fj
aGVkVGV4dElucHV0U3RhdGUgPSBuZXdUZXh0SW5wdXRTdGF0ZTsKIH0KIAogLSAoTlNSYW5nZSlt
YXJrZWRSYW5nZQogeworICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsK
KwogICAgIHVpbnQ2NF90IGxvY2F0aW9uOwogICAgIHVpbnQ2NF90IGxlbmd0aDsKLQogICAgIF9k
YXRhLT5fcGFnZS0+Z2V0TWFya2VkUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7CisKICAgICBMT0co
VGV4dElucHV0LCAibWFya2VkUmFuZ2UgLT4gKCV1LCAldSkiLCBsb2NhdGlvbiwgbGVuZ3RoKTsK
ICAgICByZXR1cm4gTlNNYWtlUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7CiB9CiAKIC0gKE5TQXR0
cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2UpbnNS
YW5nZQogeworICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKKwogICAg
IC8vIFRoaXMgaXMgbm90IGltcGxlbWVudGVkIGZvciBub3cuIE5lZWQgdG8gZmlndXJlIG91dCBo
b3cgdG8gc2VyaWFsaXplIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBhY3Jvc3MgcHJvY2Vzc2VzLgog
ICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlIik7CiAgICAg
cmV0dXJuIG5pbDsKQEAgLTEyNTYsNiArMTM3NCw4IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KWF0dHJpYnV0ZWRTdWJzdHIKIAogLSAoTlNVSW50ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50
OihOU1BvaW50KXRoZVBvaW50CiB7CisgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29t
bWFuZHNdOworCiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CiAgICAgCiAg
ICAgaWYgKHdpbmRvdykKQEAgLTEyNjksNiArMTM4OSw4IEBAIC0gKE5TVUludGVnZXIpY2hhcmFj
dGVySW5kZXhGb3JQb2ludDooTlMKIAogLSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJh
bmdlOihOU1JhbmdlKXRoZVJhbmdlCiB7IAorICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVz
c0NvbW1hbmRzXTsKKwogICAgIC8vIEp1c3QgdG8gbWF0Y2ggTlNUZXh0VmlldydzIGJlaGF2aW9y
LiBSZWdyZXNzaW9uIHRlc3RzIGNhbm5vdCBkZXRlY3QgdGhpczsKICAgICAvLyB0byByZXByb2R1
Y2UsIHVzZSBhIHRlc3QgYXBwbGljYXRpb24gZnJvbSBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NjgyCiAgICAgLy8gKHR5cGUgc29tZXRoaW5nOyB0cnkgcmFuZ2VzICgx
LCAtMSkgYW5kICgyLCAtMSkuCkBAIC0xNzQ0LDI3ICsxODY2LDMxIEBAIC0gKHZvaWQpX3Jlc2Vu
ZEtleURvd25FdmVudDooTlNFdmVudCAqKWUKICAgICBfZGF0YS0+X2tleURvd25FdmVudEJlaW5n
UmVzZW50ID0gbnVsbHB0cjsKIH0KIAotLSAoVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mKV9pbnRl
cmNlcHRLZXlFdmVudDooTlNFdmVudCAqKXRoZUV2ZW50IAorLSAoQk9PTClfaW50ZXJwcmV0S2V5
RXZlbnQ6KE5TRXZlbnQgKilldmVudCB3aXRoQ2FjaGVkVGV4dElucHV0U3RhdGU6KGNvbnN0IFRl
eHRJbnB1dFN0YXRlJiljYWNoZWRUZXh0SW5wdXRTdGF0ZSBzYXZpbmdDb21tYW5kc1RvOihWZWN0
b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpY29tbWFuZHMKIHsKLSAgICBBU1NFUlQoIV9k
YXRhLT5faXNJbkludGVycHJldEtleUV2ZW50cyk7Ci0KLSAgICBfZGF0YS0+X2lzSW5JbnRlcnBy
ZXRLZXlFdmVudHMgPSB0cnVlOwotICAgIF9kYXRhLT5fY29tbWFuZHNMaXN0LmNsZWFyKCk7Ci0K
LSAgICAvLyBDYWxsaW5nIGludGVycHJldEtleUV2ZW50cyB3aWxsIHRyaWdnZXIgb25lIG9yIG1v
cmUgY2FsbHMgdG8gZG9Db21tYW5kQnlTZWxlY3RvciBhbmQgaW5zZXJ0VGV4dAotICAgIC8vIHRo
YXQgd2lsbCBwb3B1bGF0ZSB0aGUgY29tbWFuZHNMaXN0IHZlY3Rvci4KLSAgICBbc2VsZiBpbnRl
cnByZXRLZXlFdmVudHM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnRoZUV2ZW50XV07CisgICAg
QVNTRVJUKCFfZGF0YS0+X2ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMpOworICAgIEFTU0VS
VChjb21tYW5kcy5pc0VtcHR5KCkpOwogCi0gICAgX2RhdGEtPl9pc0luSW50ZXJwcmV0S2V5RXZl
bnRzID0gZmFsc2U7Ci0KLSAgICByZXR1cm4gX2RhdGEtPl9jb21tYW5kc0xpc3Q7Ci19CisgICAg
V0tWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFt
ZXRlcnMuY2FjaGVkVGV4dElucHV0U3RhdGUgPSBjYWNoZWRUZXh0SW5wdXRTdGF0ZTsKKyAgICBw
YXJhbWV0ZXJzLmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyA9IGZhbHNlOworICAg
IC8vIFdlIGFzc3VtZSB0aGF0IGFuIGlucHV0IG1ldGhvZCBoYXMgY29uc3VtZWQgdGhlIGV2ZW50
LCBhbmQgb25seSBjaGFuZ2UgdGhpcyBhc3N1bXB0aW9uIGlmIG9uZSBvZiB0aGUgTlNUZXh0SW5w
dXQgbWV0aG9kcyBpcyBjYWxsZWQuCisgICAgLy8gV2UgYXNzdW1lIHRoZSBJTSB3aWxsICpub3Qq
IGNvbnN1bWUgaG90a2V5IHNlcXVlbmNlcy4KKyAgICBwYXJhbWV0ZXJzLmNvbnN1bWVkQnlJTSA9
ICEoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb21tYW5kS2V5TWFzayk7CisgICAgcGFyYW1l
dGVycy5jb21tYW5kcyA9ICZjb21tYW5kczsKKyAgICBfZGF0YS0+X2ludGVycHJldEtleUV2ZW50
c1BhcmFtZXRlcnMgPSAmcGFyYW1ldGVyczsKKworICAgIFtzZWxmIGludGVycHJldEtleUV2ZW50
czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZXZlbnRdXTsKKworICAgIF9kYXRhLT5faW50ZXJw
cmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7CisKKyAgICAvLyBBbiBpbnB1dCBtZXRob2QgbWF5
IGNvbnN1bWUgYW4gZXZlbnQgYW5kIG5vdCB0ZWxsIHVzIChlLmcuIHdoZW4gZGlzcGxheWluZyBh
IGNhbmRpZGF0ZSB3aW5kb3cpLAorICAgIC8vIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5vdCBi
dWJibGUgdGhlIGV2ZW50IHVwIHRoZSBET00uCisgICAgaWYgKHBhcmFtZXRlcnMuY29uc3VtZWRC
eUlNKQorICAgICAgICByZXR1cm4gWUVTOwogCi0tICh2b2lkKV9nZXRUZXh0SW5wdXRTdGF0ZToo
dW5zaWduZWQpc3RhcnQgc2VsZWN0aW9uRW5kOih1bnNpZ25lZCllbmQgdW5kZXJsaW5lczooVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYpbGluZXMKLXsKLSAgICBzdGFydCA9IF9kYXRhLT5f
c2VsZWN0aW9uU3RhcnQ7Ci0gICAgZW5kID0gX2RhdGEtPl9zZWxlY3Rpb25FbmQ7Ci0gICAgbGlu
ZXMgPSBfZGF0YS0+X3VuZGVybGluZXM7CisgICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGV4ZWN1
dGVkIGFsbCBvciBzb21lIG9mIHRoZSBjb21tYW5kcywgdGhlIGV2ZW50IGlzICJoYW5kbGVkIi4g
Tm90ZSB0aGF0IHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNoZWNrcyBvbiB3ZWIgcHJvY2VzcyBzaWRl
LgorICAgIHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0
czsKIH0KIAogLSAoTlNSZWN0KV9jb252ZXJ0VG9EZXZpY2VTcGFjZTooTlNSZWN0KXJlY3QKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJu
YWwuaAkocmV2aXNpb24gODI2MDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogICAgIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiAgICAgY2xhc3MgRmlu
ZEluZGljYXRvcjsKICAgICBjbGFzcyBMYXllclRyZWVDb250ZXh0OworICAgIHN0cnVjdCBUZXh0
SW5wdXRTdGF0ZTsKIH0KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTUxLDggKzUy
LDcgQEAgQGludGVyZmFjZSBXS1ZpZXcgKEludGVybmFsKQogLSAodm9pZClfdG9vbFRpcENoYW5n
ZWRGcm9tOihOU1N0cmluZyAqKW9sZFRvb2xUaXAgdG86KE5TU3RyaW5nICopbmV3VG9vbFRpcDsK
IC0gKHZvaWQpX3NldEN1cnNvcjooTlNDdXJzb3IgKiljdXJzb3I7CiAtICh2b2lkKV9zZXRVc2Vy
SW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0cmluZyAqKWNvbW1hbmROYW1lIGVuYWJsZWQ6KEJPT0wp
aXNFbmFibGVkIHN0YXRlOihpbnQpbmV3U3RhdGU7Ci0tIChWZWN0b3I8V2ViQ29yZTo6S2V5cHJl
c3NDb21tYW5kPiYpX2ludGVyY2VwdEtleUV2ZW50OihOU0V2ZW50ICopdGhlRXZlbnQ7Ci0tICh2
b2lkKV9nZXRUZXh0SW5wdXRTdGF0ZToodW5zaWduZWQpc3RhcnQgc2VsZWN0aW9uRW5kOih1bnNp
Z25lZCllbmQgdW5kZXJsaW5lczooVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5l
PiYpbGluZXM7CistIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooTlNFdmVudCAqKXRoZUV2ZW50
IHdpdGhDYWNoZWRUZXh0SW5wdXRTdGF0ZTooY29uc3QgV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSYp
Y2FjaGVkVGV4dElucHV0U3RhdGUgc2F2aW5nQ29tbWFuZHNUbzooVmVjdG9yPFdlYkNvcmU6Oktl
eXByZXNzQ29tbWFuZD4mKWNvbW1hbmRzOwogLSAodm9pZClfcmVzZW5kS2V5RG93bkV2ZW50OihO
U0V2ZW50ICopZXZlbnQ7CiAtIChOU1JlY3QpX2NvbnZlcnRUb0RldmljZVNwYWNlOihOU1JlY3Qp
cmVjdDsKIC0gKE5TUmVjdClfY29udmVydFRvVXNlclNwYWNlOihOU1JlY3QpcmVjdDsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShy
ZXZpc2lvbiA4MjYwMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJOYXRp
dmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJU
ZXh0Q2hlY2tlci5oIgorI2ltcG9ydCAiVGV4dElucHV0U3RhdGUuaCIKICNpbXBvcnQgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgpAQCAtMTM0LDExICsxMzUsMzMgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OndpbmRvd0FuZFZpZXdGcmFtZXNDaAogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6V2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNj
cmVlbkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBhY2Nlc3NpYmls
aXR5Vmlld0Nvb3JkaW5hdGVzKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRl
cmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxl
Y3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZUVuZCwgVGV4dElucHV0U3RhdGUmIG5ld1N0YXRlKQoreworICAgIHByb2Nlc3Mo
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVy
bGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIHJlcGxhY2VtZW50UmFuZ2VTdGFy
dCwgcmVwbGFjZW1lbnRSYW5nZUVuZCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlv
bjo6UmVwbHkobmV3U3RhdGUpLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojpj
b25maXJtQ29tcG9zaXRpb24oVGV4dElucHV0U3RhdGUmIG5ld1N0YXRlKQoreworICAgIHByb2Nl
c3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbigpLCBN
ZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uOjpSZXBseShuZXdTdGF0ZSksIG1f
cGFnZUlEKTsKK30KKworYm9vbCBXZWJQYWdlUHJveHk6Omluc2VydFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VFbmQsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3sKKyAgICBib29sIGhhbmRs
ZWQ7CisgICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4
dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQpLCBNZXNz
YWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4dDo6UmVwbHkoaGFuZGxlZCwgbmV3U3RhdGUpLCBtX3Bh
Z2VJRCk7CisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRN
YXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCiB7CiAgICAg
cHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFya2VkUmFuZ2UoKSwg
TWVzc2FnZXM6OldlYlBhZ2U6OkdldE1hcmtlZFJhbmdlOjpSZXBseShsb2NhdGlvbiwgbGVuZ3Ro
KSwgbV9wYWdlSUQpOwogfQotICAgIAorCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRS
YW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCit7CisgICAgcHJvY2Vz
cygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0ZWRSYW5nZSgpLCBNZXNz
YWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0ZWRSYW5nZTo6UmVwbHkobG9jYXRpb24sIGxlbmd0aCks
IG1fcGFnZUlEKTsKK30KKwogdWludDY0X3QgV2ViUGFnZVByb3h5OjpjaGFyYWN0ZXJJbmRleEZv
clBvaW50KGNvbnN0IEludFBvaW50IHBvaW50KQogewogICAgIHVpbnQ2NF90IHJlc3VsdDsKQEAg
LTE1Miw3ICsxNzUsMTQgQEAgV2ViQ29yZTo6SW50UmVjdCBXZWJQYWdlUHJveHk6OmZpcnN0UmVj
dAogICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpLCBNZXNzYWdlczo6V2ViUGFnZTo6Rmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6OlJlcGx5KHJlc3VsdFJlY3QpLCBtX3BhZ2VJRCk7CiAg
ICAgcmV0dXJuIHJlc3VsdFJlY3Q7CiB9Ci0gICAgCisKK2Jvb2wgV2ViUGFnZVByb3h5OjpleGVj
dXRlS2V5cHJlc3NDb21tYW5kcyhWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29t
bWFuZHMsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3sKKyAgICBib29sIHJlc3VsdDsKKyAg
ICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlS2V5cHJlc3ND
b21tYW5kcyhjb21tYW5kcyksIE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlS2V5cHJlc3NDb21t
YW5kczo6UmVwbHkocmVzdWx0LCBuZXdTdGF0ZSksIG1fcGFnZUlEKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBib29sIFdlYlBhZ2VQcm94eTo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3Rl
Ym9hcmRUeXBlcykKIHsKICAgICBib29sIHJlc3VsdDsKQEAgLTE4Niw5ICsyMTYsOSBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rCiAgICAgcHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9p
bnQpLCBtX3BhZ2VJRCk7IAogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZl
bnQodWludDMyX3QgdHlwZSwgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzTGlzdCwg
dWludDMyX3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQzMl90IHNlbGVjdGlvbkVuZCwgVmVjdG9yPENv
bXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcykKK3ZvaWQgV2ViUGFnZVByb3h5OjppbnRl
cnByZXRRdWV1ZWRLZXlFdmVudChjb25zdCBUZXh0SW5wdXRTdGF0ZSYgc3RhdGUsIGJvb2wmIGhh
bmRsZWQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKIHsKLSAg
ICBtX3BhZ2VDbGllbnQtPmludGVyY2VwdEtleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgp
LCBjb21tYW5kc0xpc3QsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIHVuZGVybGluZXMp
OworICAgIGhhbmRsZWQgPSBtX3BhZ2VDbGllbnQtPmludGVycHJldEtleUV2ZW50KG1fa2V5RXZl
bnRRdWV1ZS5maXJzdCgpLCBzdGF0ZSwgY29tbWFuZHMpOwogfQogCiAvLyBDb21wbGV4IHRleHQg
aW5wdXQgc3VwcG9ydCBmb3IgcGx1Zy1pbnMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MjYwMykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNzgyLDYgKzc4Miw3IEBACiAJCUQzQjk0ODQ5MTFGRjRCNjUwMDAzMkIzOSAvKiBX
ZWJTZWFyY2hQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQzQjk0ODQ1MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUu
aCAqLzsgfTsKIAkJRTEzNEYwMTcxMkVBNUQzMzAwNEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM0RjAxNTEy
RUE1RDExMDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcuaCAqLzsgfTsKIAkJRTEzNEYwMUExMkVB
NUQ5OTAwNEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzNEYwMTkxMkVBNUQ5OTAwNEVDNThEIC8qIFdLUHJp
bnRpbmdWaWV3Lm1tICovOyB9OworCQlFMTgzOTM0OTEzNDI5N0E1MDAxODQyRUMgLyogVGV4dElu
cHV0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxODM5MzQ4MTM0Mjk3QTUwMDE4NDJFQyAvKiBUZXh0SW5wdXRTdGF0ZS5oICovOyB9OwogCQlF
MThDOTJGNDEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEM5MkYzMTJEQjlFNzEwMENGMkFFQiAv
KiBQcmludEluZm8uY3BwICovOyB9OwogCQlFMUJCMTZBNDEzMjAxQjlCMDBGNDk0MzEgLyogRnVs
bEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFCQjE2ODgxMzIwMThCQTAwRjQ5NDMxIC8qIEZ1bGxLZXlib2FyZEFj
Y2Vzc1dhdGNoZXIuaCAqLzsgfTsKIAkJRTFCQjE2QTUxMzIwMUI5QjAwRjQ5NDMxIC8qIEZ1bGxL
ZXlib2FyZEFjY2Vzc1dhdGNoZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUJCMTY4OTEzMjAxOEJBMDBGNDk0MzEgLyogRnVsbEtleWJvYXJkQWNj
ZXNzV2F0Y2hlci5tbSAqLzsgfTsKQEAgLTE2OTgsNiArMTY5OSw3IEBACiAJCUQzQjk0ODQ1MTFG
RjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViU2VhcmNoUG9wdXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxMzRGMDE1MTJFQTVEMTEwMDRFQzU4RCAvKiBXS1ByaW50aW5nVmlldy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByaW50aW5nVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTM0RjAxOTEyRUE1RDk5MDA0RUM1OEQgLyogV0tQcmlu
dGluZ1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1By
aW50aW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4MzkzNDgxMzQy
OTdBNTAwMTg0MkVDIC8qIFRleHRJbnB1dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRleHRJbnB1dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxOEM5MkYzMTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTFCQjE2ODgxMzIwMThCQTAwRjQ5NDMxIC8qIEZ1bGxLZXlib2FyZEFjY2Vz
c1dhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEtleWJvYXJk
QWNjZXNzV2F0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJCMTY4OTEz
MjAxOEJBMDBGNDk0MzEgLyogRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NjIsNiArMjc2NCw3IEBACiAJCQkJ
MUFBQjRBQTkxMjk2RjE1NDAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb25NYWMubW0gKi8sCiAJ
CQkJMUE5NjM2QkExMkYzNDg0OTAwNzhBMDYyIC8qIFNoYXJlYWJsZVN1cmZhY2UuY3BwICovLAog
CQkJCTFBOTYzNkJCMTJGMzQ4NDkwMDc4QTA2MiAvKiBTaGFyZWFibGVTdXJmYWNlLmggKi8sCisJ
CQkJRTE4MzkzNDgxMzQyOTdBNTAwMTg0MkVDIC8qIFRleHRJbnB1dFN0YXRlLmggKi8sCiAJCQkJ
QkM5RTk1RDIxMTQ0OUIwMzAwODcwRTcxIC8qIFVwZGF0ZUNodW5rLmNwcCAqLywKIAkJCQlCQzlF
OTVEMTExNDQ5QjAzMDA4NzBFNzEgLyogVXBkYXRlQ2h1bmsuaCAqLywKIAkJCQlCQ0UyMzI2MjEy
MkM2Q0YzMDBENUMzNUEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tICovLApAQCAtMzY1
MSw2ICszNjU0LDcgQEAKIAkJCQlDMDY0NTA0QTEzM0JFNzA5MDAzNDcwRTIgLyogTGF5ZXJUcmVl
SG9zdENBLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTEwQUUwRDEzM0MxNkNCMDA3MjcxN0EgLyog
V0tJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjNDRjFDMTMzRDI2MEEwMDU2
RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTgzOTM0OTEz
NDI5N0E1MDAxODQyRUMgLyogVGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xp
ZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkocmV2aXNpb24gODI2MDMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGll
bnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY0LDEzICs2NCwxMyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKICAgICAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChtX3BhZ2UtPmludGVyY2VwdEVkaXRpbmdL
ZXlib2FyZEV2ZW50KGV2ZW50LCBmYWxzZSkpCisgICAgaWYgKG1fcGFnZS0+aGFuZGxlRWRpdGlu
Z0tleWJvYXJkRXZlbnQoZXZlbnQsIGZhbHNlKSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtl
eWRvd24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKG1fcGFnZS0+aW50ZXJjZXB0
RWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQsIHRydWUpKQorICAgIGlmIChtX3BhZ2UtPmhhbmRs
ZUVkaXRpbmdLZXlib2FyZEV2ZW50KGV2ZW50LCB0cnVlKSkKICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA4MjYwMykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUx
LDYgKzE1MSw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCAKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgLCBtX3dpbmRvd0lzVmlzaWJsZShmYWxzZSkKICAgICAsIG1f
aXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQocGFyYW1ldGVycy5pc1NtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZCkKKyAgICAsIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQoMCkKICNlbGlm
IFBMQVRGT1JNKFdJTikKICAgICAsIG1fbmF0aXZlV2luZG93KHBhcmFtZXRlcnMubmF0aXZlV2lu
ZG93KQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHJldmlzaW9uIDgyNjAzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKICAgICBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOworICAgIHN0cnVjdCBLZXlwcmVz
c0NvbW1hbmQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTA0LDYgKzEwNSw3IEBAIGNs
YXNzIFdlYlBhZ2VHcm91cFByb3h5OwogY2xhc3MgV2ViUG9wdXBNZW51OwogY2xhc3MgV2ViV2hl
ZWxFdmVudDsKIHN0cnVjdCBQcmludEluZm87CitzdHJ1Y3QgVGV4dElucHV0U3RhdGU7CiBzdHJ1
Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3Jl
OwogCkBAIC0xNTksNyArMTYxLDkgQEAgcHVibGljOgogICAgIHZvaWQgbGF5b3V0SWZOZWVkZWQo
KTsKIAogICAgIC8vIC0tIENhbGxlZCBmcm9tIFdlYkNvcmUgY2xpZW50cy4KLSNpZiAhUExBVEZP
Uk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29sIGhhbmRsZUVkaXRpbmdLZXlib2Fy
ZEV2ZW50KFdlYkNvcmU6OktleWJvYXJkRXZlbnQqLCBib29sIHNhdmVDb21tYW5kcyk7CisjZWxz
ZQogICAgIGJvb2wgaGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRF
dmVudCopOwogI2VuZGlmCiAgICAgdm9pZCBzaG93KCk7CkBAIC0yNDAsNyArMjQ0LDYgQEAgcHVi
bGljOgogICAgIGJvb2wgd2luZG93SXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dJ
c1Zpc2libGU7IH0KICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29y
ZGluYXRlczsgfQogICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0
ZXM7IH0KLSAgICBib29sIGludGVyY2VwdEVkaXRpbmdLZXlib2FyZEV2ZW50KFdlYkNvcmU6Oktl
eWJvYXJkRXZlbnQqLCBib29sKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05EIG5hdGl2
ZVdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlV2luZG93OyB9CiAjZW5kaWYKQEAgLTMw
NSw5ICszMDgsMTQgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5w
dXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiB0ZXh0SW5wdXQpOwogCisgICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJs
aW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWlu
dDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5k
LCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpOworICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9u
KFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7CisgICAgdm9pZCBpbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBs
YWNlbWVudFJhbmdlRW5kLCBib29sJiBoYW5kbGVkLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUp
OwogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYg
bGVuZ3RoKTsKKyAgICB2b2lkIGdldFNlbGVjdGVkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1
aW50NjRfdCYgbGVuZ3RoKTsKICAgICB2b2lkIGNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90JiByZXN1bHQpOwogICAgIHZvaWQgZmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0
aCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0UmVjdCk7CisgICAgdm9pZCBleGVjdXRlS2V5cHJl
c3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYsIGJvb2wm
IGhhbmRsZWQsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7CiAgICAgdm9pZCB3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChjb25zdCBXVEY6OlN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0
IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBib29sJiByZXN1bHQp
OwogICAgIHZvaWQgcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFdURjo6U3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgYm9vbCYgcmVzdWx0KTsKICNlbGlmIFBMQVRGT1JNKFdJTikKQEAg
LTM4Myw5ICszOTEsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFJlY2VpdmVXZWJQYWdlTWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqKTsKICAgICBDb3JlSVBDOjpTeW5jUmVwbHlNb2RlIGRpZFJlY2VpdmVT
eW5jV2ViUGFnZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKik7
CiAKKyNpZiAhUExBVEZPUk0oTUFDKQogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnRlcnByZXRL
ZXlFdmVudChjb25zdCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CisjZW5kaWYKICAgICBib29s
IHBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50
Jik7CiAKKyNpZiBQTEFURk9STShNQUMpCisgICAgYm9vbCBleGVjdXRlS2V5cHJlc3NDb21tYW5k
c0ludGVybmFsKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiwgV2ViQ29y
ZTo6S2V5Ym9hcmRFdmVudCopOworI2VuZGlmCisKICAgICBTdHJpbmcgc291cmNlRm9yRnJhbWUo
V2ViRnJhbWUqKTsKIAogICAgIHZvaWQgbG9hZERhdGEoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5n
TmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgYmFzZVVSTCwgY29uc3QgV2ViQ29yZTo6S1VSTCYg
ZmFpbGluZ1VSTCk7CkBAIC01NDUsNiArNTU5LDkgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8
QWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3Q+IG1fbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50Owog
CiAgICAgUmV0YWluUHRyPE5TT2JqZWN0PiBtX2RyYWdTb3VyY2U7CisKKyAgICBXZWJDb3JlOjpL
ZXlib2FyZEV2ZW50KiBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkOworCiAjZWxpZiBQ
TEFURk9STShXSU4pCiAgICAgLy8gT3VyIHZpZXcncyB3aW5kb3cgKGluIHRoZSBVSSBwcm9jZXNz
KS4KICAgICBIV05EIG1fbmF0aXZlV2luZG93OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDgy
NjAzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE3OSwxNCArMTc5LDIzIEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2UgewogCiAgICAgU2V0V2luZG93SXNWaXNpYmxlKGJvb2wgd2luZG93SXNWaXNpYmxlKQog
ICAgIFdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKFdlYkNvcmU6OkludFJlY3Qgd2luZG93RnJh
bWVJblNjcmVlbkNvb3JkaW5hdGVzLCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMsIFdlYkNvcmU6OkludFBvaW50IGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0
ZXMpCi0gICAgR2V0TWFya2VkUmFuZ2UoKSAtPiAodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90
IGxlbmd0aCkKLSAgICBDaGFyYWN0ZXJJbmRleEZvclBvaW50KFdlYkNvcmU6OkludFBvaW50IHBv
aW50KSAtPiAodWludDY0X3QgcmVzdWx0KQotICAgIEZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdl
KHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpIC0+IChXZWJDb3JlOjpJbnRSZWN0
IHJlc3VsdFJlY3QpCiAgICAgUmVnaXN0ZXJVSVByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW5zKENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UgZWxlbWVuVG9rZW4sIENvcmVJUEM6OkRhdGFSZWZlcmVuY2Ug
d2luZG93VG9rZW4pCiAgICAgV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV1RGOjpTdHJpbmcg
cGFzdGVib2FyZE5hbWUsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXMp
IC0+IChib29sIHJlc3VsdCkKICAgICBSZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoV1RGOjpT
dHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChib29sIHJlc3VsdCkKKworICAgICMgVGV4dCBpbnB1
dC4KKyAgICBTZXRDb21wb3NpdGlvbihXVEY6OlN0cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxXZWJD
b3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9u
U3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0
YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKSAtPiAoV2ViS2l0OjpUZXh0SW5wdXRT
dGF0ZSBuZXdTdGF0ZSkKKyAgICBDb25maXJtQ29tcG9zaXRpb24oKSAtPiAoV2ViS2l0OjpUZXh0
SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKKyAgICBJbnNlcnRUZXh0KFdURjo6U3RyaW5nIHRleHQsIHVp
bnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVu
ZCkgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKKyAg
ICBHZXRNYXJrZWRSYW5nZSgpIC0+ICh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3Ro
KQorICAgIEdldFNlbGVjdGVkUmFuZ2UoKSAtPiAodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90
IGxlbmd0aCkKKyAgICBDaGFyYWN0ZXJJbmRleEZvclBvaW50KFdlYkNvcmU6OkludFBvaW50IHBv
aW50KSAtPiAodWludDY0X3QgcmVzdWx0KQorICAgIEZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdl
KHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpIC0+IChXZWJDb3JlOjpJbnRSZWN0
IHJlc3VsdFJlY3QpCisgICAgRXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoVmVjdG9yPFdlYkNvcmU6
OktleXByZXNzQ29tbWFuZD4gc2F2ZWRDb21tYW5kcykgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0
OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKKwogI2VuZGlmCiAjaWYgUExBVEZPUk0oV0lOKQor
ICAgIC8vIEZJWE1FOiBVbmlmeSB3aXRoIE1hYyBjb3VudGVycGFydHMuCiAgICAgQ29uZmlybUNv
bXBvc2l0aW9uKFdURjo6U3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nKQogICAgIFNldENvbXBvc2l0
aW9uKFdURjo6U3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpD
b21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3QgY3Vyc29yUG9zaXRpb24p
CiAgICAgRmlyc3RSZWN0Rm9yQ2hhcmFjdGVySW5TZWxlY3RlZFJhbmdlKHVpbnQ2NF90IGNoYXJh
Y3RlclBvc2l0aW9uKSAtPiAoV2ViQ29yZTo6SW50UmVjdCByZXN1bHRSZWN0KQpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQkocmV2aXNpb24gODI2MDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBv
cnQgIkFjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0LmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNl
LmgiCiAjaW1wb3J0ICJQbHVnaW5WaWV3LmgiCisjaW1wb3J0ICJUZXh0SW5wdXRTdGF0ZS5oIgog
I2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0ICJXZWJFdmVudC5oIgog
I2ltcG9ydCAiV2ViRnJhbWUuaCIKQEAgLTUzLDYgKzU0LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4g
Y29udmVydFRvUmFuZ2UoRnJhbWUqLCBOU1JhbmdlKTsKKwogdm9pZCBXZWJQYWdlOjpwbGF0Zm9y
bUluaXRpYWxpemUoKQogewogICAgIG1fcGFnZS0+YWRkU2NoZWR1bGVQYWlyKFNjaGVkdWxlUGFp
cjo6Y3JlYXRlKFtOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdLCBrQ0ZSdW5Mb29wQ29tbW9uTW9k
ZXMpKTsKQEAgLTc3LDY4ICs4MCwxMjkgQEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVu
Y2VzRGlkQ2hhbgogewogfQogCi1ib29sIFdlYlBhZ2U6OmludGVyY2VwdEVkaXRpbmdLZXlib2Fy
ZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2dCwgYm9vbCBzaG91bGRTYXZlQ29tbWFuZCkKK3R5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU2VsZWN0b3JOYW1lTWFwOworCisvLyBNYXAgc2Vs
ZWN0b3JzIGludG8gRWRpdG9yIGNvbW1hbmQgbmFtZXMuCisvLyBUaGlzIGlzIG5vdCBuZWVkZWQg
Zm9yIGFueSBzZWxlY3RvcnMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIEVkaXRvciBj
b21tYW5kLgorc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogY3JlYXRlU2VsZWN0b3JFeGNl
cHRpb25NYXAoKQoreworICAgIFNlbGVjdG9yTmFtZU1hcCogbWFwID0gbmV3IEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+OworCisgICAgbWFwLT5hZGQoImluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxk
RWRpdG9yOiIsICJJbnNlcnROZXdsaW5lIik7CisgICAgbWFwLT5hZGQoImluc2VydFBhcmFncmFw
aFNlcGFyYXRvcjoiLCAiSW5zZXJ0TmV3bGluZSIpOworICAgIG1hcC0+YWRkKCJpbnNlcnRUYWJJ
Z25vcmluZ0ZpZWxkRWRpdG9yOiIsICJJbnNlcnRUYWIiKTsKKyAgICBtYXAtPmFkZCgicGFnZURv
d246IiwgIk1vdmVQYWdlRG93biIpOworICAgIG1hcC0+YWRkKCJwYWdlRG93bkFuZE1vZGlmeVNl
bGVjdGlvbjoiLCAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIik7CisgICAgbWFwLT5h
ZGQoInBhZ2VVcDoiLCAiTW92ZVBhZ2VVcCIpOworICAgIG1hcC0+YWRkKCJwYWdlVXBBbmRNb2Rp
ZnlTZWxlY3Rpb246IiwgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iKTsKKworICAgIHJl
dHVybiBtYXA7Cit9CisKK3N0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUo
Y29uc3QgU3RyaW5nJiBzZWxlY3Rvck5hbWUpCiB7Ci0gICAgTm9kZSogbm9kZSA9IGV2dC0+dGFy
Z2V0KCktPnRvTm9kZSgpOworICAgIC8vIENoZWNrIHRoZSBleGNlcHRpb24gbWFwIGZpcnN0Lgor
ICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNl
bGVjdG9yRXhjZXB0aW9uTWFwKCk7CisgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvck5hbWUpOworICAgIGlmIChpdCAhPSBl
eGNlcHRpb25NYXAtPmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgIC8v
IFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCisgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXpl
IHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlIG5vdCBjYXNl
IHNlbnNpdGl2ZS4KKyAgICBzaXplX3Qgc2VsZWN0b3JOYW1lTGVuZ3RoID0gc2VsZWN0b3JOYW1l
Lmxlbmd0aCgpOworICAgIGlmIChzZWxlY3Rvck5hbWVMZW5ndGggPCAyIHx8IHNlbGVjdG9yTmFt
ZVtzZWxlY3Rvck5hbWVMZW5ndGggLSAxXSAhPSAnOicpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gc2VsZWN0b3JOYW1lLmxlZnQoc2VsZWN0b3JOYW1lTGVuZ3RoIC0gMSk7
Cit9CisKK3N0YXRpYyBUZXh0SW5wdXRTdGF0ZSBjdXJyZW50VGV4dElucHV0U3RhdGUoRnJhbWUq
IGZyYW1lKQoreworICAgIFRleHRJbnB1dFN0YXRlIHN0YXRlOworICAgIHN0YXRlLmhhc01hcmtl
ZFRleHQgPSBmcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7CisgICAgc3RhdGUuc2Vs
ZWN0aW9uSXNFZGl0YWJsZSA9ICFmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpICYmIGZyYW1l
LT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gc3RhdGU7Cit9
CisKK3N0YXRpYyBGcmFtZSogZnJhbWVGb3JFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sK
KyAgICBOb2RlKiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKICAgICBBU1NFUlQo
bm9kZSk7CiAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAg
ICBBU1NFUlQoZnJhbWUpOworICAgIHJldHVybiBmcmFtZTsKK30KKworYm9vbCBXZWJQYWdlOjpl
eGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVybmFsKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlw
cmVzc0NvbW1hbmQ+JiBjb21tYW5kcywgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgRnJh
bWUqIGZyYW1lID0gZnJhbWVGb3JFdmVudChldmVudCk7CisgICAgQVNTRVJUKGZyYW1lLT5wYWdl
KCkgPT0gY29yZVBhZ2UoKSk7CisKKyAgICBib29sIGV2ZW50V2FzSGFuZGxlZCA9IGZhbHNlOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tbWFuZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lID09ICJpbnNlcnRUZXh0OiIpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghZnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpKTsKKworICAg
ICAgICAgICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gQW4gaW5zZXJ0VGV4dDogbWlnaHQgYmUgaGFu
ZGxlZCBieSBvdGhlciByZXNwb25kZXJzIGluIHRoZSBjaGFpbiBpZiB3ZSBkb24ndCBoYW5kbGUg
aXQuCisgICAgICAgICAgICAvLyBPbmUgZXhhbXBsZSBpcyBzcGFjZSBiYXIgdGhhdCByZXN1bHRz
IGluIHNjcm9sbGluZyBkb3duIHRoZSBwYWdlLgorICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVk
IHw9IGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChjb21tYW5kc1tpXS50ZXh0LCBldmVudCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9
IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFtZShjb21t
YW5kc1tpXS5jb21tYW5kTmFtZSkpOworICAgICAgICAgICAgaWYgKGNvbW1hbmQuaXNTdXBwb3J0
ZWQoKSkKKyAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgfD0gY29tbWFuZC5leGVjdXRl
KGV2ZW50KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZWJIVE1MVmlldyBzZW5kcyB0aGUgZXZl
bnQgdXAgdGhlIHJlc3BvbmRlciBjaGFpbiB3aXRoIFdlYlJlc3BvbmRlckNoYWluU2luayBpZiBp
dCdzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVkaXRvci4gU2hvdWxkIHdlIGRvIHRoZSBzYW1lPwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBldmVudFdhc0hhbmRsZWQ7Cit9CisKK2Jvb2wg
V2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQs
IGJvb2wgc2F2ZUNvbW1hbmRzKQoreworICAgIEFTU0VSVCghc2F2ZUNvbW1hbmRzIHx8IGV2ZW50
LT5rZXlwcmVzc0NvbW1hbmRzKCkuaXNFbXB0eSgpKTsgLy8gU2F2ZSBjb21tYW5kcyBvbmNlIGZv
ciBlYWNoIGV2ZW50LgorCisgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVGb3JFdmVudChldmVudCk7
CiAgICAgCi0gICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBrZXlFdmVudCA9IGV2dC0+
a2V5RXZlbnQoKTsKLSAgICBpZiAoIWtleUV2ZW50KQorICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9h
cmRFdmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOworICAgIGlmICghcGxh
dGZvcm1FdmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFZlY3RvcjxLZXlw
cmVzc0NvbW1hbmQ+JiBjb21tYW5kcyA9IGV2dC0+a2V5cHJlc3NDb21tYW5kcygpOwotICAgIGJv
b2wgaGFzS2V5cHJlc3NDb21tYW5kID0gIWNvbW1hbmRzLmlzRW1wdHkoKTsKLSAgICAKKyAgICBW
ZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMgPSBldmVudC0+a2V5cHJlc3NDb21tYW5k
cygpOworCisgICAgaWYgKFtwbGF0Zm9ybUV2ZW50LT5tYWNFdmVudCgpIHR5cGVdID09IE5TRmxh
Z3NDaGFuZ2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBib29sIGV2ZW50V2FzSGFu
ZGxlZCA9IGZhbHNlOwogICAgIAotICAgIGlmIChzaG91bGRTYXZlQ29tbWFuZCB8fCAhaGFzS2V5
cHJlc3NDb21tYW5kKSB7Ci0gICAgICAgIFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+IGNvbW1hbmRz
TGlzdDsgIAotICAgICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7
Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0OwotICAgICAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgICAg
IGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRLZXlFdmVudChrZXlFdmVudC0+dHlwZSgpKSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRLZXlFdmVudDo6UmVwbHkoY29tbWFuZHNM
aXN0LCBzdGFydCwgZW5kLCB1bmRlcmxpbmVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZUlELCBDb3JlSVBDOjpDb25uZWN0
aW9uOjpOb1RpbWVvdXQpKQorICAgIGlmIChzYXZlQ29tbWFuZHMpIHsKKyAgICAgICAgS2V5Ym9h
cmRFdmVudCogb2xkRXZlbnQgPSBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkOworICAg
ICAgICBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkID0gZXZlbnQ7CisgICAgICAgIGJv
b2wgc2VuZFJlc3VsdCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0UXVldWVkS2V5RXZlbnQoY3VycmVu
dFRleHRJbnB1dFN0YXRlKGZyYW1lKSksIAorICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6SW50ZXJwcmV0UXVldWVkS2V5RXZlbnQ6OlJlcGx5KGV2ZW50V2FzSGFuZGxlZCwgY29t
bWFuZHMpLCBtX3BhZ2VJRCk7CisgICAgICAgIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0
ZWQgPSBvbGRFdmVudDsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIC8vIEFuIGlucHV0IG1ldGhvZCBtYXkgbWFrZSBzZXZlcmFs
IGFjdGlvbnMgcGVyIGtleXByZXNzLiBGb3IgZXhhbXBsZSwgcHJlc3NpbmcgUmV0dXJuIHdpdGgg
S29yZWFuIElNIGJvdGggY29uZmlybXMgaXQgYW5kIHNlbmRzIGEgbmV3bGluZS4KKyAgICAgICAg
Ly8gSU0tbGlrZSBhY3Rpb25zIGFyZSBoYW5kbGVkIGltbWVkaWF0ZWx5IChzbyB0aGUgcmV0dXJu
IHZhbHVlIGZyb20gVUkgcHJvY2VzcyBpcyB0cnVlKSwgYnV0IHRoZXJlIGFyZSBzYXZlZCBjb21t
YW5kcyB0aGF0CisgICAgICAgIC8vIHNob3VsZCBiZSBoYW5kbGVkIGxpa2Ugbm9ybWFsIHRleHQg
aW5wdXQgYWZ0ZXIgRE9NIGV2ZW50IGRpc3BhdGNoLgorICAgICAgICBpZiAoIWV2ZW50LT5rZXlw
cmVzc0NvbW1hbmRzKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoY29tbWFuZHNMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBldmVu
dFdhc0hhbmRsZWQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29tbWFuZHNMaXN0WzBdLmNvbW1h
bmROYW1lID09ICJzZXRNYXJrZWRUZXh0IikgewotICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT5zZXRDb21wb3NpdGlvbihjb21tYW5kc0xpc3RbMF0udGV4dCwgdW5kZXJsaW5lcywgc3RhcnQs
IGVuZCk7Ci0gICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKGNvbW1hbmRzTGlzdFswXS5jb21tYW5kTmFtZSA9PSAiaW5zZXJ0VGV4dCIgJiYgZnJh
bWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpKSB7Ci0gICAgICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihjb21tYW5kc0xpc3RbMF0udGV4dCk7Ci0gICAgICAg
ICAgICBldmVudFdhc0hhbmRsZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRz
TGlzdFswXS5jb21tYW5kTmFtZSA9PSAidW5tYXJrVGV4dCIpIHsKLSAgICAgICAgICAgIGZyYW1l
LT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBldmVudFdhc0hh
bmRsZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb21tYW5kc0xpc3Quc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgZXZ0
LT5rZXlwcmVzc0NvbW1hbmRzKCkuYXBwZW5kKGNvbW1hbmRzTGlzdFtpXSk7Ci0gICAgICAgIH0K
ICAgICB9IGVsc2UgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IGNvbW1hbmRzLnNpemUoKTsKLSAg
ICAgICAgLy8gQXJlIHRoZXJlIGNvbW1hbmRzIHRoYXQgd291bGQganVzdCBjYXVzZSB0ZXh0IGlu
c2VydGlvbiBpZiBleGVjdXRlZCB2aWEgRWRpdG9yPworICAgICAgICAvLyBBcmUgdGhlcmUgY29t
bWFuZHMgdGhhdCBjb3VsZCBqdXN0IGNhdXNlIHRleHQgaW5zZXJ0aW9uIGlmIGV4ZWN1dGVkIHZp
YSBFZGl0b3I/CiAgICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0
aW9uIGFib3V0IG1vZGUgdG8gZGVjaWRlIGhvdyB0aGV5IHNob3VsZCBiZSB0cmVhdGVkLCBzbyB3
ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUKICAgICAgICAgLy8gdG8gZWl0aGVyIGhhbmRsZSB0aGVt
IGltbWVkaWF0ZWx5IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXBy
ZXNzIGV2ZW50IGJlIGdlbmVyYXRlZAogICAgICAgICAvLyAoZS5nLiBUYWIgdGhhdCBpbnNlcnRz
IGEgVGFiIGNoYXJhY3Rlciwgb3IgRW50ZXIpLgogICAgICAgICBib29sIGhhdmVUZXh0SW5zZXJ0
aW9uQ29tbWFuZHMgPSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFu
ZHNbaV0uY29tbWFuZE5hbWUpLmlzVGV4dEluc2VydGlvbigpKQorICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvbW1hbmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbW1hbmRz
W2ldLmNvbW1hbmROYW1lKSkuaXNUZXh0SW5zZXJ0aW9uKCkpCiAgICAgICAgICAgICAgICAgaGF2
ZVRleHRJbnNlcnRpb25Db21tYW5kcyA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFo
YXZlVGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IGtleUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpDaGFyKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChjb21tYW5kc1tpXS5jb21tYW5kTmFt
ZSA9PSAiaW5zZXJ0VGV4dCIpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0
IG51bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVj
dGVkIGJlaGF2aW91cgotICAgICAgICAgICAgICAgICAgICBpZiAoZXZ0LT5jaGFyQ29kZSgpIDwg
JyAnKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBldmVudFdhc0hhbmRsZWQgPSBmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoY29t
bWFuZHNbaV0udGV4dCwgZXZ0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kc1tpXS5jb21tYW5k
TmFtZSkuaXNTdXBwb3J0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFu
ZGxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kc1tpXS5jb21tYW5kTmFtZSku
ZXhlY3V0ZShldnQpOwotICAgICAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8g
dGV4dCBpbnNlcnRpb24gY29tbWFuZHMsIGRlZmF1bHQga2V5ZG93biBoYW5kbGVyIGlzIHRoZSBy
aWdodCB0aW1lIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmRzLgorICAgICAgICAvLyBLZXlwcmVzcyAo
Q2hhciBldmVudCkgaGFuZGxlciBpcyB0aGUgbGF0ZXN0IG9wcG9ydHVuaXR5IHRvIGV4ZWN1dGUu
CisgICAgICAgIGlmICghaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyB8fCBwbGF0Zm9ybUV2ZW50
LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyKSB7CisgICAgICAgICAgICBl
dmVudFdhc0hhbmRsZWQgPSBleGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVybmFsKGV2ZW50LT5r
ZXlwcmVzc0NvbW1hbmRzKCksIGV2ZW50KTsKKyAgICAgICAgICAgIGV2ZW50LT5rZXlwcmVzc0Nv
bW1hbmRzKCkuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZXZlbnRXYXNI
YW5kbGVkOwpAQCAtMTUyLDYgKzIxNiw1NCBAQCB2b2lkIFdlYlBhZ2U6OnNlbmRDb21wbGV4VGV4
dElucHV0VG9QbHVnCiAgICAgfQogfQogCit2b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVz
LCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRf
dCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIFRl
eHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKworICAgIGlmIChmcmFtZS0+
c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdl
PiByZXBsYWNlbWVudFJhbmdlOworICAgICAgICBpZiAocmVwbGFjZW1lbnRSYW5nZVN0YXJ0ICE9
IE5TTm90Rm91bmQpIHsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2UgPSBjb252ZXJ0VG9S
YW5nZShmcmFtZSwgTlNNYWtlUmFuZ2UocmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVu
dFJhbmdlRW5kIC0gcmVwbGFjZW1lbnRSYW5nZVN0YXJ0KSk7CisgICAgICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJlcGxhY2VtZW50UmFu
Z2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIH0KKworICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25FbmQpOworICAgIH0KKworICAgIG5ld1N0YXRlID0gY3VycmVudFRl
eHRJbnB1dFN0YXRlKGZyYW1lKTsKK30KKwordm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRp
b24oVGV4dElucHV0U3RhdGUmIG5ld1N0YXRlKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworCisgICAgZnJhbWUt
PmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24oKTsKKworICAgIG5ld1N0YXRlID0gY3VycmVu
dFRleHRJbnB1dFN0YXRlKGZyYW1lKTsKK30KKwordm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRf
dCByZXBsYWNlbWVudFJhbmdlRW5kLCBib29sJiBoYW5kbGVkLCBUZXh0SW5wdXRTdGF0ZSYgbmV3
U3RhdGUpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFu
Z2U7CisgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2VTdGFydCAhPSBOU05vdEZvdW5kKSB7CisgICAg
ICAgIHJlcGxhY2VtZW50UmFuZ2UgPSBjb252ZXJ0VG9SYW5nZShmcmFtZSwgTlNNYWtlUmFuZ2Uo
cmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kIC0gcmVwbGFjZW1lbnRS
YW5nZVN0YXJ0KSk7CisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24ocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgU0VMX0RFRkFVTFRfQUZGSU5J
VFkpKTsKKyAgICB9CisKKyAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24o
KSkgeworICAgICAgICAvLyBBbiBpbnNlcnRUZXh0OiBtaWdodCBiZSBoYW5kbGVkIGJ5IG90aGVy
IHJlc3BvbmRlcnMgaW4gdGhlIGNoYWluIGlmIHdlIGRvbid0IGhhbmRsZSBpdC4KKyAgICAgICAg
Ly8gT25lIGV4YW1wbGUgaXMgc3BhY2UgYmFyIHRoYXQgcmVzdWx0cyBpbiBzY3JvbGxpbmcgZG93
biB0aGUgcGFnZS4KKyAgICAgICAgaGFuZGxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4
dCh0ZXh0LCBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb25maXJt
Q29tcG9zaXRpb24odGV4dCk7CisgICAgfQorCisgICAgbmV3U3RhdGUgPSBjdXJyZW50VGV4dElu
cHV0U3RhdGUoZnJhbWUpOworfQorCiB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKHVpbnQ2
NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKIHsKICAgICBsb2NhdGlvbiA9IE5TTm90
Rm91bmQ7CkBAIC0xNjMsNiArMjc1LDE2IEBAIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2Uo
dWludDY0X3QmIGwKICAgICBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShmcmFtZS0+ZWRp
dG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCk7CiB9CiAK
K3ZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2
NF90JiBsZW5ndGgpCit7CisgICAgbG9jYXRpb24gPSBOU05vdEZvdW5kOworICAgIGxlbmd0aCA9
IDA7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCk7Cit9CiAKIHN0YXRpYyBQ
YXNzUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJSYW5nZUF0UG9zaXRpb25Gb3JQb2ludChGcmFtZSog
ZnJhbWUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBw
b2ludCkKIHsKQEAgLTIxMSw3ICszMzMsNyBAQCB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4
Rm9yUG9pbnQoSW50CiAgICAgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UocmFuZ2UuZ2V0
KCksIGluZGV4LCBsZW5ndGgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY29udmVy
dFRvUmFuZ2UoRnJhbWUqIGZyYW1lLCBOU1JhbmdlIG5zcmFuZ2UpCitQYXNzUmVmUHRyPFJhbmdl
PiBjb252ZXJ0VG9SYW5nZShGcmFtZSogZnJhbWUsIE5TUmFuZ2UgbnNyYW5nZSkKIHsKICAgICBp
ZiAobnNyYW5nZS5sb2NhdGlvbiA+IElOVF9NQVgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjQ2
LDYgKzM2OCwxNSBAQCB2b2lkIFdlYlBhZ2U6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlCiAg
ICAgcmVzdWx0UmVjdCA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CiB9
CiAKK3ZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzLCBib29sJiBoYW5kbGVkLCBUZXh0SW5w
dXRTdGF0ZSYgbmV3U3RhdGUpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisKKyAgICBoYW5kbGVkID0gZXhlY3V0
ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChjb21tYW5kcywgbV9rZXlib2FyZEV2ZW50QmVpbmdJ
bnRlcnByZXRlZCk7CisKKyAgICBuZXdTdGF0ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShmcmFt
ZSk7Cit9CisKIHN0YXRpYyBib29sIGlzUG9zaXRpb25JblJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIFJhbmdlKiByYW5nZSkKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHBvc2l0
aW9uUmFuZ2UgPSBtYWtlUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTsKQEAgLTM4OCw3ICs1MTks
OCBAQCBib29sIFdlYlBhZ2U6OnBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLCiAgICAgaWYgKGtl
eWJvYXJkRXZlbnQudHlwZSgpICE9IFdlYkV2ZW50OjpLZXlEb3duKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgaW4gV2ViQ29yZS4KKyAgICAv
LyBGSVhNRTogTW9zdCBvZiB0aGVzZSBhcmUgYWxyZWFkeSBoYW5kbGVkIGJ5IHN5c3RlbSBrZXkg
YmluZGluZ3MsIHdoeSBhcmUgd2UgaGFyZGNvZGluZyB0aGVtIGhlcmU/CisgICAgLy8gRklYTUU6
IENvbW1vb24gYmVoYXZpb3JzIGxpa2Ugc2Nyb2xsaW5nIGRvd24gb24gU3BhY2Ugc2hvdWxkIHBy
b2JhYmx5IGJlIGltcGxlbWVudGVkIGluIFdlYkNvcmUuCiAKICAgICBzd2l0Y2ggKGtleWJvYXJk
RXZlbnQud2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKICAgICBjYXNlIFZLX0JBQ0s6CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MjcwMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDExLTA0LTAxICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgV2ViS2l0MiB0ZXh0IGlucHV0IGhhbmRsaW5n
IG1vcmUgbGlrZSBXZWJLaXQxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzY0OQorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6
IEV4cG9zZSBfY29udmVydFRvRE9NUmFuZ2UgZm9yIHVzZSBpbiBXZWJIVE1MVmlldy4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZXhl
Y3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc10pOiBSZW5hbWVkLCBzaW5jZSB0aGVzZSBhcmUgbm90
IGVkaXRvciBjb21tYW5kcy4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2ludGVycHJldEtleUV2
ZW50OnNhdmluZ0NvbW1hbmRzOl0pOiBVcGRhdGVkIGZvciB0aGUgcmVuYW1lZCBfZXhlY3V0ZVNh
dmVkS2V5cHJlc3NDb21tYW5kcy4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY2hhcmFjdGVySW5k
ZXhGb3JQb2ludDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2VsZWN0
ZWRSYW5nZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbWFya2VkUmFuZ2VdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFu
Z2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBoYXNNYXJrZWRUZXh0XSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyB1bm1hcmtUZXh0XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBzZXRNYXJrZWRUZXh0OnNlbGVjdGVkUmFuZ2U6XSk6IERpdHRvLiBD
aGFuZ2VkIHRoZSBjb21tZW50IGFib3V0IHRoZSBhcmd1bWVudAorICAgICAgICB0eXBlIGludG8g
YW4gYXNzZXJ0aW9uLiBSZW1vdmVkIHJlc2V0dGluZyBpbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0
ZXJzIHRvIDAsIGFzIHdlIHNob3VsZG4ndAorICAgICAgICBiZSBhYmxlIHRvIGNhbGwgdGV4dCBp
bnB1dCBwcm90b2NvbCBtZXRob2RzIGZyb20gaGVyZSAoYW5kIHdlIGRpZG4ndCBldmVuIHJlc2V0
IGl0IGJhY2sgb24KKyAgICAgICAgcmV0dXJuKS4gQ2hhbmdlZCB0byByZXRyaWV2ZSBhbGwgZGF0
YSBiZWZvcmUgc3RhcnRpbmcgdG8gYXBwbHkgYWN0aW9ucyB0byBiZXR0ZXIgbWF0Y2ggV0syIGNv
ZGUuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGluc2VydFRleHQ6XSk6IERpdHRvLgorCiAyMDEx
LTAzLTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lSW50ZXJuYWwuaAkocmV2aXNpb24gODI2MDMpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0
Miw3IEBAIEBpbnRlcmZhY2UgV2ViRnJhbWUgKFdlYkludGVybmFsKQogLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UqKXJhbmdlOwogLSAoRE9NUmFuZ2UgKilfY29u
dmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlOwogLSAoTlNSYW5nZSlfY29udmVy
dERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAqKXJhbmdlOworLSAoUGFzc1JlZlB0cjxXZWJD
b3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2U7CiAKIC0gKERP
TURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5T
U3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0
cmluZzsKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rl
c0FzUGFyYWdyYXBoczooTlNBcnJheSAqKW5vZGVzOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA4MjYwMykKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0MjgsNyArNTQy
OCw3IEBAIC0gKHZvaWQpX2hvdmVyRmVlZGJhY2tTdXNwZW5kZWRDaGFuZ2VkCiAgICAgW3NlbGYg
X3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwogfQogCi0tICh2b2lkKV9leGVjdXRlU2F2
ZWRFZGl0aW5nQ29tbWFuZHMKKy0gKHZvaWQpX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMK
IHsKICAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRl
cnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKICAgICBpZiAoIXBh
cmFtZXRlcnMgfHwgcGFyYW1ldGVycy0+ZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKS5pc0VtcHR5
KCkpCkBAIC01NTAzLDcgKzU1MDMsNyBAQCAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooS2V5
Ym9hcmRFdmVuCiAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0ZXh0IGluc2VydGlvbiBjb21t
YW5kcywgZGVmYXVsdCBrZXlkb3duIGhhbmRsZXIgaXMgdGhlIHJpZ2h0IHRpbWUgdG8gZXhlY3V0
ZSB0aGUgY29tbWFuZHMuCiAgICAgICAgIC8vIEtleXByZXNzIChDaGFyIGV2ZW50KSBoYW5kbGVy
IGlzIHRoZSBsYXRlc3Qgb3Bwb3J0dW5pdHkgdG8gZXhlY3V0ZS4KICAgICAgICAgaWYgKCFoYXZl
VGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OkNoYXIpCi0gICAgICAgICAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkRWRp
dGluZ0NvbW1hbmRzXTsKKyAgICAgICAgICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0Nv
bW1hbmRzXTsKICAgICB9CiAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMgPSAwOwogCkBAIC01NzQ4LDcgKzU3NDgsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKil0
ZXh0U3RvcmFnZQogCiAtIChOU1VJbnRlZ2VyKWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9p
bnQpdGhlUG9pbnQKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkRWRpdGluZ0NvbW1hbmRzXTsK
KyAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKICAgICBOU1dpbmRv
dyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBf
ZnJhbWVdOwpAQCAtNTc3MCw3ICs1NzcwLDcgQEAgLSAoTlNVSW50ZWdlciljaGFyYWN0ZXJJbmRl
eEZvclBvaW50OihOUwogCiAtIChOU1JlY3QpZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KE5T
UmFuZ2UpdGhlUmFuZ2UKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkRWRpdGluZ0NvbW1hbmRz
XTsKKyAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKICAgICBXZWJG
cmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwogICAgIApAQCAtNTgwMiw3ICs1ODAyLDcgQEAg
LSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOUwogCiAtIChOU1JhbmdlKXNl
bGVjdGVkUmFuZ2UKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkRWRpdGluZ0NvbW1hbmRzXTsK
KyAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKICAgICBpZiAoIWlz
VGV4dElucHV0KGNvcmUoW3NlbGYgX2ZyYW1lXSkpKSB7CiAgICAgICAgIExPRyhUZXh0SW5wdXQs
ICJzZWxlY3RlZFJhbmdlIC0+IChOU05vdEZvdW5kLCAwKSIpOwpAQCAtNTgxNiw3ICs1ODE2LDcg
QEAgLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCiAKIC0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKIHsK
LSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkRWRpdGluZ0NvbW1hbmRzXTsKKyAgICBbc2VsZiBfZXhl
Y3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBb
c2VsZiBfZnJhbWVdOwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKQEAg
LTU4MzAsNyArNTgzMCw3IEBAIC0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKIAogLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nICopYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooTlNSYW5nZSluc1Jhbmdl
CiB7Ci0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEVkaXRpbmdDb21tYW5kc107CisgICAgW3NlbGYg
X2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAgV2ViRnJhbWUgKmZyYW1lID0g
W3NlbGYgX2ZyYW1lXTsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7CkBAIC01
ODczLDcgKzU4NzMsNyBAQCAtIChOU0ludGVnZXIpY29udmVyc2F0aW9uSWRlbnRpZmllcgogCiAt
IChCT09MKWhhc01hcmtlZFRleHQKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkRWRpdGluZ0Nv
bW1hbmRzXTsKKyAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKICAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBCT09MIHJlc3Vs
dCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOwpA
QCAtNTg4MywxMyArNTg4MywxMiBAQCAtIChCT09MKWhhc01hcmtlZFRleHQKIAogLSAodm9pZCl1
bm1hcmtUZXh0CiB7Ci0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEVkaXRpbmdDb21tYW5kc107Cisg
ICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAgTE9HKFRleHRJ
bnB1dCwgInVubWFya1RleHQiKTsKIAogICAgIC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0
ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KICAg
ICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBf
cHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBfcHJpdmF0ZS0+aW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7CiAKICAgICBpZiAocGFyYW1ldGVycykgewog
ICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgPSB0
cnVlOwpAQCAtNTkyMiwxNSArNTkyMSwxNSBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5l
cyhOU0F0dHJpYnV0CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGVk
UmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkRWRp
dGluZ0NvbW1hbmRzXTsKKyAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107
CiAKLSAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpb
TlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcKKyAgICBC
T09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1
dGVkU3RyaW5nIGNsYXNzXV07CisgICAgQVNTRVJUKGlzQXR0cmlidXRlZFN0cmluZyB8fCBbc3Ry
aW5nIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogCiAgICAgTE9HKFRleHRJbnB1
dCwgInNldE1hcmtlZFRleHQ6XCIlQFwiIHNlbGVjdGVkUmFuZ2U6KCV1LCAldSkiLCBpc0F0dHJp
YnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcsIG5ld1NlbFJhbmdlLmxvY2F0
aW9uLCBuZXdTZWxSYW5nZS5sZW5ndGgpOwogCiAgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBh
cmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRz
LgogICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVy
cyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIF9wcml2YXRl
LT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKIAogICAgIGlmIChwYXJhbWV0ZXJz
KSB7CiAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0
cyA9IHRydWU7CkBAIC01OTQ1LDIwICs1OTQ0LDI1IEBAIC0gKHZvaWQpc2V0TWFya2VkVGV4dDoo
aWQpc3RyaW5nIHNlbGVjdGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPENvbXBvc2l0
aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOwotICAgIE5TU3RyaW5nICp0ZXh0ID0gc3RyaW5nOwor
ICAgIE5TU3RyaW5nICp0ZXh0OworICAgIE5TUmFuZ2UgcmVwbGFjZW1lbnRSYW5nZSA9IHsgTlNO
b3RGb3VuZCwgMCB9OwogCiAgICAgaWYgKGlzQXR0cmlidXRlZFN0cmluZykgewotICAgICAgICB1
bnNpZ25lZCBtYXJrZWRUZXh0TGVuZ3RoID0gWyhOU1N0cmluZyAqKXN0cmluZyBsZW5ndGhdOwot
ICAgICAgICBOU1N0cmluZyAqcmFuZ2VTdHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpOU1RleHRJ
bnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0RWZmZWN0
aXZlUmFuZ2U6MCBpblJhbmdlOk5TTWFrZVJhbmdlKDAsIG1hcmtlZFRleHRMZW5ndGgpXTsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGlnbm9yZSBtb3N0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5n
LCBzbyBhbiBpbnB1dCBtZXRob2QgY2Fubm90IHNwZWNpZnkgZS5nLiBhIGZvbnQgb3IgYSBnbHlw
aCB2YXJpYXRpb24uCisgICAgICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107CisgICAgICAgIE5T
U3RyaW5nICpyYW5nZVN0cmluZyA9IFtzdHJpbmcgYXR0cmlidXRlOk5TVGV4dElucHV0UmVwbGFj
ZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDowIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTow
IGluUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3RleHQgbGVuZ3RoXSldOwogICAgICAgICBMT0coVGV4
dElucHV0LCAiICAgIFJlcGxhY2VtZW50UmFuZ2U6ICVAIiwgcmFuZ2VTdHJpbmcpOwogICAgICAg
ICAvLyBUaGUgQXBwS2l0IGFkZHMgYSAnc2VjcmV0JyBwcm9wZXJ0eSB0byB0aGUgc3RyaW5nIHRo
YXQgY29udGFpbnMgdGhlIHJlcGxhY2VtZW50IHJhbmdlLgogICAgICAgICAvLyBUaGUgcmVwbGFj
ZW1lbnQgcmFuZ2UgaXMgdGhlIHJhbmdlIG9mIHRoZSB0aGUgdGV4dCB0aGF0IHNob3VsZCBiZSBy
ZXBsYWNlZCB3aXRoIHRoZSBuZXcgc3RyaW5nLgogICAgICAgICBpZiAocmFuZ2VTdHJpbmcpCi0g
ICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0cmlu
ZyhyYW5nZVN0cmluZyldOworICAgICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZSA9IE5TUmFuZ2VG
cm9tU3RyaW5nKHJhbmdlU3RyaW5nKTsKIAotICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmdd
OwogICAgICAgICBleHRyYWN0VW5kZXJsaW5lcyhzdHJpbmcsIHVuZGVybGluZXMpOwotICAgIH0K
KyAgICB9IGVsc2UKKyAgICAgICAgdGV4dCA9IHN0cmluZzsKKworICAgIGlmIChyZXBsYWNlbWVu
dFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9z
ZWxlY3ROU1JhbmdlOnJlcGxhY2VtZW50UmFuZ2VdOwogCiAgICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgbmV3U2VsUmFuZ2UubG9jYXRpb24s
IE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2UpKTsKIH0KQEAgLTYwMjAsNyArNjAyNCw4IEBAIC0gKHZv
aWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG8KIAogLSAodm9pZClpbnNlcnRUZXh0
OihpZClzdHJpbmcKIHsKLSAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNL
aW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNT
dHJpbmcKKyAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFz
czpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07CisgICAgQVNTRVJUKGlzQXR0cmlidXRlZFN0
cmluZyB8fCBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogCiAgICAg
TE9HKFRleHRJbnB1dCwgImluc2VydFRleHQ6XCIlQFwiIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8g
W3N0cmluZyBzdHJpbmddIDogc3RyaW5nKTsKIApAQCAtNjAyOCwyMCArNjAzMywxOSBAQCAtICh2
b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwogICAgIGlmIChwYXJhbWV0ZXJzKQogICAgICAgICBw
YXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKIAotICAgIC8vIFdlIGRvbid0IHN1cHBv
cnQgaW5zZXJ0aW5nIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIGJ1dCBpbnB1dCBtZXRob2RzIGRvbid0
IGFwcGVhciB0byByZXF1aXJlIHRoaXMuCiAgICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIE5TU3RyaW5nICp0ZXh0OworICAgIE5TUmFuZ2UgcmVw
bGFjZW1lbnRSYW5nZSA9IHsgTlNOb3RGb3VuZCwgMCB9OwogICAgIGJvb2wgaXNGcm9tSW5wdXRN
ZXRob2QgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24o
KTsKKwogICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKKyAgICAgICAgLy8gRklYTUU6IFdl
IGlnbm9yZSBtb3N0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBmb3IgZXhhbXBsZSBp
bnNlcnRpbmcgZnJvbSBDaGFyYWN0ZXIgUGFsZXR0ZSBsb3NlcyBmb250IGFuZCBnbHlwaCB2YXJp
YXRpb24gZGF0YS4KKyAgICAgICAgLy8gSXQgZG9lcyBub3QgbG9vayBsaWtlIGFueSBpbnB1dCBt
ZXRob2RzIGV2ZXIgdXNlIGluc2VydFRleHQ6IHdpdGggYXR0cmlidXRlcyBvdGhlciB0aGFuIE5T
VGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUuCiAgICAgICAgIHRleHQgPSBb
c3RyaW5nIHN0cmluZ107Ci0gICAgICAgIC8vIFdlIGRlYWwgd2l0aCB0aGUgTlNUZXh0SW5wdXRS
ZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUgZnJvbSBOU0F0dHJpYnV0ZWRT
dHJpbmcgaGVyZQotICAgICAgICAvLyBzaW1wbHkgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IGF0IGxl
YXN0IG9uZSBJbnB1dCBNZXRob2QgLS0gaXQgY29ycmVzb25kcyB0byB0aGUga0V2ZW50UGFyYW1U
ZXh0SW5wdXRTZW5kUmVwbGFjZVJhbmdlCi0gICAgICAgIC8vIGV2ZW50IGluIFRTTS4gVGhpcyBi
ZWhhdmlvciBtYXRjaGVzIHRoYXQgb2YgLVtXZWJIVE1MVmlldyBzZXRNYXJrZWRUZXh0OnNlbGVj
dGVkUmFuZ2U6XSB3aGVuIGl0IHJlY2VpdmVzIGFuCi0gICAgICAgIC8vIE5TQXR0cmlidXRlZFN0
cmluZwogICAgICAgICBOU1N0cmluZyAqcmFuZ2VTdHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpO
U1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0
RWZmZWN0aXZlUmFuZ2U6MCBpblJhbmdlOk5TTWFrZVJhbmdlKDAsIFt0ZXh0IGxlbmd0aF0pXTsK
ICAgICAgICAgTE9HKFRleHRJbnB1dCwgIiAgICBSZXBsYWNlbWVudFJhbmdlOiAlQCIsIHJhbmdl
U3RyaW5nKTsKICAgICAgICAgaWYgKHJhbmdlU3RyaW5nKSB7Ci0gICAgICAgICAgICBbW3NlbGYg
X2ZyYW1lXSBfc2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0cmluZyhyYW5nZVN0cmluZyldOwor
ICAgICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZSA9IE5TUmFuZ2VGcm9tU3RyaW5nKHJhbmdlU3Ry
aW5nKTsKICAgICAgICAgICAgIGlzRnJvbUlucHV0TWV0aG9kID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0gZWxzZQpAQCAtNjA2NCw2ICs2MDY4LDkgQEAgLSAodm9pZClpbnNlcnRUZXh0OihpZClz
dHJpbmcKICAgICBpZiAoIWNvcmVGcmFtZSB8fCAhY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRp
dCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAocmVwbGFjZW1lbnRSYW5nZS5sb2NhdGlv
biAhPSBOU05vdEZvdW5kKQorICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0TlNSYW5nZTpy
ZXBsYWNlbWVudFJhbmdlXTsKKwogICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZmFsc2U7CiAgICAg
U3RyaW5nIGV2ZW50VGV4dCA9IHRleHQ7CiAgICAgZXZlbnRUZXh0LnJlcGxhY2UoTlNCYWNrVGFi
Q2hhcmFjdGVyLCBOU1RhYkNoYXJhY3Rlcik7IC8vIHNhbWUgdGhpbmcgaXMgZG9uZSBpbiBLZXlF
dmVudE1hYy5tbSBpbiBXZWJDb3JlCg==
</data>
<flag name="review"
          id="80356"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>