<?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>45271</bug_id>
          
          <creation_ts>2010-09-06 10:23:41 -0700</creation_ts>
          <short_desc>HTML parser should provide script column position within HTML document to JavaScript engine</short_desc>
          <delta_ts>2010-11-10 12:23:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>48007</dependson>
    
    <dependson>48249</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">peter.rybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>caseq</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>jamesr</cc>
    
    <cc>ossy</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>274694</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-06 10:23:41 -0700</bug_when>
    <thetext>WebKit parses HTML and passes all found script texts to JavaScript engine (usually JSC or V8). JavaScript engine also receives line number that corresponds to the start of script source within HTML document.

The engine should also receive column of script start. E.g. in WebCore/bindings/v8/V8Proxy.cpp in method v8::Handle&lt;v8::Script&gt; V8Proxy::compileScript has &quot;baseLine&quot; parameter and lacks &quot;baseColumn&quot; parameter.

The column number is essential for:
- correct column number in error message for one-liner scripts
- correct work of script live editing: if user edited HTML with 2 scripts in one line, there&apos;s no way of telling which script must be updated in VM, becuase they both have the same line number.
  E.g. :
    ... onClick=&quot;javascript:HandleClick(&apos;main&apos;)&quot; onFocus=&quot;javascript:HandleFocus(&apos;main&apos;)&quot; ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274698</commentid>
    <comment_count>1</comment_count>
      <attachid>66657</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-06 10:30:46 -0700</bug_when>
    <thetext>Created attachment 66657
draft patch (not inteded for code review), only for build bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274709</commentid>
    <comment_count>2</comment_count>
      <attachid>66657</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-06 10:47:22 -0700</bug_when>
    <thetext>Comment on attachment 66657
draft patch (not inteded for code review), only for build bots

Rejecting patch 66657 from commit-queue.

peter.rybin@gmail.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274731</commentid>
    <comment_count>3</comment_count>
      <attachid>66657</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-09-06 11:37:36 -0700</bug_when>
    <thetext>Comment on attachment 66657
draft patch (not inteded for code review), only for build bots

Cleaning up before I rerequest to run it through BBs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274732</commentid>
    <comment_count>4</comment_count>
      <attachid>66657</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-09-06 11:38:15 -0700</bug_when>
    <thetext>Comment on attachment 66657
draft patch (not inteded for code review), only for build bots

Please, do not review---let&apos;s run it through BBs first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274735</commentid>
    <comment_count>5</comment_count>
      <attachid>66663</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-09-06 11:41:45 -0700</bug_when>
    <thetext>Created attachment 66663
Another upload to trigger bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274737</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-06 11:43:34 -0700</bug_when>
    <thetext>Attachment 66663 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Total errors found: 0 in 0 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274740</commentid>
    <comment_count>7</comment_count>
      <attachid>66664</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-09-06 11:56:20 -0700</bug_when>
    <thetext>Created attachment 66664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274743</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-06 12:15:30 -0700</bug_when>
    <thetext>Attachment 66664 did not build on mac:
Build output: http://queues.webkit.org/results/3968232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275208</commentid>
    <comment_count>9</comment_count>
      <attachid>66664</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-07 12:27:41 -0700</bug_when>
    <thetext>Comment on attachment 66664
Patch

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

R- for lack of testing and for likely performance problems.  Check out how view source figures out columns.  It&apos;s fast, works, and has some amount of testing.

&gt; WebCore/ChangeLog:8
&gt; +        TODO(peter): fill in description.
Would be nice to have a description.

&gt; WebCore/ChangeLog:10
&gt; +        No new tests. (OOPS!)
Tests?

&gt; WebCore/bindings/v8/V8Proxy.cpp:402
&gt; -        v8::Handle&lt;v8::Script&gt; script = compileScript(code, source.url(), source.startLine() - 1, scriptData.get());
&gt; +        v8::Handle&lt;v8::Script&gt; script = compileScript(code, source.url(), source.startLine() - 1, source.startColumn() - 1, scriptData.get());
This whole +1/-1 thing is sadness.  We should leverage the C++ type system to help us here.  V8LineNumber / ScriptLineNumber or some such.

&gt; WebCore/html/parser/HTMLScriptRunner.cpp:312
&gt; -void HTMLScriptRunner::runScript(Element* script, int startingLineNumber)
&gt; +void HTMLScriptRunner::runScript(Element* script, int startingLineNumber, int startingColumnNumber)
Does it make sense to put the line number and the column number together to a struct?  ScriptPosition?  Seems like you&apos;re touching all these lines of code anyway.

&gt; WebCore/platform/text/SegmentedString.cpp:237
&gt; +          ++cursorPosition.column;
Did you run the parser benchmark?  I bet this costs a bunch of time.  If you look at how the view source code figures out column numbers, you&apos;ll find a much faster way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281516</commentid>
    <comment_count>10</comment_count>
      <attachid>68076</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-20 06:44:35 -0700</bug_when>
    <thetext>Created attachment 68076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281518</commentid>
    <comment_count>11</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-20 06:52:38 -0700</bug_when>
    <thetext>Attachment 68076 did not build on qt:
Build output: http://queues.webkit.org/results/4044079</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281519</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-20 06:59:12 -0700</bug_when>
    <thetext>Attachment 68076 did not build on gtk:
Build output: http://queues.webkit.org/results/4069082</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281523</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-20 07:11:50 -0700</bug_when>
    <thetext>Attachment 68076 did not build on chromium:
Build output: http://queues.webkit.org/results/4001062</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281562</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-20 08:22:11 -0700</bug_when>
    <thetext>Attachment 68076 did not build on win:
Build output: http://queues.webkit.org/results/4012095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281648</commentid>
    <comment_count>15</comment_count>
      <attachid>68076</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-20 10:41:19 -0700</bug_when>
    <thetext>Comment on attachment 68076
Patch

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

I like the approach with the specific types, but there are a lot of errors in this patch.  Also please post html-parser benchmark scores with your patch.  This code is highly performance sensitive.

&gt; JavaScriptCore/JavaScriptCore.gypi:388
&gt; +            &apos;wtf/HTMLPosition.h&apos;,
&gt; +            &apos;wtf/HTMLPosition.cpp&apos;,

This isn&apos;t the right place for these files.  WTF doesn&apos;t know anything about HTML.  They should probably go in WebCore/html/parser.

&gt; JavaScriptCore/wtf/HTMLPosition.h:86
&gt; +/* An int wrapper that always reminds you that the number should be 0-based */

We generally use C++ style comments.

&gt; WebCore/bindings/js/ScriptSourceCode.h:46
&gt; +    ScriptSourceCode(const String&amp; source, const KURL&amp; url = KURL(),
&gt; +        const HTMLPosition1&amp; startPosition = HTMLPosition1::minimumPosition())

Please put this on one line.

&gt; WebCore/bindings/v8/ScriptController.cpp:263
&gt; +HTMLPosition0 ScriptController::eventHandlerPosition() const

What is HTMLPosition0 ?

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1372
&gt; +    // TODO(peter.rybin): the implementation probably return 1-based int, but method should return 0-based.

WebKit uses FIXME instead of TODO(name).  Also, this is not a complete sentence.

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1374
&gt; +    int res = (context() ? context()-&gt;input-&gt;line : 1) - 1;
&gt; +    printf(&quot;line number %d\n&quot;, res);

We don&apos;t usually call printf.  Also, &quot;res&quot; is a pretty unintelligible variable name.

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1391
&gt; +    if (context)
&gt; +        return HTMLPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(context-&gt;input-&gt;line - 1),
&gt; +            WTF::ZeroBasedNumber::fromZeroBasedInt(context-&gt;input-&gt;col - 1), 0);

This multi-line if should use curly braces.

This code doem&apos;t make much sense.  It looks like context-&gt;input is one-based.  Shouldn&apos;t we create a one-based number from that and then covert that to a zero-based number instead of subtracting manually?

&gt; WebCore/html/parser/HTMLDocumentParser.cpp:84
&gt; -    , m_treeBuilder(HTMLTreeBuilder::create(m_tokenizer.get(), document, reportErrors))
&gt; +    , m_treeBuilder(HTMLTreeBuilder::create(m_tokenizer.get(), this, document, reportErrors))

This change is not correct.  The HTMLTreeBuilder isn&apos;t allowed to know about the HTMLDocumentParser.  There are going to be situations in the future where the HTMLTreeBuilder is used without an HTMLDocumentParser.

&gt; WebCore/html/parser/HTMLDocumentParser.cpp:421
&gt; +    int line = m_input.current().getCurrentLine();
&gt; +    int column = m_input.current().getCurrentColumn();
&gt; +    int generation = m_input.getInsertionLevel();

Generally, we don&apos;t use a &quot;get&quot; prefix for getters.  We just call the methods by the thing they return.  Why isn&apos;t m_input.current() returning a HTMLPosition?

&gt; WebCore/html/parser/HTMLInputStream.h:53
&gt; -        : m_last(&amp;m_first)
&gt; +        : m_last(&amp;m_first), m_insertionLevel(0)

The HTMLInputStream should not have an insertionLevel.  That&apos;s a concept of the HTMLDocumentParser.  (Also, it&apos;s called a nesting level.)

&gt; WebCore/html/parser/HTMLInputStream.h:145
&gt; +        m_insertionLevel = m_inputStream-&gt;insertionLevel();
&gt; +        m_inputStream-&gt;setInsertionLevel(m_insertionLevel + 1);

This is redundantly tracking the nestingLevel, which is already tracked carefully in the HTMLDocumentParser.

&gt; WebCore/html/parser/HTMLTreeBuilder.cpp:2748
&gt; +    HTMLPosition0 position = m_scriptableDocumentParser-&gt;htmlPosition();

How can a ScriptableDocumentParser have an HTMLPosition?  ScriptableDocumentParser does not necessary have anything to do with HTML.  This makes no sense.

&gt; WebCore/platform/text/SegmentedString.cpp:239
&gt; +        if (*m_currentString.m_current++ == &apos;\n&apos; &amp;&amp; m_currentString.doNotExcludeLineNumbers()) {
&gt; +          ++lineNumber;
&gt; +          ++m_currentLine;
&gt; +          m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();
&gt; +        }

Wrong indent.

&gt; WebCore/platform/text/SegmentedString.cpp:254
&gt; +int SegmentedString::currentLine() const
&gt; +{
&gt; +    return m_currentLine;
&gt; +}
&gt; +
&gt; +int SegmentedString::currentColumn() const
&gt; +{
&gt; +    return numberOfCharactersConsumed() - m_lineBeginCharactersConsumedValue;
&gt; +}

Why not just return a position?

&gt; WebCore/platform/text/SegmentedString.h:166
&gt; +            if (m_currentString.doNotExcludeLineNumbers()) {
&gt; +                ++lineNumber;
&gt; +                ++m_currentLine;
&gt; +                m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();
&gt; +            }

I&apos;m confused.  I though I did all this work already for the view source parser.  Also, this code explicitly uses += to avoid a branch here.  Did you run the parsing benchmark???</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281654</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-20 10:46:04 -0700</bug_when>
    <thetext>This is the benchmark to which Adam refers:
http://trac.webkit.org/browser/trunk/WebCore/benchmarks/parser/html-parser.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283035</commentid>
    <comment_count>17</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-22 10:32:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 68076 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68076&amp;action=review
&gt; 
&gt; I like the approach with the specific types, but there are a lot of errors in this patch.  Also please post html-parser benchmark scores with your patch.  This code is highly performance sensitive.


Hi Adam
Thanks a lot for the review. I sorry for posting a code with so many errors.

I guess there are 2 issues here:

1. HTMLPosition

a. Name. It might be a wrong name actually.
It&apos;s a simple structure of line/column, but I also had to add a third field &apos;generation&apos;. I need to reflect the fact that some &apos;script&apos; (and other) elements may be generated in &apos;document.write&apos; call. The positions go to JavaScript debugger and it is important that it treats positions of generated script differently; possibly it doesn&apos;t need positions for the generated script at all. I am not sure I chose the best solution possible.

b. Scope. &apos;HTMLPosition&apos; goes together with the script data everywhere, so it seems okay for ScriptableDocumentParser to depend on it.


2. Column in SegmentedString.
Unfortunately I couldn&apos;t read your hint about view source parser. I haven&apos;t found anything related to columns or something I could use. What do I miss there?

I am running a test that Eric Seidel (thanks to him!) gave me a reference to. In the test_shell from Chromium, release mode, nice -15.
The numbers in both cases are very divergent, so I&apos;d like to make some more runs now and post result here later.

Peter


&gt; 
&gt; &gt; JavaScriptCore/JavaScriptCore.gypi:388
&gt; &gt; +            &apos;wtf/HTMLPosition.h&apos;,
&gt; &gt; +            &apos;wtf/HTMLPosition.cpp&apos;,
&gt; 
&gt; This isn&apos;t the right place for these files.  WTF doesn&apos;t know anything about HTML.  They should probably go in WebCore/html/parser.
&gt; 
&gt; &gt; JavaScriptCore/wtf/HTMLPosition.h:86
&gt; &gt; +/* An int wrapper that always reminds you that the number should be 0-based */
&gt; 
&gt; We generally use C++ style comments.
&gt; 
&gt; &gt; WebCore/bindings/js/ScriptSourceCode.h:46
&gt; &gt; +    ScriptSourceCode(const String&amp; source, const KURL&amp; url = KURL(),
&gt; &gt; +        const HTMLPosition1&amp; startPosition = HTMLPosition1::minimumPosition())
&gt; 
&gt; Please put this on one line.
&gt; 
&gt; &gt; WebCore/bindings/v8/ScriptController.cpp:263
&gt; &gt; +HTMLPosition0 ScriptController::eventHandlerPosition() const
&gt; 
&gt; What is HTMLPosition0 ?
&gt; 
&gt; &gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1372
&gt; &gt; +    // TODO(peter.rybin): the implementation probably return 1-based int, but method should return 0-based.
&gt; 
&gt; WebKit uses FIXME instead of TODO(name).  Also, this is not a complete sentence.
&gt; 
&gt; &gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1374
&gt; &gt; +    int res = (context() ? context()-&gt;input-&gt;line : 1) - 1;
&gt; &gt; +    printf(&quot;line number %d\n&quot;, res);
&gt; 
&gt; We don&apos;t usually call printf.  Also, &quot;res&quot; is a pretty unintelligible variable name.
&gt; 
&gt; &gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1391
&gt; &gt; +    if (context)
&gt; &gt; +        return HTMLPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(context-&gt;input-&gt;line - 1),
&gt; &gt; +            WTF::ZeroBasedNumber::fromZeroBasedInt(context-&gt;input-&gt;col - 1), 0);
&gt; 
&gt; This multi-line if should use curly braces.
&gt; 
&gt; This code doem&apos;t make much sense.  It looks like context-&gt;input is one-based.  Shouldn&apos;t we create a one-based number from that and then covert that to a zero-based number instead of subtracting manually?
&gt; 
&gt; &gt; WebCore/html/parser/HTMLDocumentParser.cpp:84
&gt; &gt; -    , m_treeBuilder(HTMLTreeBuilder::create(m_tokenizer.get(), document, reportErrors))
&gt; &gt; +    , m_treeBuilder(HTMLTreeBuilder::create(m_tokenizer.get(), this, document, reportErrors))
&gt; 
&gt; This change is not correct.  The HTMLTreeBuilder isn&apos;t allowed to know about the HTMLDocumentParser.  There are going to be situations in the future where the HTMLTreeBuilder is used without an HTMLDocumentParser.
&gt; 
&gt; &gt; WebCore/html/parser/HTMLDocumentParser.cpp:421
&gt; &gt; +    int line = m_input.current().getCurrentLine();
&gt; &gt; +    int column = m_input.current().getCurrentColumn();
&gt; &gt; +    int generation = m_input.getInsertionLevel();
&gt; 
&gt; Generally, we don&apos;t use a &quot;get&quot; prefix for getters.  We just call the methods by the thing they return.  Why isn&apos;t m_input.current() returning a HTMLPosition?
&gt; 
&gt; &gt; WebCore/html/parser/HTMLInputStream.h:53
&gt; &gt; -        : m_last(&amp;m_first)
&gt; &gt; +        : m_last(&amp;m_first), m_insertionLevel(0)
&gt; 
&gt; The HTMLInputStream should not have an insertionLevel.  That&apos;s a concept of the HTMLDocumentParser.  (Also, it&apos;s called a nesting level.)
&gt; 
&gt; &gt; WebCore/html/parser/HTMLInputStream.h:145
&gt; &gt; +        m_insertionLevel = m_inputStream-&gt;insertionLevel();
&gt; &gt; +        m_inputStream-&gt;setInsertionLevel(m_insertionLevel + 1);
&gt; 
&gt; This is redundantly tracking the nestingLevel, which is already tracked carefully in the HTMLDocumentParser.
&gt; 
&gt; &gt; WebCore/html/parser/HTMLTreeBuilder.cpp:2748
&gt; &gt; +    HTMLPosition0 position = m_scriptableDocumentParser-&gt;htmlPosition();
&gt; 
&gt; How can a ScriptableDocumentParser have an HTMLPosition?  ScriptableDocumentParser does not necessary have anything to do with HTML.  This makes no sense.
&gt; 
&gt; &gt; WebCore/platform/text/SegmentedString.cpp:239
&gt; &gt; +        if (*m_currentString.m_current++ == &apos;\n&apos; &amp;&amp; m_currentString.doNotExcludeLineNumbers()) {
&gt; &gt; +          ++lineNumber;
&gt; &gt; +          ++m_currentLine;
&gt; &gt; +          m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();
&gt; &gt; +        }
&gt; 
&gt; Wrong indent.
&gt; 
&gt; &gt; WebCore/platform/text/SegmentedString.cpp:254
&gt; &gt; +int SegmentedString::currentLine() const
&gt; &gt; +{
&gt; &gt; +    return m_currentLine;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +int SegmentedString::currentColumn() const
&gt; &gt; +{
&gt; &gt; +    return numberOfCharactersConsumed() - m_lineBeginCharactersConsumedValue;
&gt; &gt; +}
&gt; 
&gt; Why not just return a position?
&gt; 
&gt; &gt; WebCore/platform/text/SegmentedString.h:166
&gt; &gt; +            if (m_currentString.doNotExcludeLineNumbers()) {
&gt; &gt; +                ++lineNumber;
&gt; &gt; +                ++m_currentLine;
&gt; &gt; +                m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();
&gt; &gt; +            }
&gt; 
&gt; I&apos;m confused.  I though I did all this work already for the view source parser.  Also, this code explicitly uses += to avoid a branch here.  Did you run the parsing benchmark???</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283040</commentid>
    <comment_count>18</comment_count>
      <attachid>68392</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-22 10:35:29 -0700</bug_when>
    <thetext>Created attachment 68392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283088</commentid>
    <comment_count>19</comment_count>
      <attachid>68392</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-22 11:25:06 -0700</bug_when>
    <thetext>Comment on attachment 68392
Patch

You didn&apos;t address my comments on the previous patch.  You didn&apos;t provide benchmark scores.  Why do we need an HTMLPositionProvider?  You should just put the position information on the token since that&apos;s the thing that has a position.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283931</commentid>
    <comment_count>20</comment_count>
      <attachid>68076</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-23 14:03:54 -0700</bug_when>
    <thetext>Comment on attachment 68076
Patch

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

Hi Adam

I am splitting this long patch into 2 parts because it seems to be too inconvenient.
The upcoming part is about introducing TextPosition structure with 0/1-based numbers. I need it for passing column data from parser to JS engine.

Last time I failed to answer your inline comments. I&apos;m sorry about it. I believe I addressed all your comments.

&gt;&gt;&gt; JavaScriptCore/JavaScriptCore.gypi:388
&gt;&gt;&gt; +            &apos;wtf/HTMLPosition.cpp&apos;,
&gt;&gt; 
&gt;&gt; This isn&apos;t the right place for these files.  WTF doesn&apos;t know anything about HTML.  They should probably go in WebCore/html/parser.
&gt; 
&gt; 

Actually this sturcutre is going to be used wider than in WebCore/html/parser.
Since it&apos;s actually not HTML-specific, I renamed it into TextPosition.

&gt;&gt; JavaScriptCore/wtf/HTMLPosition.h:86
&gt;&gt; +/* An int wrapper that always reminds you that the number should be 0-based */
&gt; 
&gt; We generally use C++ style comments.

Done

&gt;&gt; WebCore/bindings/js/ScriptSourceCode.h:46
&gt;&gt; +        const HTMLPosition1&amp; startPosition = HTMLPosition1::minimumPosition())
&gt; 
&gt; Please put this on one line.

Done

&gt;&gt; WebCore/bindings/v8/ScriptController.cpp:263
&gt;&gt; +HTMLPosition0 ScriptController::eventHandlerPosition() const
&gt; 
&gt; What is HTMLPosition0 ?

It&apos;s a variant of generic HTMLPosition for zero-based numbers. There&apos;s also HTMLPosition1. I chose this super-short form, don&apos;t know whether it&apos;s okay though.
Now all known as &apos;TextPosition*&apos;
I hope to merge types  TextPosition0 + TextPosition1 =&gt; TextPosition  once we don&apos;t care about internal representation.

&gt;&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1372
&gt;&gt; +    // TODO(peter.rybin): the implementation probably return 1-based int, but method should return 0-based.
&gt; 
&gt; WebKit uses FIXME instead of TODO(name).  Also, this is not a complete sentence.

Done.

&gt;&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1374
&gt;&gt; +    printf(&quot;line number %d\n&quot;, res);
&gt; 
&gt; We don&apos;t usually call printf.  Also, &quot;res&quot; is a pretty unintelligible variable name.

I&apos;m sorry, this shouldn&apos;t have stayed here.
Done

&gt;&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1391
&gt;&gt; +            WTF::ZeroBasedNumber::fromZeroBasedInt(context-&gt;input-&gt;col - 1), 0);
&gt; 
&gt; This multi-line if should use curly braces.
&gt; 
&gt; This code doem&apos;t make much sense.  It looks like context-&gt;input is one-based.  Shouldn&apos;t we create a one-based number from that and then covert that to a zero-based number instead of subtracting manually?

Done
I did like the second part of comment.

&gt;&gt; WebCore/html/parser/HTMLDocumentParser.cpp:84
&gt;&gt; +    , m_treeBuilder(HTMLTreeBuilder::create(m_tokenizer.get(), this, document, reportErrors))
&gt; 
&gt; This change is not correct.  The HTMLTreeBuilder isn&apos;t allowed to know about the HTMLDocumentParser.  There are going to be situations in the future where the HTMLTreeBuilder is used without an HTMLDocumentParser.

Done
I dropped actual position providing out of patch scope for now.

&gt;&gt; WebCore/html/parser/HTMLDocumentParser.cpp:421
&gt;&gt; +    int generation = m_input.getInsertionLevel();
&gt; 
&gt; Generally, we don&apos;t use a &quot;get&quot; prefix for getters.  We just call the methods by the thing they return.  Why isn&apos;t m_input.current() returning a HTMLPosition?

Done.
My main concern was that HTMLPosition has 3 field while only 2 of them would be used here.
I dropped actual position providing out of patch scope for now.

&gt;&gt; WebCore/html/parser/HTMLInputStream.h:53
&gt;&gt; +        : m_last(&amp;m_first), m_insertionLevel(0)
&gt; 
&gt; The HTMLInputStream should not have an insertionLevel.  That&apos;s a concept of the HTMLDocumentParser.  (Also, it&apos;s called a nesting level.)

Done

&gt;&gt; WebCore/html/parser/HTMLInputStream.h:145
&gt;&gt; +        m_inputStream-&gt;setInsertionLevel(m_insertionLevel + 1);
&gt; 
&gt; This is redundantly tracking the nestingLevel, which is already tracked carefully in the HTMLDocumentParser.

Done

&gt;&gt; WebCore/html/parser/HTMLTreeBuilder.cpp:2748
&gt;&gt; +    HTMLPosition0 position = m_scriptableDocumentParser-&gt;htmlPosition();
&gt; 
&gt; How can a ScriptableDocumentParser have an HTMLPosition?  ScriptableDocumentParser does not necessary have anything to do with HTML.  This makes no sense.

The script needs this type. I renamed it into TextPosition now, meaning that it&apos;s a position in any text document (HTML, XML etc)

&gt;&gt; WebCore/platform/text/SegmentedString.cpp:239
&gt;&gt; +        }
&gt; 
&gt; Wrong indent.

Done. Sorry, early patch upload.

&gt;&gt; WebCore/platform/text/SegmentedString.cpp:254
&gt;&gt; +}
&gt; 
&gt; Why not just return a position?

I was afraid that HTMLPosition has 3 fields while I need only 2 of them here.

&gt;&gt; WebCore/platform/text/SegmentedString.h:166
&gt;&gt; +            }
&gt; 
&gt; I&apos;m confused.  I though I did all this work already for the view source parser.  Also, this code explicitly uses += to avoid a branch here.  Did you run the parsing benchmark???

I dropped this part out of patch for now.

However I can&apos;t find a way of putting &apos;numberOfCharactersConsumed()&apos; call out of the branch.
I&apos;m probably showing myself stupid, but I can&apos;t read your &apos;I did all this work already for the view source parser&apos;. Unfortunately I couldn&apos;t find anything related to columns in HTMLViewSourceParser or related classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283947</commentid>
    <comment_count>21</comment_count>
      <attachid>68589</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-23 14:25:23 -0700</bug_when>
    <thetext>Created attachment 68589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283966</commentid>
    <comment_count>22</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-23 14:38:14 -0700</bug_when>
    <thetext>Attachment 68589 did not build on qt:
Build output: http://queues.webkit.org/results/4071116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284170</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-23 18:30:20 -0700</bug_when>
    <thetext>Attachment 68589 did not build on win:
Build output: http://queues.webkit.org/results/4049143</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284551</commentid>
    <comment_count>24</comment_count>
      <attachid>68715</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-24 11:11:25 -0700</bug_when>
    <thetext>Created attachment 68715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284568</commentid>
    <comment_count>25</comment_count>
      <attachid>68715</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-24 11:27:30 -0700</bug_when>
    <thetext>Comment on attachment 68715
Patch

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

This patch looks great.  I&apos;d like to see one more iteration to address the comments below.  Can we drop generation from this patch?  It doesn&apos;t seem to be used.  We can add it (or something like it) in the next patch when we use it.  Thanks for sticking with it.

&gt; JavaScriptCore/GNUmakefile.am:517
&gt; +	JavaScriptCore/wtf/TextPosition.cpp \
&gt; +	JavaScriptCore/wtf/TextPosition.h \

These should probably be in JavaScriptCore/wtf/text

&gt; JavaScriptCore/wtf/TextPosition.h:39
&gt; + * for saving script source position. The third field &apos;generation&apos; reflects the fact
&gt; + * that in HTML document its any part can be generated on the fly, by a &apos;document.write&apos;
&gt; + * call. While elements of the generated part may still have coordinates (probably),

I&apos;m not sure generation is appropriate for WTF.  WTF doesn&apos;t know anything about document.write.

&gt; JavaScriptCore/wtf/TextPosition.h:86
&gt; +    int m_generation;

This doesn&apos;t seem right here.

&gt; WebCore/bindings/js/ScriptSourceCode.h:45
&gt; +    ScriptSourceCode(const String&amp; source, const KURL&amp; url = KURL(), const TextPosition1&amp; startPosition = TextPosition1::minimumPosition())

TextPosition1 =&gt; Does this build?

&gt; WebCore/bindings/v8/ScriptEventListener.cpp:54
&gt; +    // FIXME: very strange: we initialize zero-based number with &apos;1&apos;.
&gt; +    TextPosition0 position(WTF::ZeroBasedNumber::fromZeroBasedInt(1), WTF::ZeroBasedNumber::s_base, 0);

Yes, I think this code is wrong.  :)

Let&apos;s fix it in another patch.

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1373
&gt; +    // FIXME: the implementation probably returns 1-based int, but method should return 0-based.
&gt; +    //   New &quot;- 1&quot; fixes this. Is it correct?

I&apos;m confused.  Are there tests that break with or without the -1?  We need tests to cover this.  If there are tests, we can skip the comment.  If there are no tests, I&apos;d leave the code as-is, can keep the first line of the comment (with a capital &quot;T&quot;).  We can then write the test and fix the bug in a followup patch.

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1381
&gt; +    // FIXME: the implementation probably returns 1-based int, but method should return 0-based.
&gt; +    //   New &quot;- 1&quot; fixes this. Is it correct?
&gt; +    return  (context() ? context()-&gt;input-&gt;col : 1) - 1;

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284581</commentid>
    <comment_count>26</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-24 11:37:14 -0700</bug_when>
    <thetext>Attachment 68715 did not build on qt:
Build output: http://queues.webkit.org/results/4086071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284678</commentid>
    <comment_count>27</comment_count>
      <attachid>68715</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-24 14:02:53 -0700</bug_when>
    <thetext>Comment on attachment 68715
Patch

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

Hi Adam.
I agree on simplifying the patch. The &apos;generation&apos; field doesn&apos;t seem extremely elegant, however I need some way of telling that the script does not belong to original text (i.e. it is generated). It&apos;s not necessarily a position property, but at least it&apos;s something very close.

The only problem I&apos;m still having is making &quot;build-webkit --qt&quot; use XmlDocumentParserQt.cc rather that *Libxml2.cc. That&apos;s why I&apos;ve uploaded bad patches so often.
Peter

&gt;&gt; JavaScriptCore/GNUmakefile.am:517
&gt;&gt; +	JavaScriptCore/wtf/TextPosition.h \
&gt; 
&gt; These should probably be in JavaScriptCore/wtf/text

Done

&gt;&gt; JavaScriptCore/wtf/TextPosition.h:39
&gt;&gt; + * call. While elements of the generated part may still have coordinates (probably),
&gt; 
&gt; I&apos;m not sure generation is appropriate for WTF.  WTF doesn&apos;t know anything about document.write.

Done

&gt;&gt; JavaScriptCore/wtf/TextPosition.h:86
&gt;&gt; +    int m_generation;
&gt; 
&gt; This doesn&apos;t seem right here.

Done

&gt;&gt; WebCore/bindings/js/ScriptSourceCode.h:45
&gt;&gt; +    ScriptSourceCode(const String&amp; source, const KURL&amp; url = KURL(), const TextPosition1&amp; startPosition = TextPosition1::minimumPosition())
&gt; 
&gt; TextPosition1 =&gt; Does this build?

Initializing const reference with a function call? Apparently it does.

&gt;&gt; WebCore/bindings/v8/ScriptEventListener.cpp:54
&gt;&gt; +    TextPosition0 position(WTF::ZeroBasedNumber::fromZeroBasedInt(1), WTF::ZeroBasedNumber::s_base, 0);
&gt; 
&gt; Yes, I think this code is wrong.  :)
&gt; 
&gt; Let&apos;s fix it in another patch.

Done

&gt;&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1373
&gt;&gt; +    //   New &quot;- 1&quot; fixes this. Is it correct?
&gt; 
&gt; I&apos;m confused.  Are there tests that break with or without the -1?  We need tests to cover this.  If there are tests, we can skip the comment.  If there are no tests, I&apos;d leave the code as-is, can keep the first line of the comment (with a capital &quot;T&quot;).  We can then write the test and fix the bug in a followup patch.

Done #2

&gt;&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1381
&gt;&gt; +    return  (context() ? context()-&gt;input-&gt;col : 1) - 1;
&gt; 
&gt; Same here.

Done #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284693</commentid>
    <comment_count>28</comment_count>
      <attachid>68746</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-24 14:21:39 -0700</bug_when>
    <thetext>Created attachment 68746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284711</commentid>
    <comment_count>29</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-24 14:32:28 -0700</bug_when>
    <thetext>Attachment 68746 did not build on qt:
Build output: http://queues.webkit.org/results/4130001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284761</commentid>
    <comment_count>30</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-24 15:24:12 -0700</bug_when>
    <thetext>Once you get qt to compile, I&apos;ll give this a final look through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284925</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-24 19:51:56 -0700</bug_when>
    <thetext>Attachment 68746 did not build on win:
Build output: http://queues.webkit.org/results/4061110</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285187</commentid>
    <comment_count>32</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-09-26 15:36:13 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Once you get qt to compile, I&apos;ll give this a final look through.

Hi Adam. I&apos;m going to be on vacation until 9th of October. I can&apos;t upload patch right now, because there is some problem layout tests identify. Peter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290944</commentid>
    <comment_count>33</comment_count>
      <attachid>70071</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-10-07 05:49:03 -0700</bug_when>
    <thetext>Created attachment 70071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290978</commentid>
    <comment_count>34</comment_count>
      <attachid>70071</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-10-07 07:04:19 -0700</bug_when>
    <thetext>Comment on attachment 70071
Patch

Hi Adam

I hope I finally made it as accurate as possible. I should be 100% (bug-)consistent with the current code.

Peter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291084</commentid>
    <comment_count>35</comment_count>
      <attachid>70071</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-07 10:07:30 -0700</bug_when>
    <thetext>Comment on attachment 70071
Patch

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

This looks fantastic.  Thanks for the patch.  A couple very minor nits below.

&gt; JavaScriptCore/wtf/text/TextPosition.h:32
&gt; +

Extra line.

&gt; JavaScriptCore/wtf/text/TextPosition.h:41
&gt; + *

Extra line.

&gt; JavaScriptCore/wtf/text/TextPosition.h:80
&gt; +

extra line

&gt; JavaScriptCore/wtf/text/TextPosition.h:141
&gt; +

extra line

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1392
&gt; +    if (context) {

prefer early return.

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:1407
&gt; +    if (context) {

prefer early return</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291649</commentid>
    <comment_count>36</comment_count>
      <attachid>70250</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-10-08 07:31:12 -0700</bug_when>
    <thetext>Created attachment 70250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291710</commentid>
    <comment_count>37</comment_count>
      <attachid>70250</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-08 09:41:58 -0700</bug_when>
    <thetext>Comment on attachment 70250
Patch

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

&gt; JavaScriptCore/wtf/text/TextPosition.cpp:36
&gt; +

extra blank line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291726</commentid>
    <comment_count>38</comment_count>
      <attachid>70250</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-08 09:56:42 -0700</bug_when>
    <thetext>Comment on attachment 70250
Patch

Rejecting patch 70250 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build&apos;, &apos;--build-style=both&apos;, &apos;--quiet&apos;]&quot; exit_code: 2
Building WebKit
Failed to run &quot;[&apos;WebKitTools/Scripts/build-webkit&apos;, &apos;--debug&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/4227165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294031</commentid>
    <comment_count>39</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-10-14 02:49:10 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; Created an attachment (id=70250) [details]
&gt; Patch

The change doesn&apos;t compile on Mac. One of the reasons is that TextPosition.* are not in the XCode project but even after I added them to the project it still wouldn&apos;t compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296434</commentid>
    <comment_count>40</comment_count>
      <attachid>71204</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-10-19 15:02:38 -0700</bug_when>
    <thetext>Created attachment 71204
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296567</commentid>
    <comment_count>41</comment_count>
      <attachid>71204</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-19 17:56:52 -0700</bug_when>
    <thetext>Comment on attachment 71204
Patch

ok, let&apos;s give this a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296605</commentid>
    <comment_count>42</comment_count>
      <attachid>71204</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-19 19:36:18 -0700</bug_when>
    <thetext>Comment on attachment 71204
Patch

Rejecting patch 71204 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=abarth-cq-sl&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--ignore-builders&apos;, &apos;--quiet&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 71204]&quot; exit_code: 1
Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=71204&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=45271&amp;ctype=xml
Processing 1 patch from 1 bug.
Cleaning working directory
Updating working directory
Processing patch 71204 from bug 45271.
ERROR: /Users/abarth/git/webkit-queue/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/4593003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296792</commentid>
    <comment_count>43</comment_count>
      <attachid>71294</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-10-20 07:47:59 -0700</bug_when>
    <thetext>Created attachment 71294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296953</commentid>
    <comment_count>44</comment_count>
      <attachid>71294</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-20 13:07:08 -0700</bug_when>
    <thetext>Comment on attachment 71294
Patch

Clearing flags on attachment: 71294

Committed r70165: &lt;http://trac.webkit.org/changeset/70165&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296954</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-20 13:07:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296968</commentid>
    <comment_count>46</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-10-20 13:24:45 -0700</bug_when>
    <thetext>It appears this patch broke the apple windows bots.  Are you working on fixing them?  If not this patch will probably be rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296972</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-20 13:27:18 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/70165 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297062</commentid>
    <comment_count>48</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-20 15:11:45 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; http://trac.webkit.org/changeset/70165 might have broken Qt Linux Release

Reopen, because it was rolled out by http://trac.webkit.org/changeset/70181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297063</commentid>
    <comment_count>49</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-20 15:12:55 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #47)
&gt; &gt; http://trac.webkit.org/changeset/70165 might have broken Qt Linux Release
&gt; 
&gt; Reopen, because it was rolled out by http://trac.webkit.org/changeset/70181

http://build.webkit.org/results/Qt%20Linux%20Release/r70166%20(22299)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298465</commentid>
    <comment_count>50</comment_count>
      <attachid>71655</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-10-23 15:02:38 -0700</bug_when>
    <thetext>Created attachment 71655
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298467</commentid>
    <comment_count>51</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-10-23 15:09:18 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; Created an attachment (id=71655) [details]
&gt; Patch

This patch updates XML parser for QT. It fixes following tests:
LayoutTests/fast/xpath/nsresolver-exception.xhtml
LayoutTests/fast/xsl/transform-xhr-doc.xhtml
LayoutTests/svg/custom/use-nested-missing-target-removed.svg

(I guess that&apos;s all tests that previous patch broke).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298496</commentid>
    <comment_count>52</comment_count>
      <attachid>71655</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-23 17:21:18 -0700</bug_when>
    <thetext>Comment on attachment 71655
Patch

Thanks for taking another run at this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298850</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-25 08:06:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/70451 might have broken Qt Linux Release
The following tests are not passing:
fast/frames/set-unloaded-frame-location.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298906</commentid>
    <comment_count>54</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-25 09:27:27 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; http://trac.webkit.org/changeset/70451 might have broken Qt Linux Release
&gt; The following tests are not passing:
&gt; fast/frames/set-unloaded-frame-location.html

Any progression with fix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298912</commentid>
    <comment_count>55</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-10-25 09:37:20 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #53)
&gt; &gt; http://trac.webkit.org/changeset/70451 might have broken Qt Linux Release
&gt; &gt; The following tests are not passing:
&gt; &gt; fast/frames/set-unloaded-frame-location.html
&gt; 
&gt; Any progression with fix?

Unfortunately I&apos;m still working on reproducing it.
We agreed with caseq@ about rolling it back soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307304</commentid>
    <comment_count>56</comment_count>
      <attachid>73489</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-11-10 05:12:45 -0800</bug_when>
    <thetext>Created attachment 73489
Patch to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307331</commentid>
    <comment_count>57</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-11-10 06:48:51 -0800</bug_when>
    <thetext>(In reply to comment #56)
&gt; Created an attachment (id=73489) [details]

Manually committed r71735: http://trac.webkit.org/changeset/71735</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307413</commentid>
    <comment_count>58</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-10 10:31:07 -0800</bug_when>
    <thetext>Yay!  Glad this finally landed.  Thanks for sticking with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307479</commentid>
    <comment_count>59</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-11-10 12:23:36 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; Yay!  Glad this finally landed.  Thanks for sticking with it.

Thank you for support. I hope next steps I will do faster.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66657</attachid>
            <date>2010-09-06 10:30:46 -0700</date>
            <delta_ts>2010-09-06 11:56:14 -0700</delta_ts>
            <desc>draft patch (not inteded for code review), only for build bots</desc>
            <filename>web_core_patch_on_66464</filename>
            <type>text/plain</type>
            <size>31354</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvbS9YTUxEb2N1bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9YTUxEb2N1
bWVudFBhcnNlci5oCShyZXZpc2lvbiA2NjQ2NCkKKysrIGRvbS9YTUxEb2N1bWVudFBhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDcgQEAKICAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX3BlbmRpbmdTY3JpcHQ7CiAgICAgICAgIFJlZlB0cjxF
bGVtZW50PiBtX3NjcmlwdEVsZW1lbnQ7CiAgICAgICAgIGludCBtX3NjcmlwdFN0YXJ0TGluZTsK
KyAgICAgICAgaW50IG1fc2NyaXB0U3RhcnRDb2x1bW47CiAKICAgICAgICAgYm9vbCBtX3BhcnNp
bmdGcmFnbWVudDsKICAgICAgICAgU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKSW5kZXg6
IGRvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCShyZXZpc2lvbiA2NjQ2NCkKKysrIGRvbS9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNiArNTU4LDcgQEAK
ICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKICAg
ICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0Q29sdW1uKDApCiAg
ICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lv
bihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiB7CkBAIC01ODUsNiArNTg2LDcgQEAKICAgICAs
IG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKICAgICAsIG1f
c2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0Q29sdW1uKDApCiAgICAgLCBt
X3BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlw
dGluZ1Blcm1pc3Npb24pCiB7CkBAIC04MDcsOCArODA5LDEwIEBACiAgICAgbmV3RWxlbWVudC0+
YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKIAogICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1l
bnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7Ci0gICAgaWYgKHNjcmlwdEVs
ZW1lbnQpCisgICAgaWYgKHNjcmlwdEVsZW1lbnQpIHsKICAgICAgICAgbV9zY3JpcHRTdGFydExp
bmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAgIG1fc2NyaXB0U3RhcnRDb2x1bW4gPSBjb2x1bW5O
dW1iZXIoKTsKKyAgICB9CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXByZWNhdGVkUGFyc2VyQWRk
Q2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAgLTg5NCw3ICs4OTgsNyBAQAogICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2Ny
aXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1
bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+
ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRF
bGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0
TGluZSwgbV9zY3JpcHRTdGFydENvbHVtbikpOwogCiAgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5
IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgogICAgICAgICBpZiAoaXNEZXRhY2hlZCgpKQpJbmRl
eDogZG9tL1BlbmRpbmdTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9QZW5kaW5nU2NyaXB0
LmNwcAkocmV2aXNpb24gNjY0NjQpCisrKyBkb20vUGVuZGluZ1NjcmlwdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDcgQEAKIHsKICAgICBzZXRDYWNoZWRTY3JpcHQoMCk7CiAgICAg
bV9zdGFydGluZ0xpbmVOdW1iZXIgPSAwOworICAgIG1fc3RhcnRpbmdDb2x1bW5OdW1iZXIgPSAw
OwogICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fZWxlbWVudC5y
ZWxlYXNlKCk7CiB9CkluZGV4OiBkb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCShyZXZpc2lvbiA2NjQ2NCkKKysrIGRv
bS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3
IEBACiAgICAgLCBtX2xhc3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDAp
CiAgICAgLCBtX3NjcmlwdFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydENvbHVtbigw
KQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1p
c3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQogewpAQCAtMTMxLDYgKzEzMiw3IEBACiAg
ICAgLCBtX2xhc3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCiAgICAg
LCBtX3NjcmlwdFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydENvbHVtbigwKQogICAg
ICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1ZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihw
ZXJtaXNzaW9uKQogewpAQCAtNTE1LDggKzUxNywxMCBAQAogICAgIH0KIAogICAgIFNjcmlwdEVs
ZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7
Ci0gICAgaWYgKHNjcmlwdEVsZW1lbnQpCisgICAgaWYgKHNjcmlwdEVsZW1lbnQpIHsKICAgICAg
ICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAgIG1fc2NyaXB0U3Rh
cnRDb2x1bW4gPSBjb2x1bW5OdW1iZXIoKTsKKyAgICB9CiAKICAgICBtX2N1cnJlbnROb2RlLT5k
ZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAgLTU4OCw3ICs1
OTIsNyBAQAogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVt
ZW50ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNj
cmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2Ny
aXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAg
ICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0
U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVy
bCgpLCBtX3NjcmlwdFN0YXJ0TGluZSwgbV9zY3JpcHRTdGFydENvbHVtbikpOwogICAgIH0KICAg
ICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBwb3BDdXJyZW50Tm9kZSgpOwpAQCAt
NzA5LDQgKzcxMywzIEBACiAKIH0KIH0KLQpJbmRleDogZG9tL1BlbmRpbmdTY3JpcHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBkb20vUGVuZGluZ1NjcmlwdC5oCShyZXZpc2lvbiA2NjQ2NCkKKysrIGRvbS9Q
ZW5kaW5nU2NyaXB0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKIHB1YmxpYzoK
ICAgICBQZW5kaW5nU2NyaXB0KCkKICAgICAgICAgOiBtX3N0YXJ0aW5nTGluZU51bWJlcigwKQor
ICAgICAgICAsIG1fc3RhcnRpbmdDb2x1bW5OdW1iZXIoMCkKICAgICAgICAgLCBtX3dhdGNoaW5n
Rm9yTG9hZChmYWxzZSkKICAgICB7CiAgICAgfQpAQCAtNTEsNiArNTIsNyBAQAogICAgIFBlbmRp
bmdTY3JpcHQoY29uc3QgUGVuZGluZ1NjcmlwdCYgb3RoZXIpCiAgICAgICAgIDogQ2FjaGVkUmVz
b3VyY2VDbGllbnQob3RoZXIpCiAgICAgICAgICwgbV9zdGFydGluZ0xpbmVOdW1iZXIob3RoZXIu
bV9zdGFydGluZ0xpbmVOdW1iZXIpCisgICAgICAgICwgbV9zdGFydGluZ0NvbHVtbk51bWJlcihv
dGhlci5tX3N0YXJ0aW5nQ29sdW1uTnVtYmVyKQogICAgICAgICAsIG1fd2F0Y2hpbmdGb3JMb2Fk
KG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkKQogICAgICAgICAsIG1fZWxlbWVudChvdGhlci5tX2Vs
ZW1lbnQpCiAgICAgewpAQCAtNjUsNiArNjcsNyBAQAogICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogCiAgICAgICAgIG1fc3RhcnRpbmdMaW5lTnVtYmVyID0gb3RoZXIubV9zdGFydGluZ0xpbmVO
dW1iZXI7CisgICAgICAgIG1fc3RhcnRpbmdDb2x1bW5OdW1iZXIgPSBvdGhlci5tX3N0YXJ0aW5n
Q29sdW1uTnVtYmVyOwogICAgICAgICBtX3dhdGNoaW5nRm9yTG9hZCA9IG90aGVyLm1fd2F0Y2hp
bmdGb3JMb2FkOwogICAgICAgICBtX2VsZW1lbnQgPSBvdGhlci5tX2VsZW1lbnQ7CiAgICAgICAg
IHNldENhY2hlZFNjcmlwdChvdGhlci5jYWNoZWRTY3JpcHQoKSk7CkBAIC03NSw2ICs3OCw3IEBA
CiAgICAgLy8gRklYTUU6IE5vIHNldHRlciBtZWFucyB0aGlzIGlzIG5ldmVyIHNldCB0byBhbnl0
aGluZyBvdGhlciB0aGFuIDAuCiAgICAgLy8gVGhpcyBpcyBlaXRoZXIgdW5uZWNlc3Nhcnkgb3Ig
aW5jb3JyZWN0LgogICAgIGludCBzdGFydGluZ0xpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0aW5nTGluZU51bWJlcjsgfQorICAgIGludCBzdGFydGluZ0NvbHVtbk51bWJlcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdDb2x1bW5OdW1iZXI7IH0KIAogICAgIGJvb2wgd2F0Y2hp
bmdGb3JMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93YXRjaGluZ0ZvckxvYWQ7IH0KICAgICB2b2lk
IHNldFdhdGNoaW5nRm9yTG9hZChib29sIGIpIHsgbV93YXRjaGluZ0ZvckxvYWQgPSBiOyB9CkBA
IC05MCw2ICs5NCw3IEBACiAKIHByaXZhdGU6CiAgICAgaW50IG1fc3RhcnRpbmdMaW5lTnVtYmVy
OyAvLyBPbmx5IHVzZWQgZm9yIGlubGluZSBzY3JpcHQgdGFncy4KKyAgICBpbnQgbV9zdGFydGlu
Z0NvbHVtbk51bWJlcjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCiAgICAg
Ym9vbCBtX3dhdGNoaW5nRm9yTG9hZDsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50Owog
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7Cklu
ZGV4OiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxh
dGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCShyZXZpc2lvbiA2NjQ2NCkKKysrIHBsYXRm
b3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMs
NyBAQAogICAgICAgICBtX2N1cnJlbnRDaGFyID0gb3RoZXIubV9jdXJyZW50Q2hhcjsKICAgICBt
X2Nsb3NlZCA9IG90aGVyLm1fY2xvc2VkOwogICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3Vt
ZWRQcmlvclRvQ3VycmVudFN0cmluZyA9IG90aGVyLm1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3Vt
ZWRQcmlvclRvQ3VycmVudFN0cmluZzsKKwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjIz
LDE0ICsyMjQsMTggQEAKICAgICBtX2N1cnJlbnRDaGFyID0gbV9wdXNoZWRDaGFyMSA/ICZtX3B1
c2hlZENoYXIxIDogbV9jdXJyZW50U3RyaW5nLm1fY3VycmVudDsKIH0KIAotdm9pZCBTZWdtZW50
ZWRTdHJpbmc6OmFkdmFuY2VTbG93Q2FzZShpbnQmIGxpbmVOdW1iZXIpCit2b2lkIFNlZ21lbnRl
ZFN0cmluZzo6YWR2YW5jZVNsb3dDYXNlKEN1cnNvclBvc2l0aW9uJiBjdXJzb3JQb3NpdGlvbikK
IHsKICAgICBpZiAobV9wdXNoZWRDaGFyMSkgewogICAgICAgICBtX3B1c2hlZENoYXIxID0gbV9w
dXNoZWRDaGFyMjsKICAgICAgICAgbV9wdXNoZWRDaGFyMiA9IDA7CiAgICAgfSBlbHNlIGlmICht
X2N1cnJlbnRTdHJpbmcubV9jdXJyZW50KSB7Ci0gICAgICAgIGlmICgqbV9jdXJyZW50U3RyaW5n
Lm1fY3VycmVudCsrID09ICdcbicgJiYgbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVO
dW1iZXJzKCkpCi0gICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgIGlmICgqbV9jdXJy
ZW50U3RyaW5nLm1fY3VycmVudCsrID09ICdcbicgJiYgbV9jdXJyZW50U3RyaW5nLmRvTm90RXhj
bHVkZUxpbmVOdW1iZXJzKCkpIHsKKyAgICAgICAgICArK2N1cnNvclBvc2l0aW9uLmxpbmU7Cisg
ICAgICAgICAgY3Vyc29yUG9zaXRpb24uY29sdW1uID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICArK2N1cnNvclBvc2l0aW9uLmNvbHVtbjsKKyAgICAgICAgfQogICAgICAgICBpZiAo
LS1tX2N1cnJlbnRTdHJpbmcubV9sZW5ndGggPT0gMCkKICAgICAgICAgICAgIGFkdmFuY2VTdWJz
dHJpbmcoKTsKICAgICB9CkluZGV4OiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgJKHJldmlzaW9uIDY2
NDY0KQorKysgcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMTUxLDE2ICsxNTEsMjUgQEAKICAgICAgICAgYWR2YW5jZSgpOwogICAgIH0KIAotICAgIHZv
aWQgYWR2YW5jZVBhc3ROZXdsaW5lKGludCYgbGluZU51bWJlcikKKyAgICBjbGFzcyBDdXJzb3JQ
b3NpdGlvbiB7CisgICAgcHVibGljOgorICAgICAgaW50IGNvbHVtbjsKKyAgICAgIGludCBsaW5l
OworICAgIH07CisKKyAgICB2b2lkIGFkdmFuY2VQYXN0TmV3bGluZShDdXJzb3JQb3NpdGlvbiYg
Y3Vyc29yUG9zaXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoKmN1cnJlbnQoKSA9PSAnXG4n
KTsKICAgICAgICAgaWYgKCFtX3B1c2hlZENoYXIxICYmIG1fY3VycmVudFN0cmluZy5tX2xlbmd0
aCA+IDEpIHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gbV9jdXJyZW50U3RyaW5nLmRvTm90
RXhjbHVkZUxpbmVOdW1iZXJzKCk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50U3RyaW5nLmRv
Tm90RXhjbHVkZUxpbmVOdW1iZXJzKCkpIHsKKyAgICAgICAgICAgICAgKytjdXJzb3JQb3NpdGlv
bi5saW5lOworICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbi5jb2x1bW4gPSAwOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgLS1tX2N1cnJlbnRTdHJpbmcubV9sZW5ndGg7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRDaGFyID0gKyttX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50OwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGFkdmFuY2VTbG93Q2FzZShsaW5lTnVt
YmVyKTsKKyAgICAgICAgYWR2YW5jZVNsb3dDYXNlKGN1cnNvclBvc2l0aW9uKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBhZHZhbmNlUGFzdE5vbk5ld2xpbmUoKQpAQCAtMTc0LDE1ICsxODMsMjAg
QEAKICAgICAgICAgYWR2YW5jZVNsb3dDYXNlKCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYWR2
YW5jZShpbnQmIGxpbmVOdW1iZXIpCisgICAgdm9pZCBhZHZhbmNlKEN1cnNvclBvc2l0aW9uJiBj
dXJzb3JQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGlmICghbV9wdXNoZWRDaGFyMSAmJiBtX2N1
cnJlbnRTdHJpbmcubV9sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyICs9ICgq
bV9jdXJyZW50U3RyaW5nLm1fY3VycmVudCA9PSAnXG4nKSAmIG1fY3VycmVudFN0cmluZy5kb05v
dEV4Y2x1ZGVMaW5lTnVtYmVycygpOworICAgICAgICAgICAgaWYgKCgqbV9jdXJyZW50U3RyaW5n
Lm1fY3VycmVudCA9PSAnXG4nKSAmIG1fY3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVt
YmVycygpKSB7CisgICAgICAgICAgICAgICsrY3Vyc29yUG9zaXRpb24ubGluZTsKKyAgICAgICAg
ICAgICAgY3Vyc29yUG9zaXRpb24uY29sdW1uID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgKytjdXJzb3JQb3NpdGlvbi5jb2x1bW47CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAtLW1fY3VycmVudFN0cmluZy5tX2xlbmd0aDsKICAgICAgICAgICAgIG1fY3Vy
cmVudENoYXIgPSArK21fY3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgYWR2YW5jZVNsb3dDYXNlKGxpbmVOdW1iZXIpOworICAg
ICAgICBhZHZhbmNlU2xvd0Nhc2UoY3Vyc29yUG9zaXRpb24pOwogICAgIH0KIAogICAgIC8vIFdy
aXRlcyB0aGUgY29uc3VtZWQgY2hhcmFjdGVycyBpbnRvIGNvbnN1bWVkQ2hhcmFjdGVycywgd2hp
Y2ggbXVzdApAQCAtMjA4LDcgKzIyMiw3IEBACiAgICAgdm9pZCBwcmVwZW5kKGNvbnN0IFNlZ21l
bnRlZFN1YnN0cmluZyYpOwogCiAgICAgdm9pZCBhZHZhbmNlU2xvd0Nhc2UoKTsKLSAgICB2b2lk
IGFkdmFuY2VTbG93Q2FzZShpbnQmIGxpbmVOdW1iZXIpOworICAgIHZvaWQgYWR2YW5jZVNsb3dD
YXNlKEN1cnNvclBvc2l0aW9uJiBjdXJzb3JQb3NpdGlvbik7CiAgICAgdm9pZCBhZHZhbmNlU3Vi
c3RyaW5nKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiBtX2N1
cnJlbnRDaGFyOyB9CiAKSW5kZXg6IGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgJKHJldmlzaW9uIDY2NDY0
KQorKysgYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBACiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAgIFNj
cmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtV
UkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJp
bmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBpbnQgc3RhcnRMaW5lID0gMSwg
aW50IHN0YXJ0Q29sdW1uID0gMSkKICAgICAgICAgOiBtX3Byb3ZpZGVyKFN0cmluZ1NvdXJjZVBy
b3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwuaXNOdWxsKCkgPyBTdHJpbmcoKSA6IHVybC5zdHJp
bmcoKSkpCiAgICAgICAgICwgbV9jb2RlKG1fcHJvdmlkZXIsIHN0YXJ0TGluZSkKICAgICAgICAg
LCBtX3VybCh1cmwpCkluZGV4OiBiaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
YmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiA2NjQ2NCkKKysrIGJpbmRpbmdzL3Y4L1Y4
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw3IEBACiAKICAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGVja05ld0xlZ2FsKGNvbnN0IHY4OjpBcmd1bWVu
dHMmKTsKIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2Ny
aXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
aW50IGJhc2VMaW5lLCB2ODo6U2NyaXB0RGF0YSogPSAwKTsKKyAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNv
ZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgaW50IGJhc2VDb2x1bW4s
IHY4OjpTY3JpcHREYXRhKiA9IDApOwogCiAgICAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gY29k
ZSBpcyBkaWZmZXJlbnQgZnJvbSB6ZXJvLCBhIERPTSBleGNlcHRpb24gaXMKICAgICAgICAgLy8g
c2NoZWR1bGUgdG8gYmUgdGhyb3duLgpJbmRleDogYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDY2NDY0KQorKysg
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNywxMiArMjM3LDEz
IEBACiAgICAgd2luZG93U2hlbGwoKS0+ZGVzdHJveUdsb2JhbCgpOwogfQogCi12ODo6SGFuZGxl
PHY4OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5n
PiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIHY4OjpTY3JpcHRE
YXRhKiBzY3JpcHREYXRhKQordjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21waWxl
U2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgaW50IGJhc2VMaW5lLCBpbnQgYmFzZUNvbHVtbiwgdjg6OlNjcmlwdERhdGEqIHNjcmlwdERh
dGEpCiB7CiAgICAgY29uc3QgdWludDE2X3QqIGZpbGVOYW1lU3RyaW5nID0gZnJvbVdlYkNvcmVT
dHJpbmcoZmlsZU5hbWUpOwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gbmFtZSA9IHY4OjpT
dHJpbmc6Ok5ldyhmaWxlTmFtZVN0cmluZywgZmlsZU5hbWUubGVuZ3RoKCkpOwogICAgIHY4OjpI
YW5kbGU8djg6OkludGVnZXI+IGxpbmUgPSB2ODo6SW50ZWdlcjo6TmV3KGJhc2VMaW5lKTsKLSAg
ICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihuYW1lLCBsaW5lKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpJbnRlZ2VyPiBjb2x1bW4gPSB2ODo6SW50ZWdlcjo6TmV3KGJhc2VDb2x1bW4pOworICAgIHY4
OjpTY3JpcHRPcmlnaW4gb3JpZ2luKG5hbWUsIGxpbmUsIGNvbHVtbik7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSB2ODo6U2NyaXB0OjpDb21waWxlKGNvZGUsICZvcmlnaW4s
IHNjcmlwdERhdGEpOwogICAgIHJldHVybiBzY3JpcHQ7CiB9CkBAIC0zOTgsNyArMzk5LDcgQEAK
IAogICAgICAgICAvLyBOT1RFOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdlYkNvcmUsIFNjcmlw
dFNvdXJjZUNvZGUncyBsaW5lIHN0YXJ0cyBhdAogICAgICAgICAvLyAxLCB3aGVyZWFzIHY4IHN0
YXJ0cyBhdCAwLgotICAgICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IGNvbXBp
bGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgpLCBzb3VyY2Uuc3RhcnRMaW5lKCkgLSAxLCBzY3Jp
cHREYXRhLmdldCgpKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBj
b21waWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51cmwoKSwgc291cmNlLnN0YXJ0TGluZSgpIC0gMSwg
c291cmNlLnN0YXJ0Q29sdW1uKCkgLSAxLCBzY3JpcHREYXRhLmdldCgpKTsKICNpZiBQTEFURk9S
TShDSFJPTUlVTSkKICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoInY4LmNv
bXBpbGUiLCBub2RlLCAiIik7CiAKQEAgLTQzMyw3ICs0MzQsNyBAQAogICAgICAgICAvLyBGSVhN
RTogSWRlYWxseSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmUtdXNlIHRoZSBvcmlnaW4gb2YgdGhl
CiAgICAgICAgIC8vIHNjcmlwdCBwYXNzZWQgdG8gdXMgYXMgdGhlIGFyZ3VtZW50IGluc3RlYWQg
b2YgdXNpbmcgYW4gZW1wdHkgc3RyaW5nCiAgICAgICAgIC8vIGFuZCAwIGJhc2VMaW5lLgotICAg
ICAgICBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsICIiLCAwKTsKKyAgICAgICAgc2NyaXB0
ID0gY29tcGlsZVNjcmlwdChjb2RlLCAiIiwgMCwgMCk7CiAgICAgfQogCiAgICAgaWYgKGhhbmRs
ZU91dE9mTWVtb3J5KCkpCkluZGV4OiBiaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gNjY0NjQpCisrKyBiaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQAogICAgIH0KIAogICAgIFdvcmtl
ckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKLSAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBt
X3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0
cmluZygpLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgpIC0gMSwgJnN0YXRlKTsKKyAgICBTY3JpcHRW
YWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3Vy
Y2VDb2RlLnVybCgpLnN0cmluZygpLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgpIC0gMSwgc291cmNl
Q29kZS5zdGFydENvbHVtbigpIC0gMSwgJnN0YXRlKTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0g
c3RhdGUuZXhjZXB0aW9uOwpJbmRleDogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHkuY3BwCShyZXZpc2lvbiA2NjQ2NCkKKysrIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsxODQsNyBAQAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgaW50IGJhc2VMaW5lLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRlKQor
U2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBT
dHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lLCBpbnQg
YmFzZUNvbHVtbiwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKiBzdGF0ZSkKIHsKICAgICB2
ODo6SGFuZGxlU2NvcGUgaHM7CiAKQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgIHY4OjpUcnlDYXRj
aCBleGNlcHRpb25DYXRjaGVyOwogCiAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHNjcmlwdFN0
cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoc2NyaXB0KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpTY3Jp
cHQ+IGNvbXBpbGVkU2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChzY3JpcHRTdHJpbmcs
IGZpbGVOYW1lLCBiYXNlTGluZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxl
ZFNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwg
YmFzZUxpbmUsIGJhc2VDb2x1bW4pOwogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9
IHJ1blNjcmlwdChjb21waWxlZFNjcmlwdCk7CiAKICAgICBpZiAoIWV4Y2VwdGlvbkNhdGNoZXIu
Q2FuQ29udGludWUoKSkKQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgIC8vIENvbXB1dGUgdGhlIHNv
dXJjZSBzdHJpbmcgYW5kIHByZXZlbnQgYWdhaW5zdCBpbmZpbml0ZSByZWN1cnNpb24uCiAgICAg
aWYgKG1fcmVjdXJzaW9uID49IGtNYXhSZWN1cnNpb25EZXB0aCkgewogICAgICAgICB2ODo6TG9j
YWw8djg6OlN0cmluZz4gY29kZSA9IHY4RXh0ZXJuYWxTdHJpbmcoInRocm93IFJhbmdlRXJyb3Io
J1JlY3Vyc2lvbiB0b28gZGVlcCcpIik7Ci0gICAgICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBp
bGVTY3JpcHQoY29kZSwgIiIsIDApOworICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxl
U2NyaXB0KGNvZGUsICIiLCAwLCAwKTsKICAgICB9CiAKICAgICBpZiAoVjhQcm94eTo6aGFuZGxl
T3V0T2ZNZW1vcnkoKSkKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZp
c2lvbiA2NjQ2NCkKKysrIGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAvLyBJbnNlcnQgJ1xuJyBvdGhlcndp
c2UgLy8tc3R5bGUgY29tbWVudHMgY291bGQgYnJlYWsgdGhlIGhhbmRsZXIuCiAgICAgY29kZS5h
cHBlbmQoICAiXG59KS5jYWxsKHRoaXMsIGV2dCk7fX19fSkiKTsKICAgICB2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0
KGNvZGVFeHRlcm5hbFN0cmluZywgbV9zb3VyY2VVUkwsIG1fbGluZU51bWJlcik7CisgICAgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVF
eHRlcm5hbFN0cmluZywgbV9zb3VyY2VVUkwsIG1fbGluZU51bWJlciwgbV9jb2x1bW5OdW1iZXIp
OwogICAgIGlmICghc2NyaXB0LklzRW1wdHkoKSkgewogICAgICAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSA9IHByb3h5LT5ydW5TY3JpcHQoc2NyaXB0LCBmYWxzZSk7CiAgICAgICAgIGlm
ICghdmFsdWUuSXNFbXB0eSgpKSB7CkluZGV4OiBiaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oCShyZXZpc2lv
biA2NjQ2NCkKKysrIGJpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTEgKzQwLDEyIEBACiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGlj
OgotICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwm
IHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShj
b25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBpbnQgc3RhcnRM
aW5lID0gMSwgaW50IHN0YXJ0Q29sdW1uID0gMSkKICAgICAgICAgOiBtX3NvdXJjZShzb3VyY2Up
CiAgICAgICAgICwgbV9jYWNoZWRTY3JpcHQoMCkKICAgICAgICAgLCBtX3VybCh1cmwpCiAgICAg
ICAgICwgbV9zdGFydExpbmUoc3RhcnRMaW5lKQorICAgICAgICAsIG1fc3RhcnRDb2x1bW4oc3Rh
cnRDb2x1bW4pCiAgICAgewogICAgIH0KIApAQCAtNjQsMTIgKzY1LDE0IEBACiAgICAgQ2FjaGVk
U2NyaXB0KiBjYWNoZWRTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC5nZXQo
KTsgfQogICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CiAgICAg
aW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lOyB9CisgICAgaW50IHN0
YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQogCiBwcml2YXRlOgog
ICAgIFN0cmluZyBtX3NvdXJjZTsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3Jp
cHQ+IG1fY2FjaGVkU2NyaXB0OwogICAgIEtVUkwgbV91cmw7CiAgICAgaW50IG1fc3RhcnRMaW5l
OworICAgIGludCBtX3N0YXJ0Q29sdW1uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgJKHJldmlzaW9u
IDY2NDY0KQorKysgYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgdm9pZCB0cmFja0V2ZW50KEV2
ZW50Kik7CiAKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVu
dCBleGVjdXRpb24gZW52aXJvbm1lbnQuCi0gICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNv
bnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUs
IFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSopOworICAgICAgICBTY3JpcHRWYWx1ZSBldmFs
dWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJh
c2VMaW5lLCBpbnQgYmFzZUNvbHVtbiwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKik7CiAK
ICAgICAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgY29udGV4dC4KICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gdjg6OkxvY2FsPHY4
OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7IH0KSW5kZXg6IGh0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCShy
ZXZpc2lvbiA2NjQ2NCkKKysrIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw3ICs2OSw3IEBACiAgICAgLy8gVGhlIHRva2VuIHJlYWxseSBzaG91bGQg
YmUgcGFzc2VkIGFzIGEgY29uc3QmIHNpbmNlIGl0J3MgbmV2ZXIgbW9kaWZpZWQuCiAgICAgdm9p
ZCBjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKEhUTUxUb2tlbiYpOwogICAgIC8vIE11c3QgYmUgY2Fs
bGVkIHdoZW4gcGFyc2VyIGlzIHBhdXNlZCBiZWZvcmUgY2FsbGluZyB0aGUgcGFyc2VyIGFnYWlu
LgotICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhpbnQmIHNjcmlw
dFN0YXJ0TGluZSk7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNz
KGludCYgc2NyaXB0U3RhcnRMaW5lLCBpbnQmIHNjcmlwdFN0YXJ0Q29sdW1uKTsKIAogICAgIC8v
IERvbmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KICAgICB2b2lkIGZpbmlzaGVkKCk7CkBA
IC0yNDgsMTEgKzI0OCwxMyBAQAogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0VG9Qcm9j
ZXNzOyAvLyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUgcmVzdW1p
bmcgdGhlIHBhcnNlci4KICAgICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7IC8vIFN0
YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4K
KyAgICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydENvbHVtbjsKIAogICAgIC8vIEZJWE1FOiBX
ZSBwcm9iYWJseSB3YW50IHRvIHJlbW92ZSB0aGlzIG1lbWJlci4gIE9yaWdpbmFsbHksIGl0IHdh
cwogICAgIC8vIGNyZWF0ZWQgdG8gc2VydmljZSB0aGUgbGVnYWN5IHRyZWUgYnVpbGRlciwgYnV0
IGl0IHNlZW1zIHRvIGJlIHVzZWQgZm9yCiAgICAgLy8gc29tZSBvdGhlciB0aGluZ3Mgbm93Lgog
ICAgIGludCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lOworICAgIGludCBtX2xhc3RTY3Jp
cHRFbGVtZW50U3RhcnRDb2x1bW47CiB9OwogCiAvLyBGSVhNRTogTW92ZSB0aGVzZSBmdW5jdGlv
bnMgdG8gYSBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlLgpJbmRleDogaHRtbC9wYXJzZXIvSFRNTFRv
a2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuaAkocmV2
aXNpb24gNjY0NjQpCisrKyBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOSw4ICsxMjksOCBAQAogICAgIC8vIHRoZXkgY2FsbCByZXNldCgpIGZpcnN0KS4K
ICAgICBib29sIG5leHRUb2tlbihTZWdtZW50ZWRTdHJpbmcmLCBIVE1MVG9rZW4mKTsKIAotICAg
IGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0gICAgaW50
IGNvbHVtbk51bWJlcigpIGNvbnN0IHsgcmV0dXJuIDE7IH0gLy8gTWF0Y2hlcyBMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXIuaCBiZWhhdmlvci4KKyAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsg
cmV0dXJuIG1fY3Vyc29yUG9zaXRpb24ubGluZTsgfQorICAgIGludCBjb2x1bW5OdW1iZXIoKSBj
b25zdCB7IHJldHVybiBtX2N1cnNvclBvc2l0aW9uLmNvbHVtbjsgfTsKIAogICAgIFN0YXRlIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUg
c3RhdGUpIHsgbV9zdGF0ZSA9IHN0YXRlOyB9CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAg
Ly8gUmV0dXJucyB3aGV0aGVyIHdlIHN1Y2NlZWRlZCBpbiBwZWVraW5nIGF0IHRoZSBuZXh0IGNo
YXJhY3Rlci4KICAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHdlIGNhbiBmYWlsIHRvIHBlZWsgaXMg
aWYgdGhlcmUgYXJlIG5vIG1vcmUKICAgICAgICAgLy8gY2hhcmFjdGVycyBpbiB8c291cmNlfCAo
YWZ0ZXIgY29sbGFwc2luZyBcclxuLCBldGMpLgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
cGVlayhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgaW50JiBsaW5lTnVtYmVyKQorICAgICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgcGVlayhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU2VnbWVudGVk
U3RyaW5nOjpDdXJzb3JQb3NpdGlvbiYgY3Vyc29yUG9zaXRpb24pCiAgICAgICAgIHsKICAgICAg
ICAgUGVla0FnYWluOgogICAgICAgICAgICAgbV9uZXh0SW5wdXRDaGFyYWN0ZXIgPSAqc291cmNl
OwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAKICAgICAgICAgICAgIGlmIChtX25leHRJbnB1dENoYXJh
Y3RlciA9PSAnXG4nICYmIG1fc2tpcE5leHROZXdMaW5lKSB7CiAgICAgICAgICAgICAgICAgbV9z
a2lwTmV4dE5ld0xpbmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZVBh
c3ROZXdsaW5lKGxpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlUGFz
dE5ld2xpbmUoY3Vyc29yUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgbV9uZXh0SW5wdXRDaGFyYWN0ZXIgPSAqc291cmNlOwpAQCAtMjE1LDEyICsyMTUsMTIgQEAK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGVyZSBhcmUgbW9yZSBj
aGFyYWN0ZXJzIGluIHxzb3VyY2V8IGFmdGVyIGFkdmFuY2luZy4KLSAgICAgICAgYm9vbCBhZHZh
bmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBpbnQmIGxpbmVOdW1iZXIpCisgICAgICAgIGJv
b2wgYWR2YW5jZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU2VnbWVudGVkU3RyaW5nOjpDdXJz
b3JQb3NpdGlvbiYgY3Vyc29yUG9zaXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNvdXJj
ZS5hZHZhbmNlKGxpbmVOdW1iZXIpOworICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoY3Vyc29y
UG9zaXRpb24pOwogICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHBlZWsoc291cmNlLCBsaW5l
TnVtYmVyKTsKKyAgICAgICAgICAgIHJldHVybiBwZWVrKHNvdXJjZSwgY3Vyc29yUG9zaXRpb24p
OwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyIGVuZE9mRmlsZU1hcmtl
cjsKQEAgLTI3Miw3ICsyNzIsNyBAQAogICAgIC8vIG1fdG9rZW4gaXMgb3duZWQgYnkgdGhlIGNh
bGxlci4gIElmIG5leHRUb2tlbiBpcyBub3Qgb24gdGhlIHN0YWNrLAogICAgIC8vIHRoaXMgbWVt
YmVyIG1pZ2h0IGJlIHBvaW50aW5nIHRvIHVuYWxsb2NhdGVkIG1lbW9yeS4KICAgICBIVE1MVG9r
ZW4qIG1fdG9rZW47Ci0gICAgaW50IG1fbGluZU51bWJlcjsKKyAgICBTZWdtZW50ZWRTdHJpbmc6
OkN1cnNvclBvc2l0aW9uIG1fY3Vyc29yUG9zaXRpb247CiAKICAgICBib29sIG1fc2tpcExlYWRp
bmdOZXdMaW5lRm9yTGlzdGluZzsKICAgICBib29sIG1fZm9yY2VOdWxsQ2hhcmFjdGVyUmVwbGFj
ZW1lbnQ7CkluZGV4OiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAJKHJldmlzaW9uIDY2NDY0
KQorKysgaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg0LDExICsxODQsMTIgQEAKICAgICBBU1NFUlQobV90cmVlQnVpbGRlci0+aXNQYXVzZWQo
KSk7CiAKICAgICBpbnQgc2NyaXB0U3RhcnRMaW5lID0gMDsKLSAgICBSZWZQdHI8RWxlbWVudD4g
c2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2NyaXB0
U3RhcnRMaW5lKTsKKyAgICBpbnQgc2NyaXB0U3RhcnRDb2x1bW4gPSAwOworICAgIFJlZlB0cjxF
bGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRvUHJvY2Vz
cyhzY3JpcHRTdGFydExpbmUsIHNjcmlwdFN0YXJ0Q29sdW1uKTsKICAgICAvLyBXZSB3aWxsIG5v
dCBoYXZlIGEgc2NyaXB0UnVubmVyIHdoZW4gcGFyc2luZyBhIERvY3VtZW50RnJhZ21lbnQuCiAg
ICAgaWYgKCFtX3NjcmlwdFJ1bm5lcikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJu
IG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlwdEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRT
dGFydExpbmUpOworICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZShzY3JpcHRFbGVt
ZW50LnJlbGVhc2UoKSwgc2NyaXB0U3RhcnRMaW5lLCBzY3JpcHRTdGFydENvbHVtbik7CiB9CiAK
IHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBt
b2RlKQpJbmRleDogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAkocmV2aXNpb24gNjY0NjQpCisrKyBodG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcg
QEAKICAgICB2b2lkIGRldGFjaCgpOwogCiAgICAgLy8gUHJvY2Vzc2VzIHRoZSBwYXNzZWQgaW4g
c2NyaXB0IGFuZCBhbnkgcGVuZGluZyBzY3JpcHRzIGlmIHBvc3NpYmxlLgotICAgIGJvb2wgZXhl
Y3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgaW50IHNjcmlwdFN0YXJ0
TGluZSk7CisgICAgYm9vbCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9j
ZXNzLCBpbnQgc2NyaXB0U3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4pOwogCiAgICAgYm9vbCBl
eGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKik7CiAgICAgYm9vbCBo
YXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTY3Jp
cHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzOyB9CkBAIC03Myw3ICs3Myw3IEBACiAgICAgdm9pZCBy
ZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqKTsKICAgICBib29sIHJlcXVlc3RQ
ZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lk
IHJ1blNjcmlwdChFbGVtZW50KiwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgdm9pZCBy
dW5TY3JpcHQoRWxlbWVudCosIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGludCBzdGFydGluZ0Nv
bHVtbk51bWJlcik7CiAKICAgICAvLyBIZWxwZXJzIGZvciBkZWFsaW5nIHdpdGggSFRNTFNjcmlw
dFJ1bm5lckhvc3QKICAgICB2b2lkIHdhdGNoRm9yTG9hZChQZW5kaW5nU2NyaXB0Jik7CkluZGV4
OiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvcGFy
c2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDY2NDY0KQorKysgaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc0LDcgKzM3NCw5IEBACiAg
ICAgLCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX3Rva2Vu
aXplcih0b2tlbml6ZXIpCiAgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1bmluaXRp
YWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydENvbHVt
bih1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQogICAgICwgbV9sYXN0U2NyaXB0RWxlbWVu
dFN0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9sYXN0U2Ny
aXB0RWxlbWVudFN0YXJ0Q29sdW1uKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCiB7CiB9
CiAKQEAgLTM5Miw3ICszOTQsOSBAQAogICAgICwgbV9zZWNvbmRhcnlJbnNlcnRpb25Nb2RlKElu
aXRpYWxNb2RlKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQogICAgICwgbV9zY3JpcHRU
b1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1f
c2NyaXB0VG9Qcm9jZXNzU3RhcnRDb2x1bW4odW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkK
ICAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1i
ZXJWYWx1ZSkKKyAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydENvbHVtbih1bmluaXRpYWxp
emVkTGluZU51bWJlclZhbHVlKQogewogICAgIGlmIChjb250ZXh0RWxlbWVudCkgewogICAgICAg
ICAvLyBTdGVwcyA0LjItNC42IG9mIHRoZSBIVE1MNSBGcmFnbWVudCBDYXNlIHBhcnNpbmcgYWxn
b3JpdGhtOgpAQCAtNDYxLDcgKzQ2NSw3IEBACiB7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4g
SFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5l
KQorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nl
c3MoaW50JiBzY3JpcHRTdGFydExpbmUsIGludCYgc2NyaXB0U3RhcnRDb2x1bW4pCiB7CiAgICAg
Ly8gVW5wYXVzZSBvdXJzZWx2ZXMsIGNhbGxlcnMgbWF5IHBhdXNlIHVzIGFnYWluIHdoZW4gcHJv
Y2Vzc2luZyB0aGUgc2NyaXB0LgogICAgIC8vIFRoZSBIVE1MNSBzcGVjIGlzIHdyaXR0ZW4gYXMg
dGhvdWdoIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGluc2lkZSB0aGUgdHJlZQpAQCAtNDY5LDcgKzQ3
Myw5IEBACiAgICAgLy8gYmVmb3JlIHJ1bm5pbmcgc2NyaXB0cy4KICAgICBtX2lzUGF1c2VkID0g
ZmFsc2U7CiAgICAgc2NyaXB0U3RhcnRMaW5lID0gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7
CisgICAgc2NyaXB0U3RhcnRDb2x1bW4gPSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0Q29sdW1uOwog
ICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lID0gdW5pbml0aWFsaXplZExpbmVOdW1iZXJW
YWx1ZTsKKyAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0Q29sdW1uID0gdW5pbml0aWFsaXplZExp
bmVOdW1iZXJWYWx1ZTsKICAgICByZXR1cm4gbV9zY3JpcHRUb1Byb2Nlc3MucmVsZWFzZSgpOwog
fQogCkBAIC0yMjkyLDYgKzIyOTgsNyBAQAogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJy
ZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKHNjcmlwdFRhZykpOwogICAgICAgICAgICAgbV9zY3Jp
cHRUb1Byb2Nlc3MgPSBtX3RyZWUuY3VycmVudEVsZW1lbnQoKTsKICAgICAgICAgICAgIG1fc2Ny
aXB0VG9Qcm9jZXNzU3RhcnRMaW5lID0gbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSArIDE7
CisgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0Q29sdW1uID0gbV9sYXN0U2NyaXB0
RWxlbWVudFN0YXJ0Q29sdW1uICsgMTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+cG9wKCk7CiAgICAgICAgICAgICBpZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSAmJiBtX2ZyYWdt
ZW50Q29udGV4dC5zY3JpcHRpbmdQZXJtaXNzaW9uKCkgPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RB
bGxvd2VkKQogICAgICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzLT5yZW1vdmVBbGxDaGls
ZHJlbigpOwpAQCAtMjgyNiw2ICsyODMzLDcgQEAKICAgICBtX3Rva2VuaXplci0+c2V0U3RhdGUo
SFRNTFRva2VuaXplcjo6U2NyaXB0RGF0YVN0YXRlKTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9u
TW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKICAgICBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5l
ID0gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsKKyAgICBtX2xhc3RTY3JpcHRFbGVtZW50U3Rh
cnRDb2x1bW4gPSBtX3Rva2VuaXplci0+Y29sdW1uTnVtYmVyKCk7CiAgICAgc2V0SW5zZXJ0aW9u
TW9kZShUZXh0TW9kZSk7CiB9CiAKSW5kZXg6IGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiA2
NjQ2NCkKKysrIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsMTMgKzExNiwxNSBAQAogewogICAgIG1fc3RhdGUgPSBEYXRhU3RhdGU7CiAgICAgbV90
b2tlbiA9IDA7Ci0gICAgbV9saW5lTnVtYmVyID0gMDsKKyAgICBtX2N1cnNvclBvc2l0aW9uLmxp
bmUgPSAwOworICAgIG1fY3Vyc29yUG9zaXRpb24uY29sdW1uID0gMDsKICAgICBtX3NraXBMZWFk
aW5nTmV3TGluZUZvckxpc3RpbmcgPSBmYWxzZTsKICAgICBtX2ZvcmNlTnVsbENoYXJhY3RlclJl
cGxhY2VtZW50ID0gZmFsc2U7CiAgICAgbV9zaG91bGRBbGxvd0NEQVRBID0gZmFsc2U7CiAgICAg
bV9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcMCc7CiB9CiAKKwogaW5saW5lIGJvb2wg
SFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsK
ICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsKQEAgLTE2Myw3ICsxNjUsNyBA
QAogI2RlZmluZSBBRFZBTkNFX1RPKHN0YXRlTmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBtX3N0
YXRlID0gc3RhdGVOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBpZiAoIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuYWR2YW5jZShz
b3VyY2UsIG1fbGluZU51bWJlcikpICAgICAgXAorICAgICAgICBpZiAoIW1faW5wdXRTdHJlYW1Q
cmVwcm9jZXNzb3IuYWR2YW5jZShzb3VyY2UsIG1fY3Vyc29yUG9zaXRpb24pKSAgXAogICAgICAg
ICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4
dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAogICAgICAgICBnb3RvIHN0YXRlTmFt
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApA
QCAtMTc2LDcgKzE3OCw3IEBACiAjZGVmaW5lIFNXSVRDSF9UTyhzdGF0ZU5hbWUpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIG1fc3RhdGUgPSBzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpIHx8
ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLnBlZWsoc291cmNlLCBtX2xpbmVOdW1iZXIpKSBc
CisgICAgICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpIHx8ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vz
c29yLnBlZWsoc291cmNlLCBtX2N1cnNvclBvc2l0aW9uKSkgXAogICAgICAgICAgICAgcmV0dXJu
IGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFj
dGVyKCk7ICAgICAgICAgICAgICAgXAogICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTk3LDcgKzE5
OSw3IEBACiBib29sIEhUTUxUb2tlbml6ZXI6OmVtaXRBbmRSZXN1bWVJbihTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSwgU3RhdGUgc3RhdGUpCiB7CiAgICAgbV9zdGF0ZSA9IHN0YXRlOwotICAgIHNv
dXJjZS5hZHZhbmNlKG1fbGluZU51bWJlcik7CisgICAgc291cmNlLmFkdmFuY2UobV9jdXJzb3JQ
b3NpdGlvbik7CiAgICAgc2F2ZUVuZFRhZ05hbWVJZk5lZWRlZCgpOwogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtMjE3LDcgKzIxOSw3IEBACiAgICAgaWYgKGhhdmVCdWZmZXJlZENoYXJhY3RlclRv
a2VuKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIG1fc3RhdGUgPSBEYXRhU3RhdGU7Ci0g
ICAgc291cmNlLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKKyAgICBzb3VyY2UuYWR2YW5jZShtX2N1
cnNvclBvc2l0aW9uKTsKICAgICBtX3Rva2VuLT5jbGVhcigpOwogICAgIG1fdG9rZW4tPm1ha2VF
bmRPZkZpbGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyNiw3ICsyMjgsNyBAQAogYm9vbCBI
VE1MVG9rZW5pemVyOjpmbHVzaEJ1ZmZlcmVkRW5kVGFnKFNlZ21lbnRlZFN0cmluZyYgc291cmNl
KQogewogICAgIEFTU0VSVChtX3Rva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpDaGFyYWN0ZXIg
fHwgbV90b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6VW5pbml0aWFsaXplZCk7Ci0gICAgc291
cmNlLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKKyAgICBzb3VyY2UuYWR2YW5jZShtX2N1cnNvclBv
c2l0aW9uKTsKICAgICBpZiAobV90b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVy
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBtX3Rva2VuLT5iZWdpbkVuZFRhZyhtX2J1ZmZl
cmVkRW5kVGFnTmFtZSk7CkBAIC0yNDAsNyArMjQyLDcgQEAKICAgICAgICAgaWYgKGZsdXNoQnVm
ZmVyZWRFbmRUYWcoc291cmNlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHx8
ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLnBlZWsoc291cmNlLCBtX2xpbmVOdW1iZXIpKSAg
ICAgIFwKKyAgICAgICAgICAgIHx8ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLnBlZWsoc291
cmNlLCBtX2N1cnNvclBvc2l0aW9uKSkgIFwKICAgICAgICAgICAgIHJldHVybiBoYXZlQnVmZmVy
ZWRDaGFyYWN0ZXJUb2tlbigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
Y2MgPSBtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLm5leHRJbnB1dENoYXJhY3RlcigpOyAgICAg
ICAgICAgICAgIFwKICAgICAgICAgZ290byBzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTI3MSw3ICsyNzMsNyBAQAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgIW1faW5wdXRTdHJl
YW1QcmVwcm9jZXNzb3IucGVlayhzb3VyY2UsIG1fbGluZU51bWJlcikpCisgICAgaWYgKHNvdXJj
ZS5pc0VtcHR5KCkgfHwgIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IucGVlayhzb3VyY2UsIG1f
Y3Vyc29yUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9r
ZW4oKTsKICAgICBVQ2hhciBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0
Q2hhcmFjdGVyKCk7CiAKSW5kZXg6IGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCShyZXZpc2lvbiA2
NjQ2NCkKKysrIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2Ny
aXB0LmNhY2hlZFNjcmlwdCgpKTsKICAgICB9CiAgICAgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwot
ICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50
KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3Rh
cnRpbmdMaW5lTnVtYmVyKCkpOworICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5l
bGVtZW50KCktPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1f
ZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdMaW5lTnVtYmVyKCksIHNjcmlwdC5zdGFydGluZ0Nv
bHVtbk51bWJlcigpKTsKIH0KIAogYm9vbCBIVE1MU2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3Jp
cHRSZWFkeShjb25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCkBAIC0xODUsMTMgKzE4NSwxMyBA
QAogCiAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXRjaCAxMC4yLjUuMTEgIkFuIGVuZCB0YWcg
d2hvc2UgdGFnIG5hbWUgaXMgJ3NjcmlwdCciCiAvLyBTY3JpcHQgaGFuZGxpbmcgbGl2ZXMgb3V0
c2lkZSB0aGUgdHJlZSBidWlsZGVyIHRvIGtlZXAgdGhlIGVhY2ggY2xhc3Mgc2ltcGxlLgotYm9v
bCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxl
bWVudCwgaW50IHN0YXJ0TGluZSkKK2Jvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZShQYXNz
UmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGludCBzdGFydExpbmUsIGludCBzdGFydENv
bHVtbikKIHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CiAgICAgLy8gRklYTUU6IElmIHNj
cmlwdGluZyBpcyBkaXNhYmxlZCwgYWx3YXlzIGp1c3QgcmV0dXJuIHRydWU7CiAKICAgICAvLyBU
cnkgdG8gZXhlY3V0ZSB0aGUgc2NyaXB0IGdpdmVuIHRvIHVzLgotICAgIHJ1blNjcmlwdChzY3Jp
cHRFbGVtZW50LmdldCgpLCBzdGFydExpbmUpOworICAgIHJ1blNjcmlwdChzY3JpcHRFbGVtZW50
LmdldCgpLCBzdGFydExpbmUsIHN0YXJ0Q29sdW1uKTsKIAogICAgIGlmIChoYXZlUGFyc2luZ0Js
b2NraW5nU2NyaXB0KCkpIHsKICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsKQpAQCAt
Mjc1LDcgKzI3NSw3IEBACiAKIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IHRvIG1hdGNoIHRoZSBI
VE1MNSBkZWZpbml0aW9uIG9mICJydW5uaW5nIGEgc2NyaXB0IgogLy8gaHR0cDovL3d3dy53aGF0
d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEu
aHRtbCNydW5uaW5nLWEtc2NyaXB0Ci12b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChF
bGVtZW50KiBzY3JpcHQsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCit2b2lkIEhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGludCBzdGFydGluZ0xpbmVOdW1iZXIs
IGludCBzdGFydGluZ0NvbHVtbk51bWJlcikKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAg
ICAgQVNTRVJUKCFoYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkpOwpAQCAtMjk1LDcgKzI5NSw3
IEBACiAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQwMDQ3CiAgICAgICAgICAgICAvLyBBU1NFUlQoZG9jdW1lbnQoKS0+aGF2ZVN0eWxl
c2hlZXRzTG9hZGVkKCkpOwogICAgICAgICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkp
OwotICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENv
bnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHN0YXJ0
aW5nTGluZU51bWJlcik7CisgICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUo
c2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2Rv
Y3VtZW50KSwgc3RhcnRpbmdMaW5lTnVtYmVyLCBzdGFydGluZ0NvbHVtbk51bWJlcik7CiAgICAg
ICAgICAgICBleGVjdXRlU2NyaXB0KHNjcmlwdCwgc291cmNlQ29kZSk7CiAgICAgICAgIH0KICAg
ICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>66663</attachid>
            <date>2010-09-06 11:41:45 -0700</date>
            <delta_ts>2010-09-06 11:42:29 -0700</delta_ts>
            <desc>Another upload to trigger bots</desc>
            <filename>url.txt</filename>
            <type>text/plain</type>
            <size>47</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9NjY2NTc=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66664</attachid>
            <date>2010-09-06 11:56:20 -0700</date>
            <delta_ts>2010-09-07 12:27:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20100906225618.patch</filename>
            <type>text/plain</type>
            <size>39557</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDFjMThmZTJkNTdiM2YyY2ZhOWRiNDY2OGQwYzc1MzY4N2M2MjlkOS4uYjdlNjAyOGFjMjYzZjU0
MGUxOGQ1YWRjN2RhMTVhNmQyODUxYjU5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OCBAQAorMjAxMC0wOS0wNiAgUGV0
ZXIgUnliaW4gPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MIHBhcnNlciBzaG91bGQgcHJvdmlkZSBzY3Jp
cHQgY29sdW1uIHBvc2l0aW9uIHdpdGhpbiBIVE1MIGRvY3VtZW50IHRvIEphdmFTY3JpcHQgZW5n
aW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTI3
MQorCisgICAgICAgIFRPRE8ocGV0ZXIpOiBmaWxsIGluIGRlc2NyaXB0aW9uLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U291
cmNlQ29kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291
cmNlQ29kZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpzdGFydENvbHVtbik6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OExhenlFdmVudExpc3RlbmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y29tcGls
ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWOFByb3h5OjpydW5TY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpl
dmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OnJ1blNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6
CisgICAgICAgICogZG9tL1BlbmRpbmdTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVu
ZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVhcik6CisgICAgICAgICogZG9tL1BlbmRp
bmdTY3JpcHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnN0YXJ0aW5nQ29sdW1uTnVtYmVyKToKKyAgICAg
ICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpY
TUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVu
ZEVsZW1lbnROcyk6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZVN0YXJ0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VFbmRFbGVtZW50KToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIp
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBlbmRpbmdTY3JpcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OnJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmVtaXRBbmRSZXN1bWVJbik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MVG9rZW5pemVyOjplbWl0RW5kT2ZGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUb2tlbml6ZXI6OmZsdXNoQnVmZmVyZWRFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRva2VuaXplcjo6bmV4dFRva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVG9rZW5p
emVyLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpsaW5lTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmNvbHVtbk51bWJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6cGVlayk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6
YWR2YW5jZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcpOgorICAgICAg
ICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvU2VnbWVudGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmlu
Zzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6YWR2YW5j
ZVNsb3dDYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oOgor
ICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdE5ld2xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlKToKKwogMjAxMC0wOS0w
NiAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFNvdXJjZUNvZGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCmlu
ZGV4IDMyZDYyOThjZGJkYTc3MmRhYTEzZTEwMzNlM2NmMGFhNDBmNTk0YjIuLjcwYjYwNjFjMTEy
YmY1YjM5MjVkMDBmMTk2YWI5YzljZGQ4MDY5NjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0U291cmNlQ29kZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
U291cmNlQ29kZS5oCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgU2NyaXB0U291cmNlQ29kZSB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0U291cmNlQ29kZShjb25z
dCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBpbnQgc3RhcnRMaW5l
ID0gMSkKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBL
VVJMJiB1cmwgPSBLVVJMKCksIGludCBzdGFydExpbmUgPSAxLCBpbnQgc3RhcnRDb2x1bW4gPSAx
KQogICAgICAgICA6IG1fcHJvdmlkZXIoU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShzb3Vy
Y2UsIHVybC5pc051bGwoKSA/IFN0cmluZygpIDogdXJsLnN0cmluZygpKSkKICAgICAgICAgLCBt
X2NvZGUobV9wcm92aWRlciwgc3RhcnRMaW5lKQogICAgICAgICAsIG1fdXJsKHVybCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKaW5kZXggZGJjOWQ1ZTZmYzYwMDdmY2ZkZDY2
MDI0ZGIwNzgyNmM2NjI2M2I1Yi4uYTk0Zjc4YmNlMjdkMmJlNWRmNzFkNjEwMjkyNTcwZjE4MGEz
NDY4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKQEAgLTQwLDExICs0
MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewog
cHVibGljOgotICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0
IEtVUkwmIHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNl
Q29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBpbnQg
c3RhcnRMaW5lID0gMSwgaW50IHN0YXJ0Q29sdW1uID0gMSkKICAgICAgICAgOiBtX3NvdXJjZShz
b3VyY2UpCiAgICAgICAgICwgbV9jYWNoZWRTY3JpcHQoMCkKICAgICAgICAgLCBtX3VybCh1cmwp
CiAgICAgICAgICwgbV9zdGFydExpbmUoc3RhcnRMaW5lKQorICAgICAgICAsIG1fc3RhcnRDb2x1
bW4oc3RhcnRDb2x1bW4pCiAgICAgewogICAgIH0KIApAQCAtNjQsMTIgKzY1LDE0IEBAIHB1Ymxp
YzoKICAgICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkU2NyaXB0LmdldCgpOyB9CiAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4g
bV91cmw7IH0KICAgICBpbnQgc3RhcnRMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydExpbmU7
IH0KKyAgICBpbnQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9
CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc291cmNlOwogICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiAgICAgS1VSTCBtX3VybDsKICAgICBp
bnQgbV9zdGFydExpbmU7CisgICAgaW50IG1fc3RhcnRDb2x1bW47CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNw
cAppbmRleCA3ZjEzYzVhOGZiMjdkMzNiYmYxZDM0MTBhMDEzZWJjNzk1ZDkzZDIzLi44MjBiY2Zk
ZjAzMGRhZGNjNjk3ZmY0NmVjODY5MTQ4NTc0Yjk5YTYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFY4TGF6
eUV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQogICAgIC8vIEluc2VydCAnXG4nIG90aGVyd2lzZSAvLy1zdHlsZSBjb21t
ZW50cyBjb3VsZCBicmVhayB0aGUgaGFuZGxlci4KICAgICBjb2RlLmFwcGVuZCggICJcbn0pLmNh
bGwodGhpcywgZXZ0KTt9fX19KSIpOwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZUV4
dGVybmFsU3RyaW5nID0gdjhFeHRlcm5hbFN0cmluZyhjb2RlKTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpTY3JpcHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZUV4dGVybmFsU3Ry
aW5nLCBtX3NvdXJjZVVSTCwgbV9saW5lTnVtYmVyKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTY3Jp
cHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZUV4dGVybmFsU3RyaW5nLCBt
X3NvdXJjZVVSTCwgbV9saW5lTnVtYmVyLCBtX2NvbHVtbk51bWJlcik7CiAgICAgaWYgKCFzY3Jp
cHQuSXNFbXB0eSgpKSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gcHJv
eHktPnJ1blNjcmlwdChzY3JpcHQsIGZhbHNlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5
KCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCmluZGV4IDA3N2MwZGZjM2I3MzZlNjNmYjMxNDZk
ZmVhMTYxYzRkMzg5ZDBjZDQuLjllZDA1MWQyZjM0YzUwNjkyMDAxZjgwYTE0ODY0MDI5MGZhMmVj
MGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcApAQCAtMjM3LDEyICsyMzcsMTMgQEAgVjhQcm94
eTo6flY4UHJveHkoKQogICAgIHdpbmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9iYWwoKTsKIH0KIAot
djg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lLCB2
ODo6U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKK3Y4OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94
eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgaW50IGJhc2VDb2x1bW4sIHY4OjpTY3JpcHREYXRh
KiBzY3JpcHREYXRhKQogewogICAgIGNvbnN0IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9IGZy
b21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG5h
bWUgPSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5hbWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgpKTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhiYXNl
TGluZSk7Ci0gICAgdjg6OlNjcmlwdE9yaWdpbiBvcmlnaW4obmFtZSwgbGluZSk7CisgICAgdjg6
OkhhbmRsZTx2ODo6SW50ZWdlcj4gY29sdW1uID0gdjg6OkludGVnZXI6Ok5ldyhiYXNlQ29sdW1u
KTsKKyAgICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihuYW1lLCBsaW5lLCBjb2x1bW4pOwogICAg
IHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gdjg6OlNjcmlwdDo6Q29tcGlsZShjb2Rl
LCAmb3JpZ2luLCBzY3JpcHREYXRhKTsKICAgICByZXR1cm4gc2NyaXB0OwogfQpAQCAtMzk4LDcg
KzM5OSw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OmV2YWx1YXRlKGNvbnN0IFNj
cmlwdFNvdXJjZUNvZGUmIHNvdXJjZSwgTm9kZSogbm9kCiAKICAgICAgICAgLy8gTk9URTogRm9y
IGNvbXBhdGliaWxpdHkgd2l0aCBXZWJDb3JlLCBTY3JpcHRTb3VyY2VDb2RlJ3MgbGluZSBzdGFy
dHMgYXQKICAgICAgICAgLy8gMSwgd2hlcmVhcyB2OCBzdGFydHMgYXQgMC4KLSAgICAgICAgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51
cmwoKSwgc291cmNlLnN0YXJ0TGluZSgpIC0gMSwgc2NyaXB0RGF0YS5nZXQoKSk7CisgICAgICAg
IHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCBzb3Vy
Y2UudXJsKCksIHNvdXJjZS5zdGFydExpbmUoKSAtIDEsIHNvdXJjZS5zdGFydENvbHVtbigpIC0g
MSwgc2NyaXB0RGF0YS5nZXQoKSk7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBs
YXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKCJ2OC5jb21waWxlIiwgbm9kZSwgIiIpOwogCkBA
IC00MzMsNyArNDM0LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6cnVuU2NyaXB0
KHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0LCBib29sIGlzSW4KICAgICAgICAgLy8gRklY
TUU6IElkZWFsbHksIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlLXVzZSB0aGUgb3JpZ2luIG9mIHRo
ZQogICAgICAgICAvLyBzY3JpcHQgcGFzc2VkIHRvIHVzIGFzIHRoZSBhcmd1bWVudCBpbnN0ZWFk
IG9mIHVzaW5nIGFuIGVtcHR5IHN0cmluZwogICAgICAgICAvLyBhbmQgMCBiYXNlTGluZS4KLSAg
ICAgICAgc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCAiIiwgMCk7CisgICAgICAgIHNjcmlw
dCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgIiIsIDAsIDApOwogICAgIH0KIAogICAgIGlmIChoYW5k
bGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAppbmRleCA3YjRkNmY2Y2RlOTE5MTBk
MTQ2MzZjNzM2NDM3MjMyZjQzZjJlOWE0Li45NGY5M2EwNDNlMjUxMmYxMTBjNDM1ZmQ2YWFhMzY0
Zjg4ZWQwOWI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAtMjg4LDcgKzI4OCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNo
ZWNrTmV3TGVnYWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogCi0gICAgICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBj
b2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIHY4OjpTY3JpcHREYXRh
KiA9IDApOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2Ny
aXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
aW50IGJhc2VMaW5lLCBpbnQgYmFzZUNvbHVtbiwgdjg6OlNjcmlwdERhdGEqID0gMCk7CiAKICAg
ICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBjb2RlIGlzIGRpZmZlcmVudCBmcm9tIHplcm8sIGEg
RE9NIGV4Y2VwdGlvbiBpcwogICAgICAgICAvLyBzY2hlZHVsZSB0byBiZSB0aHJvd24uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAK
aW5kZXggMTZlMGI0MTAxZWZkYzM1YWU3NDQxODE3YjA2ODdkYjZiNWE2NWEyNS4uMzQ1Zjc5ZDI4
MTRlMmZhNWMzNzU3NTNlMTA3ZTZjZmY3MDhjM2Q3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcApAQCAtMTg0LDcgKzE4NCw3
IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpmb3JnZXRWOEV2ZW50T2JqZWN0
KEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVNjcmlwdFZhbHVlIFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blN0YXRlKiBzdGF0ZSkKK1NjcmlwdFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGlu
dCBiYXNlTGluZSwgaW50IGJhc2VDb2x1bW4sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSog
c3RhdGUpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAg
U2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBT
dHJpbmcmIHNjcmlwdCwgY29uc3QgU3QKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hl
cjsKIAogICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBzY3JpcHRTdHJpbmcgPSB2OEV4dGVybmFs
U3RyaW5nKHNjcmlwdCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlZFNjcmlw
dCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwgYmFzZUxp
bmUpOworICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBWOFByb3h5
Ojpjb21waWxlU2NyaXB0KHNjcmlwdFN0cmluZywgZmlsZU5hbWUsIGJhc2VMaW5lLCBiYXNlQ29s
dW1uKTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBydW5TY3JpcHQoY29tcGls
ZWRTY3JpcHQpOwogCiAgICAgaWYgKCFleGNlcHRpb25DYXRjaGVyLkNhbkNvbnRpbnVlKCkpCkBA
IC0yMjcsNyArMjI3LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXAKICAgICAvLyBDb21wdXRl
IHRoZSBzb3VyY2Ugc3RyaW5nIGFuZCBwcmV2ZW50IGFnYWluc3QgaW5maW5pdGUgcmVjdXJzaW9u
LgogICAgIGlmIChtX3JlY3Vyc2lvbiA+PSBrTWF4UmVjdXJzaW9uRGVwdGgpIHsKICAgICAgICAg
djg6OkxvY2FsPHY4OjpTdHJpbmc+IGNvZGUgPSB2OEV4dGVybmFsU3RyaW5nKCJ0aHJvdyBSYW5n
ZUVycm9yKCdSZWN1cnNpb24gdG9vIGRlZXAnKSIpOwotICAgICAgICBzY3JpcHQgPSBWOFByb3h5
Ojpjb21waWxlU2NyaXB0KGNvZGUsICIiLCAwKTsKKyAgICAgICAgc2NyaXB0ID0gVjhQcm94eTo6
Y29tcGlsZVNjcmlwdChjb2RlLCAiIiwgMCwgMCk7CiAgICAgfQogCiAgICAgaWYgKFY4UHJveHk6
OmhhbmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA1ODgyNGI5ZWVmNmY0OTE0MDg0Yzc3NzE2MWUy
M2Y2ZTMwYWJlMjgzLi5mNDJkZjVhNTg1NTgzYzdlOTg5OTA2NmE4OWY0OWVhYmEyZjk1NTgxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmgKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRy
YWNrRXZlbnQoRXZlbnQqKTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGlu
IHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KLSAgICAgICAgU2NyaXB0VmFsdWUg
ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGlu
dCBiYXNlTGluZSwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKik7CisgICAgICAgIFNjcmlw
dFZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVO
YW1lLCBpbnQgYmFzZUxpbmUsIGludCBiYXNlQ29sdW1uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
U3RhdGUqKTsKIAogICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRoZSBjb250
ZXh0LgogICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggN2RiMGQ4ZDM3MzcwOWIy
ZTk3M2I2N2U3NzIzZTRmYzMxMWZiY2E1OS4uODE1NzMxMWYzNDNkZmY2NzJmZDk0ZGM2M2JkYzg3
MGUwMWMyN2Q0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCkBAIC03NSw3ICs3NSw3IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRy
b2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAgICAg
fQogCiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlIHN0YXRlOwotICAgIFNjcmlwdFZh
bHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNlKCksIHNvdXJj
ZUNvZGUudXJsKCkuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkgLSAxLCAmc3RhdGUp
OworICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUu
c291cmNlKCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5l
KCkgLSAxLCBzb3VyY2VDb2RlLnN0YXJ0Q29sdW1uKCkgLSAxLCAmc3RhdGUpOwogICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAg
ICpleGNlcHRpb24gPSBzdGF0ZS5leGNlcHRpb247CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Q
ZW5kaW5nU2NyaXB0LmNwcCBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCmluZGV4IDQy
ZTIyNWE3ZjMyYTFiMGNkYzFiYzM0NTFiNjU0OTdhNDYxMzU2ODkuLjE1MzJhMGIxODU1OTE2MzI1
MDYzYzBlMWJjMmJlNzEwMDdlYzIzZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BlbmRpbmdT
Y3JpcHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBAIC00MSw2ICs0
MSw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gUGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRB
bmRDbGVhcigpCiB7CiAgICAgc2V0Q2FjaGVkU2NyaXB0KDApOwogICAgIG1fc3RhcnRpbmdMaW5l
TnVtYmVyID0gMDsKKyAgICBtX3N0YXJ0aW5nQ29sdW1uTnVtYmVyID0gMDsKICAgICBtX3dhdGNo
aW5nRm9yTG9hZCA9IGZhbHNlOwogICAgIHJldHVybiBtX2VsZW1lbnQucmVsZWFzZSgpOwogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvV2ViQ29yZS9kb20vUGVu
ZGluZ1NjcmlwdC5oCmluZGV4IDQ0ZTFlNDkyODY3NmQ3OTYwMjJkZDI5MDU0NTc2MDE1YjdhMjZl
NDQuLmU1NDZiN2U5OGVmYTFlZmJjOWI0OWIzNTBmY2EyNDQzMDE0NDBhNTMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAorKysgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2Ny
aXB0LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgY2xhc3MgUGVuZGluZ1NjcmlwdCA6IHB1YmxpYyBDYWNo
ZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgUGVuZGluZ1NjcmlwdCgpCiAgICAgICAg
IDogbV9zdGFydGluZ0xpbmVOdW1iZXIoMCkKKyAgICAgICAgLCBtX3N0YXJ0aW5nQ29sdW1uTnVt
YmVyKDApCiAgICAgICAgICwgbV93YXRjaGluZ0ZvckxvYWQoZmFsc2UpCiAgICAgewogICAgIH0K
QEAgLTUxLDYgKzUyLDcgQEAgcHVibGljOgogICAgIFBlbmRpbmdTY3JpcHQoY29uc3QgUGVuZGlu
Z1NjcmlwdCYgb3RoZXIpCiAgICAgICAgIDogQ2FjaGVkUmVzb3VyY2VDbGllbnQob3RoZXIpCiAg
ICAgICAgICwgbV9zdGFydGluZ0xpbmVOdW1iZXIob3RoZXIubV9zdGFydGluZ0xpbmVOdW1iZXIp
CisgICAgICAgICwgbV9zdGFydGluZ0NvbHVtbk51bWJlcihvdGhlci5tX3N0YXJ0aW5nQ29sdW1u
TnVtYmVyKQogICAgICAgICAsIG1fd2F0Y2hpbmdGb3JMb2FkKG90aGVyLm1fd2F0Y2hpbmdGb3JM
b2FkKQogICAgICAgICAsIG1fZWxlbWVudChvdGhlci5tX2VsZW1lbnQpCiAgICAgewpAQCAtNjUs
NiArNjcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICAgICAg
bV9zdGFydGluZ0xpbmVOdW1iZXIgPSBvdGhlci5tX3N0YXJ0aW5nTGluZU51bWJlcjsKKyAgICAg
ICAgbV9zdGFydGluZ0NvbHVtbk51bWJlciA9IG90aGVyLm1fc3RhcnRpbmdDb2x1bW5OdW1iZXI7
CiAgICAgICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gb3RoZXIubV93YXRjaGluZ0ZvckxvYWQ7CiAg
ICAgICAgIG1fZWxlbWVudCA9IG90aGVyLm1fZWxlbWVudDsKICAgICAgICAgc2V0Q2FjaGVkU2Ny
aXB0KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKQEAgLTc1LDYgKzc4LDcgQEAgcHVibGljOgogICAg
IC8vIEZJWE1FOiBObyBzZXR0ZXIgbWVhbnMgdGhpcyBpcyBuZXZlciBzZXQgdG8gYW55dGhpbmcg
b3RoZXIgdGhhbiAwLgogICAgIC8vIFRoaXMgaXMgZWl0aGVyIHVubmVjZXNzYXJ5IG9yIGluY29y
cmVjdC4KICAgICBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dGluZ0xpbmVOdW1iZXI7IH0KKyAgICBpbnQgc3RhcnRpbmdDb2x1bW5OdW1iZXIoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0aW5nQ29sdW1uTnVtYmVyOyB9CiAKICAgICBib29sIHdhdGNoaW5nRm9y
TG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2F0Y2hpbmdGb3JMb2FkOyB9CiAgICAgdm9pZCBzZXRX
YXRjaGluZ0ZvckxvYWQoYm9vbCBiKSB7IG1fd2F0Y2hpbmdGb3JMb2FkID0gYjsgfQpAQCAtOTAs
NiArOTQsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgaW50IG1fc3RhcnRpbmdMaW5lTnVt
YmVyOyAvLyBPbmx5IHVzZWQgZm9yIGlubGluZSBzY3JpcHQgdGFncy4KKyAgICBpbnQgbV9zdGFy
dGluZ0NvbHVtbk51bWJlcjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCiAg
ICAgYm9vbCBtX3dhdGNoaW5nRm9yTG9hZDsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50
OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9k
b20vWE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBkZjBmOTJhODU5NjVkMWQwYzVhM2UyODAxOTAz
ZjA1MTFlMDc5NGI3Li42ZTU1YzgxZTk0Zjc5YWQ5ZDM4YTI1YzI5MTRmMDkzYjRjY2NiMWMxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUv
ZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKQEAgLTIwOSw2ICsyMDksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9wZW5kaW5nU2NyaXB0Owog
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9zY3JpcHRFbGVtZW50OwogICAgICAgICBpbnQgbV9z
Y3JpcHRTdGFydExpbmU7CisgICAgICAgIGludCBtX3NjcmlwdFN0YXJ0Q29sdW1uOwogCiAgICAg
ICAgIGJvb2wgbV9wYXJzaW5nRnJhZ21lbnQ7CiAgICAgICAgIFN0cmluZyBtX2RlZmF1bHROYW1l
c3BhY2VVUkk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCBk
OTlhYjRiOWFlYTM1ZTRjYTNiNzRlOWMwZjhiNjE1MjU0OTg3NGM2Li5hMzMyMzI2OThmM2U4YzZj
YzA2ZmFjOGExZDA3MTcxMzhhNzc0ZDY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2Vy
TGlieG1sMi5jcHAKQEAgLTU1OCw2ICs1NTgsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9j
dW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmlldykKICAg
ICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKICAgICAs
IG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0Q29sdW1uKDApCiAgICAg
LCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihG
cmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiB7CkBAIC01ODUsNiArNTg2LDcgQEAgWE1MRG9jdW1l
bnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBF
bGVtZW50KiBwYXJlbnQKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRp
bmdTY3JpcHQoMCkKICAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0
YXJ0Q29sdW1uKDApCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9zY3Jp
cHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7CkBAIC04MDcsOCArODA5LDEw
IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIq
IHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhCiAgICAgbmV3RWxlbWVudC0+YmVnaW5QYXJzaW5n
Q2hpbGRyZW4oKTsKIAogICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1Njcmlw
dEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7Ci0gICAgaWYgKHNjcmlwdEVsZW1lbnQpCisgICAg
aWYgKHNjcmlwdEVsZW1lbnQpIHsKICAgICAgICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVt
YmVyKCk7CisgICAgICAgIG1fc2NyaXB0U3RhcnRDb2x1bW4gPSBjb2x1bW5OdW1iZXIoKTsKKyAg
ICB9CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQobmV3RWxl
bWVudC5nZXQoKSk7CiAKQEAgLTg5NCw3ICs4OTgsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjplbmRFbGVtZW50TnMoKQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9z
Y3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZy
YW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxl
bWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydExp
bmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3Jp
cHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3Vt
ZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0TGluZSwgbV9zY3JpcHRTdGFydENvbHVtbikpOwog
CiAgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgogICAg
ICAgICBpZiAoaXNEZXRhY2hlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1l
bnRQYXJzZXJRdC5jcHAgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAppbmRl
eCBjMWY1OWFjZjYzZTE5Mzk5YTQwYTFiYTRkYzlkNjJiNTVmNDU0NDViLi5jYzg3MGZlYjlhOGNj
ODc0Yjk5M2I2Yzg1YWEyZTEzZTIwMzM4Y2I3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlclF0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0
LmNwcApAQCAtMTA0LDYgKzEwNCw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBh
cnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVWaWV3KQogICAgICwgbV9s
YXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQogICAgICwgbV9zY3Jp
cHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRDb2x1bW4oMCkKICAgICAsIG1fcGFy
c2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50
U2NyaXB0aW5nQWxsb3dlZCkKIHsKQEAgLTEzMSw2ICsxMzIsNyBAQCBYTUxEb2N1bWVudFBhcnNl
cjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQq
IHBhcmVudAogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1Njcmlw
dCgwKQogICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRDb2x1
bW4oMCkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Bl
cm1pc3Npb24ocGVybWlzc2lvbikKIHsKQEAgLTUxNSw4ICs1MTcsMTAgQEAgdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQoKQogICAgIH0KIAogICAgIFNjcmlwdEVsZW1l
bnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7Ci0g
ICAgaWYgKHNjcmlwdEVsZW1lbnQpCisgICAgaWYgKHNjcmlwdEVsZW1lbnQpIHsKICAgICAgICAg
bV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAgIG1fc2NyaXB0U3RhcnRD
b2x1bW4gPSBjb2x1bW5OdW1iZXIoKTsKKyAgICB9CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXBy
ZWNhdGVkUGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAgLTU4OCw3ICs1OTIs
NyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQoKQogICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2Ny
aXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1
bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+
ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRF
bGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0
TGluZSwgbV9zY3JpcHRTdGFydENvbHVtbikpOwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3Jp
cHQgPSBmYWxzZTsKICAgICBwb3BDdXJyZW50Tm9kZSgpOwpAQCAtNzA5LDQgKzcxMywzIEBAIHZv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRHRkKCkKIAogfQogfQotCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggZGNkMTAxMGMwNjgzYjQ3YmM4M2Fk
ZjhiYTI2MjVmNjQ2NDZkZDUxMC4uMTIzZmRkZjE3NDhiZGEzZDBlMjBiZmZjMWVmOGY1MWFiZmNk
YTM3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAt
MjEwLDExICsyMTAsMTIgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQ
YXVzZWRUcmVlQnVpbGRlcigpCiAgICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkp
OwogCiAgICAgaW50IHNjcmlwdFN0YXJ0TGluZSA9IDA7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHNj
cmlwdEVsZW1lbnQgPSBtX3RyZWVCdWlsZGVyLT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0
YXJ0TGluZSk7CisgICAgaW50IHNjcmlwdFN0YXJ0Q29sdW1uID0gMDsKKyAgICBSZWZQdHI8RWxl
bWVudD4gc2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Mo
c2NyaXB0U3RhcnRMaW5lLCBzY3JpcHRTdGFydENvbHVtbik7CiAgICAgLy8gV2Ugd2lsbCBub3Qg
aGF2ZSBhIHNjcmlwdFJ1bm5lciB3aGVuIHBhcnNpbmcgYSBEb2N1bWVudEZyYWdtZW50LgogICAg
IGlmICghbV9zY3JpcHRSdW5uZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBt
X3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZShzY3JpcHRFbGVtZW50LnJlbGVhc2UoKSwgc2NyaXB0U3Rh
cnRMaW5lKTsKKyAgICByZXR1cm4gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVu
dC5yZWxlYXNlKCksIHNjcmlwdFN0YXJ0TGluZSwgc2NyaXB0U3RhcnRDb2x1bW4pOwogfQogCiB2
b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcihTeW5jaHJvbm91c01vZGUgbW9k
ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAg
Yi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IDc2NGJmMDFh
OGQ3MWM3MTY3YWNmYWUyZDIxOGZjNjBjOGQyZjJhNzcuLjcwYTIwZTJhZTJjZDY4YzM5ZmFiYzI1
ZTc3ZDkyMDM4NjQ5OGRmZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNj
cmlwdFJ1bm5lci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVy
LmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIFNjcmlwdFNvdXJjZUNvZGUgSFRNTFNjcmlwdFJ1bm5l
cjo6c291cmNlRnJvbVBlbmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1NjcmlwdCYKICAgICAgICAg
cmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKICAgICB9CiAg
ICAgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwotICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNj
cmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0
aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdMaW5lTnVtYmVyKCkpOworICAgIHJldHVy
biBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50KCksIGRvY3Vt
ZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdMaW5l
TnVtYmVyKCksIHNjcmlwdC5zdGFydGluZ0NvbHVtbk51bWJlcigpKTsKIH0KIAogYm9vbCBIVE1M
U2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3JpcHRSZWFkeShjb25zdCBQZW5kaW5nU2NyaXB0JiBz
Y3JpcHQpCkBAIC0xOTEsMTMgKzE5MSwxMyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnN0b3BX
YXRjaGluZ0ZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIAogLy8gVGhpcyBm
dW5jdGlvbiBzaG91bGQgbWF0Y2ggMTAuMi41LjExICJBbiBlbmQgdGFnIHdob3NlIHRhZyBuYW1l
IGlzICdzY3JpcHQnIgogLy8gU2NyaXB0IGhhbmRsaW5nIGxpdmVzIG91dHNpZGUgdGhlIHRyZWUg
YnVpbGRlciB0byBrZWVwIHRoZSBlYWNoIGNsYXNzIHNpbXBsZS4KLWJvb2wgSFRNTFNjcmlwdFJ1
bm5lcjo6ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGludCBzdGFy
dExpbmUpCitib29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50
PiBzY3JpcHRFbGVtZW50LCBpbnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4pCiB7CiAgICAg
QVNTRVJUKHNjcmlwdEVsZW1lbnQpOwogICAgIC8vIEZJWE1FOiBJZiBzY3JpcHRpbmcgaXMgZGlz
YWJsZWQsIGFsd2F5cyBqdXN0IHJldHVybiB0cnVlOwogCiAgICAgLy8gVHJ5IHRvIGV4ZWN1dGUg
dGhlIHNjcmlwdCBnaXZlbiB0byB1cy4KLSAgICBydW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQo
KSwgc3RhcnRMaW5lKTsKKyAgICBydW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc3RhcnRM
aW5lLCBzdGFydENvbHVtbik7CiAKICAgICBpZiAoaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgp
KSB7CiAgICAgICAgIGlmIChtX3NjcmlwdE5lc3RpbmdMZXZlbCkKQEAgLTMwOSw3ICszMDksNyBA
QCBib29sIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3Jp
cHQmIHBlbmRpbmdTY3JpcHQsIEVsZW1lbgogCiAvLyBUaGlzIG1ldGhvZCBpcyBtZWFudCB0byBt
YXRjaCB0aGUgSFRNTDUgZGVmaW5pdGlvbiBvZiAicnVubmluZyBhIHNjcmlwdCIKIC8vIGh0dHA6
Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Nj
cmlwdGluZy0xLmh0bWwjcnVubmluZy1hLXNjcmlwdAotdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpy
dW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQordm9pZCBI
VE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBpbnQgc3RhcnRpbmdM
aW5lTnVtYmVyLCBpbnQgc3RhcnRpbmdDb2x1bW5OdW1iZXIpCiB7CiAgICAgQVNTRVJUKG1fZG9j
dW1lbnQpOwogICAgIEFTU0VSVCghaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpKTsKQEAgLTMz
Miw3ICszMzIsNyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBz
Y3JpcHQsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCiAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDQ3CiAgICAgICAgICAgICAvLyBB
U1NFUlQoZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOwogICAgICAgICAgICAg
QVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgICAgICAgICAgU2NyaXB0U291cmNlQ29k
ZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRF
eGVjdXRpb24obV9kb2N1bWVudCksIHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgICAgICAgICBT
Y3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVu
dFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc3RhcnRpbmdMaW5lTnVtYmVyLCBz
dGFydGluZ0NvbHVtbk51bWJlcik7CiAgICAgICAgICAgICBleGVjdXRlU2NyaXB0KHNjcmlwdCwg
c291cmNlQ29kZSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5oCmluZGV4IDQ3Yzk2ZmRiZDQxNmQwMzFmOTVjNmM4ZjYwYTk1N2RiYjE0MzVlMzAu
LmEzODlkYzYyNWUzZGI4Y2IyZWNhNzFiYWY0MGI0MjA4OGMyNzRjYTEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCisrKyBiL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRldGFjaCgpOwogCiAgICAgLy8gUHJvY2Vzc2VzIHRoZSBwYXNzZWQgaW4gc2NyaXB0IGFu
ZCBhbnkgcGVuZGluZyBzY3JpcHRzIGlmIHBvc3NpYmxlLgotICAgIGJvb2wgZXhlY3V0ZShQYXNz
UmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgaW50IHNjcmlwdFN0YXJ0TGluZSk7Cisg
ICAgYm9vbCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBpbnQg
c2NyaXB0U3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4pOwogCiAgICAgYm9vbCBleGVjdXRlU2Ny
aXB0c1dhaXRpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKik7CiAgICAgYm9vbCBoYXNTY3JpcHRz
V2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTY3JpcHRzV2FpdGlu
Z0ZvclN0eWxlc2hlZXRzOyB9CkBAIC03Niw3ICs3Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZXF1ZXN0RGVmZXJyZWRTY3JpcHQoRWxlbWVudCopOwogICAgIGJvb2wgcmVxdWVzdFBlbmRpbmdT
Y3JpcHQoUGVuZGluZ1NjcmlwdCYsIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZvaWQgcnVuU2Ny
aXB0KEVsZW1lbnQqLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICB2b2lkIHJ1blNjcmlw
dChFbGVtZW50KiwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgaW50IHN0YXJ0aW5nQ29sdW1uTnVt
YmVyKTsKIAogICAgIC8vIEhlbHBlcnMgZm9yIGRlYWxpbmcgd2l0aCBIVE1MU2NyaXB0UnVubmVy
SG9zdAogICAgIHZvaWQgd2F0Y2hGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAgYi9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxUb2tlbml6ZXIuY3BwCmluZGV4IDU3OTE4NDIxYzRmMGE2ZDM2MTcxNDA4OTMzMzE3
NDllYjYwYjkxMGMuLjRhMzcxY2ZiYjk1NDlkM2JiYjViYTg1MWU1YTEwZTQ3NTI4ZmI4YTQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKKysrIGIvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcApAQCAtMTE2LDEzICsxMTYsMTUgQEAg
dm9pZCBIVE1MVG9rZW5pemVyOjpyZXNldCgpCiB7CiAgICAgbV9zdGF0ZSA9IERhdGFTdGF0ZTsK
ICAgICBtX3Rva2VuID0gMDsKLSAgICBtX2xpbmVOdW1iZXIgPSAwOworICAgIG1fY3Vyc29yUG9z
aXRpb24ubGluZSA9IDA7CisgICAgbV9jdXJzb3JQb3NpdGlvbi5jb2x1bW4gPSAwOwogICAgIG1f
c2tpcExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZyA9IGZhbHNlOwogICAgIG1fZm9yY2VOdWxsQ2hh
cmFjdGVyUmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICBtX3Nob3VsZEFsbG93Q0RBVEEgPSBmYWxz
ZTsKICAgICBtX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJzsKIH0KIAorCiBpbmxp
bmUgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291
cmNlKQogewogICAgIGJvb2wgbm90RW5vdWdoQ2hhcmFjdGVycyA9IGZhbHNlOwpAQCAtMTYzLDcg
KzE2NSw3IEBAIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkoU2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UpCiAjZGVmaW5lIEFEVkFOQ0VfVE8oc3RhdGVOYW1lKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIG1fc3RhdGUgPSBzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghbV9pbnB1dFN0cmVhbVByZXBy
b2Nlc3Nvci5hZHZhbmNlKHNvdXJjZSwgbV9saW5lTnVtYmVyKSkgICAgICBcCisgICAgICAgIGlm
ICghbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5hZHZhbmNlKHNvdXJjZSwgbV9jdXJzb3JQb3Np
dGlvbikpICBcCiAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4o
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNjID0gbV9pbnB1dFN0cmVh
bVByZXByb2Nlc3Nvci5uZXh0SW5wdXRDaGFyYWN0ZXIoKTsgICAgICAgICAgICAgICBcCiAgICAg
ICAgIGdvdG8gc3RhdGVOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCkBAIC0xNzYsNyArMTc4LDcgQEAgaW5saW5lIGJvb2wgSFRNTFRva2Vu
aXplcjo6cHJvY2Vzc0VudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICNkZWZpbmUgU1dJ
VENIX1RPKHN0YXRlTmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgbV9zdGF0ZSA9IHN0YXRlTmFt
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IucGVl
ayhzb3VyY2UsIG1fbGluZU51bWJlcikpIFwKKyAgICAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkg
fHwgIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IucGVlayhzb3VyY2UsIG1fY3Vyc29yUG9zaXRp
b24pKSBcCiAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNjID0gbV9pbnB1dFN0cmVhbVBy
ZXByb2Nlc3Nvci5uZXh0SW5wdXRDaGFyYWN0ZXIoKTsgICAgICAgICAgICAgICBcCiAgICAgICAg
IGdvdG8gc3RhdGVOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCkBAIC0xOTcsNyArMTk5LDcgQEAgaW5saW5lIHZvaWQgSFRNTFRva2VuaXpl
cjo6c2F2ZUVuZFRhZ05hbWVJZk5lZWRlZCgpCiBib29sIEhUTUxUb2tlbml6ZXI6OmVtaXRBbmRS
ZXN1bWVJbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RhdGUgc3RhdGUpCiB7CiAgICAgbV9z
dGF0ZSA9IHN0YXRlOwotICAgIHNvdXJjZS5hZHZhbmNlKG1fbGluZU51bWJlcik7CisgICAgc291
cmNlLmFkdmFuY2UobV9jdXJzb3JQb3NpdGlvbik7CiAgICAgc2F2ZUVuZFRhZ05hbWVJZk5lZWRl
ZCgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjE3LDcgKzIxOSw3IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6ZW1pdEVuZE9mRmlsZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBpZiAo
aGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
bV9zdGF0ZSA9IERhdGFTdGF0ZTsKLSAgICBzb3VyY2UuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwor
ICAgIHNvdXJjZS5hZHZhbmNlKG1fY3Vyc29yUG9zaXRpb24pOwogICAgIG1fdG9rZW4tPmNsZWFy
KCk7CiAgICAgbV90b2tlbi0+bWFrZUVuZE9mRmlsZSgpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
MjI2LDcgKzIyOCw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6ZW1pdEVuZE9mRmlsZShTZWdtZW50
ZWRTdHJpbmcmIHNvdXJjZSkKIGJvb2wgSFRNTFRva2VuaXplcjo6Zmx1c2hCdWZmZXJlZEVuZFRh
ZyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKICAgICBBU1NFUlQobV90b2tlbi0+dHlwZSgp
ID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyIHx8IG1fdG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46
OlVuaW5pdGlhbGl6ZWQpOwotICAgIHNvdXJjZS5hZHZhbmNlKG1fbGluZU51bWJlcik7CisgICAg
c291cmNlLmFkdmFuY2UobV9jdXJzb3JQb3NpdGlvbik7CiAgICAgaWYgKG1fdG9rZW4tPnR5cGUo
KSA9PSBIVE1MVG9rZW46OkNoYXJhY3RlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgbV90
b2tlbi0+YmVnaW5FbmRUYWcobV9idWZmZXJlZEVuZFRhZ05hbWUpOwpAQCAtMjQwLDcgKzI0Miw3
IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6Zmx1c2hCdWZmZXJlZEVuZFRhZyhTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSkKICAgICAgICAgaWYgKGZsdXNoQnVmZmVyZWRFbmRUYWcoc291cmNlKSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHJldHVybiB0cnVl
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHx8ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vz
c29yLnBlZWsoc291cmNlLCBtX2xpbmVOdW1iZXIpKSAgICAgIFwKKyAgICAgICAgICAgIHx8ICFt
X2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLnBlZWsoc291cmNlLCBtX2N1cnNvclBvc2l0aW9uKSkg
IFwKICAgICAgICAgICAgIHJldHVybiBoYXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2MgPSBtX2lucHV0U3RyZWFtUHJlcHJv
Y2Vzc29yLm5leHRJbnB1dENoYXJhY3RlcigpOyAgICAgICAgICAgICAgIFwKICAgICAgICAgZ290
byBzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKQEAgLTI3MSw3ICsyNzMsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tl
bihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpIHx8ICFtX2lucHV0U3RyZWFtUHJlcHJv
Y2Vzc29yLnBlZWsoc291cmNlLCBtX2xpbmVOdW1iZXIpKQorICAgIGlmIChzb3VyY2UuaXNFbXB0
eSgpIHx8ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLnBlZWsoc291cmNlLCBtX2N1cnNvclBv
c2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7CiAg
ICAgVUNoYXIgY2MgPSBtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLm5leHRJbnB1dENoYXJhY3Rl
cigpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuaCBi
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5oCmluZGV4IGJhYjc3ZjMxY2ZlODM0
MGIwZWZlYWQxNmQ0ODkxM2M5NzFmYWYyZjMuLjIyMzQ0NDRhMDM3MzdkMDRiNmNjNjI5ZDk4ODM3
ZmRhM2MyYTk2YzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXpl
ci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5oCkBAIC0xMjksOCAr
MTI5LDggQEAgcHVibGljOgogICAgIC8vIHRoZXkgY2FsbCByZXNldCgpIGZpcnN0KS4KICAgICBi
b29sIG5leHRUb2tlbihTZWdtZW50ZWRTdHJpbmcmLCBIVE1MVG9rZW4mKTsKIAotICAgIGludCBs
aW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0gICAgaW50IGNvbHVt
bk51bWJlcigpIGNvbnN0IHsgcmV0dXJuIDE7IH0gLy8gTWF0Y2hlcyBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIuaCBiZWhhdmlvci4KKyAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fY3Vyc29yUG9zaXRpb24ubGluZTsgfQorICAgIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCB7
IHJldHVybiBtX2N1cnNvclBvc2l0aW9uLmNvbHVtbjsgfTsKIAogICAgIFN0YXRlIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUgc3RhdGUp
IHsgbV9zdGF0ZSA9IHN0YXRlOyB9CkBAIC0xNzAsNyArMTcwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gUmV0dXJucyB3aGV0aGVyIHdlIHN1Y2NlZWRlZCBpbiBwZWVraW5nIGF0IHRoZSBuZXh0
IGNoYXJhY3Rlci4KICAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHdlIGNhbiBmYWlsIHRvIHBlZWsg
aXMgaWYgdGhlcmUgYXJlIG5vIG1vcmUKICAgICAgICAgLy8gY2hhcmFjdGVycyBpbiB8c291cmNl
fCAoYWZ0ZXIgY29sbGFwc2luZyBcclxuLCBldGMpLgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgcGVlayhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgaW50JiBsaW5lTnVtYmVyKQorICAgICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgcGVlayhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU2VnbWVu
dGVkU3RyaW5nOjpDdXJzb3JQb3NpdGlvbiYgY3Vyc29yUG9zaXRpb24pCiAgICAgICAgIHsKICAg
ICAgICAgUGVla0FnYWluOgogICAgICAgICAgICAgbV9uZXh0SW5wdXRDaGFyYWN0ZXIgPSAqc291
cmNlOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGlmIChtX25l
eHRJbnB1dENoYXJhY3RlciA9PSAnXG4nICYmIG1fc2tpcE5leHROZXdMaW5lKSB7CiAgICAgICAg
ICAgICAgICAgbV9za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBzb3Vy
Y2UuYWR2YW5jZVBhc3ROZXdsaW5lKGxpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIHNvdXJj
ZS5hZHZhbmNlUGFzdE5ld2xpbmUoY3Vyc29yUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgbV9uZXh0SW5wdXRDaGFyYWN0ZXIgPSAqc291cmNlOwpAQCAtMjE1LDEy
ICsyMTUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJldHVybnMgd2hl
dGhlciB0aGVyZSBhcmUgbW9yZSBjaGFyYWN0ZXJzIGluIHxzb3VyY2V8IGFmdGVyIGFkdmFuY2lu
Zy4KLSAgICAgICAgYm9vbCBhZHZhbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBpbnQmIGxp
bmVOdW1iZXIpCisgICAgICAgIGJvb2wgYWR2YW5jZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwg
U2VnbWVudGVkU3RyaW5nOjpDdXJzb3JQb3NpdGlvbiYgY3Vyc29yUG9zaXRpb24pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKGxpbmVOdW1iZXIpOworICAgICAgICAgICAg
c291cmNlLmFkdmFuY2UoY3Vyc29yUG9zaXRpb24pOwogICAgICAgICAgICAgaWYgKHNvdXJjZS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0
dXJuIHBlZWsoc291cmNlLCBsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHJldHVybiBwZWVrKHNv
dXJjZSwgY3Vyc29yUG9zaXRpb24pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGVuZE9mRmlsZU1hcmtlcjsKQEAgLTI3Miw3ICsyNzIsNyBAQCBwcml2YXRlOgogICAg
IC8vIG1fdG9rZW4gaXMgb3duZWQgYnkgdGhlIGNhbGxlci4gIElmIG5leHRUb2tlbiBpcyBub3Qg
b24gdGhlIHN0YWNrLAogICAgIC8vIHRoaXMgbWVtYmVyIG1pZ2h0IGJlIHBvaW50aW5nIHRvIHVu
YWxsb2NhdGVkIG1lbW9yeS4KICAgICBIVE1MVG9rZW4qIG1fdG9rZW47Ci0gICAgaW50IG1fbGlu
ZU51bWJlcjsKKyAgICBTZWdtZW50ZWRTdHJpbmc6OkN1cnNvclBvc2l0aW9uIG1fY3Vyc29yUG9z
aXRpb247CiAKICAgICBib29sIG1fc2tpcExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZzsKICAgICBi
b29sIG1fZm9yY2VOdWxsQ2hhcmFjdGVyUmVwbGFjZW1lbnQ7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5jcHAKaW5kZXggOGM3NmZjMDA0NTUwOWZkNmQ0ODU1MzAyNjJhNzhkMjRl
N2QxY2E1My4uMmFjMmJiNTc2NTRkYjI2MTA4M2U3NjZjZTA3ZjY0NGE0NzBhMTI1MyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMzUwLDcgKzM1MCw5IEBAIEhU
TUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwg
SFRNTERvY3VtZW50KiBkb2N1bWVuCiAgICAgLCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5p
dGlhbE1vZGUpCiAgICAgLCBtX3Rva2VuaXplcih0b2tlbml6ZXIpCiAgICAgLCBtX3NjcmlwdFRv
UHJvY2Vzc1N0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9z
Y3JpcHRUb1Byb2Nlc3NTdGFydENvbHVtbih1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQog
ICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJl
clZhbHVlKQorICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0Q29sdW1uKHVuaW5pdGlhbGl6
ZWRMaW5lTnVtYmVyVmFsdWUpCiB7CiB9CiAKQEAgLTM2OCw3ICszNzAsOSBAQCBIVE1MVHJlZUJ1
aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3VtZW50
RnJhZ21lbnQqIGZyYQogICAgICwgbV9zZWNvbmRhcnlJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2Rl
KQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQogICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NT
dGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1fc2NyaXB0VG9Q
cm9jZXNzU3RhcnRDb2x1bW4odW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKICAgICAsIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkK
KyAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydENvbHVtbih1bmluaXRpYWxpemVkTGluZU51
bWJlclZhbHVlKQogewogICAgIGlmIChjb250ZXh0RWxlbWVudCkgewogICAgICAgICAvLyBTdGVw
cyA0LjItNC42IG9mIHRoZSBIVE1MNSBGcmFnbWVudCBDYXNlIHBhcnNpbmcgYWxnb3JpdGhtOgpA
QCAtNDI5LDcgKzQzMyw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4
dDo6fkZyYWdtZW50UGFyc2luZ0NvbnRleHQoKQogewogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+
IEhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhpbnQmIHNjcmlwdFN0YXJ0TGlu
ZSkKK1Bhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9j
ZXNzKGludCYgc2NyaXB0U3RhcnRMaW5lLCBpbnQmIHNjcmlwdFN0YXJ0Q29sdW1uKQogewogICAg
IC8vIFVucGF1c2Ugb3Vyc2VsdmVzLCBjYWxsZXJzIG1heSBwYXVzZSB1cyBhZ2FpbiB3aGVuIHBy
b2Nlc3NpbmcgdGhlIHNjcmlwdC4KICAgICAvLyBUaGUgSFRNTDUgc3BlYyBpcyB3cml0dGVuIGFz
IHRob3VnaCBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbnNpZGUgdGhlIHRyZWUKQEAgLTQzNyw3ICs0
NDEsOSBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRv
UHJvY2VzcyhpbnQmIHNjcmlwdFN0YXJ0TGluZSkKICAgICAvLyBiZWZvcmUgcnVubmluZyBzY3Jp
cHRzLgogICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKICAgICBzY3JpcHRTdGFydExpbmUgPSBtX3Nj
cmlwdFRvUHJvY2Vzc1N0YXJ0TGluZTsKKyAgICBzY3JpcHRTdGFydENvbHVtbiA9IG1fc2NyaXB0
VG9Qcm9jZXNzU3RhcnRDb2x1bW47CiAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUgPSB1
bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlOworICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRD
b2x1bW4gPSB1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlOwogICAgIHJldHVybiBtX3Njcmlw
dFRvUHJvY2Vzcy5yZWxlYXNlKCk7CiB9CiAKQEAgLTIyNTUsNiArMjI2MSw3IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAg
ICAgICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoc2NyaXB0
VGFnKSk7CiAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxl
bWVudCgpOwogICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUgPSBtX2xhc3RT
Y3JpcHRFbGVtZW50U3RhcnRMaW5lICsgMTsKKyAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNz
U3RhcnRDb2x1bW4gPSBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRDb2x1bW4gKyAxOwogICAgICAg
ICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgIGlmIChpc1Bh
cnNpbmdGcmFnbWVudCgpICYmIG1fZnJhZ21lbnRDb250ZXh0LnNjcmlwdGluZ1Blcm1pc3Npb24o
KSA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpCiAgICAgICAgICAgICAgICAgbV9zY3Jp
cHRUb1Byb2Nlc3MtPnJlbW92ZUFsbENoaWxkcmVuKCk7CkBAIC0yNzg5LDYgKzI3OTYsNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgbV90b2tlbml6ZXItPnNldFN0YXRlKEhUTUxUb2tlbml6ZXI6OlNjcmlw
dERhdGFTdGF0ZSk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1v
ZGU7CiAgICAgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSA9IG1fdG9rZW5pemVyLT5saW5l
TnVtYmVyKCk7CisgICAgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0Q29sdW1uID0gbV90b2tlbml6
ZXItPmNvbHVtbk51bWJlcigpOwogICAgIHNldEluc2VydGlvbk1vZGUoVGV4dE1vZGUpOwogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oIGIvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCBjMzBlNmI4ZGM4OTk4ZjI4
YzBkYWI2NWVlZTI1NDMyMGJiZThiY2U1Li5lOTE5M2Q3MmRiZWVmMGE2Y2FmMjc3ZWFkZTZhY2M2
ZDZjZjY5MDQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTY5LDcg
KzY5LDcgQEAgcHVibGljOgogICAgIC8vIFRoZSB0b2tlbiByZWFsbHkgc2hvdWxkIGJlIHBhc3Nl
ZCBhcyBhIGNvbnN0JiBzaW5jZSBpdCdzIG5ldmVyIG1vZGlmaWVkLgogICAgIHZvaWQgY29uc3Ry
dWN0VHJlZUZyb21Ub2tlbihIVE1MVG9rZW4mKTsKICAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aGVu
IHBhcnNlciBpcyBwYXVzZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KLSAgICBQ
YXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nlc3MoaW50JiBzY3JpcHRTdGFydExp
bmUpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhpbnQmIHNj
cmlwdFN0YXJ0TGluZSwgaW50JiBzY3JpcHRTdGFydENvbHVtbik7CiAKICAgICAvLyBEb25lLCBj
bG9zZSBhbnkgb3BlbiB0YWdzLCBldGMuCiAgICAgdm9pZCBmaW5pc2hlZCgpOwpAQCAtMjQ4LDEx
ICsyNDgsMTMgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX3NjcmlwdFRvUHJv
Y2VzczsgLy8gPHNjcmlwdD4gdGFnIHdoaWNoIG5lZWRzIHByb2Nlc3NpbmcgYmVmb3JlIHJlc3Vt
aW5nIHRoZSBwYXJzZXIuCiAgICAgaW50IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lOyAvLyBT
dGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUgc2NyaXB0IHRhZyBuZWVkaW5nIHByb2Nlc3Npbmcu
CisgICAgaW50IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRDb2x1bW47CiAKICAgICAvLyBGSVhNRTog
V2UgcHJvYmFibHkgd2FudCB0byByZW1vdmUgdGhpcyBtZW1iZXIuICBPcmlnaW5hbGx5LCBpdCB3
YXMKICAgICAvLyBjcmVhdGVkIHRvIHNlcnZpY2UgdGhlIGxlZ2FjeSB0cmVlIGJ1aWxkZXIsIGJ1
dCBpdCBzZWVtcyB0byBiZSB1c2VkIGZvcgogICAgIC8vIHNvbWUgb3RoZXIgdGhpbmdzIG5vdy4K
ICAgICBpbnQgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZTsKKyAgICBpbnQgbV9sYXN0U2Ny
aXB0RWxlbWVudFN0YXJ0Q29sdW1uOwogfTsKIAogLy8gRklYTUU6IE1vdmUgdGhlc2UgZnVuY3Rp
b25zIHRvIGEgbW9yZSBhcHByb3ByaWF0ZSBwbGFjZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Nl
Z21lbnRlZFN0cmluZy5jcHAKaW5kZXggYjlmZjUwMzdhOTgyYWZkNjRkOTgyMTVhNzg2YjA1ZTA2
MjVkMTU5OC4uZDg5NTY3YTA0ZGRjZjE0YWNlMzEyOWRlMzJkZmRmOTE2NjA3NmY2OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKQEAgLTUzLDYgKzUzLDcgQEAg
Y29uc3QgU2VnbWVudGVkU3RyaW5nJiBTZWdtZW50ZWRTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBT
ZWdtZW50ZWRTdHJpbmcgJm90aGVyKQogICAgICAgICBtX2N1cnJlbnRDaGFyID0gb3RoZXIubV9j
dXJyZW50Q2hhcjsKICAgICBtX2Nsb3NlZCA9IG90aGVyLm1fY2xvc2VkOwogICAgIG1fbnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN0cmluZyA9IG90aGVyLm1fbnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN0cmluZzsKKwogICAgIHJldHVybiAq
dGhpczsKIH0KIApAQCAtMjIzLDE0ICsyMjQsMTggQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFk
dmFuY2VTbG93Q2FzZSgpCiAgICAgbV9jdXJyZW50Q2hhciA9IG1fcHVzaGVkQ2hhcjEgPyAmbV9w
dXNoZWRDaGFyMSA6IG1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiB9CiAKLXZvaWQgU2VnbWVu
dGVkU3RyaW5nOjphZHZhbmNlU2xvd0Nhc2UoaW50JiBsaW5lTnVtYmVyKQordm9pZCBTZWdtZW50
ZWRTdHJpbmc6OmFkdmFuY2VTbG93Q2FzZShDdXJzb3JQb3NpdGlvbiYgY3Vyc29yUG9zaXRpb24p
CiB7CiAgICAgaWYgKG1fcHVzaGVkQ2hhcjEpIHsKICAgICAgICAgbV9wdXNoZWRDaGFyMSA9IG1f
cHVzaGVkQ2hhcjI7CiAgICAgICAgIG1fcHVzaGVkQ2hhcjIgPSAwOwogICAgIH0gZWxzZSBpZiAo
bV9jdXJyZW50U3RyaW5nLm1fY3VycmVudCkgewotICAgICAgICBpZiAoKm1fY3VycmVudFN0cmlu
Zy5tX2N1cnJlbnQrKyA9PSAnXG4nICYmIG1fY3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5l
TnVtYmVycygpKQotICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICBpZiAoKm1fY3Vy
cmVudFN0cmluZy5tX2N1cnJlbnQrKyA9PSAnXG4nICYmIG1fY3VycmVudFN0cmluZy5kb05vdEV4
Y2x1ZGVMaW5lTnVtYmVycygpKSB7CisgICAgICAgICAgKytjdXJzb3JQb3NpdGlvbi5saW5lOwor
ICAgICAgICAgIGN1cnNvclBvc2l0aW9uLmNvbHVtbiA9IDA7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgKytjdXJzb3JQb3NpdGlvbi5jb2x1bW47CisgICAgICAgIH0KICAgICAgICAgaWYg
KC0tbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoID09IDApCiAgICAgICAgICAgICBhZHZhbmNlU3Vi
c3RyaW5nKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21l
bnRlZFN0cmluZy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCmlu
ZGV4IDkxYzJjYmUzZjljZjY5OTA3NmY4MmQwNmExODAxN2ExNzg0MWZiZTYuLjdhNTA1ZDc1ZTM1
ZGRhNmQxZmU5NWUyMTMzYjk1N2EyOTQ0M2I5NmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2Vn
bWVudGVkU3RyaW5nLmgKQEAgLTE1MSwxNiArMTUxLDI1IEBAIHB1YmxpYzoKICAgICAgICAgYWR2
YW5jZSgpOwogICAgIH0KIAotICAgIHZvaWQgYWR2YW5jZVBhc3ROZXdsaW5lKGludCYgbGluZU51
bWJlcikKKyAgICBjbGFzcyBDdXJzb3JQb3NpdGlvbiB7CisgICAgcHVibGljOgorICAgICAgaW50
IGNvbHVtbjsKKyAgICAgIGludCBsaW5lOworICAgIH07CisKKyAgICB2b2lkIGFkdmFuY2VQYXN0
TmV3bGluZShDdXJzb3JQb3NpdGlvbiYgY3Vyc29yUG9zaXRpb24pCiAgICAgewogICAgICAgICBB
U1NFUlQoKmN1cnJlbnQoKSA9PSAnXG4nKTsKICAgICAgICAgaWYgKCFtX3B1c2hlZENoYXIxICYm
IG1fY3VycmVudFN0cmluZy5tX2xlbmd0aCA+IDEpIHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIg
Kz0gbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKCk7CisgICAgICAgICAg
ICBpZiAobV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKCkpIHsKKyAgICAg
ICAgICAgICAgKytjdXJzb3JQb3NpdGlvbi5saW5lOworICAgICAgICAgICAgICBjdXJzb3JQb3Np
dGlvbi5jb2x1bW4gPSAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgLS1tX2N1cnJlbnRT
dHJpbmcubV9sZW5ndGg7CiAgICAgICAgICAgICBtX2N1cnJlbnRDaGFyID0gKyttX2N1cnJlbnRT
dHJpbmcubV9jdXJyZW50OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGFkdmFuY2VTbG93Q2FzZShsaW5lTnVtYmVyKTsKKyAgICAgICAgYWR2YW5jZVNsb3dDYXNlKGN1
cnNvclBvc2l0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZHZhbmNlUGFzdE5vbk5ld2xp
bmUoKQpAQCAtMTc0LDE1ICsxODMsMjAgQEAgcHVibGljOgogICAgICAgICBhZHZhbmNlU2xvd0Nh
c2UoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZHZhbmNlKGludCYgbGluZU51bWJlcikKKyAg
ICB2b2lkIGFkdmFuY2UoQ3Vyc29yUG9zaXRpb24mIGN1cnNvclBvc2l0aW9uKQogICAgIHsKICAg
ICAgICAgaWYgKCFtX3B1c2hlZENoYXIxICYmIG1fY3VycmVudFN0cmluZy5tX2xlbmd0aCA+IDEp
IHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gKCptX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50
ID09ICdcbicpICYgbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKCk7Cisg
ICAgICAgICAgICBpZiAoKCptX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50ID09ICdcbicpICYgbV9j
dXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKCkpIHsKKyAgICAgICAgICAgICAg
KytjdXJzb3JQb3NpdGlvbi5saW5lOworICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbi5jb2x1
bW4gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2N1cnNvclBv
c2l0aW9uLmNvbHVtbjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC0tbV9jdXJyZW50U3Ry
aW5nLm1fbGVuZ3RoOwogICAgICAgICAgICAgbV9jdXJyZW50Q2hhciA9ICsrbV9jdXJyZW50U3Ry
aW5nLm1fY3VycmVudDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBh
ZHZhbmNlU2xvd0Nhc2UobGluZU51bWJlcik7CisgICAgICAgIGFkdmFuY2VTbG93Q2FzZShjdXJz
b3JQb3NpdGlvbik7CiAgICAgfQogCiAgICAgLy8gV3JpdGVzIHRoZSBjb25zdW1lZCBjaGFyYWN0
ZXJzIGludG8gY29uc3VtZWRDaGFyYWN0ZXJzLCB3aGljaCBtdXN0CkBAIC0yMDgsNyArMjIyLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHByZXBlbmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nJik7
CiAKICAgICB2b2lkIGFkdmFuY2VTbG93Q2FzZSgpOwotICAgIHZvaWQgYWR2YW5jZVNsb3dDYXNl
KGludCYgbGluZU51bWJlcik7CisgICAgdm9pZCBhZHZhbmNlU2xvd0Nhc2UoQ3Vyc29yUG9zaXRp
b24mIGN1cnNvclBvc2l0aW9uKTsKICAgICB2b2lkIGFkdmFuY2VTdWJzdHJpbmcoKTsKICAgICBj
b25zdCBVQ2hhciogY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXI7IH0KIAo=
</data>
<flag name="review"
          id="55742"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68076</attachid>
            <date>2010-09-20 06:44:35 -0700</date>
            <delta_ts>2010-09-23 14:03:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20100920174432.patch</filename>
            <type>text/plain</type>
            <size>70488</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzNDkwNzQ4ZTQ4NzNjZjJhYWY5NDNiOTYzYTY1ODVmZGVmODkxNzhjLi44
ZDViNmMzNzhlMmQ1YTM0MmM2OTI2OTMxMzFiMzEyZGMwY2E5ZWE0IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTAtMDktMjAgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBIVE1MUG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgSFRNTCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvSFRNTFBvc2l0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogd3RmL0hU
TUxQb3NpdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6SFRNTFBvc2l0aW9uOjpIVE1MUG9z
aXRpb24pOgorICAgICAgICAoV1RGOjpIVE1MUG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbik6Cisg
ICAgICAgIChXVEY6OkhUTUxQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKToKKyAgICAgICAg
KFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6
WmVyb0Jhc2VkTnVtYmVyOjpaZXJvQmFzZWROdW1iZXIpOgorICAgICAgICAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6Onplcm9CYXNlZEludCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6T25lQmFzZWRO
dW1iZXIpOgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6b25lQmFzZWRJbnQpOgorICAg
ICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6Y29udmVydEFzWmVyb0Jhc2VkSW50KToKKyAgICAg
ICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRUb1plcm9CYXNlZCk6CisgICAgICAgIChX
VEY6OnRvWmVyb0Jhc2VkSFRNTFBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6dG9PbmVCYXNlZEhU
TUxQb3NpdGlvbik6CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6Y29udmVydFRvT25l
QmFzZWQpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorCiAyMDEwLTA5LTE5ICBHYXZpbiBCYXJy
YWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxk
IGZpeCBwdCAyLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBkZDJiYTIxZDlkNWRiOTJlZWY3NWM2
YzJlZDhkM2JkNDA1MDU4YzRlLi40YzJlNzdjNzg5NzAzYmRjYWE5YzhiMjQxNjcxNmNiOWQyZTI5
N2Y0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNDUzLDYgKzQ1Myw4IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuY3BwIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNo
VHJhaXRzLmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9IVE1MUG9zaXRpb24uY3BwIFwKKwlKYXZh
U2NyaXB0Q29yZS93dGYvSFRNTFBvc2l0aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9MaXN0
SGFzaFNldC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvTGlzdFJlZlB0ci5oIFwKIAlKYXZhU2Ny
aXB0Q29yZS93dGYvTG9ja2VyLmggXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXgg
NDYyOTYwZDUxZGQ2ZGJlNDAyZDU4NjNkMjA4YzEzMjhjYmMxNWFjZS4uNmUxYzFhOTA4NzdjMzdl
NGVlODk2NGM1N2EyNjMyNWJhYTY2N2E5ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZ3lwaQorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
CkBAIC0zODQsNiArMzg0LDggQEAKICAgICAgICAgICAgICd3dGYvSGFzaFRhYmxlLmNwcCcsCiAg
ICAgICAgICAgICAnd3RmL0hhc2hUYWJsZS5oJywKICAgICAgICAgICAgICd3dGYvSGFzaFRyYWl0
cy5oJywKKyAgICAgICAgICAgICd3dGYvSFRNTFBvc2l0aW9uLmgnLAorICAgICAgICAgICAgJ3d0
Zi9IVE1MUG9zaXRpb24uY3BwJywKICAgICAgICAgICAgICd3dGYvTGlzdEhhc2hTZXQuaCcsCiAg
ICAgICAgICAgICAnd3RmL0xpc3RSZWZQdHIuaCcsCiAgICAgICAgICAgICAnd3RmL0xvY2tlci5o
JywKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA4OTY3OTRlZjQxZThmMDIxODQwOTk0
YWMzNTI0Nzg3MmIyZGFlMTY5Li5kMDY3YTdhNDM2ZWIyOTNjNjE5Nzc4M2FlODY4ODg2YzhhY2Iw
NWYzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIv
SmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC00LDYgKzQsNyBAQCBTRVQoV1RG
X1NPVVJDRVMKICAgICBDdXJyZW50VGltZS5jcHAKICAgICBGYXN0TWFsbG9jLmNwcAogICAgIEhh
c2hUYWJsZS5jcHAKKyAgICBIVE1MUG9zaXRpb24uY3BwCiAgICAgTWFpblRocmVhZC5jcHAKICAg
ICBNRDUuY3BwCiAgICAgUmFuZG9tTnVtYmVyLmNwcApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvd3RmL0hUTUxQb3NpdGlvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvSFRNTFBvc2l0aW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wZTFhMjUwOTE5MDIxNDkyMWM2NDg0YWU3OWNlNjFjMTk5N2IzOWZk
Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0hUTUxQb3NpdGlvbi5jcHAK
QEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJIVE1MUG9zaXRpb24uaCIKKworbmFtZXNwYWNlIFdURiB7CisKK2NvbnN0IFplcm9C
YXNlZE51bWJlciBaZXJvQmFzZWROdW1iZXI6OnNfYmFzZSgwKTsKK2NvbnN0IFplcm9CYXNlZE51
bWJlciBaZXJvQmFzZWROdW1iZXI6OnNfYmVsb3dCYXNlKC0xKTsKKworY29uc3QgT25lQmFzZWRO
dW1iZXIgT25lQmFzZWROdW1iZXI6OnNfYmFzZSgxKTsKK2NvbnN0IE9uZUJhc2VkTnVtYmVyIE9u
ZUJhc2VkTnVtYmVyOjpzX2JlbG93QmFzZSgwKTsKKworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9IVE1MUG9zaXRpb24uaCBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9IVE1MUG9zaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDY0NTExZGU0MzY4ZWEzOWJmNDI5
NzgyM2I2NmRmMDQ1YTZlNWFmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L0hUTUxQb3NpdGlvbi5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBIVE1MUG9zaXRpb25faAorI2RlZmluZSBIVE1MUG9zaXRpb25faAorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKworLyoKKyAqIEhUTUwgcG9zaXRp
b24KKyAqCisgKiBIVE1MUG9zaXRpb24gc3RydWN0dXJlIHNwZWNpZmllcyBjb29yZGluYXRlcyB3
aXRoaW4gYW4gSFRNTCByZXNvdXJjZS4gSXQgaXMgdXNlZCBtb3N0bHkKKyAqIGZvciBzYXZpbmcg
c2NyaXB0IHNvdXJjZSBwb3NpdGlvbi4gVGhlIHRoaXJkIGZpZWxkICdnZW5lcmF0aW9uJyByZWZs
ZWN0cyB0aGUgZmFjdAorICogdGhhdCBhbnkgcGFydCBvZiBIVE1MIGRvY3VtZW50IGNhbiBiZSBn
ZW5lcmF0ZWQgb24gdGhlIGZseSwgYnkgYSAnZG9jdW1lbnQud3JpdGUnCisgKiBjYWxsLiBXaGls
ZSBlbGVtZW50cyBvZiB0aGUgZ2VuZXJhdGVkIHBhcnQgbWF5IHN0aWxsIGhhdmUgY29vcmRpbmF0
ZXMgKHByb2JhYmx5KSwKKyAqIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIGNvb3Jk
aW5hdGVzIGluIHRoZSBvcmlnaW5hbCBIVE1MIHNvdXJjZS4KKyAqIFNvIGdlbmVyYXRpb24gPT0g
MCBtZWFucyB0aGF0IGNvb3JkaW5hdGVzIGFwcGx5IHRvIGRvd25sb2FkZWQgSFRNTCBmaWxlLAor
ICogZ2VuZXJhdGlvbiA9PSAxIGFwcGxpZXMgdG8gYSBIVE1MIGVsZW1lbnRzIGdlbmVyYXRlZCwg
Z2VuZXJhdGlvbiA9PSAyIHRvIGVsZW1lbnRzCisgKiBnZW5lcmF0ZWQgZnJvbSBhIHNjcmlwdCBp
biBhIGdlbmVyYXRlZCBwYXJ0IGFuZCBzbyBvbi4KKyAqCisgKgorICoKKyAqIDAtYmFzZWQgYW5k
IDEtYmFzZWQKKyAqCisgKiBMaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBjb3VsZCBiZSBpbnRlcnBy
ZXRlZCBhcyB6ZXJvLWJhc2VkIG9yIDEtYmFzZWQuIFNpbmNlCisgKiBib3RoIHByYWN0aWNlcyBj
b2V4aXN0IGluIFdlYktpdCBzb3VyY2UgYmFzZSwgJ2ludCcgdHlwZSBzaG91bGQgYmUgcmVwbGFj
ZWQgd2l0aAorICogYSBkZWRpY2F0ZWQgd3JhcHBlciB0eXBlcywgc28gdGhhdCBjb21waWxlciBo
ZWxwZWQgdXMgd2l0aCB0aGlzIGFtYmlndWl0eS4KKyAqCisgKiBIZXJlIHdlIGludHJvZHVjZSAy
IHR5cGVzIG9mIG51bWJlcnM6IFplcm9CYXNlZE51bWJlciBhbmQgT25lQmFzZWROdW1iZXIgYW5k
CisgKiAyIGNvcnJlc3BvbmRpbmcgdHlwZXMgb2YgSFRNTFBvc2l0aW9uIHN0cnVjdHVyZS4gV2hp
bGUgb25seSBvbmUgdHlwZSBvdWdodCB0byBiZSBlbm91Z2gsCisgKiB0aGlzIGlzIGRvbmUgdG8g
a2VlcCB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgdHlwZXMgYXMgdHJhbnNwYXJlbnQgYXMgcG9zc2li
bGU6CisgKiBlLmcuIGluIGFyZWFzIHdoZXJlIDAtYmFzZWQgaW50ZWdlcnMgYXJlIHVzZWQsIEhU
TUxQb3NpdGlvbjAgc2hvdWxkIGJlIGludHJvZHVjZWQuIFRoaXMKKyAqIHdheSBhbGwgY2hhbmdl
cyB3aWxsIHJlbWFpbiB0cmFja2FibGUuCisgKiBMYXRlciBIVE1MUG9zaXRpb24wIGFuZCBIVE1M
UG9zaXRpb24xIGNhbiBiZSBtZXJnZWQgdG9nZXRoZXIgcXVpdGUgZWFzaWx5LgorICovCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIE5VTUJFUj4KK2NsYXNzIEhUTUxQb3NpdGlvbiB7CitwdWJsaWM6Cisg
ICAgSFRNTFBvc2l0aW9uKE5VTUJFUiBsaW5lLCBOVU1CRVIgY29sdW1uLCBpbnQgZ2VuZXJhdGlv
bikKKyAgICAgICAgOiBtX2xpbmUobGluZSkKKyAgICAgICAgLCBtX2NvbHVtbihjb2x1bW4pCisg
ICAgICAgICwgbV9nZW5lcmF0aW9uKGdlbmVyYXRpb24pCisgICAgeworICAgIH0KKyAgICBIVE1M
UG9zaXRpb24oKSB7fQorCisgICAgLy8gQSAnbWluaW11bScgdmFsdWUgb2YgcG9zaXRpb24sIHVz
ZWQgYXMgYSBkZWZhdWx0IHZhbHVlLgorICAgIHN0YXRpYyBIVE1MUG9zaXRpb248TlVNQkVSPiBt
aW5pbXVtUG9zaXRpb24oKSB7IHJldHVybiBIVE1MUG9zaXRpb248TlVNQkVSPihOVU1CRVI6OnNf
YmFzZSwgTlVNQkVSOjpzX2Jhc2UsIDApOyB9CisKKyAgICAvLyBBIHZhbHVlIHdpdGggbGluZSB2
YWx1ZSBsZXNzIHRoYW4gYSBtaW5pbXVtOyB1c2VkIGFzIGFuIGltcG9zc2libGUgcG9zaXRpb24u
CisgICAgc3RhdGljIEhUTUxQb3NpdGlvbjxOVU1CRVI+IGJlbG93UmFuZ2VQb3NpdGlvbigpIHsg
cmV0dXJuIEhUTUxQb3NpdGlvbjxOVU1CRVI+KE5VTUJFUjo6c19iZWxvd0Jhc2UsIE5VTUJFUjo6
c19iYXNlLCAwKTsgfQorCisgICAgTlVNQkVSIG1fbGluZTsKKyAgICBOVU1CRVIgbV9jb2x1bW47
CisgICAgaW50IG1fZ2VuZXJhdGlvbjsKK307CisKKworY2xhc3MgT25lQmFzZWROdW1iZXI7CisK
Ky8qIEFuIGludCB3cmFwcGVyIHRoYXQgYWx3YXlzIHJlbWluZHMgeW91IHRoYXQgdGhlIG51bWJl
ciBzaG91bGQgYmUgMC1iYXNlZCAqLworY2xhc3MgWmVyb0Jhc2VkTnVtYmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGZyb21aZXJvQmFzZWRJbnQoaW50IHplcm9CYXNl
ZEludCkgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyKHplcm9CYXNlZEludCk7IH0KKworICAgIFpl
cm9CYXNlZE51bWJlcigpIHt9CisKKyAgICBpbnQgemVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorCisgICAgT25lQmFzZWROdW1iZXIgY29udmVydFRvT25lQmFzZWQoKSBj
b25zdDsKKworICAgIHN0YXRpYyBjb25zdCBaZXJvQmFzZWROdW1iZXIgc19iYXNlOyAvLyAwCisg
ICAgc3RhdGljIGNvbnN0IFplcm9CYXNlZE51bWJlciBzX2JlbG93QmFzZTsgLy8gLTEKKworcHJp
dmF0ZToKKyAgICBaZXJvQmFzZWROdW1iZXIoaW50IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHt9
CisgICAgaW50IG1fdmFsdWU7Cit9OworCisvKiBBbiBpbnQgd3JhcHBlciB0aGF0IGFsd2F5cyBy
ZW1pbmRzIHlvdSB0aGF0IHRoZSBudW1iZXIgc2hvdWxkIGJlIDEtYmFzZWQgKi8KK2NsYXNzIE9u
ZUJhc2VkTnVtYmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgT25lQmFzZWROdW1iZXIgZnJvbU9u
ZUJhc2VkSW50KGludCBvbmVCYXNlZEludCkgeyByZXR1cm4gT25lQmFzZWROdW1iZXIob25lQmFz
ZWRJbnQpOyB9CisgICAgT25lQmFzZWROdW1iZXIoKSB7fQorCisgICAgaW50IG9uZUJhc2VkSW50
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGludCBjb252ZXJ0QXNaZXJvQmFzZWRJ
bnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlIC0gMTsgfQorICAgIFplcm9CYXNlZE51bWJlciBj
b252ZXJ0VG9aZXJvQmFzZWQoKSBjb25zdCB7IHJldHVybiBaZXJvQmFzZWROdW1iZXI6OmZyb21a
ZXJvQmFzZWRJbnQobV92YWx1ZSAtIDEpOyB9CisKKyAgICBzdGF0aWMgY29uc3QgT25lQmFzZWRO
dW1iZXIgc19iYXNlOyAvLyAxCisgICAgc3RhdGljIGNvbnN0IE9uZUJhc2VkTnVtYmVyIHNfYmVs
b3dCYXNlOyAvLyAwCisKK3ByaXZhdGU6CisgICAgT25lQmFzZWROdW1iZXIoaW50IHZhbHVlKSA6
IG1fdmFsdWUodmFsdWUpIHt9CisgICAgaW50IG1fdmFsdWU7Cit9OworCit0eXBlZGVmIEhUTUxQ
b3NpdGlvbjxaZXJvQmFzZWROdW1iZXI+IEhUTUxQb3NpdGlvbjA7Cit0eXBlZGVmIEhUTUxQb3Np
dGlvbjxPbmVCYXNlZE51bWJlcj4gSFRNTFBvc2l0aW9uMTsKKworaW5saW5lIEhUTUxQb3NpdGlv
bjAgdG9aZXJvQmFzZWRIVE1MUG9zaXRpb24oY29uc3QgSFRNTFBvc2l0aW9uMSYgcG9zaXRpb24p
Cit7CisgICAgcmV0dXJuIEhUTUxQb3NpdGlvbjAocG9zaXRpb24ubV9saW5lLmNvbnZlcnRUb1pl
cm9CYXNlZCgpLCBwb3NpdGlvbi5tX2NvbHVtbi5jb252ZXJ0VG9aZXJvQmFzZWQoKSwgcG9zaXRp
b24ubV9nZW5lcmF0aW9uKTsKK30KKworaW5saW5lIEhUTUxQb3NpdGlvbjEgdG9PbmVCYXNlZEhU
TUxQb3NpdGlvbihjb25zdCBIVE1MUG9zaXRpb24wJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4g
SFRNTFBvc2l0aW9uMShwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvT25lQmFzZWQoKSwgcG9zaXRp
b24ubV9jb2x1bW4uY29udmVydFRvT25lQmFzZWQoKSwgcG9zaXRpb24ubV9nZW5lcmF0aW9uKTsK
K30KKworaW5saW5lIE9uZUJhc2VkTnVtYmVyIFplcm9CYXNlZE51bWJlcjo6Y29udmVydFRvT25l
QmFzZWQoKSBjb25zdAoreworICAgIHJldHVybiBPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2Vk
SW50KG1fdmFsdWUgKyAxKTsKK30KKworfQorCisKK3VzaW5nIFdURjo6SFRNTFBvc2l0aW9uMDsK
K3VzaW5nIFdURjo6SFRNTFBvc2l0aW9uMTsKKworI2VuZGlmIC8vIEhUTUxQb3NpdGlvbl9oCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaSBiL0phdmFTY3JpcHRDb3JlL3d0
Zi93dGYucHJpCmluZGV4IDg0YWMyMGUzZmM5ZmU0YjVjYTI0Zjk1MzkyZjdiYTFlOTE4MDEzNDAu
LmVmZTMzMGU5ZDhjYmNhNjA3NjM2ZDU2NTUzZmI3Zjc1NjhjNGExYTYgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJp
CkBAIC04LDYgKzgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvZHRvYS5jcHAgXAogICAgIHd0
Zi9GYXN0TWFsbG9jLmNwcCBcCiAgICAgd3RmL0hhc2hUYWJsZS5jcHAgXAorICAgIHd0Zi9IVE1M
UG9zaXRpb24uY3BwIFwKICAgICB3dGYvTUQ1LmNwcCBcCiAgICAgd3RmL01haW5UaHJlYWQuY3Bw
IFwKICAgICB3dGYvcXQvTWFpblRocmVhZFF0LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDg5NWFmYjNmNmQ4ZGRjMDg4NDAxZjhj
Yjc3ZTc1YmM3Yzg5ODUwM2UuLjQ3NTY5YmRiOWMzNWRhYThjOTdiY2JiNDYwYmU2MTk3MjUyYTUz
NjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsOTggQEAKKzIwMTAtMDktMjAgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5A
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEhUTUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0
aGluIEhUTUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgUmVwbGFjZXMg
bGluZSBudW1iZXIgd2l0aCBIVE1MUG9zaXRpb24gc3RydWN0IHNvIHRoYXQgc2NyaXB0IGVuZ2lu
ZQorICAgICAgICBnZXRzIHNjcmlwdCBzdGFydGluZyBsaW5lL2NvbHVtbi4KKyAgICAgICAgRXh0
ZW5kcyBTZWdtZW50ZWRTdHJpbmcgdG8gcHJvdmlkZSBjdXJyZW50IGNvbHVtbiBhbmQgY3VycmVu
dCBsaW5lLgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmV2ZW50SGFuZGxlclBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRD
b250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdFNvdXJjZUNvZGU6OnN0YXJ0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRT
b3VyY2VDb2RlOjpzdGFydFBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVuZXI6
OlY4TGF6eUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0
ZW5lcjo6cHJlcGFyZUxpc3RlbmVyT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExh
enlFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVy
OjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhQcm94eTo6Y29tcGlsZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpWOFBy
b3h5OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpydW5TY3JpcHQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJ1blNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3Mvdjgv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogZG9tL1BlbmRpbmdTY3JpcHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVh
cik6CisgICAgICAgICogZG9tL1BlbmRpbmdTY3JpcHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1Nj
cmlwdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnN0YXJ0
aW5nUG9zaXRpb24pOgorICAgICAgICAqIGRvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaDoK
KyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBkb20vWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OmVuZEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
bGluZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1u
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpodG1sUG9zaXRp
b24pOgorICAgICAgICAqIGRvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aHRtbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZVN0YXJ0RWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VFbmRFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERv
Y3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpodG1sUG9zaXRpb24pOgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxJbnB1dFN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjpI
VE1MSW5wdXRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjpnZXRJ
bnNlcnRpb25MZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRTdHJlYW06OnNldElu
c2VydGlvbkxldmVsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydGlvblBvaW50UmVjb3JkOjpJ
bnNlcnRpb25Qb2ludFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludFJl
Y29yZDo6fkluc2VydGlvblBvaW50UmVjb3JkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
U2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnNv
dXJjZUZyb21QZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5u
ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2Ny
aXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmg6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVNsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlZ21lbnRlZFN0cmluZzo6Z2V0Q3VycmVudExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vn
bWVudGVkU3RyaW5nOjpnZXRDdXJyZW50Q29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21l
bnRlZFN0cmluZzo6c2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1NlZ21lbnRlZFN0cmluZy5oOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpT
ZWdtZW50ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZh
bmNlUGFzdE5ld2xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWQpOgorCiAyMDEwLTA5LTIwICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCmluZGV4IDMyZDYyOThjZGJkYTc3MmRhYTEz
ZTEwMzNlM2NmMGFhNDBmNTk0YjIuLjBkMjg1ZTI4ZWYwNTQ0NzU5MWFlYmU2ZjdjZmQ1MDE4NDUw
MzkyZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCkBAIC0zNSwxNSAr
MzUsMTcgQEAKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0
cmluZ1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi9I
VE1MUG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgU2NyaXB0U291cmNlQ29kZSB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0U291
cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBp
bnQgc3RhcnRMaW5lID0gMSkKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksCisgICAgICAgIGNvbnN0IEhUTUxQb3NpdGlv
bjEmIHN0YXJ0UG9zaXRpb24gPSBIVE1MUG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKSkKICAg
ICAgICAgOiBtX3Byb3ZpZGVyKFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1
cmwuaXNOdWxsKCkgPyBTdHJpbmcoKSA6IHVybC5zdHJpbmcoKSkpCi0gICAgICAgICwgbV9jb2Rl
KG1fcHJvdmlkZXIsIHN0YXJ0TGluZSkKKyAgICAgICAgLCBtX2NvZGUobV9wcm92aWRlciwgc3Rh
cnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSkKICAgICAgICAgLCBtX3VybCh1cmwpCiAg
ICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0
aW9uLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcAppbmRleCBk
Y2QwYmIzMzc3MTgxMzE4NDIwYzEwNzNiZTI1MWE5ZTU4NGJhNGI3Li4xMTJkZTUyZDNiYWY4ZGFl
ZjZjYWZiMmEyMTA5NWQ3OWRmYzM1ZTQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjaGVkdWxlZEFjdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRB
Y3Rpb24uY3BwCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NoZWR1
bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24odjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dCwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmMsIGludCBhcmdjLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gYXJndltdKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2NvZGUo
U3RyaW5nKCksIEtVUkwoKSwgMCkKKyAgICAsIG1fY29kZShTdHJpbmcoKSwgS1VSTCgpLCBIVE1M
UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKIHsKICAgICBtX2Z1bmN0aW9uID0gdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPjo6TmV3KGZ1bmMpOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA1NTZiNWM2ZWE5MWI3YTAyMTJjNGU5YjJiYjJi
OWVkZGUyYmZhNTQ2Li4zM2JkMGNlZmRiZGQ5N2VmNjViYzg4OGQ5MjE5ZDkyYjkzNDg0M2VkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTI2MCwyMCArMjYw
LDEyIEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIFNob3VsCiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKG9i
amVjdCk7CiB9CiAKLWludCBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnVtYmVy
KCkgY29uc3QKK0hUTUxQb3NpdGlvbjAgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyUG9z
aXRpb24oKSBjb25zdAogewogICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCk7CiAgICAgaWYg
KHBhcnNlcikKLSAgICAgICAgcmV0dXJuIHBhcnNlci0+bGluZU51bWJlcigpOwotICAgIHJldHVy
biAwOwotfQotCi1pbnQgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyQ29sdW1uTnVtYmVy
KCkgY29uc3QKLXsKLSAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwotICAgIGlmIChwYXJz
ZXIpCi0gICAgICAgIHJldHVybiBwYXJzZXItPmNvbHVtbk51bWJlcigpOwotICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gcGFyc2VyLT5odG1sUG9zaXRpb24oKTsKKyAgICByZXR1cm4gSFRN
TFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6ZmluaXNoZWRXaXRoRXZlbnQoRXZlbnQqIGV2ZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuaAppbmRleCAzYmM0MmVmYjAzZjlhOGM4MGMxNjU0YTUyZWMzZTFjNzcyYzQ4
ZjIzLi5kOTg3ZDJjMDk3YjFkNDk0M2MyNGMxNGM4NjAxN2QyNDZhOTI4NGFjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaApAQCAtMTU1LDggKzE1NSw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZmluaXNoZWRXaXRoRXZlbnQoRXZlbnQqKTsKIAotICAgIGludCBldmVudEhh
bmRsZXJMaW5lTnVtYmVyKCkgY29uc3Q7Ci0gICAgaW50IGV2ZW50SGFuZGxlckNvbHVtbk51bWJl
cigpIGNvbnN0OworICAgIEhUTUxQb3NpdGlvbjAgZXZlbnRIYW5kbGVyUG9zaXRpb24oKSBjb25z
dDsKIAogICAgIHZvaWQgc2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soYm9vbCBwcm9jZXNzaW5n
VGltZXJDYWxsYmFjaykgeyBtX3Byb2Nlc3NpbmdUaW1lckNhbGxiYWNrID0gcHJvY2Vzc2luZ1Rp
bWVyQ2FsbGJhY2s7IH0KICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGRvbid0IHVzZSB0aGUg
cGFyYW1ldGVyIHdvcmxkIGF0IGFsbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50
TGlzdGVuZXIuY3BwCmluZGV4IDcyZGY3OWRlZDNlZDQ3Y2ZmMWEyN2I1OTUzYTM1OTk2M2M3N2E2
MzAuLjg3NWJjOTJlZmNiMWIwOTNhMWFlMTFjODQ5YzIwODQyMzQyNTVlZGYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcApAQCAtNTAsOCArNTAsOCBAQCBQ
YXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoTm9kZSogbm9kZSwgQXR0cmlidQogICAgIGlmIChhdHRyLT5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBpbnQgbGluZU51bWJlciA9IDE7Ci0gICAgaW50IGNvbHVtbk51bWJl
ciA9IDA7CisgICAgLy8gVE9ETyhwZXRlci5yeWJpbik6IHdhcyBpdCAxIGFnYWluc3QgMCBoZXJl
PworICAgIEhUTUxQb3NpdGlvbjAgcG9zaXRpb24oV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21a
ZXJvQmFzZWRJbnQoMSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpzX2Jhc2UsIDApOwogICAgIFN0
cmluZyBzb3VyY2VVUkw7CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKSkgewpAQCAtNjQsMTIgKzY0LDExIEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRM
aXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihOb2RlKiBub2RlLCBBdHRyaWJ1
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIGxpbmVOdW1iZXIg
PSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVtYmVyKCk7Ci0gICAgICAgIGNv
bHVtbk51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckNvbHVtbk51bWJlcigp
OworICAgICAgICBwb3NpdGlvbiA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlclBvc2l0
aW9uKCk7CiAgICAgICAgIHNvdXJjZVVSTCA9IG5vZGUtPmRvY3VtZW50KCktPnVybCgpLnN0cmlu
ZygpOwogICAgIH0KIAotICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0
ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIG5vZGUtPmlzU1ZHRWxlbWVudCgpLCBhdHRyLT52YWx1
ZSgpLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgV29ybGRDb250ZXh0SGFu
ZGxlKFVzZU1haW5Xb3JsZCkpOworICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIG5vZGUtPmlzU1ZHRWxlbWVudCgpLCBhdHRy
LT52YWx1ZSgpLCBzb3VyY2VVUkwsIHBvc2l0aW9uLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFp
bldvcmxkKSk7CiB9CiAKIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpYnV0ZSogYXR0cikKQEAgLTgx
LDkgKzgwLDYgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkKICAgICBpZiAoYXR0ci0+aXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAxOwotICAgIGlu
dCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBzb3VyY2VVUkw7CiAKICAgICBTY3JpcHRD
b250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIGlmICgh
c2NyaXB0Q29udHJvbGxlci0+Y2FuRXhlY3V0ZVNjcmlwdHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQp
KQpAQCAtOTQsMTAgKzkwLDkgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVh
dGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgbGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50
SGFuZGxlckxpbmVOdW1iZXIoKTsKLSAgICBjb2x1bW5OdW1iZXIgPSBzY3JpcHRDb250cm9sbGVy
LT5ldmVudEhhbmRsZXJDb2x1bW5OdW1iZXIoKTsKLSAgICBzb3VyY2VVUkwgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6
OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCktPmlz
U1ZHRG9jdW1lbnQoKSwgYXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIFdvcmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKKyAgICBIVE1MUG9z
aXRpb24wIHBvc2l0aW9uID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24o
KTsKKyAgICBTdHJpbmcgc291cmNlVVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmlu
ZygpOworICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxO
YW1lKCkuc3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCksIGF0dHIt
PnZhbHVlKCksIHNvdXJjZVVSTCwgcG9zaXRpb24sIFdvcmxkQ29udGV4dEhhbmRsZShVc2VNYWlu
V29ybGQpKTsKIH0KIAogU3RyaW5nIGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShEb2N1bWVudCog
ZG9jdW1lbnQsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFNvdXJjZUNvZGUuaAppbmRleCBkYmM5ZDVlNmZjNjAwN2ZjZmRkNjYwMjRkYjA3ODI2YzY2MjYz
YjViLi5lNGU5NmQ3NGQ3NTBjZTZiZmUxNTU3YjViYmJiMjNhODQ0MTc0YTgzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaApAQCAtMzUsMTYgKzM1LDE4IEBACiAjaW5jbHVk
ZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hUTUxQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAgIFNjcmlwdFNv
dXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwg
aW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNv
dXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLAorICAgICAgICBjb25zdCBIVE1MUG9zaXRp
b24xJiBzdGFydFBvc2l0aW9uID0gSFRNTFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAg
ICAgICAgIDogbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCiAg
ICAgICAgICwgbV91cmwodXJsKQotICAgICAgICAsIG1fc3RhcnRMaW5lKHN0YXJ0TGluZSkKKyAg
ICAgICAgLCBtX3N0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbikKICAgICB7CiAgICAgfQogCkBA
IC01NCw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3NvdXJjZShjcy0+c2NyaXB0KCkp
CiAgICAgICAgICwgbV9jYWNoZWRTY3JpcHQoY3MpCiAgICAgICAgICwgbV91cmwoUGFyc2VkVVJM
U3RyaW5nLCBjcy0+dXJsKCkpCi0gICAgICAgICwgbV9zdGFydExpbmUoMSkKKyAgICAgICAgLCBt
X3N0YXJ0UG9zaXRpb24oSFRNTFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgewog
ICAgIH0KIApAQCAtNjMsMTMgKzY1LDE0IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC5nZXQoKTsgfQogICAgIGNv
bnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgaW50IHN0YXJ0TGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lOyB9CisgICAgaW50IHN0YXJ0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsgfQorICAg
IGNvbnN0IEhUTUxQb3NpdGlvbjEmIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0UG9zaXRpb247IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zb3VyY2U7CiAgICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKICAgICBLVVJM
IG1fdXJsOwotICAgIGludCBtX3N0YXJ0TGluZTsKKyAgICBIVE1MUG9zaXRpb24xIG1fc3RhcnRQ
b3NpdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDdmMTNjNWE4ZmIyN2QzM2JiZjFkMzQx
MGEwMTNlYmM3OTVkOTNkMjMuLjMxOTcwMDk1NjI0NGNkZDI4ZDNiYzE0ODkyMzg1M2JlMTNmNzJj
MGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAt
NDEsMTQgKzQxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhMYXp5RXZlbnRMaXN0
ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9v
bCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkws
IGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5k
bGUmIHdvcmxkQ29udGV4dCkKK1Y4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVu
ZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3Ry
aW5nJiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBIVE1MUG9zaXRpb24wIHBvc2l0aW9u
LCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKICAgICA6IFY4QWJzdHJh
Y3RFdmVudExpc3RlbmVyKHRydWUsIHdvcmxkQ29udGV4dCkKICAgICAsIG1fZnVuY3Rpb25OYW1l
KGZ1bmN0aW9uTmFtZSkKICAgICAsIG1faXNTVkdFdmVudChpc1NWR0V2ZW50KQogICAgICwgbV9j
b2RlKGNvZGUpCiAgICAgLCBtX3NvdXJjZVVSTChzb3VyY2VVUkwpCi0gICAgLCBtX2xpbmVOdW1i
ZXIobGluZU51bWJlcikKLSAgICAsIG1fY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKKyAgICAs
IG1fcG9zaXRpb24ocG9zaXRpb24pCiB7CiB9CiAKQEAgLTExNCw3ICsxMTMsNyBAQCB2b2lkIFY4
TGF6eUV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQogICAgIC8vIEluc2VydCAnXG4nIG90aGVyd2lzZSAvLy1zdHlsZSBj
b21tZW50cyBjb3VsZCBicmVhayB0aGUgaGFuZGxlci4KICAgICBjb2RlLmFwcGVuZCggICJcbn0p
LmNhbGwodGhpcywgZXZ0KTt9fX19KSIpOwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29k
ZUV4dGVybmFsU3RyaW5nID0gdjhFeHRlcm5hbFN0cmluZyhjb2RlKTsKLSAgICB2ODo6SGFuZGxl
PHY4OjpTY3JpcHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZUV4dGVybmFs
U3RyaW5nLCBtX3NvdXJjZVVSTCwgbV9saW5lTnVtYmVyKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpT
Y3JpcHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZUV4dGVybmFsU3RyaW5n
LCBtX3NvdXJjZVVSTCwgbV9wb3NpdGlvbik7CiAgICAgaWYgKCFzY3JpcHQuSXNFbXB0eSgpKSB7
CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gcHJveHktPnJ1blNjcmlwdChz
Y3JpcHQsIGZhbHNlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpIHsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKaW5kZXggZjE3NGQyM2JmMTMxYjAxMGVl
NGY1OWJjNDI1MjdlZTg2NzRhMDYwOC4uOTY0NWI5ZTZkOWQxMTVlMzRhNjA4Yzc1MTJjNGQ3ZDAw
NzNhMjlhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3Rl
bmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlY4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYv
SFRNTFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDUsOSArNDYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8g
QSBWOExhenlFdmVudExpc3RlbmVyIGlzIGFsd2F5cyBhIEhUTUwgZXZlbnQgaGFuZGxlci4KICAg
ICBjbGFzcyBWOExhenlFdmVudExpc3RlbmVyIDogcHVibGljIFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50
TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2
ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGlu
ZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3Js
ZENvbnRleHQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25z
dCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBIVE1MUG9zaXRpb24wIHBv
c2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVudExpc3RlbmVyKGZ1
bmN0aW9uTmFtZSwgaXNTVkdFdmVudCwgY29kZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIHdvcmxkQ29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBWOExhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgaXNTVkdFdmVudCwgY29kZSwgc291
cmNlVVJMLCBwb3NpdGlvbiwgd29ybGRDb250ZXh0KSk7CiAgICAgICAgIH0KIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNMYXp5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNTYsNyArNTcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlTGlz
dGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgVjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9v
bCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkws
IGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5k
bGUmIHdvcmxkQ29udGV4dCk7CisgICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3Ry
aW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBj
b25zdCBTdHJpbmcgc291cmNlVVJMLCBIVE1MUG9zaXRpb24wIHBvc2l0aW9uLCBjb25zdCBXb3Js
ZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCk7CiAKICAgICAgICAgdmlydHVhbCB2ODo6TG9j
YWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50Kik7CiAKQEAgLTcwLDggKzcx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faXNTVkdFdmVudDsKICAg
ICAgICAgU3RyaW5nIG1fY29kZTsKICAgICAgICAgU3RyaW5nIG1fc291cmNlVVJMOwotICAgICAg
ICBpbnQgbV9saW5lTnVtYmVyOwotICAgICAgICBpbnQgbV9jb2x1bW5OdW1iZXI7CisgICAgICAg
IEhUTUxQb3NpdGlvbjAgbV9wb3NpdGlvbjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRleCBhNzc2ZWU3ZDczZmI5MmQ0ODZlNjc3ZDA4
NWRhZTE2Mzc5N2RiODRkLi5mNGVmMDRjYWI1NWFmNDMyZTMwNGI2ZjJmZTRiNmRjN2IzNzgzZjBj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTIzOCwxMiArMjM4LDE1IEBAIFY4UHJveHk6
On5WOFByb3h5KCkKICAgICB3aW5kb3dTaGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CiB9CiAKLXY4
OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgdjg6
OlNjcmlwdERhdGEqIHNjcmlwdERhdGEpCit2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IFY4UHJveHk6
OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBIVE1MUG9zaXRpb24wIHNjcmlwdFN0YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHRE
YXRhKiBzY3JpcHREYXRhKQogewogICAgIGNvbnN0IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9
IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IG5hbWUgPSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5hbWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgp
KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhi
YXNlTGluZSk7Ci0gICAgdjg6OlNjcmlwdE9yaWdpbiBvcmlnaW4obmFtZSwgbGluZSk7CisgICAg
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiBuYW1lOworICAgIGlmICghc2NyaXB0U3RhcnRQb3NpdGlv
bi5tX2dlbmVyYXRpb24pCisgICAgICAgIG5hbWUgPSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5hbWVT
dHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBs
aW5lID0gdjg6OkludGVnZXI6Ok5ldyhzY3JpcHRTdGFydFBvc2l0aW9uLm1fbGluZS56ZXJvQmFz
ZWRJbnQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gY29sdW1uID0gdjg6OkludGVn
ZXI6Ok5ldyhzY3JpcHRTdGFydFBvc2l0aW9uLm1fY29sdW1uLnplcm9CYXNlZEludCgpKTsKKyAg
ICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihuYW1lLCBsaW5lLCBjb2x1bW4pOwogICAgIHY4OjpI
YW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gdjg6OlNjcmlwdDo6Q29tcGlsZShjb2RlLCAmb3Jp
Z2luLCBzY3JpcHREYXRhKTsKICAgICByZXR1cm4gc2NyaXB0OwogfQpAQCAtMzk5LDcgKzQwMiw3
IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNv
dXJjZUNvZGUmIHNvdXJjZSwgTm9kZSogbm9kCiAKICAgICAgICAgLy8gTk9URTogRm9yIGNvbXBh
dGliaWxpdHkgd2l0aCBXZWJDb3JlLCBTY3JpcHRTb3VyY2VDb2RlJ3MgbGluZSBzdGFydHMgYXQK
ICAgICAgICAgLy8gMSwgd2hlcmVhcyB2OCBzdGFydHMgYXQgMC4KLSAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51cmwoKSwg
c291cmNlLnN0YXJ0TGluZSgpIC0gMSwgc2NyaXB0RGF0YS5nZXQoKSk7CisgICAgICAgIHY4OjpI
YW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCBzb3VyY2UudXJs
KCksIFdURjo6dG9aZXJvQmFzZWRIVE1MUG9zaXRpb24oc291cmNlLnN0YXJ0UG9zaXRpb24oKSks
IHNjcmlwdERhdGEuZ2V0KCkpOwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgICAgICBQbGF0
Zm9ybUJyaWRnZTo6dHJhY2VFdmVudEVuZCgidjguY29tcGlsZSIsIG5vZGUsICIiKTsKIApAQCAt
NDM0LDcgKzQzNyw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCh2
ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCwgYm9vbCBpc0luCiAgICAgICAgIC8vIEZJWE1F
OiBJZGVhbGx5LCB3ZSBzaG91bGQgYmUgYWJsZSB0byByZS11c2UgdGhlIG9yaWdpbiBvZiB0aGUK
ICAgICAgICAgLy8gc2NyaXB0IHBhc3NlZCB0byB1cyBhcyB0aGUgYXJndW1lbnQgaW5zdGVhZCBv
ZiB1c2luZyBhbiBlbXB0eSBzdHJpbmcKICAgICAgICAgLy8gYW5kIDAgYmFzZUxpbmUuCi0gICAg
ICAgIHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgIiIsIDApOworICAgICAgICBzY3JpcHQg
PSBjb21waWxlU2NyaXB0KGNvZGUsICIiLCBIVE1MUG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24o
KSk7CiAgICAgfQogCiAgICAgaWYgKGhhbmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5oCmluZGV4IDdiNGQ2ZjZjZGU5MTkxMGQxNDYzNmM3MzY0MzcyMzJmNDNmMmU5YTQuLjUxNzg0
MTVlNzBkMDFiMzdiYjFlMWE3MWVmNTcyNTY0NTQ3YjlkMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5o
CkBAIC0yODgsNyArMjg4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2hlY2tOZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRz
Jik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlw
dCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGlu
dCBiYXNlTGluZSwgdjg6OlNjcmlwdERhdGEqID0gMCk7CisgICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2Rl
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBIVE1MUG9zaXRpb24wIHNjcmlwdFN0YXJ0UG9zaXRp
b24sIHY4OjpTY3JpcHREYXRhKiA9IDApOwogCiAgICAgICAgIC8vIElmIHRoZSBleGNlcHRpb24g
Y29kZSBpcyBkaWZmZXJlbnQgZnJvbSB6ZXJvLCBhIERPTSBleGNlcHRpb24gaXMKICAgICAgICAg
Ly8gc2NoZWR1bGUgdG8gYmUgdGhyb3duLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCmluZGV4IDE2ZTBiNDEwMWVmZGMzNWFlNzQ0
MTgxN2IwNjg3ZGI2YjVhNjVhMjUuLmRlMjNhMTE2MTkzODFjOWViMDg2ODJjMjE1NWYzNWNmMTUy
MTQwY2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBib29sIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1TY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2
YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQg
YmFzZUxpbmUsIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCitTY3JpcHRWYWx1
ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2Ny
aXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBIVE1MUG9zaXRpb24wIHNjcmlwdFN0YXJ0UG9z
aXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAgU2NyaXB0VmFsdWUgV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3Qg
U3QKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKIAogICAgIHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBzY3JpcHRTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKHNjcmlwdCk7Ci0gICAg
djg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlZFNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVT
Y3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwgYmFzZUxpbmUpOworICAgIHY4OjpIYW5kbGU8
djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHNjcmlw
dFN0cmluZywgZmlsZU5hbWUsIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHJlc3VsdCA9IHJ1blNjcmlwdChjb21waWxlZFNjcmlwdCk7CiAKICAgICBpZiAo
IWV4Y2VwdGlvbkNhdGNoZXIuQ2FuQ29udGludWUoKSkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2ODo6
TG9jYWw8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJ1blNjcmlwdCh2
ODo6SGFuZGxlPHY4OjpTY3JpcAogICAgIC8vIENvbXB1dGUgdGhlIHNvdXJjZSBzdHJpbmcgYW5k
IHByZXZlbnQgYWdhaW5zdCBpbmZpbml0ZSByZWN1cnNpb24uCiAgICAgaWYgKG1fcmVjdXJzaW9u
ID49IGtNYXhSZWN1cnNpb25EZXB0aCkgewogICAgICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4g
Y29kZSA9IHY4RXh0ZXJuYWxTdHJpbmcoInRocm93IFJhbmdlRXJyb3IoJ1JlY3Vyc2lvbiB0b28g
ZGVlcCcpIik7Ci0gICAgICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZSwg
IiIsIDApOworICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGUsICIi
LCBIVE1MUG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKFY4
UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA1ODgyNGI5ZWVmNmY0OTE0MDg0Yzc3
NzE2MWUyM2Y2ZTMwYWJlMjgzLi5hYmZkYmFhNjYwNzhlZTE4YzkzOGJhMzU2YmQ3MmM1NDVmMGY1
YThhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmgKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHRyYWNrRXZlbnQoRXZlbnQqKTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBm
aWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KLSAgICAgICAgU2NyaXB0
VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIGludCBiYXNlTGluZSwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKik7CisgICAgICAg
IFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBIVE1MUG9zaXRpb24wIHNjcmlwdFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25TdGF0ZSopOwogCiAgICAgICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUg
b2YgdGhlIGNvbnRleHQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgp
IHsgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOyB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA3ZGIw
ZDhkMzczNzA5YjJlOTczYjY3ZTc3MjNlNGZjMzExZmJjYTU5Li44MGFlYzMxZmZmZWM4MmU4MWZl
OTNhOGVlZDgyZmEwMzg3MjliNjg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgU2NyaXB0VmFsdWUgV29ya2Vy
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNl
Q29kZSwKICAgICB9CiAKICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUgc3RhdGU7Ci0g
ICAgU2NyaXB0VmFsdWUgcmVzdWx0ID0gbV9wcm94eS0+ZXZhbHVhdGUoc291cmNlQ29kZS5zb3Vy
Y2UoKSwgc291cmNlQ29kZS51cmwoKS5zdHJpbmcoKSwgc291cmNlQ29kZS5zdGFydExpbmUoKSAt
IDEsICZzdGF0ZSk7CisgICAgU2NyaXB0VmFsdWUgcmVzdWx0ID0gbV9wcm94eS0+ZXZhbHVhdGUo
c291cmNlQ29kZS5zb3VyY2UoKSwgc291cmNlQ29kZS51cmwoKS5zdHJpbmcoKSwgV1RGOjp0b1pl
cm9CYXNlZEhUTUxQb3NpdGlvbihzb3VyY2VDb2RlLnN0YXJ0UG9zaXRpb24oKSksICZzdGF0ZSk7
CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbikgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQog
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHN0YXRlLmV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwIGIvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5j
cHAKaW5kZXggNDJlMjI1YTdmMzJhMWIwY2RjMWJjMzQ1MWI2NTQ5N2E0NjEzNTY4OS4uNzRjNTc5
MWUzYjJkZWZhNzI0N2FlNWEwZWU5MzQyYzI4MjdkMTllMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vUGVuZGluZ1NjcmlwdC5jcHAKKysrIGIvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAK
QEAgLTQwLDcgKzQwLDcgQEAgUGVuZGluZ1NjcmlwdDo6flBlbmRpbmdTY3JpcHQoKQogUGFzc1Jl
ZlB0cjxFbGVtZW50PiBQZW5kaW5nU2NyaXB0OjpyZWxlYXNlRWxlbWVudEFuZENsZWFyKCkKIHsK
ICAgICBzZXRDYWNoZWRTY3JpcHQoMCk7Ci0gICAgbV9zdGFydGluZ0xpbmVOdW1iZXIgPSAwOwor
ICAgIG1fc3RhcnRpbmdQb3NpdGlvbiA9IEhUTUxQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlv
bigpOwogICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fZWxlbWVu
dC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0Lmgg
Yi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKaW5kZXggNDRlMWU0OTI4Njc2ZDc5NjAyMmRk
MjkwNTQ1NzYwMTViN2EyNmU0NC4uZDJhZTQyOGQ1ZjZhMjhhY2I5YWM0ZmE2NDgxMjNmNThlMWQ3
MWUyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCisrKyBiL1dlYkNv
cmUvZG9tL1BlbmRpbmdTY3JpcHQuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgor
I2luY2x1ZGUgPHd0Zi9IVE1MUG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MywxNCArNDQsMTQgQEAgY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIFBlbmRpbmdTY3JpcHQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewog
cHVibGljOgogICAgIFBlbmRpbmdTY3JpcHQoKQotICAgICAgICA6IG1fc3RhcnRpbmdMaW5lTnVt
YmVyKDApCisgICAgICAgIDogbV9zdGFydGluZ1Bvc2l0aW9uKEhUTUxQb3NpdGlvbjE6OmJlbG93
UmFuZ2VQb3NpdGlvbigpKQogICAgICAgICAsIG1fd2F0Y2hpbmdGb3JMb2FkKGZhbHNlKQogICAg
IHsKICAgICB9CiAKICAgICBQZW5kaW5nU2NyaXB0KGNvbnN0IFBlbmRpbmdTY3JpcHQmIG90aGVy
KQogICAgICAgICA6IENhY2hlZFJlc291cmNlQ2xpZW50KG90aGVyKQotICAgICAgICAsIG1fc3Rh
cnRpbmdMaW5lTnVtYmVyKG90aGVyLm1fc3RhcnRpbmdMaW5lTnVtYmVyKQorICAgICAgICAsIG1f
c3RhcnRpbmdQb3NpdGlvbihvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb24pCiAgICAgICAgICwgbV93
YXRjaGluZ0ZvckxvYWQob3RoZXIubV93YXRjaGluZ0ZvckxvYWQpCiAgICAgICAgICwgbV9lbGVt
ZW50KG90aGVyLm1fZWxlbWVudCkKICAgICB7CkBAIC02NCw3ICs2NSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0g
ICAgICAgIG1fc3RhcnRpbmdMaW5lTnVtYmVyID0gb3RoZXIubV9zdGFydGluZ0xpbmVOdW1iZXI7
CisgICAgICAgIG1fc3RhcnRpbmdQb3NpdGlvbiA9IG90aGVyLm1fc3RhcnRpbmdQb3NpdGlvbjsK
ICAgICAgICAgbV93YXRjaGluZ0ZvckxvYWQgPSBvdGhlci5tX3dhdGNoaW5nRm9yTG9hZDsKICAg
ICAgICAgbV9lbGVtZW50ID0gb3RoZXIubV9lbGVtZW50OwogICAgICAgICBzZXRDYWNoZWRTY3Jp
cHQob3RoZXIuY2FjaGVkU2NyaXB0KCkpOwpAQCAtNzQsNyArNzUsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBGSVhNRTogTm8gc2V0dGVyIG1lYW5zIHRoaXMgaXMgbmV2ZXIgc2V0IHRvIGFueXRoaW5n
IG90aGVyIHRoYW4gMC4KICAgICAvLyBUaGlzIGlzIGVpdGhlciB1bm5lY2Vzc2FyeSBvciBpbmNv
cnJlY3QuCi0gICAgaW50IHN0YXJ0aW5nTGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnRpbmdMaW5lTnVtYmVyOyB9CisgICAgSFRNTFBvc2l0aW9uMSBzdGFydGluZ1Bvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFydGluZ1Bvc2l0aW9uOyB9CiAKICAgICBib29sIHdhdGNoaW5n
Rm9yTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2F0Y2hpbmdGb3JMb2FkOyB9CiAgICAgdm9pZCBz
ZXRXYXRjaGluZ0ZvckxvYWQoYm9vbCBiKSB7IG1fd2F0Y2hpbmdGb3JMb2FkID0gYjsgfQpAQCAt
ODksNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlKik7CiAKIHByaXZhdGU6Ci0gICAgaW50IG1fc3RhcnRpbmdMaW5lTnVtYmVy
OyAvLyBPbmx5IHVzZWQgZm9yIGlubGluZSBzY3JpcHQgdGFncy4KKyAgICBIVE1MUG9zaXRpb24x
IG1fc3RhcnRpbmdQb3NpdGlvbjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3Mu
CiAgICAgYm9vbCBtX3dhdGNoaW5nRm9yTG9hZDsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVt
ZW50OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3Jp
cHQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCBi
L1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCmluZGV4IDhiMTYzMDQxMjEw
NGU0ZTQ1YTAxMzIzZGQyMjU1ZTY1NjRlMzQwNDUuLmUxYWEwOGEwNzQxOTZhYzlmOTJmODRmMDdk
MjhlMjdlMTUxNTJlYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVu
dFBhcnNlci5oCisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCkBA
IC0yNywxMCArMjcsMTEgQEAKICNkZWZpbmUgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyX2gKIAog
I2luY2x1ZGUgIkRlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJTZWdtZW50
ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSFRNTFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgU2VnbWVudGVkU3RyaW5nOwogY2xhc3MgWFNTQXVkaXRvcjsKIAog
Y2xhc3MgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyIDogcHVibGljIERlY29kZWREYXRhRG9jdW1l
bnRQYXJzZXIgewpAQCAtNDcsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBhcmUg
dXNlZCB0byBleHBvc2UgdGhlIGN1cnJlbnQgbGluZS9jb2x1bW4gdG8gdGhlIHNjcmlwdGluZyBz
eXN0ZW0uCiAgICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBIVE1MUG9zaXRp
b24wIGh0bWxQb3NpdGlvbigpICA9IDA7CiAKICAgICBYU1NBdWRpdG9yKiB4c3NBdWRpdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV94c3NBdWRpdG9yOyB9CiAgICAgdm9pZCBzZXRYU1NBdWRpdG9yKFhT
U0F1ZGl0b3IqIGF1ZGl0b3IpIHsgbV94c3NBdWRpdG9yID0gYXVkaXRvcjsgfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUvZG9tL1hNTERvY3Vt
ZW50UGFyc2VyLmgKaW5kZXggZTA3NzBiYWRiYWZmN2JhMTEwMjBhZGRjNzEyNDllZjNkZWM4MjBk
NC4uMjNiNDg2MzBlZGIyMDM4OGUzY2JiNmM0ODJhNmM3MTlhNjJkZDUwYiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlci5oCkBAIC0xMDIsNyArMTAyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBXTUxFcnJvckhhbmRsaW5nIHVzZXMgdGhlc2UgZnVuY3Rpb25zLgogICAgICAgICB2
aXJ0dWFsIGJvb2wgd2VsbEZvcm1lZCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nhd0Vycm9yOyB9CiAg
ICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBp
bnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJl
cigpOworICAgICAgICBIVE1MUG9zaXRpb24wIGh0bWxQb3NpdGlvbigpOwogCiAgICAgICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKIApAQCAtMjA4LDcg
KzIwOSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRT
Y3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0
RWxlbWVudDsKLSAgICAgICAgaW50IG1fc2NyaXB0U3RhcnRMaW5lOworICAgICAgICBIVE1MUG9z
aXRpb24xIG1fc2NyaXB0U3RhcnRQb3NpdGlvbjsKIAogICAgICAgICBib29sIG1fcGFyc2luZ0Zy
YWdtZW50OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1dlYkNv
cmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggNTUzOTA3MmVlNThjYmEw
MTVmM2I2Y2U1ZDQ0Y2NiNzFkYjNmMTVmYi4uMmIyMzIxMDFiNDVlNDAzMzA5NDE1YWJkYTQyMmI5
ZmI4YTQ3MzZmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBA
IC01NTgsNyArNTU4LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERv
Y3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2xhc3RFcnJv
ckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3Jp
cHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9z
aXRpb24oSFRNTFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNp
bmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNj
cmlwdGluZ0FsbG93ZWQpCiB7CkBAIC01ODUsNyArNTg1LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6
OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBw
YXJlbnQKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4o
MCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkK
KyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihIVE1MUG9zaXRpb24xOjpiZWxvd1JhbmdlUG9z
aXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGlu
Z1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKIHsKQEAgLTgxNyw3ICs4MTcsNyBAQCB2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxM
b2NhbE5hbWUsIGNvbnN0IHhtbENoYQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVu
dCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2NyaXB0RWxl
bWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAg
IG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRvT25lQmFzZWRIVE1MUG9zaXRpb24oaHRtbFBvc2l0
aW9uKCkpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKG5l
d0VsZW1lbnQuZ2V0KCkpOwogCkBAIC05MDMsNyArOTAzLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3
LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlw
dEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3Rh
cnRMaW5lKSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRl
U2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBk
b2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CiAKICAgICAgICAgLy8g
SmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCiAgICAgICAgIGlmIChpc0Rl
dGFjaGVkKCkpCkBAIC0xMzY5LDEyICsxMzY5LDI3IEBAIHZvaWQqIHhtbERvY1B0ckZvclN0cmlu
ZyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0cmlu
CiAKIGludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxOworICAgIC8vIFRPRE8o
cGV0ZXIucnliaW4pOiB0aGUgaW1wbGVtZW50YXRpb24gcHJvYmFibHkgcmV0dXJuIDEtYmFzZWQg
aW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KKyAgICBpbnQgcmVzID0gKGNv
bnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxKSAtIDE7CisgICAgcHJpbnRmKCJs
aW5lIG51bWJlciAlZFxuIiwgcmVzKTsKKyAgICByZXR1cm4gcmVzOwogfQogCi1pbnQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0CitpbnQgWE1MRG9jdW1lbnRQYXJzZXI6
OmNvbHVtbk51bWJlcigpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5w
dXQtPmNvbCA6IDE7CisgICAgLy8gVE9ETyhwZXRlci5yeWJpbik6IHRoZSBpbXBsZW1lbnRhdGlv
biBwcm9iYWJseSByZXR1cm4gMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVybiAw
LWJhc2VkLgorICAgIGludCByZXMgPSAoY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+Y29s
IDogMSkgLSAxOworICAgIHByaW50ZigiY29sdW1uIG51bWJlciAlZFxuIiwgcmVzKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCitIVE1MUG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjpodG1sUG9z
aXRpb24oKQoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQo
KTsKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAgcmV0dXJuIEhUTUxQb3NpdGlvbjAoV1RGOjpa
ZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmxpbmUgLSAx
KSwKKyAgICAgICAgICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNv
bnRleHQtPmlucHV0LT5jb2wgLSAxKSwgMCk7CisgICAgcmV0dXJuIEhUTUxQb3NpdGlvbjA6Om1p
bmltdW1Qb3NpdGlvbigpOwogfQogCiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2lu
ZygpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmluZGV4IDc1YTIwYmUzNTQxY2Y1Mjdl
ZTU0OTg0ZDIxNDgyODFhZDA4MjRmNjQuLmIyNDFiYzExMGY4YTJkNTMxMmU0NDk0OWY5NjkyNzVm
MWU4YTVmMzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3Bw
CisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC0xMDMsNyArMTAz
LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1
bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAg
ICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAs
IG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oSFRNTFBv
c2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudChm
YWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93
ZWQpCiB7CkBAIC0xMzAsNyArMTMwLDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50
UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICAs
IG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1f
cGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2Ny
aXB0U3RhcnRQb3NpdGlvbihIVE1MUG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAg
ICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24o
cGVybWlzc2lvbikKIHsKQEAgLTIzMiw2ICsyMzIsMTEgQEAgaW50IFhNTERvY3VtZW50UGFyc2Vy
Ojpjb2x1bW5OdW1iZXIoKSBjb25zdAogICAgIHJldHVybiBtX3N0cmVhbS5jb2x1bW5OdW1iZXIo
KTsKIH0KIAorSFRNTFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6aHRtbFBvc2l0aW9uKCkK
K3sKKyAgICByZXR1cm4gSFRNTFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcihsaW5lTnVt
YmVyKCkpLCBXVEY6Olplcm9CYXNlZE51bWJlcihjb2x1bW5OdW1iZXIoKSksIDApOworfQorCiB2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCiB7CiAgICAgU2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOwpAQCAtNTE2LDcgKzUyMSw3IEBAIHZvaWQgWE1M
RG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKIAogICAgIFNjcmlwdEVsZW1lbnQq
IHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CiAgICAg
aWYgKHNjcmlwdEVsZW1lbnQpCi0gICAgICAgIG1fc2NyaXB0U3RhcnRMaW5lID0gbGluZU51bWJl
cigpOworICAgICAgICBtX3NjcmlwdFN0YXJ0UG9zaXRpb24gPSBvbmVCYXNlZEhUTUxQb3NpdGlv
bigpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKG5ld0Vs
ZW1lbnQuZ2V0KCkpOwogCkBAIC01ODgsNyArNTkzLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6cGFyc2VFbmRFbGVtZW50KCkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3
LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlw
dEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3Rh
cnRMaW5lKSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRl
U2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBk
b2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CiAgICAgfQogICAgIG1f
cmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIHBvcEN1cnJlbnROb2RlKCk7CkBAIC03MDks
NCArNzE0LDMgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEdGQoKQogCiB9CiB9Ci0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBi
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCAzMjVkN2Ez
NzRmODU0ZDcyNjQ3NGIxNzM3ZDUwMTcwMzNmYjA2MTAwLi4yMjFjYjhhOGM5YzdjMmFhNjcyY2Jm
NTYzMTJjZmE2YWUwN2I3YmZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3Vt
ZW50UGFyc2VyKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzCiAgICAg
OiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCiAgICAgLCBtX3Rva2VuaXplcihI
VE1MVG9rZW5pemVyOjpjcmVhdGUoKSkKICAgICAsIG1fc2NyaXB0UnVubmVyKEhUTUxTY3JpcHRS
dW5uZXI6OmNyZWF0ZShkb2N1bWVudCwgdGhpcykpCi0gICAgLCBtX3RyZWVCdWlsZGVyKEhUTUxU
cmVlQnVpbGRlcjo6Y3JlYXRlKG1fdG9rZW5pemVyLmdldCgpLCBkb2N1bWVudCwgcmVwb3J0RXJy
b3JzKSkKKyAgICAsIG1fdHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUobV90b2tl
bml6ZXIuZ2V0KCksIHRoaXMsIGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKQogICAgICwgbV9wYXJz
ZXJTY2hlZHVsZXIoSFRNTFBhcnNlclNjaGVkdWxlcjo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9l
bmRXYXNEZWxheWVkKGZhbHNlKQogICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgwKQpAQCAtOTMs
NyArOTMsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycwogSFRNTERvY3VtZW50UGFyc2VyOjpI
VE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIGNv
bnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlz
c2lvbikKICAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+ZG9jdW1lbnQo
KSkKICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSgpKQotICAgICwgbV90
cmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZShtX3Rva2VuaXplci5nZXQoKSwgZnJh
Z21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKKyAgICAsIG1fdHJl
ZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUobV90b2tlbml6ZXIuZ2V0KCksIHRoaXMs
IGZyYWdtZW50LCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbikpCiAgICAgLCBt
X2VuZFdhc0RlbGF5ZWQoZmFsc2UpCiAgICAgLCBtX3dyaXRlTmVzdGluZ0xldmVsKDApCiB7CkBA
IC0xOTMsMTIgKzE5MywxMiBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0Zv
clBhdXNlZFRyZWVCdWlsZGVyKCkKIHsKICAgICBBU1NFUlQobV90cmVlQnVpbGRlci0+aXNQYXVz
ZWQoKSk7CiAKLSAgICBpbnQgc2NyaXB0U3RhcnRMaW5lID0gMDsKLSAgICBSZWZQdHI8RWxlbWVu
dD4gc2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2Ny
aXB0U3RhcnRMaW5lKTsKKyAgICBIVE1MUG9zaXRpb24xIHNjcmlwdFN0YXJ0UG9zaXRpb24gPSBI
VE1MUG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKKyAgICBSZWZQdHI8RWxlbWVudD4g
c2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2NyaXB0
U3RhcnRQb3NpdGlvbik7CiAgICAgLy8gV2Ugd2lsbCBub3QgaGF2ZSBhIHNjcmlwdFJ1bm5lciB3
aGVuIHBhcnNpbmcgYSBEb2N1bWVudEZyYWdtZW50LgogICAgIGlmICghbV9zY3JpcHRSdW5uZXIp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0
ZShzY3JpcHRFbGVtZW50LnJlbGVhc2UoKSwgc2NyaXB0U3RhcnRMaW5lKTsKKyAgICByZXR1cm4g
bV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVudC5yZWxlYXNlKCksIHNjcmlwdFN0
YXJ0UG9zaXRpb24pOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXpl
cihTeW5jaHJvbm91c01vZGUgbW9kZSkKQEAgLTQxNCw5ICs0MTQsMTQgQEAgaW50IEhUTUxEb2N1
bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fdG9rZW5pemVyLT5s
aW5lTnVtYmVyKCk7CiB9CiAKLWludCBIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigp
IGNvbnN0CitIVE1MUG9zaXRpb24wIEhUTUxEb2N1bWVudFBhcnNlcjo6aHRtbFBvc2l0aW9uKCkK
IHsKLSAgICByZXR1cm4gbV90b2tlbml6ZXItPmNvbHVtbk51bWJlcigpOworICAgIGludCBsaW5l
ID0gbV9pbnB1dC5jdXJyZW50KCkuZ2V0Q3VycmVudExpbmUoKTsKKyAgICBpbnQgY29sdW1uID0g
bV9pbnB1dC5jdXJyZW50KCkuZ2V0Q3VycmVudENvbHVtbigpOworICAgIGludCBnZW5lcmF0aW9u
ID0gbV9pbnB1dC5nZXRJbnNlcnRpb25MZXZlbCgpOworCisgICAgcmV0dXJuIEhUTUxQb3NpdGlv
bjAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobGluZSksCisgICAgICAg
IFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbHVtbiksIGdlbmVyYXRp
b24pOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cygp
IGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBlMWYy
ZWZlMjRmMTM4ODViZmU0NmUyOTgwY2RhMmMzMjUzMThjZTAyLi5mOWFhZDNkYTM3ZjM1NjIzMWIx
MTM3NjZiMzcwNzM4NzcxNjBmNmEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmgKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNF
eGVjdXRpbmdTY3JpcHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdHNX
YWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBI
VE1MUG9zaXRpb24wIGh0bWxQb3NpdGlvbigpOwogCiAgICAgLy8gSFRNTFNjcmlwdFJ1bm5lckhv
c3QKICAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKik7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oIGIvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MSW5wdXRTdHJlYW0uaAppbmRleCBhNzA5YmQ5YmQ1YjIxZDExN2VlZmE0
NTEyODhiMjZiMGZiNzk0MWY0Li5iMjQ0ZDhkMzY5NDFlYjA3MjUxMzMzNWM2Y2RhMDgyOWMxOWEx
Yzk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oCisr
KyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKQEAgLTUwLDcgKzUwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTElucHV0U3RyZWFtIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBIVE1MSW5wdXRTdHJlYW0oKQotICAgICAgICA6IG1f
bGFzdCgmbV9maXJzdCkKKyAgICAgICAgOiBtX2xhc3QoJm1fZmlyc3QpLCBtX2luc2VydGlvbkxl
dmVsKDApCiAgICAgewogICAgIH0KIApAQCAtMTIzLDkgKzEyMywxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBpbnQgaW5zZXJ0aW9uTGV2ZWwoKSB7IHJldHVybiBtX2luc2Vy
dGlvbkxldmVsOyB9CisKKyAgICB2b2lkIHNldEluc2VydGlvbkxldmVsKGludCBsZXZlbCkgeyBt
X2luc2VydGlvbkxldmVsID0gbGV2ZWw7IH0KKwogcHJpdmF0ZToKICAgICBTZWdtZW50ZWRTdHJp
bmcgbV9maXJzdDsKICAgICBTZWdtZW50ZWRTdHJpbmcqIG1fbGFzdDsKKyAgICBpbnQgbV9pbnNl
cnRpb25MZXZlbDsKIH07CiAKIGNsYXNzIEluc2VydGlvblBvaW50UmVjb3JkIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKQEAgLTEzMywxNyArMTM4LDI4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBJ
bnNlcnRpb25Qb2ludFJlY29yZChIVE1MSW5wdXRTdHJlYW0mIGlucHV0U3RyZWFtKQogICAgICAg
ICA6IG1faW5wdXRTdHJlYW0oJmlucHV0U3RyZWFtKQogICAgIHsKKyAgICAgICAgbV9saW5lID0g
bV9pbnB1dFN0cmVhbS0+Y3VycmVudCgpLmN1cnJlbnRMaW5lKCk7CisgICAgICAgIG1fY29sdW1u
ID0gbV9pbnB1dFN0cmVhbS0+Y3VycmVudCgpLmN1cnJlbnRDb2x1bW4oKTsKICAgICAgICAgbV9p
bnB1dFN0cmVhbS0+c3BsaXRJbnRvKG1fbmV4dCk7CisgICAgICAgIG1faW5zZXJ0aW9uTGV2ZWwg
PSBtX2lucHV0U3RyZWFtLT5pbnNlcnRpb25MZXZlbCgpOworICAgICAgICBtX2lucHV0U3RyZWFt
LT5zZXRJbnNlcnRpb25MZXZlbChtX2luc2VydGlvbkxldmVsICsgMSk7CisgICAgICAgIC8vIEdl
bmVyYXRlZCBzY3JpcHQgcGFydCBpbmhlcml0cyBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICBt
X2lucHV0U3RyZWFtLT5jdXJyZW50KCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fbGluZSwgbV9jb2x1
bW4pOwogICAgIH0KIAogICAgIH5JbnNlcnRpb25Qb2ludFJlY29yZCgpCiAgICAgeworICAgICAg
ICBtX2lucHV0U3RyZWFtLT5zZXRJbnNlcnRpb25MZXZlbChtX2luc2VydGlvbkxldmVsKTsKICAg
ICAgICAgbV9pbnB1dFN0cmVhbS0+bWVyZ2VGcm9tKG1fbmV4dCk7CisgICAgICAgIG1faW5wdXRT
dHJlYW0tPmN1cnJlbnQoKS5zZXRDdXJyZW50UG9zaXRpb24obV9saW5lLCBtX2NvbHVtbik7CiAg
ICAgfQogCiBwcml2YXRlOgogICAgIEhUTUxJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKICAg
ICBTZWdtZW50ZWRTdHJpbmcgbV9uZXh0OworICAgIGludCBtX2xpbmU7CisgICAgaW50IG1fY29s
dW1uOworICAgIGludCBtX2luc2VydGlvbkxldmVsOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcCBiL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXggNGY1NGY0MjkyODcwYWNkNTM4NTRmYzQ3MTA4
NzBkZDlkZjE0ZjJkMS4uMzMyYzIxZmQ5NTY0Y2U5ZWQ1NjQ3NWIwOWUxMWQ0N2MwZTMzZTQ4ZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCkBAIC05OCw3ICs5OCw3
IEBAIFNjcmlwdFNvdXJjZUNvZGUgSFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBlbmRpbmdT
Y3JpcHQoY29uc3QgUGVuZGluZ1NjcmlwdCYKICAgICAgICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNv
ZGUoc2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKICAgICB9CiAgICAgZXJyb3JPY2N1cnJlZCA9IGZh
bHNlOwotICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCktPnRleHRD
b250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3Jp
cHQuc3RhcnRpbmdMaW5lTnVtYmVyKCkpOworICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNj
cmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0
aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdQb3NpdGlvbigpKTsKIH0KIAogYm9vbCBI
VE1MU2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3JpcHRSZWFkeShjb25zdCBQZW5kaW5nU2NyaXB0
JiBzY3JpcHQpCkBAIC0xNzAsMTMgKzE3MCwxMyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnN0
b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIAogLy8gVGhp
cyBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggMTAuMi41LjExICJBbiBlbmQgdGFnIHdob3NlIHRhZyBu
YW1lIGlzICdzY3JpcHQnIgogLy8gU2NyaXB0IGhhbmRsaW5nIGxpdmVzIG91dHNpZGUgdGhlIHRy
ZWUgYnVpbGRlciB0byBrZWVwIHRoZSBlYWNoIGNsYXNzIHNpbXBsZS4KLWJvb2wgSFRNTFNjcmlw
dFJ1bm5lcjo6ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGludCBz
dGFydExpbmUpCitib29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVt
ZW50PiBzY3JpcHRFbGVtZW50LCBjb25zdCBIVE1MUG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0
aW9uKQogewogICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKICAgICAvLyBGSVhNRTogSWYgc2Ny
aXB0aW5nIGlzIGRpc2FibGVkLCBhbHdheXMganVzdCByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFRy
eSB0byBleGVjdXRlIHRoZSBzY3JpcHQgZ2l2ZW4gdG8gdXMuCi0gICAgcnVuU2NyaXB0KHNjcmlw
dEVsZW1lbnQuZ2V0KCksIHN0YXJ0TGluZSk7CisgICAgcnVuU2NyaXB0KHNjcmlwdEVsZW1lbnQu
Z2V0KCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgaWYgKGhhdmVQYXJzaW5nQmxvY2tp
bmdTY3JpcHQoKSkgewogICAgICAgICBpZiAobV9zY3JpcHROZXN0aW5nTGV2ZWwpCkBAIC0yODgs
NyArMjg4LDcgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQ
ZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW4KIAogLy8gVGhpcyBtZXRob2QgaXMg
bWVhbnQgdG8gbWF0Y2ggdGhlIEhUTUw1IGRlZmluaXRpb24gb2YgInJ1bm5pbmcgYSBzY3JpcHQi
CiAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211
bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3J1bm5pbmctYS1zY3JpcHQKLXZvaWQgSFRNTFNjcmlw
dFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgaW50IHN0YXJ0aW5nTGluZU51bWJl
cikKK3ZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29u
c3QgSFRNTFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9k
b2N1bWVudCk7CiAgICAgQVNTRVJUKCFoYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkpOwpAQCAt
MzE1LDcgKzMxNSw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQq
IHNjcmlwdCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcikKICAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwNDcKICAgICAgICAgICAgIC8v
IEFTU0VSVChkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoaXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgICAgICAgICBTY3JpcHRTb3VyY2VD
b2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlw
dEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICAgICAgICAg
IFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCksIGRvY3Vt
ZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHRTdGFydFBvc2l0aW9u
KTsKICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCBi
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCmluZGV4IGJlMjFkZDI0MjFi
MWQ0NDI3YjA4NDdiMGI5MTFjMWZlOTdjNmY3NjUuLjQzNjlhNWUwY2NlN2Y4YzFjYjRkYjAwZGU3
MGQ3MmE1ZDIxNzYxZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJQZW5kaW5nU2NyaXB0LmgiCiAjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hUTUxQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKQEAgLTUyLDcg
KzUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNoKCk7CiAKICAgICAvLyBQcm9jZXNzZXMg
dGhlIHBhc3NlZCBpbiBzY3JpcHQgYW5kIGFueSBwZW5kaW5nIHNjcmlwdHMgaWYgcG9zc2libGUu
Ci0gICAgYm9vbCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBp
bnQgc2NyaXB0U3RhcnRMaW5lKTsKKyAgICBib29sIGV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50
PiBzY3JpcHRUb1Byb2Nlc3MsIGNvbnN0IEhUTUxQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRp
b24pOwogCiAgICAgYm9vbCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKENhY2hlZFJlc291
cmNlKik7CiAgICAgYm9vbCBoYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzOyB9CkBAIC03Niw3ICs3
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoRWxlbWVudCop
OwogICAgIGJvb2wgcmVxdWVzdFBlbmRpbmdTY3JpcHQoUGVuZGluZ1NjcmlwdCYsIEVsZW1lbnQq
KSBjb25zdDsKIAotICAgIHZvaWQgcnVuU2NyaXB0KEVsZW1lbnQqLCBpbnQgc3RhcnRpbmdMaW5l
TnVtYmVyKTsKKyAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50KiwgY29uc3QgSFRNTFBvc2l0aW9u
MSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBIZWxwZXJzIGZvciBkZWFsaW5nIHdp
dGggSFRNTFNjcmlwdFJ1bm5lckhvc3QKICAgICB2b2lkIHdhdGNoRm9yTG9hZChQZW5kaW5nU2Ny
aXB0Jik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggYWZhYzJh
MGQ4MDlmNTQ5YzM3ZjQ0YmE4MTIwMWQ2MjA4MTA0NmVjMy4uMTQ5N2UxMTdkMTY0NzYxNWM5MTJi
ZWEyYmZkNjQwNjkzYzExMGY2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcApAQCAtNDksMTIgKzQ5LDE1IEBACiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1
ZGUgIlhNTE5TTmFtZXMuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAogc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVl
ID0gLTE7CitzdGF0aWMgY29uc3QgSFRNTFBvc2l0aW9uMCB1bmluaXRpYWxpemVkUG9zaXRpb25W
YWx1ZTAgPSBIVE1MUG9zaXRpb24wOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKK3N0YXRpYyBjb25z
dCBIVE1MUG9zaXRpb24xIHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMShXVEY6Ok9uZUJhc2Vk
TnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoLTEpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpzX2Jhc2Us
IC0xKTsKIAogbmFtZXNwYWNlIHsKIApAQCAtMzIzLDcgKzMyNiw3IEBAIHByaXZhdGU6CiB9Owog
CiAKLUhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2Vu
aXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMpCitIVE1MVHJl
ZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIFNjcmlw
dGFibGVEb2N1bWVudFBhcnNlciogc2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBIVE1MRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycykKICAgICA6IG1fZnJhbWVzZXRPayh0cnVl
KQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fdHJlZShkb2N1bWVudCwgRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkLCBmYWxzZSkKQEAgLTMzMywxNCArMzM2LDE1IEBAIEhUTUxU
cmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRN
TERvY3VtZW50KiBkb2N1bWVuCiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFs
TW9kZSkKICAgICAsIG1fc2Vjb25kYXJ5SW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAs
IG1fdG9rZW5pemVyKHRva2VuaXplcikKLSAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5l
KHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCi0gICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50
U3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCisgICAgLCBtX3NjcmlwdFRv
UHJvY2Vzc1N0YXJ0UG9zaXRpb24odW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKQorICAgICwg
bV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24odW5pbml0aWFsaXplZFBvc2l0aW9uVmFs
dWUwKQorICAgICwgbV9zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoc2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyKQogewogfQogCiAvLyBGSVhNRTogTWVtYmVyIHZhcmlhYmxlcyBzaG91bGQgYmUgZ3Jv
dXBlZCBpbnRvIHNlbGYtaW5pdGlhbGl6aW5nIHN0cnVjdHMgdG8KIC8vIG1pbmltaXplIGNvZGUg
ZHVwbGljYXRpb24gYmV0d2VlbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCi1IVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCitIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVl
QnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIFNjcmlwdGFibGVEb2N1bWVudFBhcnNl
ciogc2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwg
RWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3Jp
cHRpbmdQZXJtaXNzaW9uKQogICAgIDogbV9mcmFtZXNldE9rKHRydWUpCiAgICAgLCBtX2ZyYWdt
ZW50Q29udGV4dChmcmFnbWVudCwgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24p
CiAgICAgLCBtX2RvY3VtZW50KG1fZnJhZ21lbnRDb250ZXh0LmRvY3VtZW50KCkpCkBAIC0zNTEs
OCArMzU1LDkgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXpl
ciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmEKICAgICAsIG1fb3JpZ2luYWxJbnNl
cnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zZWNvbmRhcnlJbnNlcnRpb25Nb2RlKElu
aXRpYWxNb2RlKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQotICAgICwgbV9zY3JpcHRU
b1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkK
KyAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRp
b25WYWx1ZTEpCisgICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbih1bmluaXRp
YWxpemVkUG9zaXRpb25WYWx1ZTApCisgICAgLCBtX3NjcmlwdGFibGVEb2N1bWVudFBhcnNlcihz
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIpCiB7CiAgICAgaWYgKGNvbnRleHRFbGVtZW50KSB7CiAg
ICAgICAgIC8vIFN0ZXBzIDQuMi00LjYgb2YgdGhlIEhUTUw1IEZyYWdtZW50IENhc2UgcGFyc2lu
ZyBhbGdvcml0aG06CkBAIC00MTMsMTUgKzQxOCwxNSBAQCBIVE1MVHJlZUJ1aWxkZXI6OkZyYWdt
ZW50UGFyc2luZ0NvbnRleHQ6On5GcmFnbWVudFBhcnNpbmdDb250ZXh0KCkKIHsKIH0KIAotUGFz
c1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoaW50
JiBzY3JpcHRTdGFydExpbmUpCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVlQnVpbGRlcjo6
dGFrZVNjcmlwdFRvUHJvY2VzcyhIVE1MUG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKQog
ewogICAgIC8vIFVucGF1c2Ugb3Vyc2VsdmVzLCBjYWxsZXJzIG1heSBwYXVzZSB1cyBhZ2FpbiB3
aGVuIHByb2Nlc3NpbmcgdGhlIHNjcmlwdC4KICAgICAvLyBUaGUgSFRNTDUgc3BlYyBpcyB3cml0
dGVuIGFzIHRob3VnaCBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbnNpZGUgdGhlIHRyZWUKICAgICAv
LyBidWlsZGVyLiAgV2UgcGF1c2UgdGhlIHBhcnNlciB0byBleGl0IHRoZSB0cmVlIGJ1aWxkZXIs
IGFuZCB0aGVuIHJlc3VtZQogICAgIC8vIGJlZm9yZSBydW5uaW5nIHNjcmlwdHMuCiAgICAgbV9p
c1BhdXNlZCA9IGZhbHNlOwotICAgIHNjcmlwdFN0YXJ0TGluZSA9IG1fc2NyaXB0VG9Qcm9jZXNz
U3RhcnRMaW5lOwotICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lID0gdW5pbml0aWFsaXpl
ZExpbmVOdW1iZXJWYWx1ZTsKKyAgICBzY3JpcHRTdGFydFBvc2l0aW9uID0gbV9zY3JpcHRUb1By
b2Nlc3NTdGFydFBvc2l0aW9uOworICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9
IHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMTsKICAgICByZXR1cm4gbV9zY3JpcHRUb1Byb2Nl
c3MucmVsZWFzZSgpOwogfQogCkBAIC0yMTk5LDcgKzIyMDQsNyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAg
bV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnRFbGVt
ZW50KCktPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7CiAgICAgICAgICAgICBtX3NjcmlwdFRvUHJv
Y2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgbV9zY3JpcHRUb1By
b2Nlc3NTdGFydExpbmUgPSBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lICsgMTsKKyAgICAg
ICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9IFdURjo6dG9PbmVCYXNlZEhU
TUxQb3NpdGlvbihtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbik7CiAgICAgICAgICAg
ICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgaWYgKGlzUGFyc2lu
Z0ZyYWdtZW50KCkgJiYgbV9mcmFnbWVudENvbnRleHQuc2NyaXB0aW5nUGVybWlzc2lvbigpID09
IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCkKICAgICAgICAgICAgICAgICBtX3NjcmlwdFRv
UHJvY2Vzcy0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKQEAgLTI3MzksNyArMjc0NCwxNCBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgbV90cmVlLmluc2VydFNjcmlwdEVsZW1lbnQodG9rZW4pOwogICAgIG1fdG9r
ZW5pemVyLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpTY3JpcHREYXRhU3RhdGUpOwogICAgIG1f
b3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwotICAgIG1fbGFzdFNjcmlw
dEVsZW1lbnRTdGFydExpbmUgPSBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOworCisgICAgSFRN
TFBvc2l0aW9uMCBwb3NpdGlvbiA9IG1fc2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLT5odG1sUG9z
aXRpb24oKTsKKworICAgIC8vIFdlIHNob3VsZCBzdG9wIHVzaW5nIEhUTUxUb2tlbml6ZXIgZm9y
IGdldHRpbmcgbGluZSBudW1iZXIsIGJlY2F1c2Ugd2UgbmVlZCBjb2x1bW4gbnVtYmVyIGFueXdh
eS4KKyAgICBBU1NFUlQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSA9PSBwb3NpdGlvbi5tX2xp
bmUuemVyb0Jhc2VkSW50KCkpOworCisgICAgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRp
b24gPSBwb3NpdGlvbjsKKwogICAgIHNldEluc2VydGlvbk1vZGUoVGV4dE1vZGUpOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oIGIvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCBkNTIyZWE4ZWIxYTUwZTQyN2Zm
Y2UwYWNjODE5ZGM1MTlhYWUyNWYwLi5mZGM4NDY3MjQ0OGRhYjg3ZTJkNDU3YTIzZDU3ZDczMzNh
NTIxM2ZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5o
CisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTMyLDYgKzMy
LDggQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudFN0YWNrLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRl
ICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvSFRNTFBvc2l0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC01MSwxMyArNTMsMTQgQEAgY2xhc3Mg
Tm9kZTsKIAogY2xhc3MgSFRNTFRyZWVCdWlsZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxIVE1MVHJlZUJ1aWxkZXI+IGNyZWF0ZShIVE1M
VG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0
RXJyb3JzKQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUo
SFRNTFRva2VuaXplciogdG9rZW5pemVyLCBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHNjcmlw
dGFibGVEb2N1bWVudFBhcnNlciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRF
cnJvcnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhUTUxUcmVlQnVpbGRl
cih0b2tlbml6ZXIsIGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIodG9rZW5pemVyLCBzY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIsIGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBE
b2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gY3JlYXRlKEhUTUxUb2tlbml6ZXIqIHRva2VuaXpl
ciwgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBzY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIsIERv
Y3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEhUTUxUcmVlQnVpbGRlcih0b2tlbml6ZXIsIGZyYWdtZW50
LCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbikpOworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEhUTUxUcmVlQnVpbGRlcih0b2tlbml6ZXIsIHNjcmlwdGFibGVEb2N1bWVu
dFBhcnNlciwgZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSk7
CiAgICAgfQogICAgIH5IVE1MVHJlZUJ1aWxkZXIoKTsKIApAQCAtNzEsNyArNzQsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2VuKEF0b21pY0hUTUxUb2tl
biYpOwogCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgd2hlbiBwYXJzZXIgaXMgcGF1c2VkIGJlZm9y
ZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4uCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiB0YWtl
U2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5lKTsKKyAgICBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nlc3MoSFRNTFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3Np
dGlvbik7CiAKICAgICAvLyBEb25lLCBjbG9zZSBhbnkgb3BlbiB0YWdzLCBldGMuCiAgICAgdm9p
ZCBmaW5pc2hlZCgpOwpAQCAtMTEwLDggKzExMyw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFmdGVy
QWZ0ZXJGcmFtZXNldE1vZGUsCiAgICAgfTsKIAotICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MVG9r
ZW5pemVyKiwgSFRNTERvY3VtZW50KiwgYm9vbCByZXBvcnRFcnJvcnMpOwotICAgIEhUTUxUcmVl
QnVpbGRlcihIVE1MVG9rZW5pemVyKiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIGNvbnRl
eHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIEhUTUxUcmVlQnVp
bGRlcihIVE1MVG9rZW5pemVyKiwgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiwgSFRNTERvY3Vt
ZW50KiwgYm9vbCByZXBvcnRFcnJvcnMpOworICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5p
emVyKiwgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1l
bnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCiAgICAg
Ym9vbCBpc1BhcnNpbmdGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuICEhbV9mcmFnbWVudENvbnRl
eHQuZnJhZ21lbnQoKTsgfQogCkBAIC0yNDYsMTIgKzI0OSwxMyBAQCBwcml2YXRlOgogICAgIEhU
TUxUb2tlbml6ZXIqIG1fdG9rZW5pemVyOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0
VG9Qcm9jZXNzOyAvLyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUg
cmVzdW1pbmcgdGhlIHBhcnNlci4KLSAgICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7
IC8vIFN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vz
c2luZy4KKyAgICBIVE1MUG9zaXRpb24xIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsg
Ly8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVlZGluZyBwcm9jZXNz
aW5nLgogCiAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoaXMgbWVt
YmVyLiAgT3JpZ2luYWxseSwgaXQgd2FzCiAgICAgLy8gY3JlYXRlZCB0byBzZXJ2aWNlIHRoZSBs
ZWdhY3kgdHJlZSBidWlsZGVyLCBidXQgaXQgc2VlbXMgdG8gYmUgdXNlZCBmb3IKICAgICAvLyBz
b21lIG90aGVyIHRoaW5ncyBub3cuCi0gICAgaW50IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExp
bmU7CisgICAgSFRNTFBvc2l0aW9uMCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbjsK
KyAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIG1fc2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0
cmluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAppbmRl
eCBiOWZmNTAzN2E5ODJhZmQ2NGQ5ODIxNWE3ODZiMDVlMDYyNWQxNTk4Li4xMWEwYTU5YjM0MDE1
MzFhMzkzZWQyYWY1NWFlZTY0M2FmOGRiMGVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2Vn
bWVudGVkU3RyaW5nLmNwcApAQCAtNTMsNiArNTMsOSBAQCBjb25zdCBTZWdtZW50ZWRTdHJpbmcm
IFNlZ21lbnRlZFN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFNlZ21lbnRlZFN0cmluZyAmb3RoZXIp
CiAgICAgICAgIG1fY3VycmVudENoYXIgPSBvdGhlci5tX2N1cnJlbnRDaGFyOwogICAgIG1fY2xv
c2VkID0gb3RoZXIubV9jbG9zZWQ7CiAgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFBy
aW9yVG9DdXJyZW50U3RyaW5nID0gb3RoZXIubV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFBy
aW9yVG9DdXJyZW50U3RyaW5nOworICAgIG1fbGluZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFs
dWUgPSBvdGhlci5tX2xpbmVCZWdpbkNoYXJhY3RlcnNDb25zdW1lZFZhbHVlOworICAgIG1fY3Vy
cmVudExpbmUgPSBvdGhlci5tX2N1cnJlbnRMaW5lOworCiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0yMjksMTIgKzIzMiwzMiBAQCB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVNsb3dD
YXNlKGludCYgbGluZU51bWJlcikKICAgICAgICAgbV9wdXNoZWRDaGFyMSA9IG1fcHVzaGVkQ2hh
cjI7CiAgICAgICAgIG1fcHVzaGVkQ2hhcjIgPSAwOwogICAgIH0gZWxzZSBpZiAobV9jdXJyZW50
U3RyaW5nLm1fY3VycmVudCkgewotICAgICAgICBpZiAoKm1fY3VycmVudFN0cmluZy5tX2N1cnJl
bnQrKyA9PSAnXG4nICYmIG1fY3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycygp
KQotICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICBpZiAoKm1fY3VycmVudFN0cmlu
Zy5tX2N1cnJlbnQrKyA9PSAnXG4nICYmIG1fY3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5l
TnVtYmVycygpKSB7CisgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICsrbV9jdXJy
ZW50TGluZTsKKyAgICAgICAgICBtX2xpbmVCZWdpbkNoYXJhY3RlcnNDb25zdW1lZFZhbHVlID0g
bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoLS1t
X2N1cnJlbnRTdHJpbmcubV9sZW5ndGggPT0gMCkKICAgICAgICAgICAgIGFkdmFuY2VTdWJzdHJp
bmcoKTsKICAgICB9CiAgICAgbV9jdXJyZW50Q2hhciA9IG1fcHVzaGVkQ2hhcjEgPyAmbV9wdXNo
ZWRDaGFyMSA6IG1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiB9CiAKK2ludCBTZWdtZW50ZWRT
dHJpbmc6OmN1cnJlbnRMaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50TGluZTsK
K30KKworaW50IFNlZ21lbnRlZFN0cmluZzo6Y3VycmVudENvbHVtbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgLSBtX2xpbmVCZWdpbkNoYXJhY3Rl
cnNDb25zdW1lZFZhbHVlOworfQorCit2b2lkIFNlZ21lbnRlZFN0cmluZzo6c2V0Q3VycmVudFBv
c2l0aW9uKGludCBsaW5lLCBpbnQgY29sdW1uKQoreworICAgIG1fY3VycmVudExpbmUgPSBsaW5l
OworICAgIG1fbGluZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFsdWUgPSBudW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZCgpIC0gY29sdW1uOworfQorCisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
ZWdtZW50ZWRTdHJpbmcuaAppbmRleCA5MWMyY2JlM2Y5Y2Y2OTkwNzZmODJkMDZhMTgwMTdhMTc4
NDFmYmU2Li40ZTk5OWZhNmFjNDhiMGM4YmM4OWY1YWUyYjQ4MDczMGJlOWIyNTJhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCkBAIC03NSw2ICs3NSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX3B1c2hlZENoYXIyKDApCiAgICAgICAgICwgbV9jdXJyZW50Q2hhcigw
KQogICAgICAgICAsIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN0
cmluZygwKQorICAgICAgICAsIG1fbGluZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFsdWUoMCkK
KyAgICAgICAgLCBtX2N1cnJlbnRMaW5lKDApCiAgICAgICAgICwgbV9jb21wb3NpdGUoZmFsc2Up
CiAgICAgICAgICwgbV9jbG9zZWQoZmFsc2UpCiAgICAgewpAQCAtODYsNiArODgsOCBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9jdXJyZW50U3RyaW5nKHN0cikKICAgICAgICAgLCBtX2N1cnJlbnRD
aGFyKG1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQpCiAgICAgICAgICwgbV9udW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3RyaW5nKDApCisgICAgICAgICwgbV9saW5lQmVn
aW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZSgwKQorICAgICAgICAsIG1fY3VycmVudExpbmUoMCkK
ICAgICAgICAgLCBtX2NvbXBvc2l0ZShmYWxzZSkKICAgICAgICAgLCBtX2Nsb3NlZChmYWxzZSkK
ICAgICB7CkBAIC0xNTUsNyArMTU5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VS
VCgqY3VycmVudCgpID09ICdcbicpOwogICAgICAgICBpZiAoIW1fcHVzaGVkQ2hhcjEgJiYgbV9j
dXJyZW50U3RyaW5nLm1fbGVuZ3RoID4gMSkgewotICAgICAgICAgICAgbGluZU51bWJlciArPSBt
X2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMoKTsKKyAgICAgICAgICAgIGlm
IChtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMoKSkgeworICAgICAgICAg
ICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICArK21fY3VycmVudExpbmU7Cisg
ICAgICAgICAgICAgICAgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZSA9IG51bWJl
ck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAtLW1f
Y3VycmVudFN0cmluZy5tX2xlbmd0aDsKICAgICAgICAgICAgIG1fY3VycmVudENoYXIgPSArK21f
Y3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzcsNyAr
MTg1LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkdmFuY2UoaW50JiBsaW5lTnVtYmVyKQogICAg
IHsKICAgICAgICAgaWYgKCFtX3B1c2hlZENoYXIxICYmIG1fY3VycmVudFN0cmluZy5tX2xlbmd0
aCA+IDEpIHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gKCptX2N1cnJlbnRTdHJpbmcubV9j
dXJyZW50ID09ICdcbicpICYgbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJz
KCk7CisgICAgICAgICAgICBpZiAoKCptX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50ID09ICdcbicp
ICYgbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKCkpIHsKKyAgICAgICAg
ICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgKyttX2N1cnJlbnRMaW5lOwor
ICAgICAgICAgICAgICAgIG1fbGluZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFsdWUgPSBudW1i
ZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgLS1t
X2N1cnJlbnRTdHJpbmcubV9sZW5ndGg7CiAgICAgICAgICAgICBtX2N1cnJlbnRDaGFyID0gKytt
X2N1cnJlbnRTdHJpbmcubV9jdXJyZW50OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkxLDcg
KzIwMyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZXNjYXBlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cHVzaGVkQ2hhcjE7IH0KIAotICAgIGludCBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpCisg
ICAgaW50IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgY29uc3QKICAgICB7CiAgICAgICAg
IC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBhcmUgcHVz
aGVkIGNoYXJhY3Rlci4KICAgICAgICAgQVNTRVJUKCFtX3B1c2hlZENoYXIxKTsKQEAgLTIwMyw2
ICsyMTUsMTEgQEAgcHVibGljOgogICAgIGNvbnN0IFVDaGFyJiBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAqY3VycmVudCgpOyB9CiAgICAgY29uc3QgVUNoYXIqIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiBjdXJyZW50KCk7IH0KICAgICAKKworICAgIGludCBjdXJyZW50Q29sdW1uKCkg
Y29uc3Q7CisgICAgaW50IGN1cnJlbnRMaW5lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDdXJyZW50
UG9zaXRpb24oaW50IGxpbmUsIGludCBjb2x1bW4pOworCiBwcml2YXRlOgogICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IFNlZ21lbnRlZFN1YnN0cmluZyYpOwogICAgIHZvaWQgcHJlcGVuZChjb25zdCBT
ZWdtZW50ZWRTdWJzdHJpbmcmKTsKQEAgLTI0Nyw2ICsyNjQsOCBAQCBwcml2YXRlOgogICAgIFNl
Z21lbnRlZFN1YnN0cmluZyBtX2N1cnJlbnRTdHJpbmc7CiAgICAgY29uc3QgVUNoYXIqIG1fY3Vy
cmVudENoYXI7CiAgICAgaW50IG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3Vy
cmVudFN0cmluZzsKKyAgICBpbnQgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZTsK
KyAgICBpbnQgbV9jdXJyZW50TGluZTsKICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+IG1f
c3Vic3RyaW5nczsKICAgICBib29sIG1fY29tcG9zaXRlOwogICAgIGJvb2wgbV9jbG9zZWQ7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA0N2IwZTYzZDA4MGI3MWIxMjY0ODgzOGUyZTA2MTE0MmI3ZjVjZGVjLi4y
ZWI0OTBlOWU0ZjE1MGQ5YTRjMWRjYmU1OTY5OGYxZmViNTc4NzBlIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxMC0wOS0yMCAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2NyaXB0IGNvbHVtbiBwb3NpdGlvbiB3aXRoaW4g
SFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNzEKKworICAgICAgICBSZXBsYWNlcyBzY3Jp
cHQgbGluZSBudW1iZXIgd2l0aCBIVE1MUG9zaXRpb24gc3RydWN0dXJlLgorCisgICAgICAgICog
c3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhl
Y3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0
ZVNjcmlwdEFuZFJldHVyblZhbHVlKToKKwogMjAxMC0wOS0xOSAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjY3NzQ5LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
Y3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IDJkNDJmNGI3
NTNmNmM4ZGZhMGJiYzM4MWNmOGJjNTk1ZDkzNWNhMTkuLmI0ZWI0MmRhYjRlODYxNGM0ZjM3OGQw
NDkyZTBlYzJmMGEyZGJlYWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAg
LTczMSw4ICs3MzEsOSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6YmluZFRvV2luZG93T2JqZWN0KGNv
bnN0IFdlYlN0cmluZyYgbmFtZSwgTlBPYmplY3QqIG9iamVjdCkKIAogdm9pZCBXZWJGcmFtZUlt
cGw6OmV4ZWN1dGVTY3JpcHQoY29uc3QgV2ViU2NyaXB0U291cmNlJiBzb3VyY2UpCiB7CisgICAg
SFRNTFBvc2l0aW9uMSBwb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJ
bnQoc291cmNlLnN0YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OnNfYmFzZSwgMCk7CiAg
ICAgbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoCi0gICAgICAgIFNjcmlwdFNvdXJj
ZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHNvdXJjZS5zdGFydExpbmUpKTsKKyAgICAg
ICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKTsK
IH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCkBA
IC03NDIsOCArNzQzLDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xh
dGVkV29ybGQoCiAgICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+IHNvdXJjZXM7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU291cmNlczsgKytpKSB7CisgICAgICAgIEhUTUxQ
b3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNv
dXJjZXNJbltpXS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpzX2Jhc2UsIDApOwog
ICAgICAgICBzb3VyY2VzLmFwcGVuZChTY3JpcHRTb3VyY2VDb2RlKAotICAgICAgICAgICAgc291
cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHNvdXJjZXNJbltpXS5zdGFydExpbmUp
KTsKKyAgICAgICAgICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBwb3Np
dGlvbikpOwogICAgIH0KIAogICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZCh3b3JsZElkLCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CkBAIC03OTUsOCArNzk3
LDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmNvbGxlY3RHYXJiYWdlKCkKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSgKICAgICBj
b25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBIVE1MUG9zaXRpb24xIHBvc2l0
aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3RhcnRMaW5l
KSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNlLCAwKTsKICAgICByZXR1cm4gbV9mcmFtZS0+
c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoCi0gICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNl
LmNvZGUsIHNvdXJjZS51cmwsIHNvdXJjZS5zdGFydExpbmUpKS52OFZhbHVlKCk7CisgICAgICAg
IFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0aW9uKSkudjhW
YWx1ZSgpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBWOCBjb250ZXh0IGZvciB0aGlzIGZyYW1lLCBv
ciBhbiBlbXB0eSBoYW5kbGUgaWYgdGhlcmUgaXMgbm9uZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68392</attachid>
            <date>2010-09-22 10:35:29 -0700</date>
            <delta_ts>2010-09-23 14:25:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20100922213526.patch</filename>
            <type>text/plain</type>
            <size>71114</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzNDkwNzQ4ZTQ4NzNjZjJhYWY5NDNiOTYzYTY1ODVmZGVmODkxNzhjLi44
ZDViNmMzNzhlMmQ1YTM0MmM2OTI2OTMxMzFiMzEyZGMwY2E5ZWE0IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTAtMDktMjAgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBIVE1MUG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgSFRNTCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvSFRNTFBvc2l0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogd3RmL0hU
TUxQb3NpdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6SFRNTFBvc2l0aW9uOjpIVE1MUG9z
aXRpb24pOgorICAgICAgICAoV1RGOjpIVE1MUG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbik6Cisg
ICAgICAgIChXVEY6OkhUTUxQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKToKKyAgICAgICAg
KFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6
WmVyb0Jhc2VkTnVtYmVyOjpaZXJvQmFzZWROdW1iZXIpOgorICAgICAgICAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6Onplcm9CYXNlZEludCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6T25lQmFzZWRO
dW1iZXIpOgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6b25lQmFzZWRJbnQpOgorICAg
ICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6Y29udmVydEFzWmVyb0Jhc2VkSW50KToKKyAgICAg
ICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRUb1plcm9CYXNlZCk6CisgICAgICAgIChX
VEY6OnRvWmVyb0Jhc2VkSFRNTFBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6dG9PbmVCYXNlZEhU
TUxQb3NpdGlvbik6CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6Y29udmVydFRvT25l
QmFzZWQpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorCiAyMDEwLTA5LTE5ICBHYXZpbiBCYXJy
YWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxk
IGZpeCBwdCAyLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBkZDJiYTIxZDlkNWRiOTJlZWY3NWM2
YzJlZDhkM2JkNDA1MDU4YzRlLi40YzJlNzdjNzg5NzAzYmRjYWE5YzhiMjQxNjcxNmNiOWQyZTI5
N2Y0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNDUzLDYgKzQ1Myw4IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuY3BwIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNo
VHJhaXRzLmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9IVE1MUG9zaXRpb24uY3BwIFwKKwlKYXZh
U2NyaXB0Q29yZS93dGYvSFRNTFBvc2l0aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9MaXN0
SGFzaFNldC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvTGlzdFJlZlB0ci5oIFwKIAlKYXZhU2Ny
aXB0Q29yZS93dGYvTG9ja2VyLmggXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXgg
NDYyOTYwZDUxZGQ2ZGJlNDAyZDU4NjNkMjA4YzEzMjhjYmMxNWFjZS4uNmUxYzFhOTA4NzdjMzdl
NGVlODk2NGM1N2EyNjMyNWJhYTY2N2E5ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZ3lwaQorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
CkBAIC0zODQsNiArMzg0LDggQEAKICAgICAgICAgICAgICd3dGYvSGFzaFRhYmxlLmNwcCcsCiAg
ICAgICAgICAgICAnd3RmL0hhc2hUYWJsZS5oJywKICAgICAgICAgICAgICd3dGYvSGFzaFRyYWl0
cy5oJywKKyAgICAgICAgICAgICd3dGYvSFRNTFBvc2l0aW9uLmgnLAorICAgICAgICAgICAgJ3d0
Zi9IVE1MUG9zaXRpb24uY3BwJywKICAgICAgICAgICAgICd3dGYvTGlzdEhhc2hTZXQuaCcsCiAg
ICAgICAgICAgICAnd3RmL0xpc3RSZWZQdHIuaCcsCiAgICAgICAgICAgICAnd3RmL0xvY2tlci5o
JywKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA4OTY3OTRlZjQxZThmMDIxODQwOTk0
YWMzNTI0Nzg3MmIyZGFlMTY5Li5kMDY3YTdhNDM2ZWIyOTNjNjE5Nzc4M2FlODY4ODg2YzhhY2Iw
NWYzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIv
SmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC00LDYgKzQsNyBAQCBTRVQoV1RG
X1NPVVJDRVMKICAgICBDdXJyZW50VGltZS5jcHAKICAgICBGYXN0TWFsbG9jLmNwcAogICAgIEhh
c2hUYWJsZS5jcHAKKyAgICBIVE1MUG9zaXRpb24uY3BwCiAgICAgTWFpblRocmVhZC5jcHAKICAg
ICBNRDUuY3BwCiAgICAgUmFuZG9tTnVtYmVyLmNwcApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvd3RmL0hUTUxQb3NpdGlvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvSFRNTFBvc2l0aW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wZTFhMjUwOTE5MDIxNDkyMWM2NDg0YWU3OWNlNjFjMTk5N2IzOWZk
Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0hUTUxQb3NpdGlvbi5jcHAK
QEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJIVE1MUG9zaXRpb24uaCIKKworbmFtZXNwYWNlIFdURiB7CisKK2NvbnN0IFplcm9C
YXNlZE51bWJlciBaZXJvQmFzZWROdW1iZXI6OnNfYmFzZSgwKTsKK2NvbnN0IFplcm9CYXNlZE51
bWJlciBaZXJvQmFzZWROdW1iZXI6OnNfYmVsb3dCYXNlKC0xKTsKKworY29uc3QgT25lQmFzZWRO
dW1iZXIgT25lQmFzZWROdW1iZXI6OnNfYmFzZSgxKTsKK2NvbnN0IE9uZUJhc2VkTnVtYmVyIE9u
ZUJhc2VkTnVtYmVyOjpzX2JlbG93QmFzZSgwKTsKKworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9IVE1MUG9zaXRpb24uaCBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9IVE1MUG9zaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjJhODQzZmY1ZTJjODMzNjM5ZTc0
OWQ5MTg1MzAzMDllMjBjNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L0hUTUxQb3NpdGlvbi5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBIVE1MUG9zaXRpb25faAorI2RlZmluZSBIVE1MUG9zaXRpb25faAorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKworLyoKKyAqIEhUTUwgcG9zaXRp
b24KKyAqCisgKiBIVE1MUG9zaXRpb24gc3RydWN0dXJlIHNwZWNpZmllcyBjb29yZGluYXRlcyB3
aXRoaW4gYW4gSFRNTCByZXNvdXJjZS4gSXQgaXMgdXNlZCBtb3N0bHkKKyAqIGZvciBzYXZpbmcg
c2NyaXB0IHNvdXJjZSBwb3NpdGlvbi4gVGhlIHRoaXJkIGZpZWxkICdnZW5lcmF0aW9uJyByZWZs
ZWN0cyB0aGUgZmFjdAorICogdGhhdCBhbnkgcGFydCBvZiBIVE1MIGRvY3VtZW50IGNhbiBiZSBn
ZW5lcmF0ZWQgb24gdGhlIGZseSwgYnkgYSAnZG9jdW1lbnQud3JpdGUnCisgKiBjYWxsLiBXaGls
ZSBlbGVtZW50cyBvZiB0aGUgZ2VuZXJhdGVkIHBhcnQgbWF5IHN0aWxsIGhhdmUgY29vcmRpbmF0
ZXMgKHByb2JhYmx5KSwKKyAqIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIGNvb3Jk
aW5hdGVzIGluIHRoZSBvcmlnaW5hbCBIVE1MIHNvdXJjZS4KKyAqIFNvIGdlbmVyYXRpb24gPT0g
MCBtZWFucyB0aGF0IGNvb3JkaW5hdGVzIGFwcGx5IHRvIGRvd25sb2FkZWQgSFRNTCBmaWxlLAor
ICogZ2VuZXJhdGlvbiA9PSAxIGFwcGxpZXMgdG8gYSBIVE1MIGVsZW1lbnRzIGdlbmVyYXRlZCwg
Z2VuZXJhdGlvbiA9PSAyIHRvIGVsZW1lbnRzCisgKiBnZW5lcmF0ZWQgZnJvbSBhIHNjcmlwdCBp
biBhIGdlbmVyYXRlZCBwYXJ0IGFuZCBzbyBvbi4KKyAqCisgKgorICoKKyAqIDAtYmFzZWQgYW5k
IDEtYmFzZWQKKyAqCisgKiBMaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBjb3VsZCBiZSBpbnRlcnBy
ZXRlZCBhcyB6ZXJvLWJhc2VkIG9yIDEtYmFzZWQuIFNpbmNlCisgKiBib3RoIHByYWN0aWNlcyBj
b2V4aXN0IGluIFdlYktpdCBzb3VyY2UgYmFzZSwgJ2ludCcgdHlwZSBzaG91bGQgYmUgcmVwbGFj
ZWQgd2l0aAorICogYSBkZWRpY2F0ZWQgd3JhcHBlciB0eXBlcywgc28gdGhhdCBjb21waWxlciBo
ZWxwZWQgdXMgd2l0aCB0aGlzIGFtYmlndWl0eS4KKyAqCisgKiBIZXJlIHdlIGludHJvZHVjZSAy
IHR5cGVzIG9mIG51bWJlcnM6IFplcm9CYXNlZE51bWJlciBhbmQgT25lQmFzZWROdW1iZXIgYW5k
CisgKiAyIGNvcnJlc3BvbmRpbmcgdHlwZXMgb2YgSFRNTFBvc2l0aW9uIHN0cnVjdHVyZS4gV2hp
bGUgb25seSBvbmUgdHlwZSBvdWdodCB0byBiZSBlbm91Z2gsCisgKiB0aGlzIGlzIGRvbmUgdG8g
a2VlcCB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgdHlwZXMgYXMgdHJhbnNwYXJlbnQgYXMgcG9zc2li
bGU6CisgKiBlLmcuIGluIGFyZWFzIHdoZXJlIDAtYmFzZWQgaW50ZWdlcnMgYXJlIHVzZWQsIEhU
TUxQb3NpdGlvbjAgc2hvdWxkIGJlIGludHJvZHVjZWQuIFRoaXMKKyAqIHdheSBhbGwgY2hhbmdl
cyB3aWxsIHJlbWFpbiB0cmFja2FibGUuCisgKiBMYXRlciBIVE1MUG9zaXRpb24wIGFuZCBIVE1M
UG9zaXRpb24xIGNhbiBiZSBtZXJnZWQgdG9nZXRoZXIgcXVpdGUgZWFzaWx5LgorICovCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIE5VTUJFUj4KK2NsYXNzIEhUTUxQb3NpdGlvbiB7CitwdWJsaWM6Cisg
ICAgSFRNTFBvc2l0aW9uKE5VTUJFUiBsaW5lLCBOVU1CRVIgY29sdW1uLCBpbnQgZ2VuZXJhdGlv
bikKKyAgICAgICAgOiBtX2xpbmUobGluZSkKKyAgICAgICAgLCBtX2NvbHVtbihjb2x1bW4pCisg
ICAgICAgICwgbV9nZW5lcmF0aW9uKGdlbmVyYXRpb24pCisgICAgeworICAgIH0KKyAgICBIVE1M
UG9zaXRpb24oKSB7fQorCisgICAgLy8gQSAnbWluaW11bScgdmFsdWUgb2YgcG9zaXRpb24sIHVz
ZWQgYXMgYSBkZWZhdWx0IHZhbHVlLgorICAgIHN0YXRpYyBIVE1MUG9zaXRpb248TlVNQkVSPiBt
aW5pbXVtUG9zaXRpb24oKSB7IHJldHVybiBIVE1MUG9zaXRpb248TlVNQkVSPihOVU1CRVI6OnNf
YmFzZSwgTlVNQkVSOjpzX2Jhc2UsIDApOyB9CisKKyAgICAvLyBBIHZhbHVlIHdpdGggbGluZSB2
YWx1ZSBsZXNzIHRoYW4gYSBtaW5pbXVtOyB1c2VkIGFzIGFuIGltcG9zc2libGUgcG9zaXRpb24u
CisgICAgc3RhdGljIEhUTUxQb3NpdGlvbjxOVU1CRVI+IGJlbG93UmFuZ2VQb3NpdGlvbigpIHsg
cmV0dXJuIEhUTUxQb3NpdGlvbjxOVU1CRVI+KE5VTUJFUjo6c19iZWxvd0Jhc2UsIE5VTUJFUjo6
c19iYXNlLCAwKTsgfQorCisgICAgTlVNQkVSIG1fbGluZTsKKyAgICBOVU1CRVIgbV9jb2x1bW47
CisgICAgaW50IG1fZ2VuZXJhdGlvbjsKK307CisKKworY2xhc3MgT25lQmFzZWROdW1iZXI7CisK
Ky8vIEFuIGludCB3cmFwcGVyIHRoYXQgYWx3YXlzIHJlbWluZHMgeW91IHRoYXQgdGhlIG51bWJl
ciBzaG91bGQgYmUgMC1iYXNlZAorY2xhc3MgWmVyb0Jhc2VkTnVtYmVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGZyb21aZXJvQmFzZWRJbnQoaW50IHplcm9CYXNlZElu
dCkgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyKHplcm9CYXNlZEludCk7IH0KKworICAgIFplcm9C
YXNlZE51bWJlcigpIHt9CisKKyAgICBpbnQgemVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorCisgICAgT25lQmFzZWROdW1iZXIgY29udmVydFRvT25lQmFzZWQoKSBjb25z
dDsKKworICAgIHN0YXRpYyBjb25zdCBaZXJvQmFzZWROdW1iZXIgc19iYXNlOyAvLyAwCisgICAg
c3RhdGljIGNvbnN0IFplcm9CYXNlZE51bWJlciBzX2JlbG93QmFzZTsgLy8gLTEKKworcHJpdmF0
ZToKKyAgICBaZXJvQmFzZWROdW1iZXIoaW50IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHt9Cisg
ICAgaW50IG1fdmFsdWU7Cit9OworCisvLyBBbiBpbnQgd3JhcHBlciB0aGF0IGFsd2F5cyByZW1p
bmRzIHlvdSB0aGF0IHRoZSBudW1iZXIgc2hvdWxkIGJlIDEtYmFzZWQKK2NsYXNzIE9uZUJhc2Vk
TnVtYmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgT25lQmFzZWROdW1iZXIgZnJvbU9uZUJhc2Vk
SW50KGludCBvbmVCYXNlZEludCkgeyByZXR1cm4gT25lQmFzZWROdW1iZXIob25lQmFzZWRJbnQp
OyB9CisgICAgT25lQmFzZWROdW1iZXIoKSB7fQorCisgICAgaW50IG9uZUJhc2VkSW50KCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGludCBjb252ZXJ0QXNaZXJvQmFzZWRJbnQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlIC0gMTsgfQorICAgIFplcm9CYXNlZE51bWJlciBjb252ZXJ0
VG9aZXJvQmFzZWQoKSBjb25zdCB7IHJldHVybiBaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFz
ZWRJbnQobV92YWx1ZSAtIDEpOyB9CisKKyAgICBzdGF0aWMgY29uc3QgT25lQmFzZWROdW1iZXIg
c19iYXNlOyAvLyAxCisgICAgc3RhdGljIGNvbnN0IE9uZUJhc2VkTnVtYmVyIHNfYmVsb3dCYXNl
OyAvLyAwCisKK3ByaXZhdGU6CisgICAgT25lQmFzZWROdW1iZXIoaW50IHZhbHVlKSA6IG1fdmFs
dWUodmFsdWUpIHt9CisgICAgaW50IG1fdmFsdWU7Cit9OworCit0eXBlZGVmIEhUTUxQb3NpdGlv
bjxaZXJvQmFzZWROdW1iZXI+IEhUTUxQb3NpdGlvbjA7Cit0eXBlZGVmIEhUTUxQb3NpdGlvbjxP
bmVCYXNlZE51bWJlcj4gSFRNTFBvc2l0aW9uMTsKKworaW5saW5lIEhUTUxQb3NpdGlvbjAgdG9a
ZXJvQmFzZWRIVE1MUG9zaXRpb24oY29uc3QgSFRNTFBvc2l0aW9uMSYgcG9zaXRpb24pCit7Cisg
ICAgcmV0dXJuIEhUTUxQb3NpdGlvbjAocG9zaXRpb24ubV9saW5lLmNvbnZlcnRUb1plcm9CYXNl
ZCgpLCBwb3NpdGlvbi5tX2NvbHVtbi5jb252ZXJ0VG9aZXJvQmFzZWQoKSwgcG9zaXRpb24ubV9n
ZW5lcmF0aW9uKTsKK30KKworaW5saW5lIEhUTUxQb3NpdGlvbjEgdG9PbmVCYXNlZEhUTUxQb3Np
dGlvbihjb25zdCBIVE1MUG9zaXRpb24wJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gSFRNTFBv
c2l0aW9uMShwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvT25lQmFzZWQoKSwgcG9zaXRpb24ubV9j
b2x1bW4uY29udmVydFRvT25lQmFzZWQoKSwgcG9zaXRpb24ubV9nZW5lcmF0aW9uKTsKK30KKwor
aW5saW5lIE9uZUJhc2VkTnVtYmVyIFplcm9CYXNlZE51bWJlcjo6Y29udmVydFRvT25lQmFzZWQo
KSBjb25zdAoreworICAgIHJldHVybiBPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1f
dmFsdWUgKyAxKTsKK30KKworfQorCisKK3VzaW5nIFdURjo6SFRNTFBvc2l0aW9uMDsKK3VzaW5n
IFdURjo6SFRNTFBvc2l0aW9uMTsKKworI2VuZGlmIC8vIEhUTUxQb3NpdGlvbl9oCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaSBiL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYu
cHJpCmluZGV4IDg0YWMyMGUzZmM5ZmU0YjVjYTI0Zjk1MzkyZjdiYTFlOTE4MDEzNDAuLmVmZTMz
MGU5ZDhjYmNhNjA3NjM2ZDU2NTUzZmI3Zjc1NjhjNGExYTYgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi93dGYucHJpCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCkBAIC04
LDYgKzgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvZHRvYS5jcHAgXAogICAgIHd0Zi9GYXN0
TWFsbG9jLmNwcCBcCiAgICAgd3RmL0hhc2hUYWJsZS5jcHAgXAorICAgIHd0Zi9IVE1MUG9zaXRp
b24uY3BwIFwKICAgICB3dGYvTUQ1LmNwcCBcCiAgICAgd3RmL01haW5UaHJlYWQuY3BwIFwKICAg
ICB3dGYvcXQvTWFpblRocmVhZFF0LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDg5NWFmYjNmNmQ4ZGRjMDg4NDAxZjhjYjc3ZTc1
YmM3Yzg5ODUwM2UuLjQ3NTY5YmRiOWMzNWRhYThjOTdiY2JiNDYwYmU2MTk3MjUyYTUzNjggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTggQEAKKzIwMTAtMDktMjAgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgUmVwbGFjZXMgbGluZSBu
dW1iZXIgd2l0aCBIVE1MUG9zaXRpb24gc3RydWN0IHNvIHRoYXQgc2NyaXB0IGVuZ2luZQorICAg
ICAgICBnZXRzIHNjcmlwdCBzdGFydGluZyBsaW5lL2NvbHVtbi4KKyAgICAgICAgRXh0ZW5kcyBT
ZWdtZW50ZWRTdHJpbmcgdG8gcHJvdmlkZSBjdXJyZW50IGNvbHVtbiBhbmQgY3VycmVudCBsaW5l
LgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6CisgICAgICAgICog
YmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVk
dWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2
ZW50SGFuZGxlclBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRTb3VyY2VDb2RlOjpTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFNvdXJjZUNvZGU6OnN0YXJ0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VD
b2RlOjpzdGFydFBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlFdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6
eUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0ZW5lcjo6
cHJlcGFyZUxpc3RlbmVyT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlFdmVu
dExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpjcmVh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6Y29tcGlsZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpl
dmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpydW5TY3JpcHQpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OnJ1blNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogZG9tL1BlbmRpbmdTY3JpcHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVhcik6Cisg
ICAgICAgICogZG9tL1BlbmRpbmdTY3JpcHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdT
Y3JpcHQ6OlBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6
b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnN0YXJ0aW5nUG9z
aXRpb24pOgorICAgICAgICAqIGRvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAg
ICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpY
TUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVu
ZEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpodG1sUG9zaXRpb24pOgor
ICAgICAgICAqIGRvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6aHRtbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjpwYXJzZVN0YXJ0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6cGFyc2VFbmRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3Vt
ZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpodG1sUG9zaXRpb24pOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxJ
bnB1dFN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjpIVE1MSW5w
dXRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjpnZXRJbnNlcnRp
b25MZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRTdHJlYW06OnNldEluc2VydGlv
bkxldmVsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydGlvblBvaW50UmVjb3JkOjpJbnNlcnRp
b25Qb2ludFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludFJlY29yZDo6
fkluc2VydGlvblBvaW50UmVjb3JkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZy
b21QZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4
ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6dGFrZVNjcmlwdFRvUHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzU2NyaXB0U3RhcnRUYWcpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
Z21lbnRlZFN0cmluZzo6YWR2YW5jZVNsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21l
bnRlZFN0cmluZzo6Z2V0Q3VycmVudExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVk
U3RyaW5nOjpnZXRDdXJyZW50Q29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0
cmluZzo6c2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1NlZ21l
bnRlZFN0cmluZy5oOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpTZWdtZW50
ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFz
dE5ld2xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ29u
c3VtZWQpOgorCiAyMDEwLTA5LTIwICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0U291cmNlQ29kZS5oCmluZGV4IDMyZDYyOThjZGJkYTc3MmRhYTEzZTEwMzNl
M2NmMGFhNDBmNTk0YjIuLjc5YzA5NWVmMTYyMWJlMmEwMTA2YjZlMDhkMjExNzM2YWVmMzc2YmUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCkBAIC0zNSwxNSArMzUsMTYg
QEAKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0cmluZ1Nv
dXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi9IVE1MUG9z
aXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU2NyaXB0U291cmNlQ29kZSB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0U291cmNlQ29k
ZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBpbnQgc3Rh
cnRMaW5lID0gMSkKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBj
b25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGNvbnN0IEhUTUxQb3NpdGlvbjEmIHN0YXJ0UG9zaXRp
b24gPSBIVE1MUG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKSkKICAgICAgICAgOiBtX3Byb3Zp
ZGVyKFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwuaXNOdWxsKCkgPyBT
dHJpbmcoKSA6IHVybC5zdHJpbmcoKSkpCi0gICAgICAgICwgbV9jb2RlKG1fcHJvdmlkZXIsIHN0
YXJ0TGluZSkKKyAgICAgICAgLCBtX2NvZGUobV9wcm92aWRlciwgc3RhcnRQb3NpdGlvbi5tX2xp
bmUub25lQmFzZWRJbnQoKSkKICAgICAgICAgLCBtX3VybCh1cmwpCiAgICAgewogICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcAppbmRleCBkY2QwYmIzMzc3MTgxMzE4
NDIwYzEwNzNiZTI1MWE5ZTU4NGJhNGI3Li4xMTJkZTUyZDNiYWY4ZGFlZjZjYWZiMmEyMTA5NWQ3
OWRmYzM1ZTQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlv
bi5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCkBAIC00
NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NoZWR1bGVkQWN0aW9uOjpTY2hl
ZHVsZWRBY3Rpb24odjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IGZ1bmMsIGludCBhcmdjLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltd
KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2NvZGUoU3RyaW5nKCksIEtVUkwo
KSwgMCkKKyAgICAsIG1fY29kZShTdHJpbmcoKSwgS1VSTCgpLCBIVE1MUG9zaXRpb24xOjpiZWxv
d1JhbmdlUG9zaXRpb24oKSkKIHsKICAgICBtX2Z1bmN0aW9uID0gdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uPjo6TmV3KGZ1bmMpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAppbmRleCA1NTZiNWM2ZWE5MWI3YTAyMTJjNGU5YjJiYjJiOWVkZGUyYmZhNTQ2Li4z
M2JkMGNlZmRiZGQ5N2VmNjViYzg4OGQ5MjE5ZDkyYjkzNDg0M2VkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTI2MCwyMCArMjYwLDEyIEBAIFNjcmlwdFZh
bHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUsIFNob3VsCiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKG9iamVjdCk7CiB9CiAKLWlu
dCBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkgY29uc3QKK0hUTUxQ
b3NpdGlvbjAgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyUG9zaXRpb24oKSBjb25zdAog
ewogICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCk7CiAgICAgaWYgKHBhcnNlcikKLSAgICAg
ICAgcmV0dXJuIHBhcnNlci0+bGluZU51bWJlcigpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQg
U2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyQ29sdW1uTnVtYmVyKCkgY29uc3QKLXsKLSAg
ICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9IG1fZnJhbWUtPmRvY3VtZW50KCkt
PnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwotICAgIGlmIChwYXJzZXIpCi0gICAgICAgIHJl
dHVybiBwYXJzZXItPmNvbHVtbk51bWJlcigpOwotICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gcGFyc2VyLT5odG1sUG9zaXRpb24oKTsKKyAgICByZXR1cm4gSFRNTFBvc2l0aW9uMDo6bWlu
aW11bVBvc2l0aW9uKCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZmluaXNoZWRXaXRo
RXZlbnQoRXZlbnQqIGV2ZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaApp
bmRleCAzYmM0MmVmYjAzZjlhOGM4MGMxNjU0YTUyZWMzZTFjNzcyYzQ4ZjIzLi5kOTg3ZDJjMDk3
YjFkNDk0M2MyNGMxNGM4NjAxN2QyNDZhOTI4NGFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuaApAQCAtMTU1LDggKzE1NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmlu
aXNoZWRXaXRoRXZlbnQoRXZlbnQqKTsKIAotICAgIGludCBldmVudEhhbmRsZXJMaW5lTnVtYmVy
KCkgY29uc3Q7Ci0gICAgaW50IGV2ZW50SGFuZGxlckNvbHVtbk51bWJlcigpIGNvbnN0OworICAg
IEhUTUxQb3NpdGlvbjAgZXZlbnRIYW5kbGVyUG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQg
c2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soYm9vbCBwcm9jZXNzaW5nVGltZXJDYWxsYmFjaykg
eyBtX3Byb2Nlc3NpbmdUaW1lckNhbGxiYWNrID0gcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2s7IH0K
ICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGRvbid0IHVzZSB0aGUgcGFyYW1ldGVyIHdvcmxk
IGF0IGFsbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0
ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCmlu
ZGV4IDcyZGY3OWRlZDNlZDQ3Y2ZmMWEyN2I1OTUzYTM1OTk2M2M3N2E2MzAuLjViYThmN2NkY2Ew
NWQyYzdjZDdmYjdkMjYyNjIzOWIxMTUzNzdlYzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRFdmVudExpc3RlbmVyLmNwcApAQCAtNTAsOCArNTAsOCBAQCBQYXNzUmVmUHRyPFY4TGF6
eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoTm9kZSogbm9kZSwg
QXR0cmlidQogICAgIGlmIChhdHRyLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBpbnQgbGluZU51bWJlciA9IDE7Ci0gICAgaW50IGNvbHVtbk51bWJlciA9IDA7CisgICAgLy8g
VE9ETyhwZXRlci5yeWJpbik6IHZlcnkgc3RyYW5nZTogd2UgaW5pdGlhbGl6ZSB6ZXJvLWJhc2Vk
IG51bWJlciB3aXRoICcxJy4KKyAgICBIVE1MUG9zaXRpb24wIHBvc2l0aW9uKFdURjo6WmVyb0Jh
c2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KDEpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6c19i
YXNlLCAwKTsKICAgICBTdHJpbmcgc291cmNlVVJMOwogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKQEAgLTY0LDEyICs2NCwxMSBAQCBQYXNzUmVm
UHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoTm9k
ZSogbm9kZSwgQXR0cmlidQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAg
ICAgICBsaW5lTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyTGluZU51bWJl
cigpOwotICAgICAgICBjb2x1bW5OdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRs
ZXJDb2x1bW5OdW1iZXIoKTsKKyAgICAgICAgcG9zaXRpb24gPSBzY3JpcHRDb250cm9sbGVyLT5l
dmVudEhhbmRsZXJQb3NpdGlvbigpOwogICAgICAgICBzb3VyY2VVUkwgPSBub2RlLT5kb2N1bWVu
dCgpLT51cmwoKS5zdHJpbmcoKTsKICAgICB9CiAKLSAgICByZXR1cm4gVjhMYXp5RXZlbnRMaXN0
ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBub2RlLT5pc1NWR0VsZW1l
bnQoKSwgYXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIs
IFdvcmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKKyAgICByZXR1cm4gVjhMYXp5RXZl
bnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBub2RlLT5pc1NW
R0VsZW1lbnQoKSwgYXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBwb3NpdGlvbiwgV29ybGRDb250
ZXh0SGFuZGxlKFVzZU1haW5Xb3JsZCkpOwogfQogCiBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlz
dGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCBBdHRyaWJ1
dGUqIGF0dHIpCkBAIC04MSwxMCArODAsNiBAQCBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVu
ZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCBBdHRyaQogICAg
IGlmIChhdHRyLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgbGluZU51
bWJlciA9IDE7Ci0gICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0gICAgU3RyaW5nIHNvdXJjZVVS
TDsKLQogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2Ny
aXB0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250cm9sbGVyLT5jYW5FeGVjdXRlU2NyaXB0cyhBYm91
dFRvRXhlY3V0ZVNjcmlwdCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtOTQsMTAgKzg5LDkgQEAg
UGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
bGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckxpbmVOdW1iZXIoKTsK
LSAgICBjb2x1bW5OdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJDb2x1bW5O
dW1iZXIoKTsKLSAgICBzb3VyY2VVUkwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCk7Ci0gICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5h
bWUoKS5zdHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCktPmlzU1ZHRG9jdW1lbnQoKSwgYXR0ci0+
dmFsdWUoKSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIFdvcmxkQ29udGV4
dEhhbmRsZShVc2VNYWluV29ybGQpKTsKKyAgICBIVE1MUG9zaXRpb24wIHBvc2l0aW9uID0gc2Ny
aXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKKyAgICBTdHJpbmcgc291cmNl
VVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpOworICAgIHJldHVybiBWOExh
enlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGZyYW1l
LT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwg
cG9zaXRpb24sIFdvcmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKIH0KIAogU3RyaW5n
IGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShEb2N1bWVudCogZG9jdW1lbnQsIEV2ZW50TGlzdGVu
ZXIqIGxpc3RlbmVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3Vy
Y2VDb2RlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaAppbmRleCBk
YmM5ZDVlNmZjNjAwN2ZjZmRkNjYwMjRkYjA3ODI2YzY2MjYzYjViLi5mYmM4ODY1ZmUyZGE5YTU5
NTc3YTA3OTkxOWU2MDM2YmUzOTc0MTM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdFNvdXJjZUNvZGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNvdXJj
ZUNvZGUuaApAQCAtMzUsMTYgKzM1LDE3IEBACiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0hUTUxQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlw
dFNvdXJjZUNvZGUgewogcHVibGljOgotICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisg
ICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJs
ID0gS1VSTCgpLCBjb25zdCBIVE1MUG9zaXRpb24xJiBzdGFydFBvc2l0aW9uID0gSFRNTFBvc2l0
aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgICAgIDogbV9zb3VyY2Uoc291cmNlKQogICAg
ICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCiAgICAgICAgICwgbV91cmwodXJsKQotICAgICAgICAs
IG1fc3RhcnRMaW5lKHN0YXJ0TGluZSkKKyAgICAgICAgLCBtX3N0YXJ0UG9zaXRpb24oc3RhcnRQ
b3NpdGlvbikKICAgICB7CiAgICAgfQogCkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgOiBtX3NvdXJjZShjcy0+c2NyaXB0KCkpCiAgICAgICAgICwgbV9jYWNoZWRTY3JpcHQoY3Mp
CiAgICAgICAgICwgbV91cmwoUGFyc2VkVVJMU3RyaW5nLCBjcy0+dXJsKCkpCi0gICAgICAgICwg
bV9zdGFydExpbmUoMSkKKyAgICAgICAgLCBtX3N0YXJ0UG9zaXRpb24oSFRNTFBvc2l0aW9uMTo6
bWluaW11bVBvc2l0aW9uKCkpCiAgICAgewogICAgIH0KIApAQCAtNjMsMTMgKzY0LDE0IEBAIHB1
YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
OyB9CiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2Nh
Y2hlZFNjcmlwdC5nZXQoKTsgfQogICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsOyB9Ci0gICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5l
OyB9CisgICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRQb3NpdGlvbi5t
X2xpbmUub25lQmFzZWRJbnQoKTsgfQorICAgIGNvbnN0IEhUTUxQb3NpdGlvbjEmIHN0YXJ0UG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRpb247IH0KIAogcHJpdmF0ZToKICAg
ICBTdHJpbmcgbV9zb3VyY2U7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0
PiBtX2NhY2hlZFNjcmlwdDsKICAgICBLVVJMIG1fdXJsOwotICAgIGludCBtX3N0YXJ0TGluZTsK
KyAgICBIVE1MUG9zaXRpb24xIG1fc3RhcnRQb3NpdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0
ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCmlu
ZGV4IDdmMTNjNWE4ZmIyN2QzM2JiZjFkMzQxMGEwMTNlYmM3OTVkOTNkMjMuLjMxOTcwMDk1NjI0
NGNkZDI4ZDNiYzE0ODkyMzg1M2JlMTNmNzJjMGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OExhenlFdmVudExpc3RlbmVyLmNwcApAQCAtNDEsMTQgKzQxLDEzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotVjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5lcihjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNv
ZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVt
YmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKK1Y4TGF6eUV2ZW50
TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUs
IGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNl
VVJMLCBIVE1MUG9zaXRpb24wIHBvc2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdv
cmxkQ29udGV4dCkKICAgICA6IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKHRydWUsIHdvcmxkQ29u
dGV4dCkKICAgICAsIG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKICAgICAsIG1faXNTVkdF
dmVudChpc1NWR0V2ZW50KQogICAgICwgbV9jb2RlKGNvZGUpCiAgICAgLCBtX3NvdXJjZVVSTChz
b3VyY2VVUkwpCi0gICAgLCBtX2xpbmVOdW1iZXIobGluZU51bWJlcikKLSAgICAsIG1fY29sdW1u
TnVtYmVyKGNvbHVtbk51bWJlcikKKyAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiB7CiB9CiAK
QEAgLTExNCw3ICsxMTMsNyBAQCB2b2lkIFY4TGF6eUV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0
ZW5lck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIC8vIEluc2Vy
dCAnXG4nIG90aGVyd2lzZSAvLy1zdHlsZSBjb21tZW50cyBjb3VsZCBicmVhayB0aGUgaGFuZGxl
ci4KICAgICBjb2RlLmFwcGVuZCggICJcbn0pLmNhbGwodGhpcywgZXZ0KTt9fX19KSIpOwogICAg
IHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZUV4dGVybmFsU3RyaW5nID0gdjhFeHRlcm5hbFN0
cmluZyhjb2RlKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IFY4UHJveHk6
OmNvbXBpbGVTY3JpcHQoY29kZUV4dGVybmFsU3RyaW5nLCBtX3NvdXJjZVVSTCwgbV9saW5lTnVt
YmVyKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNvbXBp
bGVTY3JpcHQoY29kZUV4dGVybmFsU3RyaW5nLCBtX3NvdXJjZVVSTCwgbV9wb3NpdGlvbik7CiAg
ICAgaWYgKCFzY3JpcHQuSXNFbXB0eSgpKSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlID0gcHJveHktPnJ1blNjcmlwdChzY3JpcHQsIGZhbHNlKTsKICAgICAgICAgaWYgKCF2
YWx1ZS5Jc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVy
LmgKaW5kZXggZjE3NGQyM2JmMTMxYjAxMGVlNGY1OWJjNDI1MjdlZTg2NzRhMDYwOC4uOTY0NWI5
ZTZkOWQxMTVlMzRhNjA4Yzc1MTJjNGQ3ZDAwNzNhMjlhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOExhenlFdmVudExpc3RlbmVyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSFRNTFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsOSArNDYsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gQSBWOExhenlFdmVudExpc3RlbmVyIGlzIGFsd2F5
cyBhIEhUTUwgZXZlbnQgaGFuZGxlci4KICAgICBjbGFzcyBWOExhenlFdmVudExpc3RlbmVyIDog
cHVibGljIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29u
c3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9u
TmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMLCBIVE1MUG9zaXRpb24wIHBvc2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRIYW5k
bGUmIHdvcmxkQ29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBWOExhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgaXNTVkdFdmVudCwgY29kZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHdvcmxkQ29udGV4dCkpOworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9u
TmFtZSwgaXNTVkdFdmVudCwgY29kZSwgc291cmNlVVJMLCBwb3NpdGlvbiwgd29ybGRDb250ZXh0
KSk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMYXp5KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQpAQCAtNTYsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlTGlzdGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVjhMYXp5RXZlbnRMaXN0ZW5lcihjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNv
ZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVt
YmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCk7CisgICAgICAgIFY4
TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdF
dmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBIVE1MUG9z
aXRpb24wIHBvc2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCk7
CiAKICAgICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZl
bnQsIEV2ZW50Kik7CiAKQEAgLTcwLDggKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBib29sIG1faXNTVkdFdmVudDsKICAgICAgICAgU3RyaW5nIG1fY29kZTsKICAgICAgICAg
U3RyaW5nIG1fc291cmNlVVJMOwotICAgICAgICBpbnQgbV9saW5lTnVtYmVyOwotICAgICAgICBp
bnQgbV9jb2x1bW5OdW1iZXI7CisgICAgICAgIEhUTUxQb3NpdGlvbjAgbV9wb3NpdGlvbjsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRl
eCBhNzc2ZWU3ZDczZmI5MmQ0ODZlNjc3ZDA4NWRhZTE2Mzc5N2RiODRkLi5mNGVmMDRjYWI1NWFm
NDMyZTMwNGI2ZjJmZTRiNmRjN2IzNzgzZjBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAg
LTIzOCwxMiArMjM4LDE1IEBAIFY4UHJveHk6On5WOFByb3h5KCkKICAgICB3aW5kb3dTaGVsbCgp
LT5kZXN0cm95R2xvYmFsKCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94eTo6
Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUsIGludCBiYXNlTGluZSwgdjg6OlNjcmlwdERhdGEqIHNjcmlwdERhdGEpCit2ODo6
SGFuZGxlPHY4OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6
U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBIVE1MUG9zaXRpb24wIHNjcmlw
dFN0YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHREYXRhKiBzY3JpcHREYXRhKQogewogICAgIGNvbnN0
IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsK
LSAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG5hbWUgPSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5h
bWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2Vy
PiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhiYXNlTGluZSk7Ci0gICAgdjg6OlNjcmlwdE9yaWdp
biBvcmlnaW4obmFtZSwgbGluZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBuYW1lOwor
ICAgIGlmICghc2NyaXB0U3RhcnRQb3NpdGlvbi5tX2dlbmVyYXRpb24pCisgICAgICAgIG5hbWUg
PSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5hbWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgpKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhzY3JpcHRT
dGFydFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6
SW50ZWdlcj4gY29sdW1uID0gdjg6OkludGVnZXI6Ok5ldyhzY3JpcHRTdGFydFBvc2l0aW9uLm1f
Y29sdW1uLnplcm9CYXNlZEludCgpKTsKKyAgICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihuYW1l
LCBsaW5lLCBjb2x1bW4pOwogICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gdjg6
OlNjcmlwdDo6Q29tcGlsZShjb2RlLCAmb3JpZ2luLCBzY3JpcHREYXRhKTsKICAgICByZXR1cm4g
c2NyaXB0OwogfQpAQCAtMzk5LDcgKzQwMiw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJv
eHk6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZSwgTm9kZSogbm9kCiAK
ICAgICAgICAgLy8gTk9URTogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBXZWJDb3JlLCBTY3JpcHRT
b3VyY2VDb2RlJ3MgbGluZSBzdGFydHMgYXQKICAgICAgICAgLy8gMSwgd2hlcmVhcyB2OCBzdGFy
dHMgYXQgMC4KLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21waWxl
U2NyaXB0KGNvZGUsIHNvdXJjZS51cmwoKSwgc291cmNlLnN0YXJ0TGluZSgpIC0gMSwgc2NyaXB0
RGF0YS5nZXQoKSk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gY29t
cGlsZVNjcmlwdChjb2RlLCBzb3VyY2UudXJsKCksIFdURjo6dG9aZXJvQmFzZWRIVE1MUG9zaXRp
b24oc291cmNlLnN0YXJ0UG9zaXRpb24oKSksIHNjcmlwdERhdGEuZ2V0KCkpOwogI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQogICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6dHJhY2VFdmVudEVuZCgidjgu
Y29tcGlsZSIsIG5vZGUsICIiKTsKIApAQCAtNDM0LDcgKzQzNyw3IEBAIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCwg
Ym9vbCBpc0luCiAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBzaG91bGQgYmUgYWJsZSB0
byByZS11c2UgdGhlIG9yaWdpbiBvZiB0aGUKICAgICAgICAgLy8gc2NyaXB0IHBhc3NlZCB0byB1
cyBhcyB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiB1c2luZyBhbiBlbXB0eSBzdHJpbmcKICAgICAg
ICAgLy8gYW5kIDAgYmFzZUxpbmUuCi0gICAgICAgIHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29k
ZSwgIiIsIDApOworICAgICAgICBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsICIiLCBIVE1M
UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKGhhbmRsZU91
dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCmluZGV4IDdiNGQ2ZjZjZGU5MTkxMGQxNDYz
NmM3MzY0MzcyMzJmNDNmMmU5YTQuLjUxNzg0MTVlNzBkMDFiMzdiYjFlMWE3MWVmNTcyNTY0NTQ3
YjlkMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCkBAIC0yODgsNyArMjg4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2hlY2tO
ZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRzJik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUs
IGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgdjg6OlNjcmlwdERhdGEqID0g
MCk7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQo
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBIVE1M
UG9zaXRpb24wIHNjcmlwdFN0YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHREYXRhKiA9IDApOwogCiAg
ICAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gY29kZSBpcyBkaWZmZXJlbnQgZnJvbSB6ZXJvLCBh
IERPTSBleGNlcHRpb24gaXMKICAgICAgICAgLy8gc2NoZWR1bGUgdG8gYmUgdGhyb3duLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3Bw
CmluZGV4IDE2ZTBiNDEwMWVmZGMzNWFlNzQ0MTgxN2IwNjg3ZGI2YjVhNjVhMjUuLmRlMjNhMTE2
MTkzODFjOWViMDg2ODJjMjE1NWYzNWNmMTUyMTQwY2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTE4NCw3ICsxODQs
NyBAQCBib29sIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVj
dChFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TY3JpcHRWYWx1ZSBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIFdvcmtlckNvbnRleHRFeGVjdXRp
b25TdGF0ZSogc3RhdGUpCitTY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBI
VE1MUG9zaXRpb24wIHNjcmlwdFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25T
dGF0ZSogc3RhdGUpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhzOwogCkBAIC0xOTYsNyArMTk2
LDcgQEAgU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShj
b25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3QKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9u
Q2F0Y2hlcjsKIAogICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBzY3JpcHRTdHJpbmcgPSB2OEV4
dGVybmFsU3RyaW5nKHNjcmlwdCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxl
ZFNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwg
YmFzZUxpbmUpOworICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBW
OFByb3h5Ojpjb21waWxlU2NyaXB0KHNjcmlwdFN0cmluZywgZmlsZU5hbWUsIHNjcmlwdFN0YXJ0
UG9zaXRpb24pOwogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IHJ1blNjcmlwdChj
b21waWxlZFNjcmlwdCk7CiAKICAgICBpZiAoIWV4Y2VwdGlvbkNhdGNoZXIuQ2FuQ29udGludWUo
KSkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHk6OnJ1blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTY3JpcAogICAgIC8vIENv
bXB1dGUgdGhlIHNvdXJjZSBzdHJpbmcgYW5kIHByZXZlbnQgYWdhaW5zdCBpbmZpbml0ZSByZWN1
cnNpb24uCiAgICAgaWYgKG1fcmVjdXJzaW9uID49IGtNYXhSZWN1cnNpb25EZXB0aCkgewogICAg
ICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gY29kZSA9IHY4RXh0ZXJuYWxTdHJpbmcoInRocm93
IFJhbmdlRXJyb3IoJ1JlY3Vyc2lvbiB0b28gZGVlcCcpIik7Ci0gICAgICAgIHNjcmlwdCA9IFY4
UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZSwgIiIsIDApOworICAgICAgICBzY3JpcHQgPSBWOFBy
b3h5Ojpjb21waWxlU2NyaXB0KGNvZGUsICIiLCBIVE1MUG9zaXRpb24wOjptaW5pbXVtUG9zaXRp
b24oKSk7CiAgICAgfQogCiAgICAgaWYgKFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaApp
bmRleCA1ODgyNGI5ZWVmNmY0OTE0MDg0Yzc3NzE2MWUyM2Y2ZTMwYWJlMjgzLi5kN2ZmYjBjODAy
Y2I2NmJhZDc2YmIzZWQxNWUwZjBlOTAxNGIzMTgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKQEAgLTM2LDYgKzM2LDcgQEAKIAog
I2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYv
SFRNTFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIApAQCAtNjYsNyArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgdHJhY2tFdmVudChFdmVudCopOwogCiAgICAgICAgIC8vIEV2YWx1YXRlIGEgc2NyaXB0
IGZpbGUgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LgotICAgICAgICBTY3Jp
cHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgaW50IGJhc2VMaW5lLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqKTsKKyAgICAg
ICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIEhUTUxQb3NpdGlvbjAgc2NyaXB0U3RhcnRQb3NpdGlvbiwgV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblN0YXRlKik7CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRs
ZSBvZiB0aGUgY29udGV4dC4KICAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0
KCkgeyByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7IH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDdk
YjBkOGQzNzM3MDliMmU5NzNiNjdlNzcyM2U0ZmMzMTFmYmNhNTkuLjgwYWVjMzFmZmZlYzgyZTgx
ZmU5M2E4ZWVkODJmYTAzODcyOWI2ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNzUsNyArNzUsNyBAQCBTY3JpcHRWYWx1ZSBXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3Vy
Y2VDb2RlLAogICAgIH0KIAogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsK
LSAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNv
dXJjZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgp
IC0gMSwgJnN0YXRlKTsKKyAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0
ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBXVEY6OnRv
WmVyb0Jhc2VkSFRNTFBvc2l0aW9uKHNvdXJjZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwgJnN0YXRl
KTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24p
CiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gc3RhdGUuZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0
LmNwcAppbmRleCA0MmUyMjVhN2YzMmExYjBjZGMxYmMzNDUxYjY1NDk3YTQ2MTM1Njg5Li43NGM1
NzkxZTNiMmRlZmE3MjQ3YWU1YTBlZTkzNDJjMjgyN2QxOWUxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9QZW5kaW5nU2NyaXB0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNw
cApAQCAtNDAsNyArNDAsNyBAQCBQZW5kaW5nU2NyaXB0Ojp+UGVuZGluZ1NjcmlwdCgpCiBQYXNz
UmVmUHRyPEVsZW1lbnQ+IFBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKQog
ewogICAgIHNldENhY2hlZFNjcmlwdCgwKTsKLSAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IDA7
CisgICAgbV9zdGFydGluZ1Bvc2l0aW9uID0gSFRNTFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0
aW9uKCk7CiAgICAgbV93YXRjaGluZ0ZvckxvYWQgPSBmYWxzZTsKICAgICByZXR1cm4gbV9lbGVt
ZW50LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQu
aCBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCA0NGUxZTQ5Mjg2NzZkNzk2MDIy
ZGQyOTA1NDU3NjAxNWI3YTI2ZTQ0Li5kMmFlNDI4ZDVmNmEyOGFjYjlhYzRmYTY0ODEyM2Y1OGUx
ZDcxZTJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKKysrIGIvV2Vi
Q29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgi
CisjaW5jbHVkZSA8d3RmL0hUTUxQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDE0ICs0NCwxNCBAQCBjbGFzcyBFbGVt
ZW50OwogY2xhc3MgUGVuZGluZ1NjcmlwdCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7
CiBwdWJsaWM6CiAgICAgUGVuZGluZ1NjcmlwdCgpCi0gICAgICAgIDogbV9zdGFydGluZ0xpbmVO
dW1iZXIoMCkKKyAgICAgICAgOiBtX3N0YXJ0aW5nUG9zaXRpb24oSFRNTFBvc2l0aW9uMTo6YmVs
b3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgICAgICwgbV93YXRjaGluZ0ZvckxvYWQoZmFsc2UpCiAg
ICAgewogICAgIH0KIAogICAgIFBlbmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1NjcmlwdCYgb3Ro
ZXIpCiAgICAgICAgIDogQ2FjaGVkUmVzb3VyY2VDbGllbnQob3RoZXIpCi0gICAgICAgICwgbV9z
dGFydGluZ0xpbmVOdW1iZXIob3RoZXIubV9zdGFydGluZ0xpbmVOdW1iZXIpCisgICAgICAgICwg
bV9zdGFydGluZ1Bvc2l0aW9uKG90aGVyLm1fc3RhcnRpbmdQb3NpdGlvbikKICAgICAgICAgLCBt
X3dhdGNoaW5nRm9yTG9hZChvdGhlci5tX3dhdGNoaW5nRm9yTG9hZCkKICAgICAgICAgLCBtX2Vs
ZW1lbnQob3RoZXIubV9lbGVtZW50KQogICAgIHsKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgog
ICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAK
LSAgICAgICAgbV9zdGFydGluZ0xpbmVOdW1iZXIgPSBvdGhlci5tX3N0YXJ0aW5nTGluZU51bWJl
cjsKKyAgICAgICAgbV9zdGFydGluZ1Bvc2l0aW9uID0gb3RoZXIubV9zdGFydGluZ1Bvc2l0aW9u
OwogICAgICAgICBtX3dhdGNoaW5nRm9yTG9hZCA9IG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkOwog
ICAgICAgICBtX2VsZW1lbnQgPSBvdGhlci5tX2VsZW1lbnQ7CiAgICAgICAgIHNldENhY2hlZFNj
cmlwdChvdGhlci5jYWNoZWRTY3JpcHQoKSk7CkBAIC03NCw3ICs3NSw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIEZJWE1FOiBObyBzZXR0ZXIgbWVhbnMgdGhpcyBpcyBuZXZlciBzZXQgdG8gYW55dGhp
bmcgb3RoZXIgdGhhbiAwLgogICAgIC8vIFRoaXMgaXMgZWl0aGVyIHVubmVjZXNzYXJ5IG9yIGlu
Y29ycmVjdC4KLSAgICBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydGluZ0xpbmVOdW1iZXI7IH0KKyAgICBIVE1MUG9zaXRpb24xIHN0YXJ0aW5nUG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5nUG9zaXRpb247IH0KIAogICAgIGJvb2wgd2F0Y2hp
bmdGb3JMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93YXRjaGluZ0ZvckxvYWQ7IH0KICAgICB2b2lk
IHNldFdhdGNoaW5nRm9yTG9hZChib29sIGIpIHsgbV93YXRjaGluZ0ZvckxvYWQgPSBiOyB9CkBA
IC04OSw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQo
Q2FjaGVkUmVzb3VyY2UqKTsKIAogcHJpdmF0ZToKLSAgICBpbnQgbV9zdGFydGluZ0xpbmVOdW1i
ZXI7IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgorICAgIEhUTUxQb3NpdGlv
bjEgbV9zdGFydGluZ1Bvc2l0aW9uOyAvLyBPbmx5IHVzZWQgZm9yIGlubGluZSBzY3JpcHQgdGFn
cy4KICAgICBib29sIG1fd2F0Y2hpbmdGb3JMb2FkOwogICAgIFJlZlB0cjxFbGVtZW50PiBtX2Vs
ZW1lbnQ7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNj
cmlwdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5o
IGIvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgKaW5kZXggOGIxNjMwNDEy
MTA0ZTRlNDVhMDEzMjNkZDIyNTVlNjU2NGUzNDA0NS4uZjlmMmY0NzE2MzFhYzhlY2YyZmEyZDI0
YWVmYTg4NTEzYmMxZjljZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3Vt
ZW50UGFyc2VyLmgKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgK
QEAgLTI3LDEwICsyNywxMCBAQAogI2RlZmluZSBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXJfaAog
CiAjaW5jbHVkZSAiRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9I
VE1MUG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTZWdtZW50ZWRT
dHJpbmc7CiBjbGFzcyBYU1NBdWRpdG9yOwogCiBjbGFzcyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIgOiBwdWJsaWMgRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlciB7CkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIFRoZXNlIGFyZSB1c2VkIHRvIGV4cG9zZSB0aGUgY3VycmVudCBs
aW5lL2NvbHVtbiB0byB0aGUgc2NyaXB0aW5nIHN5c3RlbS4KICAgICB2aXJ0dWFsIGludCBsaW5l
TnVtYmVyKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIEhUTUxQb3NpdGlvbjAgaHRtbFBvc2l0aW9uKCkgY29uc3QgPSAw
OwogCiAgICAgWFNTQXVkaXRvciogeHNzQXVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1feHNzQXVk
aXRvcjsgfQogICAgIHZvaWQgc2V0WFNTQXVkaXRvcihYU1NBdWRpdG9yKiBhdWRpdG9yKSB7IG1f
eHNzQXVkaXRvciA9IGF1ZGl0b3I7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTERvY3Vt
ZW50UGFyc2VyLmggYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGUwNzcw
YmFkYmFmZjdiYTExMDIwYWRkYzcxMjQ5ZWYzZGVjODIwZDQuLmY4ZmRlMjM5NmM3Zjk4MmU2OTEy
ZTE1ZDdmZGU3NTAxYzdiYzNhNDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50
UGFyc2VyLmgKKysrIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMTAyLDcg
KzEwMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV01MRXJyb3JIYW5kbGlu
ZyB1c2VzIHRoZXNlIGZ1bmN0aW9ucy4KICAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQo
KSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQogICAgICAgICB2aXJ0dWFsIGludCBsaW5l
TnVtYmVyKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0
OworICAgICAgICBIVE1MUG9zaXRpb24wIGh0bWxQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgICAg
IHN0YXRpYyBib29sIHN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKIApAQCAtMTI5
LDYgKzEyOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGFwcGVuZEZy
YWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYpOwogCisgICAgICAgIGludCBjb2x1bW5OdW1iZXIo
KSBjb25zdDsKKwogI2lmIFVTRShRWE1MU1RSRUFNKQogcHJpdmF0ZToKICAgICAgICAgdm9pZCBw
YXJzZSgpOwpAQCAtMjA4LDcgKzIxMCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKICAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVudDsKLSAgICAgICAgaW50IG1fc2NyaXB0U3RhcnRMaW5l
OworICAgICAgICBIVE1MUG9zaXRpb24xIG1fc2NyaXB0U3RhcnRQb3NpdGlvbjsKIAogICAgICAg
ICBib29sIG1fcGFyc2luZ0ZyYWdtZW50OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0
TmFtZXNwYWNlVVJJOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJM
aWJ4bWwyLmNwcCBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5k
ZXggNTUzOTA3MmVlNThjYmEwMTVmM2I2Y2U1ZDQ0Y2NiNzFkYjNmMTVmYi4uYWU5OWMyMGE0ZTY3
MDliMmVjYjU3NTY3YmExMTlkNjQwYjM2OGJjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1M
RG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwCkBAIC01NTgsNyArNTU4LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhN
TERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcp
CiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAg
ICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAg
LCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oSFRNTFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9u
KCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVy
bWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiB7CkBAIC01ODUsNyArNTg1LDcgQEAg
WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZy
YWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwg
bV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9z
Y3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihIVE1MUG9zaXRp
b24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUp
CiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKIHsKQEAg
LTgxNyw3ICs4MTcsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhj
b25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYQogCiAgICAgU2NyaXB0RWxl
bWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsK
ICAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5l
TnVtYmVyKCk7CisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRvT25lQmFzZWRIVE1M
UG9zaXRpb24oaHRtbFBvc2l0aW9uKCkpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+ZGVwcmVjYXRl
ZFBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwogCkBAIC05MDMsNyArOTAzLDcgQEAg
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3Jp
cHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+
dXJsKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCkt
PnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+
c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9u
KSk7CiAKICAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2Vy
CiAgICAgICAgIGlmIChpc0RldGFjaGVkKCkpCkBAIC0xMzY5LDEyICsxMzY5LDI2IEBAIHZvaWQq
IHhtbERvY1B0ckZvclN0cmluZyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VM
b2FkZXIsIGNvbnN0IFN0cmluCiAKIGludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUg
OiAxOworICAgIC8vIEZJWE1FOiB0aGUgaW1wbGVtZW50YXRpb24gcHJvYmFibHkgcmV0dXJucyAx
LWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0dXJuIDAtYmFzZWQuCisgICAgLy8gICBO
ZXcgIi0gMSIgZml4ZXMgdGhpcy4gSXMgaXQgY29ycmVjdD8KKyAgICByZXR1cm4gKGNvbnRleHQo
KSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxKSAtIDE7CiB9CiAKIGludCBYTUxEb2N1bWVu
dFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29udGV4dCgpID8g
Y29udGV4dCgpLT5pbnB1dC0+Y29sIDogMTsKKyAgICAvLyBGSVhNRTogdGhlIGltcGxlbWVudGF0
aW9uIHByb2JhYmx5IHJldHVybnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVy
biAwLWJhc2VkLgorICAgIC8vICAgTmV3ICItIDEiIGZpeGVzIHRoaXMuIElzIGl0IGNvcnJlY3Q/
CisgICAgcmV0dXJuICAoY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+Y29sIDogMSkgLSAx
OworfQorCitIVE1MUG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjpodG1sUG9zaXRpb24oKSBj
b25zdAoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsK
KyAgICBpZiAoY29udGV4dCkgeworICAgICAgICByZXR1cm4gSFRNTFBvc2l0aW9uMChXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmxpbmUpLmNvbnZl
cnRUb1plcm9CYXNlZCgpLAorICAgICAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9u
ZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wpLmNvbnZlcnRUb1plcm9CYXNlZCgpLCAwKTsK
KyAgICB9CisgICAgcmV0dXJuIEhUTUxQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOwogfQog
CiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50
UGFyc2VyUXQuY3BwCmluZGV4IDc1YTIwYmUzNTQxY2Y1MjdlZTU0OTg0ZDIxNDgyODFhZDA4MjRm
NjQuLmNiMGUxMjZhZWRmMjM3YjM5NWZkNDJiMjliZWIyOGRmNzc1YmE4OTIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgWE1MRG9jdW1lbnRQYXJz
ZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcpCiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1u
KDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDAp
CisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oSFRNTFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBv
c2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0
aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiB7CkBAIC0xMzAsNyArMTMw
LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQog
ICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAg
ICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihIVE1M
UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50
KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24ocGVybWlzc2lvbikKIHsKQEAgLTIz
Miw2ICsyMzIsMTEgQEAgaW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25z
dAogICAgIHJldHVybiBtX3N0cmVhbS5jb2x1bW5OdW1iZXIoKTsKIH0KIAorSFRNTFBvc2l0aW9u
MCBYTUxEb2N1bWVudFBhcnNlcjo6aHRtbFBvc2l0aW9uKCkKK3sKKyAgICByZXR1cm4gSFRNTFBv
c2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcihsaW5lTnVtYmVyKCkpLCBXVEY6Olplcm9CYXNl
ZE51bWJlcihjb2x1bW5OdW1iZXIoKSksIDApOworfQorCiB2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpzdG9wUGFyc2luZygpCiB7CiAgICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpzdG9wUGFy
c2luZygpOwpAQCAtNTE2LDcgKzUyMSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNl
U3RhcnRFbGVtZW50KCkKIAogICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1Nj
cmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKHNjcmlwdEVsZW1lbnQpCi0g
ICAgICAgIG1fc2NyaXB0U3RhcnRMaW5lID0gbGluZU51bWJlcigpOworICAgICAgICBtX3Njcmlw
dFN0YXJ0UG9zaXRpb24gPSBXVEY6OnRvT25lQmFzZWRIVE1MUG9zaXRpb24oaHRtbFBvc2l0aW9u
KCkpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKG5ld0Vs
ZW1lbnQuZ2V0KCkpOwogCkBAIC01ODgsNyArNTkzLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6cGFyc2VFbmRFbGVtZW50KCkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3
LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlw
dEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3Rh
cnRMaW5lKSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRl
U2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBk
b2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CiAgICAgfQogICAgIG1f
cmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIHBvcEN1cnJlbnROb2RlKCk7CkBAIC03MDks
NCArNzE0LDMgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEdGQoKQogCiB9CiB9Ci0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBi
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCAzMjVkN2Ez
NzRmODU0ZDcyNjQ3NGIxNzM3ZDUwMTcwMzNmYjA2MTAwLi5lZDAyMzRkMzExMWQ2NDUxOGQ1ODIz
YzY2MDJlNTMzYjk2NzAyNzU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3Vt
ZW50UGFyc2VyKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzCiAgICAg
OiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCiAgICAgLCBtX3Rva2VuaXplcihI
VE1MVG9rZW5pemVyOjpjcmVhdGUoKSkKICAgICAsIG1fc2NyaXB0UnVubmVyKEhUTUxTY3JpcHRS
dW5uZXI6OmNyZWF0ZShkb2N1bWVudCwgdGhpcykpCi0gICAgLCBtX3RyZWVCdWlsZGVyKEhUTUxU
cmVlQnVpbGRlcjo6Y3JlYXRlKG1fdG9rZW5pemVyLmdldCgpLCBkb2N1bWVudCwgcmVwb3J0RXJy
b3JzKSkKKyAgICAsIG1fdHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUobV90b2tl
bml6ZXIuZ2V0KCksIHRoaXMsIGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKQogICAgICwgbV9wYXJz
ZXJTY2hlZHVsZXIoSFRNTFBhcnNlclNjaGVkdWxlcjo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9l
bmRXYXNEZWxheWVkKGZhbHNlKQogICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgwKQpAQCAtOTMs
NyArOTMsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycwogSFRNTERvY3VtZW50UGFyc2VyOjpI
VE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIGNv
bnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlz
c2lvbikKICAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+ZG9jdW1lbnQo
KSkKICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSgpKQotICAgICwgbV90
cmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZShtX3Rva2VuaXplci5nZXQoKSwgZnJh
Z21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKKyAgICAsIG1fdHJl
ZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUobV90b2tlbml6ZXIuZ2V0KCksIHRoaXMs
IGZyYWdtZW50LCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbikpCiAgICAgLCBt
X2VuZFdhc0RlbGF5ZWQoZmFsc2UpCiAgICAgLCBtX3dyaXRlTmVzdGluZ0xldmVsKDApCiB7CkBA
IC0xOTMsMTIgKzE5MywxMiBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0Zv
clBhdXNlZFRyZWVCdWlsZGVyKCkKIHsKICAgICBBU1NFUlQobV90cmVlQnVpbGRlci0+aXNQYXVz
ZWQoKSk7CiAKLSAgICBpbnQgc2NyaXB0U3RhcnRMaW5lID0gMDsKLSAgICBSZWZQdHI8RWxlbWVu
dD4gc2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2Ny
aXB0U3RhcnRMaW5lKTsKKyAgICBIVE1MUG9zaXRpb24xIHNjcmlwdFN0YXJ0UG9zaXRpb24gPSBI
VE1MUG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKKyAgICBSZWZQdHI8RWxlbWVudD4g
c2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2NyaXB0
U3RhcnRQb3NpdGlvbik7CiAgICAgLy8gV2Ugd2lsbCBub3QgaGF2ZSBhIHNjcmlwdFJ1bm5lciB3
aGVuIHBhcnNpbmcgYSBEb2N1bWVudEZyYWdtZW50LgogICAgIGlmICghbV9zY3JpcHRSdW5uZXIp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0
ZShzY3JpcHRFbGVtZW50LnJlbGVhc2UoKSwgc2NyaXB0U3RhcnRMaW5lKTsKKyAgICByZXR1cm4g
bV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVudC5yZWxlYXNlKCksIHNjcmlwdFN0
YXJ0UG9zaXRpb24pOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXpl
cihTeW5jaHJvbm91c01vZGUgbW9kZSkKQEAgLTQxNCw5ICs0MTQsMTQgQEAgaW50IEhUTUxEb2N1
bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fdG9rZW5pemVyLT5s
aW5lTnVtYmVyKCk7CiB9CiAKLWludCBIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigp
IGNvbnN0CitIVE1MUG9zaXRpb24wIEhUTUxEb2N1bWVudFBhcnNlcjo6aHRtbFBvc2l0aW9uKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV90b2tlbml6ZXItPmNvbHVtbk51bWJlcigpOworICAgIGlu
dCBsaW5lID0gbV9pbnB1dC5jdXJyZW50KCkuY3VycmVudExpbmUoKTsKKyAgICBpbnQgY29sdW1u
ID0gbV9pbnB1dC5jdXJyZW50KCkuY3VycmVudENvbHVtbigpOworICAgIGludCBnZW5lcmF0aW9u
ID0gbV93cml0ZU5lc3RpbmdMZXZlbDsKKworICAgIHJldHVybiBIVE1MUG9zaXRpb24wKFdURjo6
WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxpbmUpLAorICAgICAgICBXVEY6Olpl
cm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb2x1bW4pLCBnZW5lcmF0aW9uKTsKIH0K
IAogYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZTFmMmVmZTI0ZjEz
ODg1YmZlNDZlMjk4MGNkYTJjMzI1MzE4Y2UwMi4uMTFmMjgxYTVhNzQ4NDNlNWE5NzZjODM5OTdh
MDZmOTM2OTFjYzYwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5o
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0U3RyZWFtLmgiCiAjaW5jbHVk
ZSAiSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCIKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKKyNpbmNs
dWRlICJIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIuaCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJUaW1lci5oIgpA
QCAtNDQsMTIgKzQ1LDExIEBAIGNsYXNzIEhUTUxEb2N1bWVudDsKIGNsYXNzIEhUTUxQYXJzZXJT
Y2hlZHVsZXI7CiBjbGFzcyBIVE1MVG9rZW5pemVyOwogY2xhc3MgSFRNTFNjcmlwdFJ1bm5lcjsK
LWNsYXNzIEhUTUxUcmVlQnVpbGRlcjsKIGNsYXNzIEhUTUxQcmVsb2FkU2Nhbm5lcjsKIGNsYXNz
IFNjcmlwdENvbnRyb2xsZXI7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogCi1jbGFzcyBIVE1M
RG9jdW1lbnRQYXJzZXIgOiAgcHVibGljIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciwgSFRNTFNj
cmlwdFJ1bm5lckhvc3QsIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK2NsYXNzIEhUTUxEb2N1bWVu
dFBhcnNlciA6ICBwdWJsaWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBIVE1MU2NyaXB0UnVu
bmVySG9zdCwgQ2FjaGVkUmVzb3VyY2VDbGllbnQsIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFBvc2l0
aW9uUHJvdmlkZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxEb2N1bWVu
dFBhcnNlcj4gY3JlYXRlKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3Jz
KQogICAgIHsKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNF
eGVjdXRpbmdTY3JpcHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdHNX
YWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBI
VE1MUG9zaXRpb24wIGh0bWxQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgLy8gSFRNTFNjcmlwdFJ1
bm5lckhvc3QKICAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oIGIvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MSW5wdXRTdHJlYW0uaAppbmRleCBhNzA5YmQ5YmQ1YjIxZDEx
N2VlZmE0NTEyODhiMjZiMGZiNzk0MWY0Li4zYjlhNGM2NTk4ODM4YzVmNzEwYmEwYzYzMWM2NmRm
MTM0YWVhNjNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVh
bS5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKQEAgLTk0LDYg
Kzk0LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFNlZ21lbnRlZFN0cmluZyYgY3VycmVudCgp
IHsgcmV0dXJuIG1fZmlyc3Q7IH0KKyAgICBjb25zdCBTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQo
KSBjb25zdCB7IHJldHVybiBtX2ZpcnN0OyB9CiAKICAgICB2b2lkIHNwbGl0SW50byhTZWdtZW50
ZWRTdHJpbmcmIG5leHQpCiAgICAgewpAQCAtMTMzLDE3ICsxMzQsMjQgQEAgcHVibGljOgogICAg
IGV4cGxpY2l0IEluc2VydGlvblBvaW50UmVjb3JkKEhUTUxJbnB1dFN0cmVhbSYgaW5wdXRTdHJl
YW0pCiAgICAgICAgIDogbV9pbnB1dFN0cmVhbSgmaW5wdXRTdHJlYW0pCiAgICAgeworICAgICAg
ICBtX2xpbmUgPSBtX2lucHV0U3RyZWFtLT5jdXJyZW50KCkuY3VycmVudExpbmUoKTsKKyAgICAg
ICAgbV9jb2x1bW4gPSBtX2lucHV0U3RyZWFtLT5jdXJyZW50KCkuY3VycmVudENvbHVtbigpOwog
ICAgICAgICBtX2lucHV0U3RyZWFtLT5zcGxpdEludG8obV9uZXh0KTsKKyAgICAgICAgLy8gR2Vu
ZXJhdGVkIHNjcmlwdCBwYXJ0IGluaGVyaXRzIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgIG1f
aW5wdXRTdHJlYW0tPmN1cnJlbnQoKS5zZXRDdXJyZW50UG9zaXRpb24obV9saW5lLCBtX2NvbHVt
bik7CiAgICAgfQogCiAgICAgfkluc2VydGlvblBvaW50UmVjb3JkKCkKICAgICB7CiAgICAgICAg
IG1faW5wdXRTdHJlYW0tPm1lcmdlRnJvbShtX25leHQpOworICAgICAgICBtX2lucHV0U3RyZWFt
LT5jdXJyZW50KCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fbGluZSwgbV9jb2x1bW4pOwogICAgIH0K
IAogcHJpdmF0ZToKICAgICBIVE1MSW5wdXRTdHJlYW0qIG1faW5wdXRTdHJlYW07CiAgICAgU2Vn
bWVudGVkU3RyaW5nIG1fbmV4dDsKKyAgICBpbnQgbV9saW5lOworICAgIGludCBtX2NvbHVtbjsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5jcHAgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IDRm
NTRmNDI5Mjg3MGFjZDUzODU0ZmM0NzEwODcwZGQ5ZGYxNGYyZDEuLjMzMmMyMWZkOTU2NGNlOWVk
NTY0NzViMDllMTFkNDdjMGUzM2U0OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmNwcApAQCAtOTgsNyArOTgsNyBAQCBTY3JpcHRTb3VyY2VDb2RlIEhUTUxTY3JpcHRS
dW5uZXI6OnNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KGNvbnN0IFBlbmRpbmdTY3JpcHQmCiAgICAg
ICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5jYWNoZWRTY3JpcHQoKSk7CiAgICAg
fQogICAgIGVycm9yT2NjdXJyZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gU2NyaXB0U291cmNlQ29k
ZShzY3JpcHQuZWxlbWVudCgpLT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4
ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0LnN0YXJ0aW5nTGluZU51bWJlcigpKTsKKyAgICBy
ZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVudCgpLT50ZXh0Q29udGVudCgpLCBk
b2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0LnN0YXJ0aW5n
UG9zaXRpb24oKSk7CiB9CiAKIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6aXNQZW5kaW5nU2NyaXB0
UmVhZHkoY29uc3QgUGVuZGluZ1NjcmlwdCYgc2NyaXB0KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAg
dm9pZCBIVE1MU2NyaXB0UnVubmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQm
IHBlbmRpbmdTY3JpcHQpCiAKIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hdGNoIDEwLjIuNS4x
MSAiQW4gZW5kIHRhZyB3aG9zZSB0YWcgbmFtZSBpcyAnc2NyaXB0JyIKIC8vIFNjcmlwdCBoYW5k
bGluZyBsaXZlcyBvdXRzaWRlIHRoZSB0cmVlIGJ1aWxkZXIgdG8ga2VlcCB0aGUgZWFjaCBjbGFz
cyBzaW1wbGUuCi1ib29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVt
ZW50PiBzY3JpcHRFbGVtZW50LCBpbnQgc3RhcnRMaW5lKQorYm9vbCBIVE1MU2NyaXB0UnVubmVy
OjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgSFRNTFBv
c2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVu
dCk7CiAgICAgLy8gRklYTUU6IElmIHNjcmlwdGluZyBpcyBkaXNhYmxlZCwgYWx3YXlzIGp1c3Qg
cmV0dXJuIHRydWU7CiAKICAgICAvLyBUcnkgdG8gZXhlY3V0ZSB0aGUgc2NyaXB0IGdpdmVuIHRv
IHVzLgotICAgIHJ1blNjcmlwdChzY3JpcHRFbGVtZW50LmdldCgpLCBzdGFydExpbmUpOworICAg
IHJ1blNjcmlwdChzY3JpcHRFbGVtZW50LmdldCgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAog
ICAgIGlmIChoYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkpIHsKICAgICAgICAgaWYgKG1fc2Ny
aXB0TmVzdGluZ0xldmVsKQpAQCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5l
cjo6cmVxdWVzdFBlbmRpbmdTY3JpcHQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCwgRWxl
bWVuCiAKIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IHRvIG1hdGNoIHRoZSBIVE1MNSBkZWZpbml0
aW9uIG9mICJydW5uaW5nIGEgc2NyaXB0IgogLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNydW5uaW5n
LWEtc2NyaXB0Ci12b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3Jp
cHQsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCit2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNj
cmlwdChFbGVtZW50KiBzY3JpcHQsIGNvbnN0IEhUTUxQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9z
aXRpb24pCiB7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEFTU0VSVCghaGF2ZVBhcnNp
bmdCbG9ja2luZ1NjcmlwdCgpKTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIEhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGludCBzdGFydGluZ0xpbmVOdW1iZXIp
CiAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQwMDQ3CiAgICAgICAgICAgICAvLyBBU1NFUlQoZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hl
ZXRzTG9hZGVkKCkpOwogICAgICAgICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwot
ICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRl
bnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHN0YXJ0aW5n
TGluZU51bWJlcik7CisgICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2Ny
aXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3Vt
ZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAgICAgICAgICAgICBleGVjdXRlU2NyaXB0KHNv
dXJjZUNvZGUpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU2NyaXB0UnVubmVyLmggYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRS
dW5uZXIuaAppbmRleCBiZTIxZGQyNDIxYjFkNDQyN2IwODQ3YjBiOTExYzFmZTk3YzZmNzY1Li40
MzY5YTVlMGNjZTdmOGMxY2I0ZGIwMGRlNzBkNzJhNWQyMTc2MWU4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiUGVu
ZGluZ1NjcmlwdC5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IVE1M
UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCkBAIC01Miw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFj
aCgpOwogCiAgICAgLy8gUHJvY2Vzc2VzIHRoZSBwYXNzZWQgaW4gc2NyaXB0IGFuZCBhbnkgcGVu
ZGluZyBzY3JpcHRzIGlmIHBvc3NpYmxlLgotICAgIGJvb2wgZXhlY3V0ZShQYXNzUmVmUHRyPEVs
ZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgaW50IHNjcmlwdFN0YXJ0TGluZSk7CisgICAgYm9vbCBl
eGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25zdCBIVE1MUG9z
aXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNX
YWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRp
bmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JT
dHlsZXNoZWV0czsgfQpAQCAtNzYsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVz
dERlZmVycmVkU2NyaXB0KEVsZW1lbnQqKTsKICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2NyaXB0
KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlwdChF
bGVtZW50KiwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgdm9pZCBydW5TY3JpcHQoRWxl
bWVudCosIGNvbnN0IEhUTUxQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAg
Ly8gSGVscGVycyBmb3IgZGVhbGluZyB3aXRoIEhUTUxTY3JpcHRSdW5uZXJIb3N0CiAgICAgdm9p
ZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCmluZGV4IGFmYWMyYTBkODA5ZjU0OWMzN2Y0NGJhODEyMDFkNjIwODEwNDZl
YzMuLjc5ZTllYTYzYzljNTE3ZTAyZjZlYWJlNGMzMTRmM2YwODllN2YxNTkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTQ5LDEyICs0OSwxNSBAQAogI2luY2x1
ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAiWE1M
TmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBpbnQgdW5p
bml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSA9IC0xOworc3RhdGljIGNvbnN0IEhUTUxQb3NpdGlv
bjAgdW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUwID0gSFRNTFBvc2l0aW9uMDo6YmVsb3dSYW5n
ZVBvc2l0aW9uKCk7CitzdGF0aWMgY29uc3QgSFRNTFBvc2l0aW9uMSB1bmluaXRpYWxpemVkUG9z
aXRpb25WYWx1ZTEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KC0xKSwgV1RG
OjpPbmVCYXNlZE51bWJlcjo6c19iYXNlLCAtMSk7CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTMyMyw3
ICszMjYsNyBAQCBwcml2YXRlOgogfTsKIAogCi1IVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVp
bGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgcmVwb3J0RXJyb3JzKQorSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRv
a2VuaXplciogdG9rZW5pemVyLCBIVE1MUG9zaXRpb25Qcm92aWRlciogaHRtbFBvc2l0aW9uUHJv
dmlkZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzKQogICAgIDog
bV9mcmFtZXNldE9rKHRydWUpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV90
cmVlKGRvY3VtZW50LCBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQsIGZhbHNlKQpAQCAtMzMzLDE0
ICszMzYsMTUgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXpl
ciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW4KICAgICAsIG1fb3JpZ2luYWxJbnNl
cnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zZWNvbmRhcnlJbnNlcnRpb25Nb2RlKElu
aXRpYWxNb2RlKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQotICAgICwgbV9zY3JpcHRU
b1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkK
KyAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRp
b25WYWx1ZTEpCisgICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbih1bmluaXRp
YWxpemVkUG9zaXRpb25WYWx1ZTApCisgICAgLCBtX2h0bWxQb3NpdGlvblByb3ZpZGVyKGh0bWxQ
b3NpdGlvblByb3ZpZGVyKQogewogfQogCiAvLyBGSVhNRTogTWVtYmVyIHZhcmlhYmxlcyBzaG91
bGQgYmUgZ3JvdXBlZCBpbnRvIHNlbGYtaW5pdGlhbGl6aW5nIHN0cnVjdHMgdG8KIC8vIG1pbmlt
aXplIGNvZGUgZHVwbGljYXRpb24gYmV0d2VlbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCi1IVE1MVHJl
ZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCitIVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxQb3NpdGlvblBy
b3ZpZGVyKiBodG1sUG9zaXRpb25Qcm92aWRlciwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQs
IEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2Ny
aXB0aW5nUGVybWlzc2lvbikKICAgICA6IG1fZnJhbWVzZXRPayh0cnVlKQogICAgICwgbV9mcmFn
bWVudENvbnRleHQoZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9u
KQogICAgICwgbV9kb2N1bWVudChtX2ZyYWdtZW50Q29udGV4dC5kb2N1bWVudCgpKQpAQCAtMzUx
LDggKzM1NSw5IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6
ZXIqIHRva2VuaXplciwgRG9jdW1lbnRGcmFnbWVudCogZnJhCiAgICAgLCBtX29yaWdpbmFsSW5z
ZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fc2Vjb25kYXJ5SW5zZXJ0aW9uTW9kZShJ
bml0aWFsTW9kZSkKICAgICAsIG1fdG9rZW5pemVyKHRva2VuaXplcikKLSAgICAsIG1fc2NyaXB0
VG9Qcm9jZXNzU3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCi0gICAgLCBt
X2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUp
CisgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24odW5pbml0aWFsaXplZFBvc2l0
aW9uVmFsdWUxKQorICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24odW5pbml0
aWFsaXplZFBvc2l0aW9uVmFsdWUwKQorICAgICwgbV9odG1sUG9zaXRpb25Qcm92aWRlcihodG1s
UG9zaXRpb25Qcm92aWRlcikKIHsKICAgICBpZiAoY29udGV4dEVsZW1lbnQpIHsKICAgICAgICAg
Ly8gU3RlcHMgNC4yLTQuNiBvZiB0aGUgSFRNTDUgRnJhZ21lbnQgQ2FzZSBwYXJzaW5nIGFsZ29y
aXRobToKQEAgLTQxMywxNSArNDE4LDE1IEBAIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJz
aW5nQ29udGV4dDo6fkZyYWdtZW50UGFyc2luZ0NvbnRleHQoKQogewogfQogCi1QYXNzUmVmUHRy
PEVsZW1lbnQ+IEhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhpbnQmIHNjcmlw
dFN0YXJ0TGluZSkKK1Bhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2Ny
aXB0VG9Qcm9jZXNzKEhUTUxQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CiAgICAg
Ly8gVW5wYXVzZSBvdXJzZWx2ZXMsIGNhbGxlcnMgbWF5IHBhdXNlIHVzIGFnYWluIHdoZW4gcHJv
Y2Vzc2luZyB0aGUgc2NyaXB0LgogICAgIC8vIFRoZSBIVE1MNSBzcGVjIGlzIHdyaXR0ZW4gYXMg
dGhvdWdoIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGluc2lkZSB0aGUgdHJlZQogICAgIC8vIGJ1aWxk
ZXIuICBXZSBwYXVzZSB0aGUgcGFyc2VyIHRvIGV4aXQgdGhlIHRyZWUgYnVpbGRlciwgYW5kIHRo
ZW4gcmVzdW1lCiAgICAgLy8gYmVmb3JlIHJ1bm5pbmcgc2NyaXB0cy4KICAgICBtX2lzUGF1c2Vk
ID0gZmFsc2U7Ci0gICAgc2NyaXB0U3RhcnRMaW5lID0gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExp
bmU7Ci0gICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUgPSB1bmluaXRpYWxpemVkTGluZU51
bWJlclZhbHVlOworICAgIHNjcmlwdFN0YXJ0UG9zaXRpb24gPSBtX3NjcmlwdFRvUHJvY2Vzc1N0
YXJ0UG9zaXRpb247CisgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gdW5pbml0
aWFsaXplZFBvc2l0aW9uVmFsdWUxOwogICAgIHJldHVybiBtX3NjcmlwdFRvUHJvY2Vzcy5yZWxl
YXNlKCk7CiB9CiAKQEAgLTIxOTksNyArMjIwNCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBtX2lzUGF1
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIEFTU0VSVChtX3RyZWUuY3VycmVudEVsZW1lbnQoKS0+
aGFzVGFnTmFtZShzY3JpcHRUYWcpKTsKICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0g
bV90cmVlLmN1cnJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0
YXJ0TGluZSA9IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUgKyAxOworICAgICAgICAgICAg
bV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gV1RGOjp0b09uZUJhc2VkSFRNTFBvc2l0
aW9uKG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKTsKICAgICAgICAgICAgIG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgICAgICBpZiAoaXNQYXJzaW5nRnJhZ21l
bnQoKSAmJiBtX2ZyYWdtZW50Q29udGV4dC5zY3JpcHRpbmdQZXJtaXNzaW9uKCkgPT0gRnJhZ21l
bnRTY3JpcHRpbmdOb3RBbGxvd2VkKQogICAgICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNz
LT5yZW1vdmVBbGxDaGlsZHJlbigpOwpAQCAtMjczOSw3ICsyNzQ0LDE1IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICBtX3RyZWUuaW5zZXJ0U2NyaXB0RWxlbWVudCh0b2tlbik7CiAgICAgbV90b2tlbml6ZXIt
PnNldFN0YXRlKEhUTUxUb2tlbml6ZXI6OlNjcmlwdERhdGFTdGF0ZSk7CiAgICAgbV9vcmlnaW5h
bEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7Ci0gICAgbV9sYXN0U2NyaXB0RWxlbWVu
dFN0YXJ0TGluZSA9IG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCk7CisKKyAgICBIVE1MUG9zaXRp
b24wIHBvc2l0aW9uID0gbV9odG1sUG9zaXRpb25Qcm92aWRlci0+aHRtbFBvc2l0aW9uKCk7CisK
KyAgICAvLyBXZSBzaG91bGQgc3RvcCB1c2luZyBIVE1MVG9rZW5pemVyIGZvciBnZXR0aW5nIGxp
bmUgbnVtYmVyOworICAgIC8vIGNvbHVtbiBudW1iZXIgaXMgdHJhY2tlZCBieSBtX3NjcmlwdGFi
bGVEb2N1bWVudFBhcnNlciwgc28gd2Ugc2hvdWxkIHN3aXRjaCB0byBpdC4KKyAgICBBU1NFUlQo
bV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSA9PSBwb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50
KCkpOworCisgICAgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbjsK
KwogICAgIHNldEluc2VydGlvbk1vZGUoVGV4dE1vZGUpOwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuaAppbmRleCBkNTIyZWE4ZWIxYTUwZTQyN2ZmY2UwYWNjODE5ZGM1MTlh
YWUyNWYwLi43Y2QyNGYxMmYyY2I1NjliMjkxZjY2OTExMzdhNGJhYTg0ODUzZjRkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRl
ICJIVE1MRWxlbWVudFN0YWNrLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvSFRNTFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CkBAIC01MSwxMyArNTMsMTkgQEAgY2xhc3MgTm9kZTsKIAogY2xhc3Mg
SFRNTFRyZWVCdWlsZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxIVE1MVHJlZUJ1aWxkZXI+IGNyZWF0ZShIVE1MVG9rZW5pemVyKiB0b2tl
bml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzKQorCisgICAg
Y2xhc3MgSFRNTFBvc2l0aW9uUHJvdmlkZXIgeworICAgIHB1YmxpYzoKKyAgICAJdmlydHVhbCBI
VE1MUG9zaXRpb24wIGh0bWxQb3NpdGlvbigpIGNvbnN0ID0gMDsKKyAgICB9OworCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUoSFRNTFRva2VuaXplciogdG9r
ZW5pemVyLCBIVE1MUG9zaXRpb25Qcm92aWRlciogaHRtbFBvc2l0aW9uUHJvdmlkZXIsIEhUTUxE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIodG9rZW5pemVyLCBkb2N1bWVudCwgcmVw
b3J0RXJyb3JzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRyZWVCdWlsZGVy
KHRva2VuaXplciwgaHRtbFBvc2l0aW9uUHJvdmlkZXIsIGRvY3VtZW50LCByZXBvcnRFcnJvcnMp
KTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUo
SFRNTFRva2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxl
bWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gY3Jl
YXRlKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRNTFBvc2l0aW9uUHJvdmlkZXIqIGh0bWxQ
b3NpdGlvblByb3ZpZGVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29u
dGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNz
aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIo
dG9rZW5pemVyLCBmcmFnbWVudCwgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24p
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIodG9rZW5pemVy
LCBodG1sUG9zaXRpb25Qcm92aWRlciwgZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRp
bmdQZXJtaXNzaW9uKSk7CiAgICAgfQogICAgIH5IVE1MVHJlZUJ1aWxkZXIoKTsKIApAQCAtNzEs
NyArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2Vu
KEF0b21pY0hUTUxUb2tlbiYpOwogCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgd2hlbiBwYXJzZXIg
aXMgcGF1c2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4uCi0gICAgUGFzc1JlZlB0
cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5lKTsKKyAg
ICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nlc3MoSFRNTFBvc2l0aW9uMSYg
c2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBEb25lLCBjbG9zZSBhbnkgb3BlbiB0YWdz
LCBldGMuCiAgICAgdm9pZCBmaW5pc2hlZCgpOwpAQCAtMTEwLDggKzExOCw4IEBAIHByaXZhdGU6
CiAgICAgICAgIEFmdGVyQWZ0ZXJGcmFtZXNldE1vZGUsCiAgICAgfTsKIAotICAgIEhUTUxUcmVl
QnVpbGRlcihIVE1MVG9rZW5pemVyKiwgSFRNTERvY3VtZW50KiwgYm9vbCByZXBvcnRFcnJvcnMp
OwotICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiwgRG9jdW1lbnRGcmFnbWVudCos
IEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwor
ICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiwgSFRNTFBvc2l0aW9uUHJvdmlkZXIq
LCBIVE1MRG9jdW1lbnQqLCBib29sIHJlcG9ydEVycm9ycyk7CisgICAgSFRNTFRyZWVCdWlsZGVy
KEhUTUxUb2tlbml6ZXIqLCBIVE1MUG9zaXRpb25Qcm92aWRlciosIERvY3VtZW50RnJhZ21lbnQq
LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsK
IAogICAgIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiAhIW1fZnJhZ21l
bnRDb250ZXh0LmZyYWdtZW50KCk7IH0KIApAQCAtMjQ2LDEyICsyNTQsMTMgQEAgcHJpdmF0ZToK
ICAgICBIVE1MVG9rZW5pemVyKiBtX3Rva2VuaXplcjsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBt
X3NjcmlwdFRvUHJvY2VzczsgLy8gPHNjcmlwdD4gdGFnIHdoaWNoIG5lZWRzIHByb2Nlc3Npbmcg
YmVmb3JlIHJlc3VtaW5nIHRoZSBwYXJzZXIuCi0gICAgaW50IG1fc2NyaXB0VG9Qcm9jZXNzU3Rh
cnRMaW5lOyAvLyBTdGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUgc2NyaXB0IHRhZyBuZWVkaW5n
IHByb2Nlc3NpbmcuCisgICAgSFRNTFBvc2l0aW9uMSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9z
aXRpb247IC8vIFN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcg
cHJvY2Vzc2luZy4KIAogICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IHRvIHJlbW92ZSB0
aGlzIG1lbWJlci4gIE9yaWdpbmFsbHksIGl0IHdhcwogICAgIC8vIGNyZWF0ZWQgdG8gc2Vydmlj
ZSB0aGUgbGVnYWN5IHRyZWUgYnVpbGRlciwgYnV0IGl0IHNlZW1zIHRvIGJlIHVzZWQgZm9yCiAg
ICAgLy8gc29tZSBvdGhlciB0aGluZ3Mgbm93LgotICAgIGludCBtX2xhc3RTY3JpcHRFbGVtZW50
U3RhcnRMaW5lOworICAgIEhUTUxQb3NpdGlvbjAgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9z
aXRpb247CisgICAgSFRNTFBvc2l0aW9uUHJvdmlkZXIqIG1faHRtbFBvc2l0aW9uUHJvdmlkZXI7
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3Ry
aW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCmluZGV4
IGI5ZmY1MDM3YTk4MmFmZDY0ZDk4MjE1YTc4NmIwNWUwNjI1ZDE1OTguLjExYTBhNTliMzQwMTUz
MWEzOTNlZDJhZjU1YWVlNjQzYWY4ZGIwZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdt
ZW50ZWRTdHJpbmcuY3BwCkBAIC01Myw2ICs1Myw5IEBAIGNvbnN0IFNlZ21lbnRlZFN0cmluZyYg
U2VnbWVudGVkU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgU2VnbWVudGVkU3RyaW5nICZvdGhlcikK
ICAgICAgICAgbV9jdXJyZW50Q2hhciA9IG90aGVyLm1fY3VycmVudENoYXI7CiAgICAgbV9jbG9z
ZWQgPSBvdGhlci5tX2Nsb3NlZDsKICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJp
b3JUb0N1cnJlbnRTdHJpbmcgPSBvdGhlci5tX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJp
b3JUb0N1cnJlbnRTdHJpbmc7CisgICAgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1
ZSA9IG90aGVyLm1fbGluZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFsdWU7CisgICAgbV9jdXJy
ZW50TGluZSA9IG90aGVyLm1fY3VycmVudExpbmU7CisKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTIyOSwxMiArMjMyLDMyIEBAIHZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlU2xvd0Nh
c2UoaW50JiBsaW5lTnVtYmVyKQogICAgICAgICBtX3B1c2hlZENoYXIxID0gbV9wdXNoZWRDaGFy
MjsKICAgICAgICAgbV9wdXNoZWRDaGFyMiA9IDA7CiAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRT
dHJpbmcubV9jdXJyZW50KSB7Ci0gICAgICAgIGlmICgqbV9jdXJyZW50U3RyaW5nLm1fY3VycmVu
dCsrID09ICdcbicgJiYgbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKCkp
Ci0gICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgIGlmICgqbV9jdXJyZW50U3RyaW5n
Lm1fY3VycmVudCsrID09ICdcbicgJiYgbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVO
dW1iZXJzKCkpIHsKKyAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgKyttX2N1cnJl
bnRMaW5lOworICAgICAgICAgIG1fbGluZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFsdWUgPSBu
dW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOworICAgICAgICB9CiAgICAgICAgIGlmICgtLW1f
Y3VycmVudFN0cmluZy5tX2xlbmd0aCA9PSAwKQogICAgICAgICAgICAgYWR2YW5jZVN1YnN0cmlu
ZygpOwogICAgIH0KICAgICBtX2N1cnJlbnRDaGFyID0gbV9wdXNoZWRDaGFyMSA/ICZtX3B1c2hl
ZENoYXIxIDogbV9jdXJyZW50U3RyaW5nLm1fY3VycmVudDsKIH0KIAoraW50IFNlZ21lbnRlZFN0
cmluZzo6Y3VycmVudExpbmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnRMaW5lOwor
fQorCitpbnQgU2VnbWVudGVkU3RyaW5nOjpjdXJyZW50Q29sdW1uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSAtIG1fbGluZUJlZ2luQ2hhcmFjdGVy
c0NvbnN1bWVkVmFsdWU7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjpzZXRDdXJyZW50UG9z
aXRpb24oaW50IGxpbmUsIGludCBjb2x1bW4pCit7CisgICAgbV9jdXJyZW50TGluZSA9IGxpbmU7
CisgICAgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZSA9IG51bWJlck9mQ2hhcmFj
dGVyc0NvbnN1bWVkKCkgLSBjb2x1bW47Cit9CisKKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Nl
Z21lbnRlZFN0cmluZy5oCmluZGV4IDkxYzJjYmUzZjljZjY5OTA3NmY4MmQwNmExODAxN2ExNzg0
MWZiZTYuLjRlOTk5ZmE2YWM0OGIwYzhiYzg5ZjVhZTJiNDgwNzMwYmU5YjI1MmEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgKQEAgLTc1LDYgKzc1LDggQEAgcHVibGlj
OgogICAgICAgICAsIG1fcHVzaGVkQ2hhcjIoMCkKICAgICAgICAgLCBtX2N1cnJlbnRDaGFyKDAp
CiAgICAgICAgICwgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3Ry
aW5nKDApCisgICAgICAgICwgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZSgwKQor
ICAgICAgICAsIG1fY3VycmVudExpbmUoMCkKICAgICAgICAgLCBtX2NvbXBvc2l0ZShmYWxzZSkK
ICAgICAgICAgLCBtX2Nsb3NlZChmYWxzZSkKICAgICB7CkBAIC04Niw2ICs4OCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2N1cnJlbnRTdHJpbmcoc3RyKQogICAgICAgICAsIG1fY3VycmVudENo
YXIobV9jdXJyZW50U3RyaW5nLm1fY3VycmVudCkKICAgICAgICAgLCBtX251bWJlck9mQ2hhcmFj
dGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmcoMCkKKyAgICAgICAgLCBtX2xpbmVCZWdp
bkNoYXJhY3RlcnNDb25zdW1lZFZhbHVlKDApCisgICAgICAgICwgbV9jdXJyZW50TGluZSgwKQog
ICAgICAgICAsIG1fY29tcG9zaXRlKGZhbHNlKQogICAgICAgICAsIG1fY2xvc2VkKGZhbHNlKQog
ICAgIHsKQEAgLTE1NSw3ICsxNTksMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KCpjdXJyZW50KCkgPT0gJ1xuJyk7CiAgICAgICAgIGlmICghbV9wdXNoZWRDaGFyMSAmJiBtX2N1
cnJlbnRTdHJpbmcubV9sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyICs9IG1f
Y3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycygpOworICAgICAgICAgICAgaWYg
KG1fY3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycygpKSB7CisgICAgICAgICAg
ICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgICsrbV9jdXJyZW50TGluZTsKKyAg
ICAgICAgICAgICAgICBtX2xpbmVCZWdpbkNoYXJhY3RlcnNDb25zdW1lZFZhbHVlID0gbnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC0tbV9j
dXJyZW50U3RyaW5nLm1fbGVuZ3RoOwogICAgICAgICAgICAgbV9jdXJyZW50Q2hhciA9ICsrbV9j
dXJyZW50U3RyaW5nLm1fY3VycmVudDsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3Nyw3ICsx
ODUsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYWR2YW5jZShpbnQmIGxpbmVOdW1iZXIpCiAgICAg
ewogICAgICAgICBpZiAoIW1fcHVzaGVkQ2hhcjEgJiYgbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3Ro
ID4gMSkgewotICAgICAgICAgICAgbGluZU51bWJlciArPSAoKm1fY3VycmVudFN0cmluZy5tX2N1
cnJlbnQgPT0gJ1xuJykgJiBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMo
KTsKKyAgICAgICAgICAgIGlmICgoKm1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQgPT0gJ1xuJykg
JiBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMoKSkgeworICAgICAgICAg
ICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICArK21fY3VycmVudExpbmU7Cisg
ICAgICAgICAgICAgICAgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZSA9IG51bWJl
ck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAtLW1f
Y3VycmVudFN0cmluZy5tX2xlbmd0aDsKICAgICAgICAgICAgIG1fY3VycmVudENoYXIgPSArK21f
Y3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xOTEsNyAr
MjAzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBlc2NhcGVkKCkgY29uc3QgeyByZXR1cm4gbV9w
dXNoZWRDaGFyMTsgfQogCi0gICAgaW50IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkKKyAg
ICBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSBjb25zdAogICAgIHsKICAgICAgICAg
Ly8gV2UgZG9uJ3QgY3VycmVudGx5IGhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGFyZSBwdXNo
ZWQgY2hhcmFjdGVyLgogICAgICAgICBBU1NFUlQoIW1fcHVzaGVkQ2hhcjEpOwpAQCAtMjAzLDYg
KzIxNSwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVUNoYXImIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuICpjdXJyZW50KCk7IH0KICAgICBjb25zdCBVQ2hhciogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIGN1cnJlbnQoKTsgfQogICAgIAorCisgICAgaW50IGN1cnJlbnRDb2x1bW4oKSBj
b25zdDsKKyAgICBpbnQgY3VycmVudExpbmUoKSBjb25zdDsKKyAgICB2b2lkIHNldEN1cnJlbnRQ
b3NpdGlvbihpbnQgbGluZSwgaW50IGNvbHVtbik7CisKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBl
bmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nJik7CiAgICAgdm9pZCBwcmVwZW5kKGNvbnN0IFNl
Z21lbnRlZFN1YnN0cmluZyYpOwpAQCAtMjQ3LDYgKzI2NCw4IEBAIHByaXZhdGU6CiAgICAgU2Vn
bWVudGVkU3Vic3RyaW5nIG1fY3VycmVudFN0cmluZzsKICAgICBjb25zdCBVQ2hhciogbV9jdXJy
ZW50Q2hhcjsKICAgICBpbnQgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJy
ZW50U3RyaW5nOworICAgIGludCBtX2xpbmVCZWdpbkNoYXJhY3RlcnNDb25zdW1lZFZhbHVlOwor
ICAgIGludCBtX2N1cnJlbnRMaW5lOwogICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmluZz4gbV9z
dWJzdHJpbmdzOwogICAgIGJvb2wgbV9jb21wb3NpdGU7CiAgICAgYm9vbCBtX2Nsb3NlZDsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDQ3YjBlNjNkMDgwYjcxYjEyNjQ4ODM4ZTJlMDYxMTQyYjdmNWNkZWMuLjJl
YjQ5MGU5ZTRmMTUwZDlhNGMxZGNiZTU5Njk4ZjFmZWI1Nzg3MGUgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDEwLTA5LTIwICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBI
VE1MIHBhcnNlciBzaG91bGQgcHJvdmlkZSBzY3JpcHQgY29sdW1uIHBvc2l0aW9uIHdpdGhpbiBI
VE1MIGRvY3VtZW50IHRvIEphdmFTY3JpcHQgZW5naW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTI3MQorCisgICAgICAgIFJlcGxhY2VzIHNjcmlw
dCBsaW5lIG51bWJlciB3aXRoIEhUTUxQb3NpdGlvbiBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBz
cmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVj
dXRlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRl
U2NyaXB0QW5kUmV0dXJuVmFsdWUpOgorCiAyMDEwLTA5LTE5ICBTaGVyaWZmIEJvdCAgPHdlYmtp
dC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByNjc3NDkuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggMmQ0MmY0Yjc1
M2Y2YzhkZmEwYmJjMzgxY2Y4YmM1OTVkOTM1Y2ExOS4uYjRlYjQyZGFiNGU4NjE0YzRmMzc4ZDA0
OTJlMGVjMmYwYTJkYmVhZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAt
NzMxLDggKzczMSw5IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpiaW5kVG9XaW5kb3dPYmplY3QoY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBOUE9iamVjdCogb2JqZWN0KQogCiB2b2lkIFdlYkZyYW1lSW1w
bDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBI
VE1MUG9zaXRpb24xIHBvc2l0aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZElu
dChzb3VyY2Uuc3RhcnRMaW5lKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNlLCAwKTsKICAg
ICBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNl
Q29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgc291cmNlLnN0YXJ0TGluZSkpOworICAgICAg
ICBTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikpOwog
fQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKQEAg
LTc0Miw4ICs3NDMsOSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCgKICAgICBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgSFRNTFBv
c2l0aW9uMSBwb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291
cmNlc0luW2ldLnN0YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OnNfYmFzZSwgMCk7CiAg
ICAgICAgIHNvdXJjZXMuYXBwZW5kKFNjcmlwdFNvdXJjZUNvZGUoCi0gICAgICAgICAgICBzb3Vy
Y2VzSW5baV0uY29kZSwgc291cmNlc0luW2ldLnVybCwgc291cmNlc0luW2ldLnN0YXJ0TGluZSkp
OworICAgICAgICAgICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0
aW9uKSk7CiAgICAgfQogCiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRl
ZFdvcmxkKHdvcmxkSWQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKQEAgLTc5NSw4ICs3OTcs
OSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6Y29sbGVjdEdhcmJhZ2UoKQogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgIGNv
bnN0IFdlYlNjcmlwdFNvdXJjZSYgc291cmNlKQogeworICAgIEhUTUxQb3NpdGlvbjEgcG9zaXRp
b24oV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUp
LCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpzX2Jhc2UsIDApOwogICAgIHJldHVybiBtX2ZyYW1lLT5z
Y3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2Uu
Y29kZSwgc291cmNlLnVybCwgc291cmNlLnN0YXJ0TGluZSkpLnY4VmFsdWUoKTsKKyAgICAgICAg
U2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKS52OFZh
bHVlKCk7CiB9CiAKIC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9yIHRoaXMgZnJhbWUsIG9y
IGFuIGVtcHR5IGhhbmRsZSBpZiB0aGVyZSBpcyBub25lLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68589</attachid>
            <date>2010-09-23 14:25:23 -0700</date>
            <delta_ts>2010-09-24 11:11:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20100924012520.patch</filename>
            <type>text/plain</type>
            <size>59240</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2NGY2Zjk3MTY5ZGZhNzQwMjY5YTk4OTE0ZmIzZTVlMDY2NGI4NWE3Li5j
NmQxZGY4ZWVjNWVjYzBkYWIxNzM1MDgzMDk1OGVlYjkxNTIxYWU2IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTAtMDktMjMgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvVGV4dFBvc2l0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogd3RmL1Rl
eHRQb3NpdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGV4dFBvc2l0aW9uOjpUZXh0UG9z
aXRpb24pOgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbik6Cisg
ICAgICAgIChXVEY6OlRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKToKKyAgICAgICAg
KFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6
WmVyb0Jhc2VkTnVtYmVyOjpaZXJvQmFzZWROdW1iZXIpOgorICAgICAgICAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6Onplcm9CYXNlZEludCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6T25lQmFzZWRO
dW1iZXIpOgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6b25lQmFzZWRJbnQpOgorICAg
ICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6Y29udmVydEFzWmVyb0Jhc2VkSW50KToKKyAgICAg
ICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRUb1plcm9CYXNlZCk6CisgICAgICAgIChX
VEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6dG9PbmVCYXNlZFRl
eHRQb3NpdGlvbik6CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6Y29udmVydFRvT25l
QmFzZWQpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorCiAyMDEwLTA5LTIyICBPbGl2ZXIgSHVu
dCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4u
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDg4ZDE3NjE3YjNhNGI4ODg0YzA0YTI2ODY4YzZmMDZk
MTczMWM3NTAuLjJjNmNhZDQ5YTM3MWEyMmZmMmYzMTc2YzFhNTA0ZDlhNWJmMTUwZWUgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmFtCkBAIC01MTMsNiArNTEzLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHAgXAogCUph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1dURlN0cmluZy5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvVGV4dFBvc2l0aW9uLmNw
cCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL1RleHRQb3NpdGlvbi5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgXAogCUphdmFTY3JpcHRDb3Jl
L3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggXAogCUphdmFTY3JpcHRDb3JlL3d0
Zi9UaHJlYWRpbmcuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmd5cGkgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCmluZGV4IDQ2Mjk2
MGQ1MWRkNmRiZTQwMmQ1ODYzZDIwOGMxMzI4Y2JjMTVhY2UuLjUxMmJjNTI2NWRjNGNhMGZmMWU0
OGI2NmE5NTgxODZmMDQyMTgyOTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cGkKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAt
NDI0LDYgKzQyNCw4IEBACiAgICAgICAgICAgICAnd3RmL1N0cmluZ0V4dHJhcy5oJywKICAgICAg
ICAgICAgICd3dGYvU3RyaW5nSGFzaEZ1bmN0aW9ucy5oJywKICAgICAgICAgICAgICd3dGYvVENQ
YWNrZWRDYWNoZS5oJywKKyAgICAgICAgICAgICd3dGYvVGV4dFBvc2l0aW9uLmgnLAorICAgICAg
ICAgICAgJ3d0Zi9UZXh0UG9zaXRpb24uY3BwJywKICAgICAgICAgICAgICd3dGYvcXQvTWFpblRo
cmVhZFF0LmNwcCcsCiAgICAgICAgICAgICAnd3RmL3F0L1N0cmluZ1F0LmNwcCcsCiAgICAgICAg
ICAgICAnd3RmL3F0L1RocmVhZGluZ1F0LmNwcCcsCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS93dGYvQ01ha2VMaXN0cy50eHQgYi9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQK
aW5kZXggODk2Nzk0ZWY0MWU4ZjAyMTg0MDk5NGFjMzUyNDc4NzJiMmRhZTE2OS4uZTE3ODdjYTAz
YWQ1ODQ5MmU2ZTE4Yzg2MTcwNjViNjI5ZTI4ZDFjNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3Rz
LnR4dApAQCAtOSw2ICs5LDcgQEAgU0VUKFdURl9TT1VSQ0VTCiAgICAgUmFuZG9tTnVtYmVyLmNw
cAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKICAgICBTdHJpbmdFeHRyYXMuY3BwCisg
ICAgVGV4dFBvc2l0aW9uLmNwcAogICAgIFRocmVhZGluZy5jcHAKICAgICBUeXBlVHJhaXRzLmNw
cAogICAgIFdURlRocmVhZERhdGEuY3BwCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYv
VGV4dFBvc2l0aW9uLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UZXh0UG9zaXRpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjlhMTdlMDMwOTU5ZDI3YTlkODFkM2UxMDIwODkwODhhOTY3OTcxYWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGV4dFBvc2l0aW9uLmNwcApAQCAtMCww
ICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRleHRQb3NpdGlvbi5oIgorCituYW1lc3BhY2UgV1RGIHsKKworY29uc3QgWmVyb0Jhc2VkTnVt
YmVyIFplcm9CYXNlZE51bWJlcjo6c19iYXNlKDApOworY29uc3QgWmVyb0Jhc2VkTnVtYmVyIFpl
cm9CYXNlZE51bWJlcjo6c19iZWxvd0Jhc2UoLTEpOworCitjb25zdCBPbmVCYXNlZE51bWJlciBP
bmVCYXNlZE51bWJlcjo6c19iYXNlKDEpOworY29uc3QgT25lQmFzZWROdW1iZXIgT25lQmFzZWRO
dW1iZXI6OnNfYmVsb3dCYXNlKDApOworCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RleHRQb3NpdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L1RleHRQb3NpdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0YzJjMDY5MGJjYWQ0MDQ0NGZmN2I3YjFlYmI1
Y2MxOGNjYmJmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGV4dFBv
c2l0aW9uLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRQ
b3NpdGlvbl9oCisjZGVmaW5lIFRleHRQb3NpdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworCisvKgorICogVGV4dCBQb3NpdGlvbgorICoK
KyAqIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUgc3BlY2lmaWVzIGNvb3JkaW5hdGVzIHdpdGhpbiBh
biB0ZXh0IHJlc291cmNlLiBJdCBpcyB1c2VkIG1vc3RseQorICogZm9yIHNhdmluZyBzY3JpcHQg
c291cmNlIHBvc2l0aW9uLiBUaGUgdGhpcmQgZmllbGQgJ2dlbmVyYXRpb24nIHJlZmxlY3RzIHRo
ZSBmYWN0CisgKiB0aGF0IGluIEhUTUwgZG9jdW1lbnQgaXRzIGFueSBwYXJ0IGNhbiBiZSBnZW5l
cmF0ZWQgb24gdGhlIGZseSwgYnkgYSAnZG9jdW1lbnQud3JpdGUnCisgKiBjYWxsLiBXaGlsZSBl
bGVtZW50cyBvZiB0aGUgZ2VuZXJhdGVkIHBhcnQgbWF5IHN0aWxsIGhhdmUgY29vcmRpbmF0ZXMg
KHByb2JhYmx5KSwKKyAqIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIGNvb3JkaW5h
dGVzIGluIHRoZSBvcmlnaW5hbCB0ZXh0LgorICogU28gZ2VuZXJhdGlvbiA9PSAwIG1lYW5zIHRo
YXQgY29vcmRpbmF0ZXMgYXBwbHkgdG8gb3JpZ2luYWwgdGV4dCwKKyAqIGdlbmVyYXRpb24gPT0g
MSBhcHBsaWVzIHRvIGEgZWxlbWVudHMgZ2VuZXJhdGVkIGJ5IGEgc2NyaXB0IGluIG9yaWdpbmFs
IHRleHQsCisgKiBnZW5lcmF0aW9uID09IDIgdG8gZWxlbWVudHMgZ2VuZXJhdGVkIGZyb20gYSBz
Y3JpcHQgaW4gYSBnZW5lcmF0ZWQgcGFydCBhbmQgc28gb24uCisgKgorICogTGF0ZXIgVGV4dFBv
c2l0aW9uMCBhbmQgVGV4dFBvc2l0aW9uMSBhbmQgYm90aCBudW1iZXIgdHlwZXMgY2FuIGJlIG1l
cmdlZCB0b2dldGhlciBxdWl0ZSBlYXNpbHkuCisgKgorICoKKyAqIDAtYmFzZWQgYW5kIDEtYmFz
ZWQKKyAqCisgKiBMaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBjb3VsZCBiZSBpbnRlcnByZXRlZCBh
cyB6ZXJvLWJhc2VkIG9yIDEtYmFzZWQuIFNpbmNlCisgKiBib3RoIHByYWN0aWNlcyBjb2V4aXN0
IGluIFdlYktpdCBzb3VyY2UgYmFzZSwgJ2ludCcgdHlwZSBzaG91bGQgYmUgcmVwbGFjZWQgd2l0
aAorICogYSBkZWRpY2F0ZWQgd3JhcHBlciB0eXBlcywgc28gdGhhdCBjb21waWxlciBoZWxwZWQg
dXMgd2l0aCB0aGlzIGFtYmlndWl0eS4KKyAqCisgKiBIZXJlIHdlIGludHJvZHVjZSAyIHR5cGVz
IG9mIG51bWJlcnM6IFplcm9CYXNlZE51bWJlciBhbmQgT25lQmFzZWROdW1iZXIgYW5kCisgKiAy
IGNvcnJlc3BvbmRpbmcgdHlwZXMgb2YgVGV4dFBvc2l0aW9uIHN0cnVjdHVyZS4gV2hpbGUgb25s
eSBvbmUgdHlwZSBvdWdodCB0byBiZSBlbm91Z2gsCisgKiB0aGlzIGlzIGRvbmUgdG8ga2VlcCB0
cmFuc2l0aW9uIHRvIHRoZSBuZXcgdHlwZXMgYXMgdHJhbnNwYXJlbnQgYXMgcG9zc2libGU6Cisg
KiBlLmcuIGluIGFyZWFzIHdoZXJlIDAtYmFzZWQgaW50ZWdlcnMgYXJlIHVzZWQsIFRleHRQb3Np
dGlvbjAgc2hvdWxkIGJlIGludHJvZHVjZWQuIFRoaXMKKyAqIHdheSBhbGwgY2hhbmdlcyB3aWxs
IHJlbWFpbiB0cmFja2FibGUuCisgKgorICogTGF0ZXIgYm90aCBudW1iZXIgdHlwZXMgY2FuIGJl
IG1lcmdlZCBpbiBvbmUgdHlwZSBxdWl0ZSBlYXNpbHkuCisgKgorICogRm9yIHR5cGUgc2FmZXR5
IGFuZCBmb3IgdGhlIGZ1dHVyZSB0eXBlIG1lcmdlIGl0IGlzIGltcG9ydGFudCB0aGF0IGFsbCBv
cGVyYXRpb25zIGluIEFQSQorICogdGhhdCBhY2NlcHQgb3IgcmV0dXJuIGludGVnZXIgaGF2ZSBh
IG5hbWUgZXhwbGljaXRseSBkZWZpbmluZyBiYXNlIG9mIGludGVnZXIuIEZvciB0aGlzIHJlYXNv
bgorICogaW50LXJlY2VpdmluZyBjb25zdHJ1Y3RvcnMgYXJlIGhpZGRlbiBmcm9tIEFQSS4KKyAq
LworCit0ZW1wbGF0ZTx0eXBlbmFtZSBOVU1CRVI+CitjbGFzcyBUZXh0UG9zaXRpb24geworcHVi
bGljOgorICAgIFRleHRQb3NpdGlvbihOVU1CRVIgbGluZSwgTlVNQkVSIGNvbHVtbiwgaW50IGdl
bmVyYXRpb24pCisgICAgICAgIDogbV9saW5lKGxpbmUpCisgICAgICAgICwgbV9jb2x1bW4oY29s
dW1uKQorICAgICAgICAsIG1fZ2VuZXJhdGlvbihnZW5lcmF0aW9uKQorICAgIHsKKyAgICB9Cisg
ICAgVGV4dFBvc2l0aW9uKCkge30KKworICAgIC8vIEEgJ21pbmltdW0nIHZhbHVlIG9mIHBvc2l0
aW9uLCB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KKyAgICBzdGF0aWMgVGV4dFBvc2l0aW9uPE5V
TUJFUj4gbWluaW11bVBvc2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPE5VTUJFUj4oTlVN
QkVSOjpzX2Jhc2UsIE5VTUJFUjo6c19iYXNlLCAwKTsgfQorCisgICAgLy8gQSB2YWx1ZSB3aXRo
IGxpbmUgdmFsdWUgbGVzcyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxlIHBv
c2l0aW9uLgorICAgIHN0YXRpYyBUZXh0UG9zaXRpb248TlVNQkVSPiBiZWxvd1JhbmdlUG9zaXRp
b24oKSB7IHJldHVybiBUZXh0UG9zaXRpb248TlVNQkVSPihOVU1CRVI6OnNfYmVsb3dCYXNlLCBO
VU1CRVI6OnNfYmFzZSwgMCk7IH0KKworICAgIE5VTUJFUiBtX2xpbmU7CisgICAgTlVNQkVSIG1f
Y29sdW1uOworICAgIGludCBtX2dlbmVyYXRpb247Cit9OworCisKK2NsYXNzIE9uZUJhc2VkTnVt
YmVyOworCisvLyBBbiBpbnQgd3JhcHBlciB0aGF0IGFsd2F5cyByZW1pbmRzIHlvdSB0aGF0IHRo
ZSBudW1iZXIgc2hvdWxkIGJlIDAtYmFzZWQKK2NsYXNzIFplcm9CYXNlZE51bWJlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFplcm9CYXNlZE51bWJlciBmcm9tWmVyb0Jhc2VkSW50KGludCB6ZXJv
QmFzZWRJbnQpIHsgcmV0dXJuIFplcm9CYXNlZE51bWJlcih6ZXJvQmFzZWRJbnQpOyB9CisKKyAg
ICBaZXJvQmFzZWROdW1iZXIoKSB7fQorCisgICAgaW50IHplcm9CYXNlZEludCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKworICAgIE9uZUJhc2VkTnVtYmVyIGNvbnZlcnRUb09uZUJhc2Vk
KCkgY29uc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgWmVyb0Jhc2VkTnVtYmVyIHNfYmFzZTsgLy8g
MAorICAgIHN0YXRpYyBjb25zdCBaZXJvQmFzZWROdW1iZXIgc19iZWxvd0Jhc2U7IC8vIC0xCisK
K3ByaXZhdGU6CisgICAgWmVyb0Jhc2VkTnVtYmVyKGludCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVl
KSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKworLy8gQW4gaW50IHdyYXBwZXIgdGhhdCBhbHdh
eXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAxLWJhc2VkCitjbGFzcyBP
bmVCYXNlZE51bWJlciB7CitwdWJsaWM6CisgICAgc3RhdGljIE9uZUJhc2VkTnVtYmVyIGZyb21P
bmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9uZUJhc2VkTnVtYmVyKG9uZUJh
c2VkSW50KTsgfQorICAgIE9uZUJhc2VkTnVtYmVyKCkge30KKworICAgIGludCBvbmVCYXNlZElu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBpbnQgY29udmVydEFzWmVyb0Jhc2Vk
SW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KKyAgICBaZXJvQmFzZWROdW1iZXIg
Y29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyOjpmcm9t
WmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQorCisgICAgc3RhdGljIGNvbnN0IE9uZUJhc2Vk
TnVtYmVyIHNfYmFzZTsgLy8gMQorICAgIHN0YXRpYyBjb25zdCBPbmVCYXNlZE51bWJlciBzX2Jl
bG93QmFzZTsgLy8gMAorCitwcml2YXRlOgorICAgIE9uZUJhc2VkTnVtYmVyKGludCB2YWx1ZSkg
OiBtX3ZhbHVlKHZhbHVlKSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKwordHlwZWRlZiBUZXh0
UG9zaXRpb248WmVyb0Jhc2VkTnVtYmVyPiBUZXh0UG9zaXRpb24wOwordHlwZWRlZiBUZXh0UG9z
aXRpb248T25lQmFzZWROdW1iZXI+IFRleHRQb3NpdGlvbjE7CisKK2lubGluZSBUZXh0UG9zaXRp
b24wIHRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKGNvbnN0IFRleHRQb3NpdGlvbjEmIHBvc2l0aW9u
KQoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24wKHBvc2l0aW9uLm1fbGluZS5jb252ZXJ0VG9a
ZXJvQmFzZWQoKSwgcG9zaXRpb24ubV9jb2x1bW4uY29udmVydFRvWmVyb0Jhc2VkKCksIHBvc2l0
aW9uLm1fZ2VuZXJhdGlvbik7Cit9CisKK2lubGluZSBUZXh0UG9zaXRpb24xIHRvT25lQmFzZWRU
ZXh0UG9zaXRpb24oY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24pCit7CisgICAgcmV0dXJu
IFRleHRQb3NpdGlvbjEocG9zaXRpb24ubV9saW5lLmNvbnZlcnRUb09uZUJhc2VkKCksIHBvc2l0
aW9uLm1fY29sdW1uLmNvbnZlcnRUb09uZUJhc2VkKCksIHBvc2l0aW9uLm1fZ2VuZXJhdGlvbik7
Cit9CisKK2lubGluZSBPbmVCYXNlZE51bWJlciBaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09u
ZUJhc2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNl
ZEludChtX3ZhbHVlICsgMSk7Cit9CisKK30KKworCit1c2luZyBXVEY6OlRleHRQb3NpdGlvbjA7
Cit1c2luZyBXVEY6OlRleHRQb3NpdGlvbjE7CisKKyNlbmRpZiAvLyBUZXh0UG9zaXRpb25faApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkgYi9KYXZhU2NyaXB0Q29yZS93
dGYvd3RmLnByaQppbmRleCA4NGFjMjBlM2ZjOWZlNGI1Y2EyNGY5NTM5MmY3YmExZTkxODAxMzQw
Li45NGI3MjY5NTU1YzE0NGM1NzdiMWJkNTk3ZjhjZDk2OThmNzc0YzJmIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnBy
aQpAQCAtMTYsNiArMTYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvUGFnZUFsbG9jYXRpb24u
Y3BwIFwKICAgICB3dGYvUmFuZG9tTnVtYmVyLmNwcCBcCiAgICAgd3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHAgXAorICAgIHd0Zi9UZXh0UG9zaXRpb24uY3BwIFwKICAgICB3dGYvVGhyZWFk
aW5nTm9uZS5jcHAgXAogICAgIHd0Zi9UaHJlYWRpbmcuY3BwIFwKICAgICB3dGYvVHlwZVRyYWl0
cy5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAzODY2MTY1NzcyZGFlMzRjYmExM2M0YmRkMjU3ODVlNTcyNWIxYTM1Li5jNWVjZjM0
ZTQyMzgzZmNkNTJmZDcwYTk1YzZmM2ExYzc5ZDIyZWUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEwLTA5
LTIzICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MIHBhcnNlciBzaG91bGQgcHJv
dmlkZSBzY3JpcHQgY29sdW1uIHBvc2l0aW9uIHdpdGhpbiBIVE1MIGRvY3VtZW50IHRvIEphdmFT
Y3JpcHQgZW5naW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTI3MQorCisgICAgICAgIFJlcGxhY2VzIGxpbmUgbnVtYmVyIHdpdGggVGV4dFBvc2l0
aW9uIHN0cnVjdCBzbyB0aGF0IHNjcmlwdCBlbmdpbmUKKyAgICAgICAgZ2V0cyBzY3JpcHQgc3Rh
cnRpbmcgbGluZS9jb2x1bW4uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VD
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRTb3VyY2VD
b2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24pOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyUG9zaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlwdFNvdXJjZUNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6c3RhcnRMaW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFNvdXJjZUNvZGU6OnN0YXJ0UG9zaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZl
bnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpWOExh
enlFdmVudExpc3RlbmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2
ZW50TGlzdGVuZXI6OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpjb21waWxlU2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJ1
blNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkb20vUGVuZGlu
Z1NjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpyZWxlYXNlRWxl
bWVudEFuZENsZWFyKToKKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5oOgorICAgICAgICAo
V2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6UGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQZW5kaW5nU2NyaXB0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1Nj
cmlwdDo6c3RhcnRpbmdQb3NpdGlvbik6CisgICAgICAgICogZG9tL1NjcmlwdGFibGVEb2N1bWVu
dFBhcnNlci5oOgorICAgICAgICAqIGRvbS9YTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAq
IGRvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OnRleHRQb3NpdGlvbik6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Ny
aXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDoKKwogMjAxMC0wOS0yMyAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJv
YmVuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAppbmRleCAzMmQ2Mjk4Y2Ri
ZGE3NzJkYWExM2UxMDMzZTNjZjBhYTQwZjU5NGIyLi5mMDQ4ZTljOGE1Mzg0Y2MwMGUyMjViZTcw
YmRmN2QyYmNlZTdlMTAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNv
dXJjZUNvZGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaApA
QCAtMzUsMTUgKzM1LDE2IEBACiAjaW5jbHVkZSAiU2NyaXB0U291cmNlUHJvdmlkZXIuaCIKICNp
bmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlIDx3dGYvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAg
IFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9
IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBT
dHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0UG9zaXRp
b24xJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAg
ICAgICAgIDogbV9wcm92aWRlcihTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwg
dXJsLmlzTnVsbCgpID8gU3RyaW5nKCkgOiB1cmwuc3RyaW5nKCkpKQotICAgICAgICAsIG1fY29k
ZShtX3Byb3ZpZGVyLCBzdGFydExpbmUpCisgICAgICAgICwgbV9jb2RlKG1fcHJvdmlkZXIsIHN0
YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpCiAgICAgICAgICwgbV91cmwodXJsKQog
ICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFj
dGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKaW5kZXgg
ZGNkMGJiMzM3NzE4MTMxODQyMGMxMDczYmUyNTFhOWU1ODRiYTRiNy4uNzA4ZmJlNjdmZTk0ZDc3
MjIxMmM4YmMzZDI3ZGUxOGJkNTEwMTJjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVk
QWN0aW9uLmNwcApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjaGVk
dWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQsIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9jb2Rl
KFN0cmluZygpLCBLVVJMKCksIDApCisgICAgLCBtX2NvZGUoU3RyaW5nKCksIEtVUkwoKSwgVGV4
dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7CiAgICAgbV9mdW5jdGlvbiA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNTU2YjVjNmVhOTFiN2EwMjEyYzRlOWIyYmIy
YjllZGRlMmJmYTU0Ni4uYjQ0Nzg0ZTBlYjM1YTUyNjVkYzQ3NmY0OTVjMWMxZWZiZDgxMzhkYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0yNjAsMjAgKzI2
MCwxMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTaG91bAogICAgIHJldHVybiBTY3JpcHRWYWx1ZShv
YmplY3QpOwogfQogCi1pbnQgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyTGluZU51bWJl
cigpIGNvbnN0CitUZXh0UG9zaXRpb24wIFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlclBv
c2l0aW9uKCkgY29uc3QKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwogICAgIGlm
IChwYXJzZXIpCi0gICAgICAgIHJldHVybiBwYXJzZXItPmxpbmVOdW1iZXIoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlckNvbHVtbk51bWJl
cigpIGNvbnN0Ci17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBwYXJzZXIgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKLSAgICBpZiAocGFy
c2VyKQotICAgICAgICByZXR1cm4gcGFyc2VyLT5jb2x1bW5OdW1iZXIoKTsKLSAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIHBhcnNlci0+dGV4dFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFRl
eHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmgKaW5kZXggM2JjNDJlZmIwM2Y5YThjODBjMTY1NGE1MmVjM2UxYzc3MmM0
OGYyMy4uYzFkMzMzMTY1YTdiMzkyOGYwZjZkZmU3YzYwN2ZlZTZjYTBmM2FmNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE1NSw4ICsxNTUsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50Kik7CiAKLSAgICBpbnQgZXZlbnRI
YW5kbGVyTGluZU51bWJlcigpIGNvbnN0OwotICAgIGludCBldmVudEhhbmRsZXJDb2x1bW5OdW1i
ZXIoKSBjb25zdDsKKyAgICBUZXh0UG9zaXRpb24wIGV2ZW50SGFuZGxlclBvc2l0aW9uKCkgY29u
c3Q7CiAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGJvb2wgcHJvY2Vzc2lu
Z1RpbWVyQ2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayA9IHByb2Nlc3NpbmdU
aW1lckNhbGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCB1c2UgdGhl
IHBhcmFtZXRlciB3b3JsZCBhdCBhbGwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcAppbmRleCA3MmRmNzlkZWQzZWQ0N2NmZjFhMjdiNTk1M2EzNTk5NjNjNzdh
NjMwLi4wNDRkZWYwNTI3NmJhODRmZmM5Y2UzNmM1MTM0OWY2ZmNhODE0ZjNjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTUwLDggKzUwLDggQEAg
UGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1i
ZXIgPSAwOworICAgIC8vIEZJWE1FOiB2ZXJ5IHN0cmFuZ2U6IHdlIGluaXRpYWxpemUgemVyby1i
YXNlZCBudW1iZXIgd2l0aCAnMScuCisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbihXVEY6Olpl
cm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCgxKSwgV1RGOjpaZXJvQmFzZWROdW1iZXI6
OnNfYmFzZSwgMCk7CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKIAogICAgIGlmIChGcmFtZSogZnJh
bWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7CkBAIC02NCwxMiArNjQsMTEgQEAgUGFz
c1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAK
LSAgICAgICAgbGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckxpbmVO
dW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRI
YW5kbGVyQ29sdW1uTnVtYmVyKCk7CisgICAgICAgIHBvc2l0aW9uID0gc2NyaXB0Q29udHJvbGxl
ci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKICAgICAgICAgc291cmNlVVJMID0gbm9kZS0+ZG9j
dW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4TGF6eUV2ZW50
TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgbm9kZS0+aXNTVkdF
bGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgcmV0dXJuIFY4TGF6
eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgbm9kZS0+
aXNTVkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgcG9zaXRpb24sIFdvcmxk
Q29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKIH0KIAogUGFzc1JlZlB0cjxWOExhenlFdmVu
dExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0
cmlidXRlKiBhdHRyKQpAQCAtODEsMTAgKzgwLDYgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExp
c3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkK
ICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGxp
bmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBzb3Vy
Y2VVUkw7Ci0KICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUt
PnNjcmlwdCgpOwogICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+Y2FuRXhlY3V0ZVNjcmlwdHMo
QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk0LDEwICs4OSw5
IEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVtYmVy
KCk7Ci0gICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyQ29s
dW1uTnVtYmVyKCk7Ci0gICAgc291cmNlVVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0
cmluZygpOwotICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9j
YWxOYW1lKCkuc3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCksIGF0
dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXb3JsZENv
bnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbiA9
IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlclBvc2l0aW9uKCk7CisgICAgU3RyaW5nIHNv
dXJjZVVSTCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKKyAgICByZXR1cm4g
VjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBm
cmFtZS0+ZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VV
UkwsIHBvc2l0aW9uLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CiB9CiAKIFN0
cmluZyBldmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQqIGRvY3VtZW50LCBFdmVudExp
c3RlbmVyKiBsaXN0ZW5lcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
U291cmNlQ29kZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKaW5k
ZXggZGJjOWQ1ZTZmYzYwMDdmY2ZkZDY2MDI0ZGIwNzgyNmM2NjI2M2I1Yi4uMzcwNDFiZWY3YWNh
ZGI1N2U4Y2ExYTkzMmQ0YzgzOGNiNTlhY2E4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
b3VyY2VDb2RlLmgKQEAgLTM1LDE2ICszNSwxNyBAQAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
Y3JpcHRTb3VyY2VDb2RlIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGludCBzdGFydExpbmUgPSAx
KQorICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwm
IHVybCA9IEtVUkwoKSwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc3RhcnRQb3NpdGlvbiA9IFRleHRQ
b3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAgICAgICA6IG1fc291cmNlKHNvdXJjZSkK
ICAgICAgICAgLCBtX2NhY2hlZFNjcmlwdCgwKQogICAgICAgICAsIG1fdXJsKHVybCkKLSAgICAg
ICAgLCBtX3N0YXJ0TGluZShzdGFydExpbmUpCisgICAgICAgICwgbV9zdGFydFBvc2l0aW9uKHN0
YXJ0UG9zaXRpb24pCiAgICAgewogICAgIH0KIApAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9zb3VyY2UoY3MtPnNjcmlwdCgpKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0
KGNzKQogICAgICAgICAsIG1fdXJsKFBhcnNlZFVSTFN0cmluZywgY3MtPnVybCgpKQotICAgICAg
ICAsIG1fc3RhcnRMaW5lKDEpCisgICAgICAgICwgbV9zdGFydFBvc2l0aW9uKFRleHRQb3NpdGlv
bjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAgIHsKICAgICB9CiAKQEAgLTYzLDEzICs2NCwxNCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZTsgfQogICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRTY3JpcHQuZ2V0KCk7IH0KICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQotICAgIGludCBzdGFydExpbmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0
TGluZTsgfQorICAgIGludCBzdGFydExpbmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRp
b24ubV9saW5lLm9uZUJhc2VkSW50KCk7IH0KKyAgICBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFy
dFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFBvc2l0aW9uOyB9CiAKIHByaXZhdGU6
CiAgICAgU3RyaW5nIG1fc291cmNlOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNj
cmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiAgICAgS1VSTCBtX3VybDsKLSAgICBpbnQgbV9zdGFydExp
bmU7CisgICAgVGV4dFBvc2l0aW9uMSBtX3N0YXJ0UG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNw
cAppbmRleCA3ZjEzYzVhOGZiMjdkMzNiYmYxZDM0MTBhMDEzZWJjNzk1ZDkzZDIzLi43ZjQ2MzMz
MDYyZDZmZWI3YmU5ZjE3OTYzNTZjNmIwNWNiM2NiOGY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTQxLDE0ICs0MSwxMyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVY4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIo
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5n
JiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVt
bk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCitWOExhenlF
dmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25O
YW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNv
dXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4
dEhhbmRsZSYgd29ybGRDb250ZXh0KQogICAgIDogVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIodHJ1
ZSwgd29ybGRDb250ZXh0KQogICAgICwgbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQogICAg
ICwgbV9pc1NWR0V2ZW50KGlzU1ZHRXZlbnQpCiAgICAgLCBtX2NvZGUoY29kZSkKICAgICAsIG1f
c291cmNlVVJMKHNvdXJjZVVSTCkKLSAgICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQotICAg
ICwgbV9jb2x1bW5OdW1iZXIoY29sdW1uTnVtYmVyKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlv
bikKIHsKIH0KIApAQCAtMTE0LDcgKzExMyw3IEBAIHZvaWQgVjhMYXp5RXZlbnRMaXN0ZW5lcjo6
cHJlcGFyZUxpc3RlbmVyT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAg
ICAgLy8gSW5zZXJ0ICdcbicgb3RoZXJ3aXNlIC8vLXN0eWxlIGNvbW1lbnRzIGNvdWxkIGJyZWFr
IHRoZSBoYW5kbGVyLgogICAgIGNvZGUuYXBwZW5kKCAgIlxufSkuY2FsbCh0aGlzLCBldnQpO319
fX0pIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlRXh0ZXJuYWxTdHJpbmcgPSB2
OEV4dGVybmFsU3RyaW5nKGNvZGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0
ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fc291cmNlVVJM
LCBtX2xpbmVOdW1iZXIpOworICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gVjhQ
cm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fc291cmNlVVJMLCBtX3Bv
c2l0aW9uKTsKICAgICBpZiAoIXNjcmlwdC5Jc0VtcHR5KCkpIHsKICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUgPSBwcm94eS0+cnVuU2NyaXB0KHNjcmlwdCwgZmFsc2UpOwogICAg
ICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOExhenlFdmVudExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2
ZW50TGlzdGVuZXIuaAppbmRleCBmMTc0ZDIzYmYxMzFiMDEwZWU0ZjU5YmM0MjUyN2VlODY3NGEw
NjA4Li5jNGFhZTAzZTJhODQzYmE5NDY0NjM4YmYyMWUyYWE1NDZiZTRlYzczIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9UZXh0UG9zaXRpb24uaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw5
ICs0Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBBIFY4TGF6eUV2ZW50TGlzdGVu
ZXIgaXMgYWx3YXlzIGEgSFRNTCBldmVudCBoYW5kbGVyLgogICAgIGNsYXNzIFY4TGF6eUV2ZW50
TGlzdGVuZXIgOiBwdWJsaWMgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYg
Y29kZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uLCBjb25z
dCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwg
aXNTVkdFdmVudCwgY29kZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHdv
cmxkQ29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVu
dExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgaXNTVkdFdmVudCwgY29kZSwgc291cmNlVVJMLCBwb3Np
dGlvbiwgd29ybGRDb250ZXh0KSk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNMYXp5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNTYsNyArNTcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlTGlzdGVuZXJPYmplY3Qo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVjhMYXp5
RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50
LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGludCBsaW5lTnVt
YmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29u
dGV4dCk7CisgICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlv
bk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcg
c291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbiwgY29uc3QgV29ybGRDb250
ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpOwogCiAgICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCopOwogCkBAIC03MCw4ICs3MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2lzU1ZHRXZlbnQ7CiAgICAgICAg
IFN0cmluZyBtX2NvZGU7CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZVVSTDsKLSAgICAgICAgaW50
IG1fbGluZU51bWJlcjsKLSAgICAgICAgaW50IG1fY29sdW1uTnVtYmVyOworICAgICAgICBUZXh0
UG9zaXRpb24wIG1fcG9zaXRpb247CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggMGE2MjA3OTRjOWIwMWZjOGI3MWJkNjQzN2UwNjA0
YmVlMjZkNTdhMS4uNjJmNjViZjgzYzVjN2IxZmJiY2I2MGI3NzBkODI1ZjU0MWU4YWNiZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCkBAIC0yMzgsMTIgKzIzOCwxNSBAQCBWOFByb3h5Ojp+VjhQ
cm94eSgpCiAgICAgd2luZG93U2hlbGwoKS0+ZGVzdHJveUdsb2JhbCgpOwogfQogCi12ODo6SGFu
ZGxlPHY4OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIHY4OjpTY3Jp
cHREYXRhKiBzY3JpcHREYXRhKQordjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21w
aWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgdjg6OlNjcmlw
dERhdGEqIHNjcmlwdERhdGEpCiB7CiAgICAgY29uc3QgdWludDE2X3QqIGZpbGVOYW1lU3RyaW5n
ID0gZnJvbVdlYkNvcmVTdHJpbmcoZmlsZU5hbWUpOwotICAgIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gbmFtZSA9IHY4OjpTdHJpbmc6Ok5ldyhmaWxlTmFtZVN0cmluZywgZmlsZU5hbWUubGVuZ3Ro
KCkpOwotICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGxpbmUgPSB2ODo6SW50ZWdlcjo6TmV3
KGJhc2VMaW5lKTsKLSAgICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihuYW1lLCBsaW5lKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG5hbWU7CisgICAgaWYgKCFzY3JpcHRTdGFydFBvc2l0
aW9uLm1fZ2VuZXJhdGlvbikKKyAgICAgICAgbmFtZSA9IHY4OjpTdHJpbmc6Ok5ldyhmaWxlTmFt
ZVN0cmluZywgZmlsZU5hbWUubGVuZ3RoKCkpOworICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+
IGxpbmUgPSB2ODo6SW50ZWdlcjo6TmV3KHNjcmlwdFN0YXJ0UG9zaXRpb24ubV9saW5lLnplcm9C
YXNlZEludCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBjb2x1bW4gPSB2ODo6SW50
ZWdlcjo6TmV3KHNjcmlwdFN0YXJ0UG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCkpOwor
ICAgIHY4OjpTY3JpcHRPcmlnaW4gb3JpZ2luKG5hbWUsIGxpbmUsIGNvbHVtbik7CiAgICAgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSB2ODo6U2NyaXB0OjpDb21waWxlKGNvZGUsICZv
cmlnaW4sIHNjcmlwdERhdGEpOwogICAgIHJldHVybiBzY3JpcHQ7CiB9CkBAIC0zOTksNyArNDAy
LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlLCBOb2RlKiBub2QKIAogICAgICAgICAvLyBOT1RFOiBGb3IgY29t
cGF0aWJpbGl0eSB3aXRoIFdlYkNvcmUsIFNjcmlwdFNvdXJjZUNvZGUncyBsaW5lIHN0YXJ0cyBh
dAogICAgICAgICAvLyAxLCB3aGVyZWFzIHY4IHN0YXJ0cyBhdCAwLgotICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgp
LCBzb3VyY2Uuc3RhcnRMaW5lKCkgLSAxLCBzY3JpcHREYXRhLmdldCgpKTsKKyAgICAgICAgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51
cmwoKSwgV1RGOjp0b1plcm9CYXNlZFRleHRQb3NpdGlvbihzb3VyY2Uuc3RhcnRQb3NpdGlvbigp
KSwgc2NyaXB0RGF0YS5nZXQoKSk7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBs
YXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKCJ2OC5jb21waWxlIiwgbm9kZSwgIiIpOwogCkBA
IC00MzQsNyArNDM3LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6cnVuU2NyaXB0
KHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0LCBib29sIGlzSW4KICAgICAgICAgLy8gRklY
TUU6IElkZWFsbHksIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlLXVzZSB0aGUgb3JpZ2luIG9mIHRo
ZQogICAgICAgICAvLyBzY3JpcHQgcGFzc2VkIHRvIHVzIGFzIHRoZSBhcmd1bWVudCBpbnN0ZWFk
IG9mIHVzaW5nIGFuIGVtcHR5IHN0cmluZwogICAgICAgICAvLyBhbmQgMCBiYXNlTGluZS4KLSAg
ICAgICAgc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCAiIiwgMCk7CisgICAgICAgIHNjcmlw
dCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgIiIsIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlv
bigpKTsKICAgICB9CiAKICAgICBpZiAoaGFuZGxlT3V0T2ZNZW1vcnkoKSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmgKaW5kZXggN2YxMGEyNmVmNzYzZjc1MDcyOGI1YTBlMjc4OThiOTVjMGY1MmI2Ni4uOTgw
MGQ5MDlkNzAxYWE4MTljYjRlMDQ0ZjY3NDZkN2VkZDYxMzk3NSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmgKQEAgLTI4OSw3ICsyODksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGVja05ld0xlZ2FsKGNvbnN0IHY4OjpBcmd1bWVu
dHMmKTsKIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2Ny
aXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
aW50IGJhc2VMaW5lLCB2ODo6U2NyaXB0RGF0YSogPSAwKTsKKyAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNv
ZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0
YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHREYXRhKiA9IDApOwogCiAgICAgICAgIC8vIElmIHRoZSBl
eGNlcHRpb24gY29kZSBpcyBkaWZmZXJlbnQgZnJvbSB6ZXJvLCBhIERPTSBleGNlcHRpb24gaXMK
ICAgICAgICAgLy8gc2NoZWR1bGUgdG8gYmUgdGhyb3duLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCmluZGV4IDE2ZTBiNDEwMWVm
ZGMzNWFlNzQ0MTgxN2IwNjg3ZGI2YjVhNjVhMjUuLmNlZmIyZmFhNzM5MDg5NGIzNWQ2NWFkNTNm
MjFhOGZiYzdkZGE1NjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBib29sIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1TY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVO
YW1lLCBpbnQgYmFzZUxpbmUsIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCitT
Y3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0
cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24w
JiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRl
KQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoczsKIApAQCAtMTk2LDcgKzE5Niw3IEBAIFNjcmlw
dFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5n
JiBzY3JpcHQsIGNvbnN0IFN0CiAgICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CiAK
ICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gc2NyaXB0U3RyaW5nID0gdjhFeHRlcm5hbFN0cmlu
ZyhzY3JpcHQpOwotICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBW
OFByb3h5Ojpjb21waWxlU2NyaXB0KHNjcmlwdFN0cmluZywgZmlsZU5hbWUsIGJhc2VMaW5lKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVkU2NyaXB0ID0gVjhQcm94eTo6Y29t
cGlsZVNjcmlwdChzY3JpcHRTdHJpbmcsIGZpbGVOYW1lLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsK
ICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBydW5TY3JpcHQoY29tcGlsZWRTY3Jp
cHQpOwogCiAgICAgaWYgKCFleGNlcHRpb25DYXRjaGVyLkNhbkNvbnRpbnVlKCkpCkBAIC0yMjcs
NyArMjI3LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXAKICAgICAvLyBDb21wdXRlIHRoZSBz
b3VyY2Ugc3RyaW5nIGFuZCBwcmV2ZW50IGFnYWluc3QgaW5maW5pdGUgcmVjdXJzaW9uLgogICAg
IGlmIChtX3JlY3Vyc2lvbiA+PSBrTWF4UmVjdXJzaW9uRGVwdGgpIHsKICAgICAgICAgdjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IGNvZGUgPSB2OEV4dGVybmFsU3RyaW5nKCJ0aHJvdyBSYW5nZUVycm9y
KCdSZWN1cnNpb24gdG9vIGRlZXAnKSIpOwotICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21w
aWxlU2NyaXB0KGNvZGUsICIiLCAwKTsKKyAgICAgICAgc2NyaXB0ID0gVjhQcm94eTo6Y29tcGls
ZVNjcmlwdChjb2RlLCAiIiwgVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkpOwogICAg
IH0KIAogICAgIGlmIChWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKaW5kZXggNTg4MjRi
OWVlZjZmNDkxNDA4NGM3NzcxNjFlMjNmNmUzMGFiZTI4My4uYWExY2RlNjNhN2ZhYTM1ZTI0N2Fk
YmE0N2NjNWQ5NDJmMDA5YTI1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJT
Y3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL1RleHRQb3NpdGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTY2LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRyYWNr
RXZlbnQoRXZlbnQqKTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRo
ZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KLSAgICAgICAgU2NyaXB0VmFsdWUgZXZh
bHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBi
YXNlTGluZSwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKik7CisgICAgICAgIFNjcmlwdFZh
bHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBjb25zdCBUZXh0UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uU3RhdGUqKTsKIAogICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9m
IHRoZSBjb250ZXh0LgogICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7
IHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggN2RiMGQ4
ZDM3MzcwOWIyZTk3M2I2N2U3NzIzZTRmYzMxMWZiY2E1OS4uYjU2ZDM4MzZkN2U2YmIxYWM1ZDJj
OGM1ZWQ2MzBmMDdjMjc2ZWYyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwCkBAIC03NSw3ICs3NSw3IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNv
ZGUsCiAgICAgfQogCiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlIHN0YXRlOwotICAg
IFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNl
KCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkgLSAx
LCAmc3RhdGUpOworICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNv
dXJjZUNvZGUuc291cmNlKCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIFdURjo6dG9aZXJv
QmFzZWRUZXh0UG9zaXRpb24oc291cmNlQ29kZS5zdGFydFBvc2l0aW9uKCkpLCAmc3RhdGUpOwog
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAg
ICAgICAgICAgICpleGNlcHRpb24gPSBzdGF0ZS5leGNlcHRpb247CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcCBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3Bw
CmluZGV4IDQyZTIyNWE3ZjMyYTFiMGNkYzFiYzM0NTFiNjU0OTdhNDYxMzU2ODkuLjE4ZjYwNzEx
YTRjZDMwMjMyOWJjYWFkNGQ5OGI4YTIwYzdjZTEyZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L1BlbmRpbmdTY3JpcHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBA
IC00MCw3ICs0MCw3IEBAIFBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkKIFBhc3NSZWZQ
dHI8RWxlbWVudD4gUGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVhcigpCiB7CiAg
ICAgc2V0Q2FjaGVkU2NyaXB0KDApOwotICAgIG1fc3RhcnRpbmdMaW5lTnVtYmVyID0gMDsKKyAg
ICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24o
KTsKICAgICBtX3dhdGNoaW5nRm9yTG9hZCA9IGZhbHNlOwogICAgIHJldHVybiBtX2VsZW1lbnQu
cmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIv
V2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCmluZGV4IDQ0ZTFlNDkyODY3NmQ3OTYwMjJkZDI5
MDU0NTc2MDE1YjdhMjZlNDQuLjY1N2Y5NGVkZDgyZWI0NDdmMDg0MzYwZTdiZDNlZjVkYWI1N2Y2
MzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAorKysgYi9XZWJDb3Jl
L2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNp
bmNsdWRlIDx3dGYvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMTQgKzQ0LDE0IEBAIGNsYXNzIEVsZW1lbnQ7
CiBjbGFzcyBQZW5kaW5nU2NyaXB0IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1
YmxpYzoKICAgICBQZW5kaW5nU2NyaXB0KCkKLSAgICAgICAgOiBtX3N0YXJ0aW5nTGluZU51bWJl
cigwKQorICAgICAgICA6IG1fc3RhcnRpbmdQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1Jh
bmdlUG9zaXRpb24oKSkKICAgICAgICAgLCBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKICAgICB7
CiAgICAgfQogCiAgICAgUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JiBvdGhlcikK
ICAgICAgICAgOiBDYWNoZWRSZXNvdXJjZUNsaWVudChvdGhlcikKLSAgICAgICAgLCBtX3N0YXJ0
aW5nTGluZU51bWJlcihvdGhlci5tX3N0YXJ0aW5nTGluZU51bWJlcikKKyAgICAgICAgLCBtX3N0
YXJ0aW5nUG9zaXRpb24ob3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQogICAgICAgICAsIG1fd2F0
Y2hpbmdGb3JMb2FkKG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkKQogICAgICAgICAsIG1fZWxlbWVu
dChvdGhlci5tX2VsZW1lbnQpCiAgICAgewpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAg
ICAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IG90aGVyLm1fc3RhcnRpbmdMaW5lTnVtYmVyOwor
ICAgICAgICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247CiAg
ICAgICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gb3RoZXIubV93YXRjaGluZ0ZvckxvYWQ7CiAgICAg
ICAgIG1fZWxlbWVudCA9IG90aGVyLm1fZWxlbWVudDsKICAgICAgICAgc2V0Q2FjaGVkU2NyaXB0
KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKQEAgLTc0LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gRklYTUU6IE5vIHNldHRlciBtZWFucyB0aGlzIGlzIG5ldmVyIHNldCB0byBhbnl0aGluZyBv
dGhlciB0aGFuIDAuCiAgICAgLy8gVGhpcyBpcyBlaXRoZXIgdW5uZWNlc3Nhcnkgb3IgaW5jb3Jy
ZWN0LgotICAgIGludCBzdGFydGluZ0xpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0
aW5nTGluZU51bWJlcjsgfQorICAgIFRleHRQb3NpdGlvbjEgc3RhcnRpbmdQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdQb3NpdGlvbjsgfQogCiAgICAgYm9vbCB3YXRjaGluZ0Zv
ckxvYWQoKSBjb25zdCB7IHJldHVybiBtX3dhdGNoaW5nRm9yTG9hZDsgfQogICAgIHZvaWQgc2V0
V2F0Y2hpbmdGb3JMb2FkKGJvb2wgYikgeyBtX3dhdGNoaW5nRm9yTG9hZCA9IGI7IH0KQEAgLTg5
LDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSopOwogCiBwcml2YXRlOgotICAgIGludCBtX3N0YXJ0aW5nTGluZU51bWJlcjsg
Ly8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCisgICAgVGV4dFBvc2l0aW9uMSBt
X3N0YXJ0aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgog
ICAgIGJvb2wgbV93YXRjaGluZ0ZvckxvYWQ7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVu
dDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmggYi9X
ZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAppbmRleCA4YjE2MzA0MTIxMDRl
NGU0NWEwMTMyM2RkMjI1NWU2NTY0ZTM0MDQ1Li5iNjMzZjM1MzUxZjYwODMyNjNiNDIxOGJhZWE4
ODRiMGJlZDJhODhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIuaAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaApAQCAt
MjcsMTAgKzI3LDEwIEBACiAjZGVmaW5lIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcl9oCiAKICNp
bmNsdWRlICJEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL1RleHRQ
b3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNlZ21lbnRlZFN0cmlu
ZzsKIGNsYXNzIFhTU0F1ZGl0b3I7CiAKIGNsYXNzIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciA6
IHB1YmxpYyBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyIHsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gVGhlc2UgYXJlIHVzZWQgdG8gZXhwb3NlIHRoZSBjdXJyZW50IGxpbmUv
Y29sdW1uIHRvIHRoZSBzY3JpcHRpbmcgc3lzdGVtLgogICAgIHZpcnR1YWwgaW50IGxpbmVOdW1i
ZXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdCA9IDA7CiAK
ICAgICBYU1NBdWRpdG9yKiB4c3NBdWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV94c3NBdWRpdG9y
OyB9CiAgICAgdm9pZCBzZXRYU1NBdWRpdG9yKFhTU0F1ZGl0b3IqIGF1ZGl0b3IpIHsgbV94c3NB
dWRpdG9yID0gYXVkaXRvcjsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQ
YXJzZXIuaCBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZTA3NzBiYWRi
YWZmN2JhMTEwMjBhZGRjNzEyNDllZjNkZWM4MjBkNC4uZTg4NjJlMTk3MWE2N2RhNTYzNWRjMzc1
YTM1ZmQ2MDJkMzI2YjE2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXIuaAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oCkBAIC0xMDIsNyArMTAy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBXTUxFcnJvckhhbmRsaW5nIHVz
ZXMgdGhlc2UgZnVuY3Rpb25zLgogICAgICAgICB2aXJ0dWFsIGJvb2wgd2VsbEZvcm1lZCgpIGNv
bnN0IHsgcmV0dXJuICFtX3Nhd0Vycm9yOyB9CiAgICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1i
ZXIoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7Cisg
ICAgICAgIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwogCkBAIC0xMjksNiAr
MTI5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgYXBwZW5kRnJhZ21l
bnRTb3VyY2UoY29uc3QgU3RyaW5nJik7CiAKKyAgICAgICAgaW50IGNvbHVtbk51bWJlcigpIGNv
bnN0OworCiAjaWYgVVNFKFFYTUxTVFJFQU0pCiBwcml2YXRlOgogICAgICAgICB2b2lkIHBhcnNl
KCk7CkBAIC0yMDgsNyArMjEwLDcgQEAgcHVibGljOgogCiAgICAgICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFNjcmlwdD4gbV9wZW5kaW5nU2NyaXB0OwogICAgICAgICBSZWZQdHI8RWxl
bWVudD4gbV9zY3JpcHRFbGVtZW50OwotICAgICAgICBpbnQgbV9zY3JpcHRTdGFydExpbmU7Cisg
ICAgICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRTdGFydFBvc2l0aW9uOwogCiAgICAgICAgIGJv
b2wgbV9wYXJzaW5nRnJhZ21lbnQ7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1l
c3BhY2VVUkk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCA1
NTM5MDcyZWU1OGNiYTAxNWYzYjZjZTVkNDRjY2I3MWRiM2YxNWZiLi5lMDVkZGYzZjgyY2ZiNjRk
NjJjNzAyYWUwNDE0Zjk0MDMwZTZkNGZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2Vy
TGlieG1sMi5jcHAKQEAgLTU1OCw3ICs1NTgsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9j
dW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmlldykKICAg
ICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAs
IG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1f
c2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkK
ICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNz
aW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKIHsKQEAgLTU4NSw3ICs1ODUsNyBAQCBYTUxE
b2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21l
bnQsIEVsZW1lbnQqIHBhcmVudAogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCiAgICAgLCBtX2xh
c3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3Njcmlw
dFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6
OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1ZSkKICAg
ICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihzY3JpcHRpbmdQZXJtaXNzaW9uKQogewpAQCAtODE3
LDcgKzgxNyw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0
IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhCiAKICAgICBTY3JpcHRFbGVtZW50
KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwogICAg
IGlmIChzY3JpcHRFbGVtZW50KQotICAgICAgICBtX3NjcmlwdFN0YXJ0TGluZSA9IGxpbmVOdW1i
ZXIoKTsKKyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdG9PbmVCYXNlZFRleHRQb3Np
dGlvbih0ZXh0UG9zaXRpb24oKSk7CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXByZWNhdGVkUGFy
c2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lk
IFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNv
dXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwo
KSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2Ny
aXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3Jp
cHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsK
IAogICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRldGFjaGVkIHRoZSBwYXJzZXIKICAg
ICAgICAgaWYgKGlzRGV0YWNoZWQoKSkKQEAgLTEzNjksMTIgKzEzNjksMjYgQEAgdm9pZCogeG1s
RG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
ciwgY29uc3QgU3RyaW4KIAogaW50IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+bGluZSA6IDE7
CisgICAgLy8gRklYTUU6IHRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFz
ZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KKyAgICAvLyAgIE5ldyAi
LSAxIiBmaXhlcyB0aGlzLiBJcyBpdCBjb3JyZWN0PworICAgIHJldHVybiAoY29udGV4dCgpID8g
Y29udGV4dCgpLT5pbnB1dC0+bGluZSA6IDEpIC0gMTsKIH0KIAogaW50IFhNTERvY3VtZW50UGFy
c2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAogewotICAgIHJldHVybiBjb250ZXh0KCkgPyBjb250
ZXh0KCktPmlucHV0LT5jb2wgOiAxOworICAgIC8vIEZJWE1FOiB0aGUgaW1wbGVtZW50YXRpb24g
cHJvYmFibHkgcmV0dXJucyAxLWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0dXJuIDAt
YmFzZWQuCisgICAgLy8gICBOZXcgIi0gMSIgZml4ZXMgdGhpcy4gSXMgaXQgY29ycmVjdD8KKyAg
ICByZXR1cm4gIChjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxKSAtIDE7Cit9
CisKK1RleHRQb3NpdGlvbjAgWE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0
Cit7CisgICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0ID0gdGhpcy0+Y29udGV4dCgpOworICAg
IGlmIChjb250ZXh0KSB7CisgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6T25lQmFz
ZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSkuY29udmVydFRv
WmVyb0Jhc2VkKCksCisgICAgICAgICAgICBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkuY29udmVydFRvWmVyb0Jhc2VkKCksIDApOworICAg
IH0KKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7CiB9CiAKIHZv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXJRdC5jcHAKaW5kZXggNzVhMjBiZTM1NDFjZjUyN2VlNTQ5ODRkMjE0ODI4MWFkMDgyNGY2NC4u
ZTRmMmVhMTE2NjhlOTgyZmU2OWVhZWVjMDE1ZGE1MmI2NTM4YmVmMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9kb20vWE1MRG9j
dW1lbnRQYXJzZXJRdC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6
WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmll
dykKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkK
ICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAg
ICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRp
b24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9zY3JpcHRpbmdQ
ZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKIHsKQEAgLTEzMCw3ICsxMzAsNyBA
QCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudAogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCiAgICAg
LCBtX2xhc3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBt
X3NjcmlwdFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3Np
dGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1
ZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihwZXJtaXNzaW9uKQogewpAQCAtMjMyLDYg
KzIzMiwxMSBAQCBpbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fc3RyZWFtLmNvbHVtbk51bWJlcigpOwogfQogCitUZXh0UG9zaXRpb24wIFhN
TERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKQoreworICAgIHJldHVybiBUZXh0UG9zaXRp
b24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyKGxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVt
YmVyKGNvbHVtbk51bWJlcigpKSwgMCk7Cit9CisKIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0
b3BQYXJzaW5nKCkKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5n
KCk7CkBAIC01MTYsNyArNTIxLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFy
dEVsZW1lbnQoKQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0
RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAg
ICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAgIG1fc2NyaXB0U3Rh
cnRQb3NpdGlvbiA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbih0ZXh0UG9zaXRpb24oKSk7
CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVu
dC5nZXQoKSk7CiAKQEAgLTU4OCw3ICs1OTMsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpw
YXJzZUVuZEVsZW1lbnQoKQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9z
Y3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZy
YW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxl
bWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydExp
bmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3Jp
cHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3Vt
ZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKICAgICB9CiAgICAgbV9yZXF1
ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgcG9wQ3VycmVudE5vZGUoKTsKQEAgLTcwOSw0ICs3
MTQsMyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUR0ZCgpCiAKIH0KIH0KLQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDYzMGI2YWE2ZTFi
MGQ2NjUwOGNmZDEyOTRhNzAyYzNkZDNlZDJjZjAuLjE5OGI5ZjQwZDkyY2IxYTg0ZTk3Yzg0ZjZh
MzM1ZDVlNTllYjk2NGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5jcHAKQEAgLTE5NCwxMiArMTk0LDEyIEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpydW5T
Y3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKQogewogICAgIEFTU0VSVChtX3RyZWVCdWlsZGVy
LT5pc1BhdXNlZCgpKTsKIAotICAgIGludCBzY3JpcHRTdGFydExpbmUgPSAwOwotICAgIFJlZlB0
cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRvUHJv
Y2VzcyhzY3JpcHRTdGFydExpbmUpOworICAgIFRleHRQb3NpdGlvbjEgc2NyaXB0U3RhcnRQb3Np
dGlvbiA9IFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpOworICAgIFJlZlB0cjxF
bGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRvUHJvY2Vz
cyhzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICAvLyBXZSB3aWxsIG5vdCBoYXZlIGEgc2NyaXB0
UnVubmVyIHdoZW4gcGFyc2luZyBhIERvY3VtZW50RnJhZ21lbnQuCiAgICAgaWYgKCFtX3Njcmlw
dFJ1bm5lcikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fc2NyaXB0UnVubmVy
LT5leGVjdXRlKHNjcmlwdEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydExpbmUpOworICAg
IHJldHVybiBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZShzY3JpcHRFbGVtZW50LnJlbGVhc2UoKSwg
c2NyaXB0U3RhcnRQb3NpdGlvbik7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1w
VG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQpAQCAtNDE1LDkgKzQxNSwxNCBAQCBpbnQg
SFRNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKICAgICByZXR1cm4gbV90b2tl
bml6ZXItPmxpbmVOdW1iZXIoKTsKIH0KIAotaW50IEhUTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1u
TnVtYmVyKCkgY29uc3QKK1RleHRQb3NpdGlvbjAgSFRNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9z
aXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX3Rva2VuaXplci0+Y29sdW1uTnVtYmVyKCk7
CisgICAgaW50IGxpbmVaZXJvQmFzZWQgPSBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOworICAg
IGludCBjb2x1bW5PbmVCYXNlZCA9IG1fdG9rZW5pemVyLT5jb2x1bW5OdW1iZXIoKTsKKyAgICBp
bnQgZ2VuZXJhdGlvbiA9IG1fd3JpdGVOZXN0aW5nTGV2ZWw7CisKKyAgICByZXR1cm4gVGV4dFBv
c2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5lWmVyb0Jh
c2VkKSwKKyAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbHVt
bk9uZUJhc2VkKS5jb252ZXJ0VG9aZXJvQmFzZWQoKSwgZ2VuZXJhdGlvbik7CiB9CiAKIGJvb2wg
SFRNTERvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGU2NWE1ODJhNzVlMGUwM2NmNDhm
ZGJiNGJjOGU4YzA3YzI1MjYwMDAuLjVkMjZhNTY1OTZiOGEwMzFkMDdhNjUwN2E2OTU1NGJkMjc5
OWYyZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2Vy
LmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtOTIs
NyArOTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0V4ZWN1dGluZ1NjcmlwdCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNo
ZWV0cygpOwogICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbjAgdGV4
dFBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBIVE1MU2NyaXB0UnVubmVySG9zdAogICAgIHZp
cnR1YWwgdm9pZCB3YXRjaEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IDRmNTRmNDI5Mjg3MGFjZDUzODU0ZmM0NzEw
ODcwZGQ5ZGYxNGYyZDEuLjk2NGU1OGE5ZTBmMmZiODkyYWI2ZTgzOTJhZTllYTU3YmQ0ZGYzZjcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysr
IGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAtOTgsNyArOTgs
NyBAQCBTY3JpcHRTb3VyY2VDb2RlIEhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21QZW5kaW5n
U2NyaXB0KGNvbnN0IFBlbmRpbmdTY3JpcHQmCiAgICAgICAgIHJldHVybiBTY3JpcHRTb3VyY2VD
b2RlKHNjcmlwdC5jYWNoZWRTY3JpcHQoKSk7CiAgICAgfQogICAgIGVycm9yT2NjdXJyZWQgPSBm
YWxzZTsKLSAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVudCgpLT50ZXh0
Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2Ny
aXB0LnN0YXJ0aW5nTGluZU51bWJlcigpKTsKKyAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShz
Y3JpcHQuZWxlbWVudCgpLT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1
dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0LnN0YXJ0aW5nUG9zaXRpb24oKSk7CiB9CiAKIGJvb2wg
SFRNTFNjcmlwdFJ1bm5lcjo6aXNQZW5kaW5nU2NyaXB0UmVhZHkoY29uc3QgUGVuZGluZ1Njcmlw
dCYgc2NyaXB0KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpz
dG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiAKIC8vIFRo
aXMgZnVuY3Rpb24gc2hvdWxkIG1hdGNoIDEwLjIuNS4xMSAiQW4gZW5kIHRhZyB3aG9zZSB0YWcg
bmFtZSBpcyAnc2NyaXB0JyIKIC8vIFNjcmlwdCBoYW5kbGluZyBsaXZlcyBvdXRzaWRlIHRoZSB0
cmVlIGJ1aWxkZXIgdG8ga2VlcCB0aGUgZWFjaCBjbGFzcyBzaW1wbGUuCi1ib29sIEhUTUxTY3Jp
cHRSdW5uZXI6OmV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50LCBpbnQg
c3RhcnRMaW5lKQorYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3Np
dGlvbikKIHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CiAgICAgLy8gRklYTUU6IElmIHNj
cmlwdGluZyBpcyBkaXNhYmxlZCwgYWx3YXlzIGp1c3QgcmV0dXJuIHRydWU7CiAKICAgICAvLyBU
cnkgdG8gZXhlY3V0ZSB0aGUgc2NyaXB0IGdpdmVuIHRvIHVzLgotICAgIHJ1blNjcmlwdChzY3Jp
cHRFbGVtZW50LmdldCgpLCBzdGFydExpbmUpOworICAgIHJ1blNjcmlwdChzY3JpcHRFbGVtZW50
LmdldCgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGlmIChoYXZlUGFyc2luZ0Jsb2Nr
aW5nU2NyaXB0KCkpIHsKICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsKQpAQCAtMjg4
LDcgKzI4OCw3IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBlbmRpbmdTY3JpcHQo
UGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCwgRWxlbWVuCiAKIC8vIFRoaXMgbWV0aG9kIGlz
IG1lYW50IHRvIG1hdGNoIHRoZSBIVE1MNSBkZWZpbml0aW9uIG9mICJydW5uaW5nIGEgc2NyaXB0
IgogLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9t
dWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNydW5uaW5nLWEtc2NyaXB0Ci12b2lkIEhUTUxTY3Jp
cHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGludCBzdGFydGluZ0xpbmVOdW1i
ZXIpCit2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGNv
bnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1f
ZG9jdW1lbnQpOwogICAgIEFTU0VSVCghaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpKTsKQEAg
LTMxNSw3ICszMTUsNyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50
KiBzY3JpcHQsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCiAgICAgICAgICAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDQ3CiAgICAgICAgICAgICAv
LyBBU1NFUlQoZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOwogICAgICAgICAg
ICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgICAgICAgICAgU2NyaXB0U291cmNl
Q29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3Jp
cHRFeGVjdXRpb24obV9kb2N1bWVudCksIHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgICAgICAg
ICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1
bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlv
bik7CiAgICAgICAgICAgICBleGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwogICAgICAgICB9CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgg
Yi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAppbmRleCBiZTIxZGQyNDIx
YjFkNDQyN2IwODQ3YjBiOTExYzFmZTk3YzZmNzY1Li41MjRmZTVkNDUzYzk4ZDdkZWE1NGE0YzVi
ZmYzZjZjNzg3N2NhNTYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiUGVuZGluZ1NjcmlwdC5oIgogI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkBAIC01Miw3
ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogCiAgICAgLy8gUHJvY2Vzc2Vz
IHRoZSBwYXNzZWQgaW4gc2NyaXB0IGFuZCBhbnkgcGVuZGluZyBzY3JpcHRzIGlmIHBvc3NpYmxl
LgotICAgIGJvb2wgZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2Vzcywg
aW50IHNjcmlwdFN0YXJ0TGluZSk7CisgICAgYm9vbCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVu
dD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0
aW9uKTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNv
dXJjZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0czsgfQpAQCAtNzYsNyAr
NzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQq
KTsKICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50
KikgY29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50KiwgaW50IHN0YXJ0aW5nTGlu
ZU51bWJlcik7CisgICAgdm9pZCBydW5TY3JpcHQoRWxlbWVudCosIGNvbnN0IFRleHRQb3NpdGlv
bjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgLy8gSGVscGVycyBmb3IgZGVhbGluZyB3
aXRoIEhUTUxTY3JpcHRSdW5uZXJIb3N0CiAgICAgdm9pZCB3YXRjaEZvckxvYWQoUGVuZGluZ1Nj
cmlwdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
Y3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDM1NWRj
OGQ1MzJmNWM3YzQwOTBjY2QxZmZmYTVjMmFhNzYzODJkYTguLjkzZDM0ZGZmNzE0OGJlZTk4ZmYz
NWE0ZGRkODA2NGNiOTlkYjE4YTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHAKQEAgLTQ5LDEyICs0OSwxNSBAQAogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNs
dWRlICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBpbnQgdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1
ZSA9IC0xOworc3RhdGljIGNvbnN0IFRleHRQb3NpdGlvbjAgdW5pbml0aWFsaXplZFBvc2l0aW9u
VmFsdWUwID0gVGV4dFBvc2l0aW9uMDo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7CitzdGF0aWMgY29u
c3QgVGV4dFBvc2l0aW9uMSB1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoV1RGOjpPbmVCYXNl
ZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KC0xKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNl
LCAtMSk7CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTMzMyw4ICszMzYsOCBAQCBIVE1MVHJlZUJ1aWxk
ZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVu
dCogZG9jdW1lbgogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAg
ICAgLCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX3Rva2Vu
aXplcih0b2tlbml6ZXIpCi0gICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1bmluaXRp
YWxpemVkTGluZU51bWJlclZhbHVlKQotICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGlu
ZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NT
dGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSkKKyAgICAsIG1fbGFzdFNj
cmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMCkKICAg
ICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCiB7
CiB9CkBAIC0zNTIsOCArMzU1LDggQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIo
SFRNTFRva2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmEKICAgICAsIG1f
b3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zZWNvbmRhcnlJbnNl
cnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQotICAg
ICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1
ZSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVO
dW1iZXJWYWx1ZSkKKyAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRp
YWxpemVkUG9zaXRpb25WYWx1ZTEpCisgICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3Np
dGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTApCiAgICAgLCBtX3VzZVByZUhUTUw1UGFy
c2VyUXVpcmtzKHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogewogICAgIGlmIChjb250ZXh0RWxl
bWVudCkgewpAQCAtNDE1LDE1ICs0MTgsMTUgQEAgSFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVudFBh
cnNpbmdDb250ZXh0Ojp+RnJhZ21lbnRQYXJzaW5nQ29udGV4dCgpCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2Ny
aXB0U3RhcnRMaW5lKQorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VT
Y3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAg
ICAvLyBVbnBhdXNlIG91cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2UgdXMgYWdhaW4gd2hlbiBw
cm9jZXNzaW5nIHRoZSBzY3JpcHQuCiAgICAgLy8gVGhlIEhUTUw1IHNwZWMgaXMgd3JpdHRlbiBh
cyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVlCiAgICAgLy8gYnVp
bGRlci4gIFdlIHBhdXNlIHRoZSBwYXJzZXIgdG8gZXhpdCB0aGUgdHJlZSBidWlsZGVyLCBhbmQg
dGhlbiByZXN1bWUKICAgICAvLyBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgogICAgIG1faXNQYXVz
ZWQgPSBmYWxzZTsKLSAgICBzY3JpcHRTdGFydExpbmUgPSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0
TGluZTsKLSAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSA9IHVuaW5pdGlhbGl6ZWRMaW5l
TnVtYmVyVmFsdWU7CisgICAgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IG1fc2NyaXB0VG9Qcm9jZXNz
U3RhcnRQb3NpdGlvbjsKKyAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSB1bmlu
aXRpYWxpemVkUG9zaXRpb25WYWx1ZTE7CiAgICAgcmV0dXJuIG1fc2NyaXB0VG9Qcm9jZXNzLnJl
bGVhc2UoKTsKIH0KIApAQCAtMjIwMSw3ICsyMjA0LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIG1faXNQ
YXVzZWQgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50RWxlbWVudCgp
LT5oYXNUYWdOYW1lKHNjcmlwdFRhZykpOwogICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3Mg
PSBtX3RyZWUuY3VycmVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNz
U3RhcnRMaW5lID0gbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSArIDE7CisgICAgICAgICAg
ICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSBXVEY6OnRvT25lQmFzZWRUZXh0UG9z
aXRpb24obV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAgbV90
cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgIGlmIChpc1BhcnNpbmdGcmFn
bWVudCgpICYmIG1fZnJhZ21lbnRDb250ZXh0LnNjcmlwdGluZ1Blcm1pc3Npb24oKSA9PSBGcmFn
bWVudFNjcmlwdGluZ05vdEFsbG93ZWQpCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nl
c3MtPnJlbW92ZUFsbENoaWxkcmVuKCk7CkBAIC0yNzUwLDcgKzI3NTMsMTAgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgIG1fdHJlZS5pbnNlcnRTY3JpcHRFbGVtZW50KHRva2VuKTsKICAgICBtX3Rva2VuaXpl
ci0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6U2NyaXB0RGF0YVN0YXRlKTsKICAgICBtX29yaWdp
bmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKLSAgICBtX2xhc3RTY3JpcHRFbGVt
ZW50U3RhcnRMaW5lID0gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsKKworICAgIFRleHRQb3Np
dGlvbjAgcG9zaXRpb24gPSBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9t
WmVyb0Jhc2VkSW50KG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCkpLCBXVEY6Olplcm9CYXNlZE51
bWJlcjo6c19iYXNlLCAwKTsKKyAgICBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbiA9
IHBvc2l0aW9uOworCiAgICAgc2V0SW5zZXJ0aW9uTW9kZShUZXh0TW9kZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmggYi9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IGU2MWZlNzM0NjZkYTE3OGQzMzExZDI3
NjIwZTQ2YjgyODFjMWU0NTUuLjJlMzdlNGY1ODlmYzU4NmYxZDJlOTBiYjc2YjllMWYyMjg4NWYz
MzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKKysr
IGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkhUTUxFbGVtZW50U3RhY2suaCIKICNpbmNsdWRlICJIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgorI2luY2x1ZGUgPHd0
Zi9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTcxLDcgKzcy
LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbihBdG9t
aWNIVE1MVG9rZW4mKTsKIAogICAgIC8vIE11c3QgYmUgY2FsbGVkIHdoZW4gcGFyc2VyIGlzIHBh
dXNlZCBiZWZvcmUgY2FsbGluZyB0aGUgcGFyc2VyIGFnYWluLgotICAgIFBhc3NSZWZQdHI8RWxl
bWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhpbnQmIHNjcmlwdFN0YXJ0TGluZSk7CisgICAgUGFz
c1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlvbjEmIHNjcmlw
dFN0YXJ0UG9zaXRpb24pOwogCiAgICAgLy8gRG9uZSwgY2xvc2UgYW55IG9wZW4gdGFncywgZXRj
LgogICAgIHZvaWQgZmluaXNoZWQoKTsKQEAgLTI0NiwxMyArMjQ3LDEyIEBAIHByaXZhdGU6CiAg
ICAgSFRNTFRva2VuaXplciogbV90b2tlbml6ZXI7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gbV9z
Y3JpcHRUb1Byb2Nlc3M7IC8vIDxzY3JpcHQ+IHRhZyB3aGljaCBuZWVkcyBwcm9jZXNzaW5nIGJl
Zm9yZSByZXN1bWluZyB0aGUgcGFyc2VyLgotICAgIGludCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0
TGluZTsgLy8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVlZGluZyBw
cm9jZXNzaW5nLgorICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0
aW9uOyAvLyBTdGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUgc2NyaXB0IHRhZyBuZWVkaW5nIHBy
b2Nlc3NpbmcuCiAKICAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCB0byByZW1vdmUgdGhp
cyBtZW1iZXIuICBPcmlnaW5hbGx5LCBpdCB3YXMKICAgICAvLyBjcmVhdGVkIHRvIHNlcnZpY2Ug
dGhlIGxlZ2FjeSB0cmVlIGJ1aWxkZXIsIGJ1dCBpdCBzZWVtcyB0byBiZSB1c2VkIGZvcgogICAg
IC8vIHNvbWUgb3RoZXIgdGhpbmdzIG5vdy4KLSAgICBpbnQgbV9sYXN0U2NyaXB0RWxlbWVudFN0
YXJ0TGluZTsKLSAgICAKKyAgICBUZXh0UG9zaXRpb24wIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFy
dFBvc2l0aW9uOwogICAgIGJvb2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczsKIH07CiAKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGYzODFkMTVmODg0YjkzY2U5NGI1ZmQ2MTk5MzllOWEyNDU4ZGM0YzkuLjll
YjUxYjJmNzdiNDg0YmRkODViODRkNDM1ZjllY2U3ZGQ1NDM5ZWYgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDEwLTA5LTIzICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBI
VE1MIHBhcnNlciBzaG91bGQgcHJvdmlkZSBzY3JpcHQgY29sdW1uIHBvc2l0aW9uIHdpdGhpbiBI
VE1MIGRvY3VtZW50IHRvIEphdmFTY3JpcHQgZW5naW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTI3MQorCisgICAgICAgIFJlcGxhY2VzIHNjcmlw
dCBsaW5lIG51bWJlciB3aXRoIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBz
cmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVj
dXRlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRl
U2NyaXB0QW5kUmV0dXJuVmFsdWUpOgorCiAyMDEwLTA5LTIzICBUb255IENoYW5nICA8dG9ueUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggZjA0OGNiOTg0ZGUwOGE3MzQ4ZjBkYTg4ZmVm
N2ZmZmUxOGQ4OGY0Zi4uZDkyNGUzOGUwNDA1MDZiNWY0MWYxMGMwZTgzMzE4NzhhZWZiNTIwNyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtNzQxLDggKzc0MSw5IEBAIHZv
aWQgV2ViRnJhbWVJbXBsOjpiaW5kVG9XaW5kb3dPYmplY3QoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBOUE9iamVjdCogb2JqZWN0KQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdChj
b25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBUZXh0UG9zaXRpb24xIHBvc2l0
aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3RhcnRMaW5l
KSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNlLCAwKTsKICAgICBtX2ZyYW1lLT5zY3JpcHQo
KS0+ZXhlY3V0ZVNjcmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwg
c291cmNlLnVybCwgc291cmNlLnN0YXJ0TGluZSkpOworICAgICAgICBTY3JpcHRTb3VyY2VDb2Rl
KHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikpOwogfQogCiB2b2lkIFdlYkZyYW1l
SW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKQEAgLTc1Miw4ICs3NTMsOSBAQCB2
b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKICAgICBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbihX
VEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlc0luW2ldLnN0YXJ0TGlu
ZSksIFdURjo6T25lQmFzZWROdW1iZXI6OnNfYmFzZSwgMCk7CiAgICAgICAgIHNvdXJjZXMuYXBw
ZW5kKFNjcmlwdFNvdXJjZUNvZGUoCi0gICAgICAgICAgICBzb3VyY2VzSW5baV0uY29kZSwgc291
cmNlc0luW2ldLnVybCwgc291cmNlc0luW2ldLnN0YXJ0TGluZSkpOworICAgICAgICAgICAgc291
cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9uKSk7CiAgICAgfQogCiAg
ICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSWQsIHNv
dXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKQEAgLTgwNSw4ICs4MDcsOSBAQCB2b2lkIFdlYkZyYW1l
SW1wbDo6Y29sbGVjdEdhcmJhZ2UoKQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZyYW1lSW1w
bDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgIGNvbnN0IFdlYlNjcmlwdFNvdXJj
ZSYgc291cmNlKQogeworICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51
bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2VkTnVt
YmVyOjpzX2Jhc2UsIDApOwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNj
cmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwg
c291cmNlLnN0YXJ0TGluZSkpLnY4VmFsdWUoKTsKKyAgICAgICAgU2NyaXB0U291cmNlQ29kZShz
b3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKS52OFZhbHVlKCk7CiB9CiAKIC8vIFJl
dHVybnMgdGhlIFY4IGNvbnRleHQgZm9yIHRoaXMgZnJhbWUsIG9yIGFuIGVtcHR5IGhhbmRsZSBp
ZiB0aGVyZSBpcyBub25lLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68715</attachid>
            <date>2010-09-24 11:11:25 -0700</date>
            <delta_ts>2010-09-24 14:21:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20100924221123.patch</filename>
            <type>text/plain</type>
            <size>59246</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2NGY2Zjk3MTY5ZGZhNzQwMjY5YTk4OTE0ZmIzZTVlMDY2NGI4NWE3Li5j
NmQxZGY4ZWVjNWVjYzBkYWIxNzM1MDgzMDk1OGVlYjkxNTIxYWU2IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTAtMDktMjMgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvVGV4dFBvc2l0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogd3RmL1Rl
eHRQb3NpdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGV4dFBvc2l0aW9uOjpUZXh0UG9z
aXRpb24pOgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbik6Cisg
ICAgICAgIChXVEY6OlRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKToKKyAgICAgICAg
KFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6
WmVyb0Jhc2VkTnVtYmVyOjpaZXJvQmFzZWROdW1iZXIpOgorICAgICAgICAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6Onplcm9CYXNlZEludCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6T25lQmFzZWRO
dW1iZXIpOgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6b25lQmFzZWRJbnQpOgorICAg
ICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6Y29udmVydEFzWmVyb0Jhc2VkSW50KToKKyAgICAg
ICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRUb1plcm9CYXNlZCk6CisgICAgICAgIChX
VEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6dG9PbmVCYXNlZFRl
eHRQb3NpdGlvbik6CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6Y29udmVydFRvT25l
QmFzZWQpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorCiAyMDEwLTA5LTIyICBPbGl2ZXIgSHVu
dCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4u
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDg4ZDE3NjE3YjNhNGI4ODg0YzA0YTI2ODY4YzZmMDZk
MTczMWM3NTAuLjJjNmNhZDQ5YTM3MWEyMmZmMmYzMTc2YzFhNTA0ZDlhNWJmMTUwZWUgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmFtCkBAIC01MTMsNiArNTEzLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHAgXAogCUph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1dURlN0cmluZy5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvVGV4dFBvc2l0aW9uLmNw
cCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL1RleHRQb3NpdGlvbi5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgXAogCUphdmFTY3JpcHRDb3Jl
L3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggXAogCUphdmFTY3JpcHRDb3JlL3d0
Zi9UaHJlYWRpbmcuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmd5cGkgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCmluZGV4IDQ2Mjk2
MGQ1MWRkNmRiZTQwMmQ1ODYzZDIwOGMxMzI4Y2JjMTVhY2UuLjUxMmJjNTI2NWRjNGNhMGZmMWU0
OGI2NmE5NTgxODZmMDQyMTgyOTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cGkKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAt
NDI0LDYgKzQyNCw4IEBACiAgICAgICAgICAgICAnd3RmL1N0cmluZ0V4dHJhcy5oJywKICAgICAg
ICAgICAgICd3dGYvU3RyaW5nSGFzaEZ1bmN0aW9ucy5oJywKICAgICAgICAgICAgICd3dGYvVENQ
YWNrZWRDYWNoZS5oJywKKyAgICAgICAgICAgICd3dGYvVGV4dFBvc2l0aW9uLmgnLAorICAgICAg
ICAgICAgJ3d0Zi9UZXh0UG9zaXRpb24uY3BwJywKICAgICAgICAgICAgICd3dGYvcXQvTWFpblRo
cmVhZFF0LmNwcCcsCiAgICAgICAgICAgICAnd3RmL3F0L1N0cmluZ1F0LmNwcCcsCiAgICAgICAg
ICAgICAnd3RmL3F0L1RocmVhZGluZ1F0LmNwcCcsCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS93dGYvQ01ha2VMaXN0cy50eHQgYi9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQK
aW5kZXggODk2Nzk0ZWY0MWU4ZjAyMTg0MDk5NGFjMzUyNDc4NzJiMmRhZTE2OS4uZTE3ODdjYTAz
YWQ1ODQ5MmU2ZTE4Yzg2MTcwNjViNjI5ZTI4ZDFjNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3Rz
LnR4dApAQCAtOSw2ICs5LDcgQEAgU0VUKFdURl9TT1VSQ0VTCiAgICAgUmFuZG9tTnVtYmVyLmNw
cAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKICAgICBTdHJpbmdFeHRyYXMuY3BwCisg
ICAgVGV4dFBvc2l0aW9uLmNwcAogICAgIFRocmVhZGluZy5jcHAKICAgICBUeXBlVHJhaXRzLmNw
cAogICAgIFdURlRocmVhZERhdGEuY3BwCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYv
VGV4dFBvc2l0aW9uLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UZXh0UG9zaXRpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjlhMTdlMDMwOTU5ZDI3YTlkODFkM2UxMDIwODkwODhhOTY3OTcxYWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGV4dFBvc2l0aW9uLmNwcApAQCAtMCww
ICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRleHRQb3NpdGlvbi5oIgorCituYW1lc3BhY2UgV1RGIHsKKworY29uc3QgWmVyb0Jhc2VkTnVt
YmVyIFplcm9CYXNlZE51bWJlcjo6c19iYXNlKDApOworY29uc3QgWmVyb0Jhc2VkTnVtYmVyIFpl
cm9CYXNlZE51bWJlcjo6c19iZWxvd0Jhc2UoLTEpOworCitjb25zdCBPbmVCYXNlZE51bWJlciBP
bmVCYXNlZE51bWJlcjo6c19iYXNlKDEpOworY29uc3QgT25lQmFzZWROdW1iZXIgT25lQmFzZWRO
dW1iZXI6OnNfYmVsb3dCYXNlKDApOworCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RleHRQb3NpdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L1RleHRQb3NpdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0YzJjMDY5MGJjYWQ0MDQ0NGZmN2I3YjFlYmI1
Y2MxOGNjYmJmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGV4dFBv
c2l0aW9uLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRQ
b3NpdGlvbl9oCisjZGVmaW5lIFRleHRQb3NpdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworCisvKgorICogVGV4dCBQb3NpdGlvbgorICoK
KyAqIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUgc3BlY2lmaWVzIGNvb3JkaW5hdGVzIHdpdGhpbiBh
biB0ZXh0IHJlc291cmNlLiBJdCBpcyB1c2VkIG1vc3RseQorICogZm9yIHNhdmluZyBzY3JpcHQg
c291cmNlIHBvc2l0aW9uLiBUaGUgdGhpcmQgZmllbGQgJ2dlbmVyYXRpb24nIHJlZmxlY3RzIHRo
ZSBmYWN0CisgKiB0aGF0IGluIEhUTUwgZG9jdW1lbnQgaXRzIGFueSBwYXJ0IGNhbiBiZSBnZW5l
cmF0ZWQgb24gdGhlIGZseSwgYnkgYSAnZG9jdW1lbnQud3JpdGUnCisgKiBjYWxsLiBXaGlsZSBl
bGVtZW50cyBvZiB0aGUgZ2VuZXJhdGVkIHBhcnQgbWF5IHN0aWxsIGhhdmUgY29vcmRpbmF0ZXMg
KHByb2JhYmx5KSwKKyAqIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIGNvb3JkaW5h
dGVzIGluIHRoZSBvcmlnaW5hbCB0ZXh0LgorICogU28gZ2VuZXJhdGlvbiA9PSAwIG1lYW5zIHRo
YXQgY29vcmRpbmF0ZXMgYXBwbHkgdG8gb3JpZ2luYWwgdGV4dCwKKyAqIGdlbmVyYXRpb24gPT0g
MSBhcHBsaWVzIHRvIGEgZWxlbWVudHMgZ2VuZXJhdGVkIGJ5IGEgc2NyaXB0IGluIG9yaWdpbmFs
IHRleHQsCisgKiBnZW5lcmF0aW9uID09IDIgdG8gZWxlbWVudHMgZ2VuZXJhdGVkIGZyb20gYSBz
Y3JpcHQgaW4gYSBnZW5lcmF0ZWQgcGFydCBhbmQgc28gb24uCisgKgorICogTGF0ZXIgVGV4dFBv
c2l0aW9uMCBhbmQgVGV4dFBvc2l0aW9uMSBhbmQgYm90aCBudW1iZXIgdHlwZXMgY2FuIGJlIG1l
cmdlZCB0b2dldGhlciBxdWl0ZSBlYXNpbHkuCisgKgorICoKKyAqIDAtYmFzZWQgYW5kIDEtYmFz
ZWQKKyAqCisgKiBMaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBjb3VsZCBiZSBpbnRlcnByZXRlZCBh
cyB6ZXJvLWJhc2VkIG9yIDEtYmFzZWQuIFNpbmNlCisgKiBib3RoIHByYWN0aWNlcyBjb2V4aXN0
IGluIFdlYktpdCBzb3VyY2UgYmFzZSwgJ2ludCcgdHlwZSBzaG91bGQgYmUgcmVwbGFjZWQgd2l0
aAorICogYSBkZWRpY2F0ZWQgd3JhcHBlciB0eXBlcywgc28gdGhhdCBjb21waWxlciBoZWxwZWQg
dXMgd2l0aCB0aGlzIGFtYmlndWl0eS4KKyAqCisgKiBIZXJlIHdlIGludHJvZHVjZSAyIHR5cGVz
IG9mIG51bWJlcnM6IFplcm9CYXNlZE51bWJlciBhbmQgT25lQmFzZWROdW1iZXIgYW5kCisgKiAy
IGNvcnJlc3BvbmRpbmcgdHlwZXMgb2YgVGV4dFBvc2l0aW9uIHN0cnVjdHVyZS4gV2hpbGUgb25s
eSBvbmUgdHlwZSBvdWdodCB0byBiZSBlbm91Z2gsCisgKiB0aGlzIGlzIGRvbmUgdG8ga2VlcCB0
cmFuc2l0aW9uIHRvIHRoZSBuZXcgdHlwZXMgYXMgdHJhbnNwYXJlbnQgYXMgcG9zc2libGU6Cisg
KiBlLmcuIGluIGFyZWFzIHdoZXJlIDAtYmFzZWQgaW50ZWdlcnMgYXJlIHVzZWQsIFRleHRQb3Np
dGlvbjAgc2hvdWxkIGJlIGludHJvZHVjZWQuIFRoaXMKKyAqIHdheSBhbGwgY2hhbmdlcyB3aWxs
IHJlbWFpbiB0cmFja2FibGUuCisgKgorICogTGF0ZXIgYm90aCBudW1iZXIgdHlwZXMgY2FuIGJl
IG1lcmdlZCBpbiBvbmUgdHlwZSBxdWl0ZSBlYXNpbHkuCisgKgorICogRm9yIHR5cGUgc2FmZXR5
IGFuZCBmb3IgdGhlIGZ1dHVyZSB0eXBlIG1lcmdlIGl0IGlzIGltcG9ydGFudCB0aGF0IGFsbCBv
cGVyYXRpb25zIGluIEFQSQorICogdGhhdCBhY2NlcHQgb3IgcmV0dXJuIGludGVnZXIgaGF2ZSBh
IG5hbWUgZXhwbGljaXRseSBkZWZpbmluZyBiYXNlIG9mIGludGVnZXIuIEZvciB0aGlzIHJlYXNv
bgorICogaW50LXJlY2VpdmluZyBjb25zdHJ1Y3RvcnMgYXJlIGhpZGRlbiBmcm9tIEFQSS4KKyAq
LworCit0ZW1wbGF0ZTx0eXBlbmFtZSBOVU1CRVI+CitjbGFzcyBUZXh0UG9zaXRpb24geworcHVi
bGljOgorICAgIFRleHRQb3NpdGlvbihOVU1CRVIgbGluZSwgTlVNQkVSIGNvbHVtbiwgaW50IGdl
bmVyYXRpb24pCisgICAgICAgIDogbV9saW5lKGxpbmUpCisgICAgICAgICwgbV9jb2x1bW4oY29s
dW1uKQorICAgICAgICAsIG1fZ2VuZXJhdGlvbihnZW5lcmF0aW9uKQorICAgIHsKKyAgICB9Cisg
ICAgVGV4dFBvc2l0aW9uKCkge30KKworICAgIC8vIEEgJ21pbmltdW0nIHZhbHVlIG9mIHBvc2l0
aW9uLCB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KKyAgICBzdGF0aWMgVGV4dFBvc2l0aW9uPE5V
TUJFUj4gbWluaW11bVBvc2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPE5VTUJFUj4oTlVN
QkVSOjpzX2Jhc2UsIE5VTUJFUjo6c19iYXNlLCAwKTsgfQorCisgICAgLy8gQSB2YWx1ZSB3aXRo
IGxpbmUgdmFsdWUgbGVzcyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxlIHBv
c2l0aW9uLgorICAgIHN0YXRpYyBUZXh0UG9zaXRpb248TlVNQkVSPiBiZWxvd1JhbmdlUG9zaXRp
b24oKSB7IHJldHVybiBUZXh0UG9zaXRpb248TlVNQkVSPihOVU1CRVI6OnNfYmVsb3dCYXNlLCBO
VU1CRVI6OnNfYmFzZSwgMCk7IH0KKworICAgIE5VTUJFUiBtX2xpbmU7CisgICAgTlVNQkVSIG1f
Y29sdW1uOworICAgIGludCBtX2dlbmVyYXRpb247Cit9OworCisKK2NsYXNzIE9uZUJhc2VkTnVt
YmVyOworCisvLyBBbiBpbnQgd3JhcHBlciB0aGF0IGFsd2F5cyByZW1pbmRzIHlvdSB0aGF0IHRo
ZSBudW1iZXIgc2hvdWxkIGJlIDAtYmFzZWQKK2NsYXNzIFplcm9CYXNlZE51bWJlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFplcm9CYXNlZE51bWJlciBmcm9tWmVyb0Jhc2VkSW50KGludCB6ZXJv
QmFzZWRJbnQpIHsgcmV0dXJuIFplcm9CYXNlZE51bWJlcih6ZXJvQmFzZWRJbnQpOyB9CisKKyAg
ICBaZXJvQmFzZWROdW1iZXIoKSB7fQorCisgICAgaW50IHplcm9CYXNlZEludCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKworICAgIE9uZUJhc2VkTnVtYmVyIGNvbnZlcnRUb09uZUJhc2Vk
KCkgY29uc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgWmVyb0Jhc2VkTnVtYmVyIHNfYmFzZTsgLy8g
MAorICAgIHN0YXRpYyBjb25zdCBaZXJvQmFzZWROdW1iZXIgc19iZWxvd0Jhc2U7IC8vIC0xCisK
K3ByaXZhdGU6CisgICAgWmVyb0Jhc2VkTnVtYmVyKGludCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVl
KSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKworLy8gQW4gaW50IHdyYXBwZXIgdGhhdCBhbHdh
eXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAxLWJhc2VkCitjbGFzcyBP
bmVCYXNlZE51bWJlciB7CitwdWJsaWM6CisgICAgc3RhdGljIE9uZUJhc2VkTnVtYmVyIGZyb21P
bmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9uZUJhc2VkTnVtYmVyKG9uZUJh
c2VkSW50KTsgfQorICAgIE9uZUJhc2VkTnVtYmVyKCkge30KKworICAgIGludCBvbmVCYXNlZElu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBpbnQgY29udmVydEFzWmVyb0Jhc2Vk
SW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KKyAgICBaZXJvQmFzZWROdW1iZXIg
Y29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyOjpmcm9t
WmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQorCisgICAgc3RhdGljIGNvbnN0IE9uZUJhc2Vk
TnVtYmVyIHNfYmFzZTsgLy8gMQorICAgIHN0YXRpYyBjb25zdCBPbmVCYXNlZE51bWJlciBzX2Jl
bG93QmFzZTsgLy8gMAorCitwcml2YXRlOgorICAgIE9uZUJhc2VkTnVtYmVyKGludCB2YWx1ZSkg
OiBtX3ZhbHVlKHZhbHVlKSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKwordHlwZWRlZiBUZXh0
UG9zaXRpb248WmVyb0Jhc2VkTnVtYmVyPiBUZXh0UG9zaXRpb24wOwordHlwZWRlZiBUZXh0UG9z
aXRpb248T25lQmFzZWROdW1iZXI+IFRleHRQb3NpdGlvbjE7CisKK2lubGluZSBUZXh0UG9zaXRp
b24wIHRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKGNvbnN0IFRleHRQb3NpdGlvbjEmIHBvc2l0aW9u
KQoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24wKHBvc2l0aW9uLm1fbGluZS5jb252ZXJ0VG9a
ZXJvQmFzZWQoKSwgcG9zaXRpb24ubV9jb2x1bW4uY29udmVydFRvWmVyb0Jhc2VkKCksIHBvc2l0
aW9uLm1fZ2VuZXJhdGlvbik7Cit9CisKK2lubGluZSBUZXh0UG9zaXRpb24xIHRvT25lQmFzZWRU
ZXh0UG9zaXRpb24oY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24pCit7CisgICAgcmV0dXJu
IFRleHRQb3NpdGlvbjEocG9zaXRpb24ubV9saW5lLmNvbnZlcnRUb09uZUJhc2VkKCksIHBvc2l0
aW9uLm1fY29sdW1uLmNvbnZlcnRUb09uZUJhc2VkKCksIHBvc2l0aW9uLm1fZ2VuZXJhdGlvbik7
Cit9CisKK2lubGluZSBPbmVCYXNlZE51bWJlciBaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09u
ZUJhc2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNl
ZEludChtX3ZhbHVlICsgMSk7Cit9CisKK30KKworCit1c2luZyBXVEY6OlRleHRQb3NpdGlvbjA7
Cit1c2luZyBXVEY6OlRleHRQb3NpdGlvbjE7CisKKyNlbmRpZiAvLyBUZXh0UG9zaXRpb25faApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkgYi9KYXZhU2NyaXB0Q29yZS93
dGYvd3RmLnByaQppbmRleCA4NGFjMjBlM2ZjOWZlNGI1Y2EyNGY5NTM5MmY3YmExZTkxODAxMzQw
Li45NGI3MjY5NTU1YzE0NGM1NzdiMWJkNTk3ZjhjZDk2OThmNzc0YzJmIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnBy
aQpAQCAtMTYsNiArMTYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvUGFnZUFsbG9jYXRpb24u
Y3BwIFwKICAgICB3dGYvUmFuZG9tTnVtYmVyLmNwcCBcCiAgICAgd3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHAgXAorICAgIHd0Zi9UZXh0UG9zaXRpb24uY3BwIFwKICAgICB3dGYvVGhyZWFk
aW5nTm9uZS5jcHAgXAogICAgIHd0Zi9UaHJlYWRpbmcuY3BwIFwKICAgICB3dGYvVHlwZVRyYWl0
cy5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAzODY2MTY1NzcyZGFlMzRjYmExM2M0YmRkMjU3ODVlNTcyNWIxYTM1Li5jNWVjZjM0
ZTQyMzgzZmNkNTJmZDcwYTk1YzZmM2ExYzc5ZDIyZWUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEwLTA5
LTIzICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MIHBhcnNlciBzaG91bGQgcHJv
dmlkZSBzY3JpcHQgY29sdW1uIHBvc2l0aW9uIHdpdGhpbiBIVE1MIGRvY3VtZW50IHRvIEphdmFT
Y3JpcHQgZW5naW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTI3MQorCisgICAgICAgIFJlcGxhY2VzIGxpbmUgbnVtYmVyIHdpdGggVGV4dFBvc2l0
aW9uIHN0cnVjdCBzbyB0aGF0IHNjcmlwdCBlbmdpbmUKKyAgICAgICAgZ2V0cyBzY3JpcHQgc3Rh
cnRpbmcgbGluZS9jb2x1bW4uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VD
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRTb3VyY2VD
b2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24pOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyUG9zaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlwdFNvdXJjZUNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6c3RhcnRMaW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFNvdXJjZUNvZGU6OnN0YXJ0UG9zaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZl
bnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpWOExh
enlFdmVudExpc3RlbmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2
ZW50TGlzdGVuZXI6OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpjb21waWxlU2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJ1
blNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkb20vUGVuZGlu
Z1NjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpyZWxlYXNlRWxl
bWVudEFuZENsZWFyKToKKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5oOgorICAgICAgICAo
V2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6UGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQZW5kaW5nU2NyaXB0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1Nj
cmlwdDo6c3RhcnRpbmdQb3NpdGlvbik6CisgICAgICAgICogZG9tL1NjcmlwdGFibGVEb2N1bWVu
dFBhcnNlci5oOgorICAgICAgICAqIGRvbS9YTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAq
IGRvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OnRleHRQb3NpdGlvbik6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Ny
aXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDoKKwogMjAxMC0wOS0yMyAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJv
YmVuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAppbmRleCAzMmQ2Mjk4Y2Ri
ZGE3NzJkYWExM2UxMDMzZTNjZjBhYTQwZjU5NGIyLi5mMDQ4ZTljOGE1Mzg0Y2MwMGUyMjViZTcw
YmRmN2QyYmNlZTdlMTAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNv
dXJjZUNvZGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaApA
QCAtMzUsMTUgKzM1LDE2IEBACiAjaW5jbHVkZSAiU2NyaXB0U291cmNlUHJvdmlkZXIuaCIKICNp
bmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlIDx3dGYvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAg
IFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9
IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBT
dHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0UG9zaXRp
b24xJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAg
ICAgICAgIDogbV9wcm92aWRlcihTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwg
dXJsLmlzTnVsbCgpID8gU3RyaW5nKCkgOiB1cmwuc3RyaW5nKCkpKQotICAgICAgICAsIG1fY29k
ZShtX3Byb3ZpZGVyLCBzdGFydExpbmUpCisgICAgICAgICwgbV9jb2RlKG1fcHJvdmlkZXIsIHN0
YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpCiAgICAgICAgICwgbV91cmwodXJsKQog
ICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFj
dGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKaW5kZXgg
ZGNkMGJiMzM3NzE4MTMxODQyMGMxMDczYmUyNTFhOWU1ODRiYTRiNy4uNzA4ZmJlNjdmZTk0ZDc3
MjIxMmM4YmMzZDI3ZGUxOGJkNTEwMTJjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVk
QWN0aW9uLmNwcApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjaGVk
dWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQsIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9jb2Rl
KFN0cmluZygpLCBLVVJMKCksIDApCisgICAgLCBtX2NvZGUoU3RyaW5nKCksIEtVUkwoKSwgVGV4
dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7CiAgICAgbV9mdW5jdGlvbiA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNTU2YjVjNmVhOTFiN2EwMjEyYzRlOWIyYmIy
YjllZGRlMmJmYTU0Ni4uYjQ0Nzg0ZTBlYjM1YTUyNjVkYzQ3NmY0OTVjMWMxZWZiZDgxMzhkYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0yNjAsMjAgKzI2
MCwxMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTaG91bAogICAgIHJldHVybiBTY3JpcHRWYWx1ZShv
YmplY3QpOwogfQogCi1pbnQgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyTGluZU51bWJl
cigpIGNvbnN0CitUZXh0UG9zaXRpb24wIFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlclBv
c2l0aW9uKCkgY29uc3QKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwogICAgIGlm
IChwYXJzZXIpCi0gICAgICAgIHJldHVybiBwYXJzZXItPmxpbmVOdW1iZXIoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlckNvbHVtbk51bWJl
cigpIGNvbnN0Ci17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBwYXJzZXIgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKLSAgICBpZiAocGFy
c2VyKQotICAgICAgICByZXR1cm4gcGFyc2VyLT5jb2x1bW5OdW1iZXIoKTsKLSAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIHBhcnNlci0+dGV4dFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFRl
eHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmgKaW5kZXggM2JjNDJlZmIwM2Y5YThjODBjMTY1NGE1MmVjM2UxYzc3MmM0
OGYyMy4uYzFkMzMzMTY1YTdiMzkyOGYwZjZkZmU3YzYwN2ZlZTZjYTBmM2FmNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE1NSw4ICsxNTUsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50Kik7CiAKLSAgICBpbnQgZXZlbnRI
YW5kbGVyTGluZU51bWJlcigpIGNvbnN0OwotICAgIGludCBldmVudEhhbmRsZXJDb2x1bW5OdW1i
ZXIoKSBjb25zdDsKKyAgICBUZXh0UG9zaXRpb24wIGV2ZW50SGFuZGxlclBvc2l0aW9uKCkgY29u
c3Q7CiAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGJvb2wgcHJvY2Vzc2lu
Z1RpbWVyQ2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayA9IHByb2Nlc3NpbmdU
aW1lckNhbGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCB1c2UgdGhl
IHBhcmFtZXRlciB3b3JsZCBhdCBhbGwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcAppbmRleCA3MmRmNzlkZWQzZWQ0N2NmZjFhMjdiNTk1M2EzNTk5NjNjNzdh
NjMwLi4wNDRkZWYwNTI3NmJhODRmZmM5Y2UzNmM1MTM0OWY2ZmNhODE0ZjNjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTUwLDggKzUwLDggQEAg
UGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1i
ZXIgPSAwOworICAgIC8vIEZJWE1FOiB2ZXJ5IHN0cmFuZ2U6IHdlIGluaXRpYWxpemUgemVyby1i
YXNlZCBudW1iZXIgd2l0aCAnMScuCisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbihXVEY6Olpl
cm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCgxKSwgV1RGOjpaZXJvQmFzZWROdW1iZXI6
OnNfYmFzZSwgMCk7CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKIAogICAgIGlmIChGcmFtZSogZnJh
bWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7CkBAIC02NCwxMiArNjQsMTEgQEAgUGFz
c1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAK
LSAgICAgICAgbGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckxpbmVO
dW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRI
YW5kbGVyQ29sdW1uTnVtYmVyKCk7CisgICAgICAgIHBvc2l0aW9uID0gc2NyaXB0Q29udHJvbGxl
ci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKICAgICAgICAgc291cmNlVVJMID0gbm9kZS0+ZG9j
dW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4TGF6eUV2ZW50
TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgbm9kZS0+aXNTVkdF
bGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgcmV0dXJuIFY4TGF6
eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgbm9kZS0+
aXNTVkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgcG9zaXRpb24sIFdvcmxk
Q29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKIH0KIAogUGFzc1JlZlB0cjxWOExhenlFdmVu
dExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0
cmlidXRlKiBhdHRyKQpAQCAtODEsMTAgKzgwLDYgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExp
c3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkK
ICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGxp
bmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBzb3Vy
Y2VVUkw7Ci0KICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUt
PnNjcmlwdCgpOwogICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+Y2FuRXhlY3V0ZVNjcmlwdHMo
QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk0LDEwICs4OSw5
IEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVtYmVy
KCk7Ci0gICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyQ29s
dW1uTnVtYmVyKCk7Ci0gICAgc291cmNlVVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0
cmluZygpOwotICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9j
YWxOYW1lKCkuc3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCksIGF0
dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXb3JsZENv
bnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbiA9
IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlclBvc2l0aW9uKCk7CisgICAgU3RyaW5nIHNv
dXJjZVVSTCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKKyAgICByZXR1cm4g
VjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBm
cmFtZS0+ZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VV
UkwsIHBvc2l0aW9uLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CiB9CiAKIFN0
cmluZyBldmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQqIGRvY3VtZW50LCBFdmVudExp
c3RlbmVyKiBsaXN0ZW5lcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
U291cmNlQ29kZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKaW5k
ZXggZGJjOWQ1ZTZmYzYwMDdmY2ZkZDY2MDI0ZGIwNzgyNmM2NjI2M2I1Yi4uMzcwNDFiZWY3YWNh
ZGI1N2U4Y2ExYTkzMmQ0YzgzOGNiNTlhY2E4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
b3VyY2VDb2RlLmgKQEAgLTM1LDE2ICszNSwxNyBAQAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
Y3JpcHRTb3VyY2VDb2RlIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGludCBzdGFydExpbmUgPSAx
KQorICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwm
IHVybCA9IEtVUkwoKSwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc3RhcnRQb3NpdGlvbiA9IFRleHRQ
b3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAgICAgICA6IG1fc291cmNlKHNvdXJjZSkK
ICAgICAgICAgLCBtX2NhY2hlZFNjcmlwdCgwKQogICAgICAgICAsIG1fdXJsKHVybCkKLSAgICAg
ICAgLCBtX3N0YXJ0TGluZShzdGFydExpbmUpCisgICAgICAgICwgbV9zdGFydFBvc2l0aW9uKHN0
YXJ0UG9zaXRpb24pCiAgICAgewogICAgIH0KIApAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9zb3VyY2UoY3MtPnNjcmlwdCgpKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0
KGNzKQogICAgICAgICAsIG1fdXJsKFBhcnNlZFVSTFN0cmluZywgY3MtPnVybCgpKQotICAgICAg
ICAsIG1fc3RhcnRMaW5lKDEpCisgICAgICAgICwgbV9zdGFydFBvc2l0aW9uKFRleHRQb3NpdGlv
bjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAgIHsKICAgICB9CiAKQEAgLTYzLDEzICs2NCwxNCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZTsgfQogICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRTY3JpcHQuZ2V0KCk7IH0KICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQotICAgIGludCBzdGFydExpbmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0
TGluZTsgfQorICAgIGludCBzdGFydExpbmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRp
b24ubV9saW5lLm9uZUJhc2VkSW50KCk7IH0KKyAgICBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFy
dFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFBvc2l0aW9uOyB9CiAKIHByaXZhdGU6
CiAgICAgU3RyaW5nIG1fc291cmNlOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNj
cmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiAgICAgS1VSTCBtX3VybDsKLSAgICBpbnQgbV9zdGFydExp
bmU7CisgICAgVGV4dFBvc2l0aW9uMSBtX3N0YXJ0UG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNw
cAppbmRleCA3ZjEzYzVhOGZiMjdkMzNiYmYxZDM0MTBhMDEzZWJjNzk1ZDkzZDIzLi43ZjQ2MzMz
MDYyZDZmZWI3YmU5ZjE3OTYzNTZjNmIwNWNiM2NiOGY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTQxLDE0ICs0MSwxMyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVY4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIo
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5n
JiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVt
bk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCitWOExhenlF
dmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25O
YW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNv
dXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4
dEhhbmRsZSYgd29ybGRDb250ZXh0KQogICAgIDogVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIodHJ1
ZSwgd29ybGRDb250ZXh0KQogICAgICwgbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQogICAg
ICwgbV9pc1NWR0V2ZW50KGlzU1ZHRXZlbnQpCiAgICAgLCBtX2NvZGUoY29kZSkKICAgICAsIG1f
c291cmNlVVJMKHNvdXJjZVVSTCkKLSAgICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQotICAg
ICwgbV9jb2x1bW5OdW1iZXIoY29sdW1uTnVtYmVyKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlv
bikKIHsKIH0KIApAQCAtMTE0LDcgKzExMyw3IEBAIHZvaWQgVjhMYXp5RXZlbnRMaXN0ZW5lcjo6
cHJlcGFyZUxpc3RlbmVyT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAg
ICAgLy8gSW5zZXJ0ICdcbicgb3RoZXJ3aXNlIC8vLXN0eWxlIGNvbW1lbnRzIGNvdWxkIGJyZWFr
IHRoZSBoYW5kbGVyLgogICAgIGNvZGUuYXBwZW5kKCAgIlxufSkuY2FsbCh0aGlzLCBldnQpO319
fX0pIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlRXh0ZXJuYWxTdHJpbmcgPSB2
OEV4dGVybmFsU3RyaW5nKGNvZGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0
ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fc291cmNlVVJM
LCBtX2xpbmVOdW1iZXIpOworICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gVjhQ
cm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fc291cmNlVVJMLCBtX3Bv
c2l0aW9uKTsKICAgICBpZiAoIXNjcmlwdC5Jc0VtcHR5KCkpIHsKICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUgPSBwcm94eS0+cnVuU2NyaXB0KHNjcmlwdCwgZmFsc2UpOwogICAg
ICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOExhenlFdmVudExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2
ZW50TGlzdGVuZXIuaAppbmRleCBmMTc0ZDIzYmYxMzFiMDEwZWU0ZjU5YmM0MjUyN2VlODY3NGEw
NjA4Li5jNGFhZTAzZTJhODQzYmE5NDY0NjM4YmYyMWUyYWE1NDZiZTRlYzczIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9UZXh0UG9zaXRpb24uaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw5
ICs0Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBBIFY4TGF6eUV2ZW50TGlzdGVu
ZXIgaXMgYWx3YXlzIGEgSFRNTCBldmVudCBoYW5kbGVyLgogICAgIGNsYXNzIFY4TGF6eUV2ZW50
TGlzdGVuZXIgOiBwdWJsaWMgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYg
Y29kZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uLCBjb25z
dCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwg
aXNTVkdFdmVudCwgY29kZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHdv
cmxkQ29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVu
dExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgaXNTVkdFdmVudCwgY29kZSwgc291cmNlVVJMLCBwb3Np
dGlvbiwgd29ybGRDb250ZXh0KSk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNMYXp5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNTYsNyArNTcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlTGlzdGVuZXJPYmplY3Qo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVjhMYXp5
RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50
LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGludCBsaW5lTnVt
YmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29u
dGV4dCk7CisgICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlv
bk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcg
c291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbiwgY29uc3QgV29ybGRDb250
ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpOwogCiAgICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCopOwogCkBAIC03MCw4ICs3MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2lzU1ZHRXZlbnQ7CiAgICAgICAg
IFN0cmluZyBtX2NvZGU7CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZVVSTDsKLSAgICAgICAgaW50
IG1fbGluZU51bWJlcjsKLSAgICAgICAgaW50IG1fY29sdW1uTnVtYmVyOworICAgICAgICBUZXh0
UG9zaXRpb24wIG1fcG9zaXRpb247CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggMGE2MjA3OTRjOWIwMWZjOGI3MWJkNjQzN2UwNjA0
YmVlMjZkNTdhMS4uNjJmNjViZjgzYzVjN2IxZmJiY2I2MGI3NzBkODI1ZjU0MWU4YWNiZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCkBAIC0yMzgsMTIgKzIzOCwxNSBAQCBWOFByb3h5Ojp+VjhQ
cm94eSgpCiAgICAgd2luZG93U2hlbGwoKS0+ZGVzdHJveUdsb2JhbCgpOwogfQogCi12ODo6SGFu
ZGxlPHY4OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIHY4OjpTY3Jp
cHREYXRhKiBzY3JpcHREYXRhKQordjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21w
aWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgdjg6OlNjcmlw
dERhdGEqIHNjcmlwdERhdGEpCiB7CiAgICAgY29uc3QgdWludDE2X3QqIGZpbGVOYW1lU3RyaW5n
ID0gZnJvbVdlYkNvcmVTdHJpbmcoZmlsZU5hbWUpOwotICAgIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gbmFtZSA9IHY4OjpTdHJpbmc6Ok5ldyhmaWxlTmFtZVN0cmluZywgZmlsZU5hbWUubGVuZ3Ro
KCkpOwotICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGxpbmUgPSB2ODo6SW50ZWdlcjo6TmV3
KGJhc2VMaW5lKTsKLSAgICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihuYW1lLCBsaW5lKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG5hbWU7CisgICAgaWYgKCFzY3JpcHRTdGFydFBvc2l0
aW9uLm1fZ2VuZXJhdGlvbikKKyAgICAgICAgbmFtZSA9IHY4OjpTdHJpbmc6Ok5ldyhmaWxlTmFt
ZVN0cmluZywgZmlsZU5hbWUubGVuZ3RoKCkpOworICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+
IGxpbmUgPSB2ODo6SW50ZWdlcjo6TmV3KHNjcmlwdFN0YXJ0UG9zaXRpb24ubV9saW5lLnplcm9C
YXNlZEludCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBjb2x1bW4gPSB2ODo6SW50
ZWdlcjo6TmV3KHNjcmlwdFN0YXJ0UG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCkpOwor
ICAgIHY4OjpTY3JpcHRPcmlnaW4gb3JpZ2luKG5hbWUsIGxpbmUsIGNvbHVtbik7CiAgICAgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSB2ODo6U2NyaXB0OjpDb21waWxlKGNvZGUsICZv
cmlnaW4sIHNjcmlwdERhdGEpOwogICAgIHJldHVybiBzY3JpcHQ7CiB9CkBAIC0zOTksNyArNDAy
LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlLCBOb2RlKiBub2QKIAogICAgICAgICAvLyBOT1RFOiBGb3IgY29t
cGF0aWJpbGl0eSB3aXRoIFdlYkNvcmUsIFNjcmlwdFNvdXJjZUNvZGUncyBsaW5lIHN0YXJ0cyBh
dAogICAgICAgICAvLyAxLCB3aGVyZWFzIHY4IHN0YXJ0cyBhdCAwLgotICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgp
LCBzb3VyY2Uuc3RhcnRMaW5lKCkgLSAxLCBzY3JpcHREYXRhLmdldCgpKTsKKyAgICAgICAgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51
cmwoKSwgV1RGOjp0b1plcm9CYXNlZFRleHRQb3NpdGlvbihzb3VyY2Uuc3RhcnRQb3NpdGlvbigp
KSwgc2NyaXB0RGF0YS5nZXQoKSk7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBs
YXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKCJ2OC5jb21waWxlIiwgbm9kZSwgIiIpOwogCkBA
IC00MzQsNyArNDM3LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6cnVuU2NyaXB0
KHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0LCBib29sIGlzSW4KICAgICAgICAgLy8gRklY
TUU6IElkZWFsbHksIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlLXVzZSB0aGUgb3JpZ2luIG9mIHRo
ZQogICAgICAgICAvLyBzY3JpcHQgcGFzc2VkIHRvIHVzIGFzIHRoZSBhcmd1bWVudCBpbnN0ZWFk
IG9mIHVzaW5nIGFuIGVtcHR5IHN0cmluZwogICAgICAgICAvLyBhbmQgMCBiYXNlTGluZS4KLSAg
ICAgICAgc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCAiIiwgMCk7CisgICAgICAgIHNjcmlw
dCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgIiIsIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlv
bigpKTsKICAgICB9CiAKICAgICBpZiAoaGFuZGxlT3V0T2ZNZW1vcnkoKSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmgKaW5kZXggN2YxMGEyNmVmNzYzZjc1MDcyOGI1YTBlMjc4OThiOTVjMGY1MmI2Ni4uOTgw
MGQ5MDlkNzAxYWE4MTljYjRlMDQ0ZjY3NDZkN2VkZDYxMzk3NSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmgKQEAgLTI4OSw3ICsyODksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGVja05ld0xlZ2FsKGNvbnN0IHY4OjpBcmd1bWVu
dHMmKTsKIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2Ny
aXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
aW50IGJhc2VMaW5lLCB2ODo6U2NyaXB0RGF0YSogPSAwKTsKKyAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNv
ZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0
YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHREYXRhKiA9IDApOwogCiAgICAgICAgIC8vIElmIHRoZSBl
eGNlcHRpb24gY29kZSBpcyBkaWZmZXJlbnQgZnJvbSB6ZXJvLCBhIERPTSBleGNlcHRpb24gaXMK
ICAgICAgICAgLy8gc2NoZWR1bGUgdG8gYmUgdGhyb3duLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCmluZGV4IDE2ZTBiNDEwMWVm
ZGMzNWFlNzQ0MTgxN2IwNjg3ZGI2YjVhNjVhMjUuLmNlZmIyZmFhNzM5MDg5NGIzNWQ2NWFkNTNm
MjFhOGZiYzdkZGE1NjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBib29sIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1TY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVO
YW1lLCBpbnQgYmFzZUxpbmUsIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCitT
Y3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0
cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24w
JiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRl
KQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoczsKIApAQCAtMTk2LDcgKzE5Niw3IEBAIFNjcmlw
dFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5n
JiBzY3JpcHQsIGNvbnN0IFN0CiAgICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CiAK
ICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gc2NyaXB0U3RyaW5nID0gdjhFeHRlcm5hbFN0cmlu
ZyhzY3JpcHQpOwotICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBW
OFByb3h5Ojpjb21waWxlU2NyaXB0KHNjcmlwdFN0cmluZywgZmlsZU5hbWUsIGJhc2VMaW5lKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVkU2NyaXB0ID0gVjhQcm94eTo6Y29t
cGlsZVNjcmlwdChzY3JpcHRTdHJpbmcsIGZpbGVOYW1lLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsK
ICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBydW5TY3JpcHQoY29tcGlsZWRTY3Jp
cHQpOwogCiAgICAgaWYgKCFleGNlcHRpb25DYXRjaGVyLkNhbkNvbnRpbnVlKCkpCkBAIC0yMjcs
NyArMjI3LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXAKICAgICAvLyBDb21wdXRlIHRoZSBz
b3VyY2Ugc3RyaW5nIGFuZCBwcmV2ZW50IGFnYWluc3QgaW5maW5pdGUgcmVjdXJzaW9uLgogICAg
IGlmIChtX3JlY3Vyc2lvbiA+PSBrTWF4UmVjdXJzaW9uRGVwdGgpIHsKICAgICAgICAgdjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IGNvZGUgPSB2OEV4dGVybmFsU3RyaW5nKCJ0aHJvdyBSYW5nZUVycm9y
KCdSZWN1cnNpb24gdG9vIGRlZXAnKSIpOwotICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21w
aWxlU2NyaXB0KGNvZGUsICIiLCAwKTsKKyAgICAgICAgc2NyaXB0ID0gVjhQcm94eTo6Y29tcGls
ZVNjcmlwdChjb2RlLCAiIiwgVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkpOwogICAg
IH0KIAogICAgIGlmIChWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKaW5kZXggNTg4MjRi
OWVlZjZmNDkxNDA4NGM3NzcxNjFlMjNmNmUzMGFiZTI4My4uYWExY2RlNjNhN2ZhYTM1ZTI0N2Fk
YmE0N2NjNWQ5NDJmMDA5YTI1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJT
Y3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL1RleHRQb3NpdGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTY2LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRyYWNr
RXZlbnQoRXZlbnQqKTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRo
ZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KLSAgICAgICAgU2NyaXB0VmFsdWUgZXZh
bHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBi
YXNlTGluZSwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKik7CisgICAgICAgIFNjcmlwdFZh
bHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBjb25zdCBUZXh0UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uU3RhdGUqKTsKIAogICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9m
IHRoZSBjb250ZXh0LgogICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7
IHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggN2RiMGQ4
ZDM3MzcwOWIyZTk3M2I2N2U3NzIzZTRmYzMxMWZiY2E1OS4uYjU2ZDM4MzZkN2U2YmIxYWM1ZDJj
OGM1ZWQ2MzBmMDdjMjc2ZWYyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwCkBAIC03NSw3ICs3NSw3IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNv
ZGUsCiAgICAgfQogCiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlIHN0YXRlOwotICAg
IFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNl
KCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkgLSAx
LCAmc3RhdGUpOworICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNv
dXJjZUNvZGUuc291cmNlKCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIFdURjo6dG9aZXJv
QmFzZWRUZXh0UG9zaXRpb24oc291cmNlQ29kZS5zdGFydFBvc2l0aW9uKCkpLCAmc3RhdGUpOwog
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAg
ICAgICAgICAgICpleGNlcHRpb24gPSBzdGF0ZS5leGNlcHRpb247CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcCBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3Bw
CmluZGV4IDQyZTIyNWE3ZjMyYTFiMGNkYzFiYzM0NTFiNjU0OTdhNDYxMzU2ODkuLjE4ZjYwNzEx
YTRjZDMwMjMyOWJjYWFkNGQ5OGI4YTIwYzdjZTEyZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L1BlbmRpbmdTY3JpcHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBA
IC00MCw3ICs0MCw3IEBAIFBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkKIFBhc3NSZWZQ
dHI8RWxlbWVudD4gUGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVhcigpCiB7CiAg
ICAgc2V0Q2FjaGVkU2NyaXB0KDApOwotICAgIG1fc3RhcnRpbmdMaW5lTnVtYmVyID0gMDsKKyAg
ICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24o
KTsKICAgICBtX3dhdGNoaW5nRm9yTG9hZCA9IGZhbHNlOwogICAgIHJldHVybiBtX2VsZW1lbnQu
cmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIv
V2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCmluZGV4IDQ0ZTFlNDkyODY3NmQ3OTYwMjJkZDI5
MDU0NTc2MDE1YjdhMjZlNDQuLjY1N2Y5NGVkZDgyZWI0NDdmMDg0MzYwZTdiZDNlZjVkYWI1N2Y2
MzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAorKysgYi9XZWJDb3Jl
L2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNp
bmNsdWRlIDx3dGYvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMTQgKzQ0LDE0IEBAIGNsYXNzIEVsZW1lbnQ7
CiBjbGFzcyBQZW5kaW5nU2NyaXB0IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1
YmxpYzoKICAgICBQZW5kaW5nU2NyaXB0KCkKLSAgICAgICAgOiBtX3N0YXJ0aW5nTGluZU51bWJl
cigwKQorICAgICAgICA6IG1fc3RhcnRpbmdQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1Jh
bmdlUG9zaXRpb24oKSkKICAgICAgICAgLCBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKICAgICB7
CiAgICAgfQogCiAgICAgUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JiBvdGhlcikK
ICAgICAgICAgOiBDYWNoZWRSZXNvdXJjZUNsaWVudChvdGhlcikKLSAgICAgICAgLCBtX3N0YXJ0
aW5nTGluZU51bWJlcihvdGhlci5tX3N0YXJ0aW5nTGluZU51bWJlcikKKyAgICAgICAgLCBtX3N0
YXJ0aW5nUG9zaXRpb24ob3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQogICAgICAgICAsIG1fd2F0
Y2hpbmdGb3JMb2FkKG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkKQogICAgICAgICAsIG1fZWxlbWVu
dChvdGhlci5tX2VsZW1lbnQpCiAgICAgewpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAg
ICAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IG90aGVyLm1fc3RhcnRpbmdMaW5lTnVtYmVyOwor
ICAgICAgICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247CiAg
ICAgICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gb3RoZXIubV93YXRjaGluZ0ZvckxvYWQ7CiAgICAg
ICAgIG1fZWxlbWVudCA9IG90aGVyLm1fZWxlbWVudDsKICAgICAgICAgc2V0Q2FjaGVkU2NyaXB0
KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKQEAgLTc0LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gRklYTUU6IE5vIHNldHRlciBtZWFucyB0aGlzIGlzIG5ldmVyIHNldCB0byBhbnl0aGluZyBv
dGhlciB0aGFuIDAuCiAgICAgLy8gVGhpcyBpcyBlaXRoZXIgdW5uZWNlc3Nhcnkgb3IgaW5jb3Jy
ZWN0LgotICAgIGludCBzdGFydGluZ0xpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0
aW5nTGluZU51bWJlcjsgfQorICAgIFRleHRQb3NpdGlvbjEgc3RhcnRpbmdQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdQb3NpdGlvbjsgfQogCiAgICAgYm9vbCB3YXRjaGluZ0Zv
ckxvYWQoKSBjb25zdCB7IHJldHVybiBtX3dhdGNoaW5nRm9yTG9hZDsgfQogICAgIHZvaWQgc2V0
V2F0Y2hpbmdGb3JMb2FkKGJvb2wgYikgeyBtX3dhdGNoaW5nRm9yTG9hZCA9IGI7IH0KQEAgLTg5
LDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSopOwogCiBwcml2YXRlOgotICAgIGludCBtX3N0YXJ0aW5nTGluZU51bWJlcjsg
Ly8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCisgICAgVGV4dFBvc2l0aW9uMSBt
X3N0YXJ0aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgog
ICAgIGJvb2wgbV93YXRjaGluZ0ZvckxvYWQ7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVu
dDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmggYi9X
ZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAppbmRleCA4YjE2MzA0MTIxMDRl
NGU0NWEwMTMyM2RkMjI1NWU2NTY0ZTM0MDQ1Li5iNjMzZjM1MzUxZjYwODMyNjNiNDIxOGJhZWE4
ODRiMGJlZDJhODhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIuaAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaApAQCAt
MjcsMTAgKzI3LDEwIEBACiAjZGVmaW5lIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcl9oCiAKICNp
bmNsdWRlICJEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL1RleHRQ
b3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNlZ21lbnRlZFN0cmlu
ZzsKIGNsYXNzIFhTU0F1ZGl0b3I7CiAKIGNsYXNzIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciA6
IHB1YmxpYyBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyIHsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gVGhlc2UgYXJlIHVzZWQgdG8gZXhwb3NlIHRoZSBjdXJyZW50IGxpbmUv
Y29sdW1uIHRvIHRoZSBzY3JpcHRpbmcgc3lzdGVtLgogICAgIHZpcnR1YWwgaW50IGxpbmVOdW1i
ZXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdCA9IDA7CiAK
ICAgICBYU1NBdWRpdG9yKiB4c3NBdWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV94c3NBdWRpdG9y
OyB9CiAgICAgdm9pZCBzZXRYU1NBdWRpdG9yKFhTU0F1ZGl0b3IqIGF1ZGl0b3IpIHsgbV94c3NB
dWRpdG9yID0gYXVkaXRvcjsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQ
YXJzZXIuaCBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZTA3NzBiYWRi
YWZmN2JhMTEwMjBhZGRjNzEyNDllZjNkZWM4MjBkNC4uZTg4NjJlMTk3MWE2N2RhNTYzNWRjMzc1
YTM1ZmQ2MDJkMzI2YjE2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXIuaAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oCkBAIC0xMDIsNyArMTAy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBXTUxFcnJvckhhbmRsaW5nIHVz
ZXMgdGhlc2UgZnVuY3Rpb25zLgogICAgICAgICB2aXJ0dWFsIGJvb2wgd2VsbEZvcm1lZCgpIGNv
bnN0IHsgcmV0dXJuICFtX3Nhd0Vycm9yOyB9CiAgICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1i
ZXIoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7Cisg
ICAgICAgIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwogCkBAIC0xMjksNiAr
MTI5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgYXBwZW5kRnJhZ21l
bnRTb3VyY2UoY29uc3QgU3RyaW5nJik7CiAKKyAgICAgICAgaW50IGNvbHVtbk51bWJlcigpIGNv
bnN0OworCiAjaWYgVVNFKFFYTUxTVFJFQU0pCiBwcml2YXRlOgogICAgICAgICB2b2lkIHBhcnNl
KCk7CkBAIC0yMDgsNyArMjEwLDcgQEAgcHVibGljOgogCiAgICAgICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFNjcmlwdD4gbV9wZW5kaW5nU2NyaXB0OwogICAgICAgICBSZWZQdHI8RWxl
bWVudD4gbV9zY3JpcHRFbGVtZW50OwotICAgICAgICBpbnQgbV9zY3JpcHRTdGFydExpbmU7Cisg
ICAgICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRTdGFydFBvc2l0aW9uOwogCiAgICAgICAgIGJv
b2wgbV9wYXJzaW5nRnJhZ21lbnQ7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1l
c3BhY2VVUkk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCA1
NTM5MDcyZWU1OGNiYTAxNWYzYjZjZTVkNDRjY2I3MWRiM2YxNWZiLi5lMDVkZGYzZjgyY2ZiNjRk
NjJjNzAyYWUwNDE0Zjk0MDMwZTZkNGZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2Vy
TGlieG1sMi5jcHAKQEAgLTU1OCw3ICs1NTgsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9j
dW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmlldykKICAg
ICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAs
IG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1f
c2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkK
ICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNz
aW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKIHsKQEAgLTU4NSw3ICs1ODUsNyBAQCBYTUxE
b2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21l
bnQsIEVsZW1lbnQqIHBhcmVudAogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCiAgICAgLCBtX2xh
c3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3Njcmlw
dFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6
OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1ZSkKICAg
ICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihzY3JpcHRpbmdQZXJtaXNzaW9uKQogewpAQCAtODE3
LDcgKzgxNyw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0
IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhCiAKICAgICBTY3JpcHRFbGVtZW50
KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwogICAg
IGlmIChzY3JpcHRFbGVtZW50KQotICAgICAgICBtX3NjcmlwdFN0YXJ0TGluZSA9IGxpbmVOdW1i
ZXIoKTsKKyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdG9PbmVCYXNlZFRleHRQb3Np
dGlvbih0ZXh0UG9zaXRpb24oKSk7CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXByZWNhdGVkUGFy
c2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lk
IFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNv
dXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwo
KSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2Ny
aXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3Jp
cHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsK
IAogICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRldGFjaGVkIHRoZSBwYXJzZXIKICAg
ICAgICAgaWYgKGlzRGV0YWNoZWQoKSkKQEAgLTEzNjksMTIgKzEzNjksMjYgQEAgdm9pZCogeG1s
RG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
ciwgY29uc3QgU3RyaW4KIAogaW50IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+bGluZSA6IDE7
CisgICAgLy8gRklYTUU6IHRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFz
ZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KKyAgICAvLyAgIE5ldyAi
LSAxIiBmaXhlcyB0aGlzLiBJcyBpdCBjb3JyZWN0PworICAgIHJldHVybiAoY29udGV4dCgpID8g
Y29udGV4dCgpLT5pbnB1dC0+bGluZSA6IDEpIC0gMTsKIH0KIAogaW50IFhNTERvY3VtZW50UGFy
c2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAogewotICAgIHJldHVybiBjb250ZXh0KCkgPyBjb250
ZXh0KCktPmlucHV0LT5jb2wgOiAxOworICAgIC8vIEZJWE1FOiB0aGUgaW1wbGVtZW50YXRpb24g
cHJvYmFibHkgcmV0dXJucyAxLWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0dXJuIDAt
YmFzZWQuCisgICAgLy8gICBOZXcgIi0gMSIgZml4ZXMgdGhpcy4gSXMgaXQgY29ycmVjdD8KKyAg
ICByZXR1cm4gIChjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxKSAtIDE7Cit9
CisKK1RleHRQb3NpdGlvbjAgWE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0
Cit7CisgICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0ID0gdGhpcy0+Y29udGV4dCgpOworICAg
IGlmIChjb250ZXh0KSB7CisgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6T25lQmFz
ZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSkuY29udmVydFRv
WmVyb0Jhc2VkKCksCisgICAgICAgICAgICBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkuY29udmVydFRvWmVyb0Jhc2VkKCksIDApOworICAg
IH0KKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7CiB9CiAKIHZv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXJRdC5jcHAKaW5kZXggNzVhMjBiZTM1NDFjZjUyN2VlNTQ5ODRkMjE0ODI4MWFkMDgyNGY2NC4u
NjE1YTI2MzFkOWY5NmQzNTczNzhkN2FhYzcxZDQ0ZTk0NjQwNGY3YyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9kb20vWE1MRG9j
dW1lbnRQYXJzZXJRdC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6
WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmll
dykKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkK
ICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAg
ICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRp
b24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9zY3JpcHRpbmdQ
ZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKIHsKQEAgLTEzMCw3ICsxMzAsNyBA
QCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudAogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCiAgICAg
LCBtX2xhc3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBt
X3NjcmlwdFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3Np
dGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1
ZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihwZXJtaXNzaW9uKQogewpAQCAtMjMyLDYg
KzIzMiwxMSBAQCBpbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fc3RyZWFtLmNvbHVtbk51bWJlcigpOwogfQogCitUZXh0UG9zaXRpb24wIFhN
TERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBUZXh0
UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyKGxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jh
c2VkTnVtYmVyKGNvbHVtbk51bWJlcigpKSwgMCk7Cit9CisKIHZvaWQgWE1MRG9jdW1lbnRQYXJz
ZXI6OnN0b3BQYXJzaW5nKCkKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI6OnN0b3BQ
YXJzaW5nKCk7CkBAIC01MTYsNyArNTIxLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFy
c2VTdGFydEVsZW1lbnQoKQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRv
U2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2NyaXB0RWxlbWVudCkK
LSAgICAgICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAgIG1fc2Ny
aXB0U3RhcnRQb3NpdGlvbiA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbih0ZXh0UG9zaXRp
b24oKSk7CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQobmV3
RWxlbWVudC5nZXQoKSk7CiAKQEAgLTU4OCw3ICs1OTMsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwYXJzZUVuZEVsZW1lbnQoKQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Zp
ZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2Ny
aXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRT
dGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1
dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCks
IGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKICAgICB9CiAgICAg
bV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgcG9wQ3VycmVudE5vZGUoKTsKQEAgLTcw
OSw0ICs3MTQsMyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUR0ZCgpCiAKIH0KIH0K
LQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3Bw
IGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDYzMGI2
YWE2ZTFiMGQ2NjUwOGNmZDEyOTRhNzAyYzNkZDNlZDJjZjAuLjE5OGI5ZjQwZDkyY2IxYTg0ZTk3
Yzg0ZjZhMzM1ZDVlNTllYjk2NGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5jcHAKQEAgLTE5NCwxMiArMTk0LDEyIEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2Vy
OjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKQogewogICAgIEFTU0VSVChtX3RyZWVC
dWlsZGVyLT5pc1BhdXNlZCgpKTsKIAotICAgIGludCBzY3JpcHRTdGFydExpbmUgPSAwOwotICAg
IFJlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlw
dFRvUHJvY2VzcyhzY3JpcHRTdGFydExpbmUpOworICAgIFRleHRQb3NpdGlvbjEgc2NyaXB0U3Rh
cnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpOworICAgIFJl
ZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRv
UHJvY2VzcyhzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICAvLyBXZSB3aWxsIG5vdCBoYXZlIGEg
c2NyaXB0UnVubmVyIHdoZW4gcGFyc2luZyBhIERvY3VtZW50RnJhZ21lbnQuCiAgICAgaWYgKCFt
X3NjcmlwdFJ1bm5lcikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fc2NyaXB0
UnVubmVyLT5leGVjdXRlKHNjcmlwdEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydExpbmUp
OworICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZShzY3JpcHRFbGVtZW50LnJlbGVh
c2UoKSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2Vy
OjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQpAQCAtNDE1LDkgKzQxNSwxNCBA
QCBpbnQgSFRNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKICAgICByZXR1cm4g
bV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsKIH0KIAotaW50IEhUTUxEb2N1bWVudFBhcnNlcjo6
Y29sdW1uTnVtYmVyKCkgY29uc3QKK1RleHRQb3NpdGlvbjAgSFRNTERvY3VtZW50UGFyc2VyOjp0
ZXh0UG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX3Rva2VuaXplci0+Y29sdW1uTnVt
YmVyKCk7CisgICAgaW50IGxpbmVaZXJvQmFzZWQgPSBtX3Rva2VuaXplci0+bGluZU51bWJlcigp
OworICAgIGludCBjb2x1bW5PbmVCYXNlZCA9IG1fdG9rZW5pemVyLT5jb2x1bW5OdW1iZXIoKTsK
KyAgICBpbnQgZ2VuZXJhdGlvbiA9IG1fd3JpdGVOZXN0aW5nTGV2ZWw7CisKKyAgICByZXR1cm4g
VGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5l
WmVyb0Jhc2VkKSwKKyAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50
KGNvbHVtbk9uZUJhc2VkKS5jb252ZXJ0VG9aZXJvQmFzZWQoKSwgZ2VuZXJhdGlvbik7CiB9CiAK
IGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGU2NWE1ODJhNzVlMGUw
M2NmNDhmZGJiNGJjOGU4YzA3YzI1MjYwMDAuLjVkMjZhNTY1OTZiOGEwMzFkMDdhNjUwN2E2OTU1
NGJkMjc5OWYyZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApA
QCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0V4ZWN1dGluZ1Nj
cmlwdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JT
dHlsZXNoZWV0cygpOwogICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRleHRQb3NpdGlv
bjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBIVE1MU2NyaXB0UnVubmVySG9zdAog
ICAgIHZpcnR1YWwgdm9pZCB3YXRjaEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IDRmNTRmNDI5Mjg3MGFjZDUzODU0
ZmM0NzEwODcwZGQ5ZGYxNGYyZDEuLjk2NGU1OGE5ZTBmMmZiODkyYWI2ZTgzOTJhZTllYTU3YmQ0
ZGYzZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAtOTgs
NyArOTgsNyBAQCBTY3JpcHRTb3VyY2VDb2RlIEhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21Q
ZW5kaW5nU2NyaXB0KGNvbnN0IFBlbmRpbmdTY3JpcHQmCiAgICAgICAgIHJldHVybiBTY3JpcHRT
b3VyY2VDb2RlKHNjcmlwdC5jYWNoZWRTY3JpcHQoKSk7CiAgICAgfQogICAgIGVycm9yT2NjdXJy
ZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVudCgp
LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50
KSwgc2NyaXB0LnN0YXJ0aW5nTGluZU51bWJlcigpKTsKKyAgICByZXR1cm4gU2NyaXB0U291cmNl
Q29kZShzY3JpcHQuZWxlbWVudCgpLT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlw
dEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0LnN0YXJ0aW5nUG9zaXRpb24oKSk7CiB9CiAK
IGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6aXNQZW5kaW5nU2NyaXB0UmVhZHkoY29uc3QgUGVuZGlu
Z1NjcmlwdCYgc2NyaXB0KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAgdm9pZCBIVE1MU2NyaXB0UnVu
bmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiAK
IC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hdGNoIDEwLjIuNS4xMSAiQW4gZW5kIHRhZyB3aG9z
ZSB0YWcgbmFtZSBpcyAnc2NyaXB0JyIKIC8vIFNjcmlwdCBoYW5kbGluZyBsaXZlcyBvdXRzaWRl
IHRoZSB0cmVlIGJ1aWxkZXIgdG8ga2VlcCB0aGUgZWFjaCBjbGFzcyBzaW1wbGUuCi1ib29sIEhU
TUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50
LCBpbnQgc3RhcnRMaW5lKQorYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQ
dHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3Rh
cnRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CiAgICAgLy8gRklYTUU6
IElmIHNjcmlwdGluZyBpcyBkaXNhYmxlZCwgYWx3YXlzIGp1c3QgcmV0dXJuIHRydWU7CiAKICAg
ICAvLyBUcnkgdG8gZXhlY3V0ZSB0aGUgc2NyaXB0IGdpdmVuIHRvIHVzLgotICAgIHJ1blNjcmlw
dChzY3JpcHRFbGVtZW50LmdldCgpLCBzdGFydExpbmUpOworICAgIHJ1blNjcmlwdChzY3JpcHRF
bGVtZW50LmdldCgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGlmIChoYXZlUGFyc2lu
Z0Jsb2NraW5nU2NyaXB0KCkpIHsKICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsKQpA
QCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBlbmRpbmdT
Y3JpcHQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCwgRWxlbWVuCiAKIC8vIFRoaXMgbWV0
aG9kIGlzIG1lYW50IHRvIG1hdGNoIHRoZSBIVE1MNSBkZWZpbml0aW9uIG9mICJydW5uaW5nIGEg
c2NyaXB0IgogLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQt
d29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNydW5uaW5nLWEtc2NyaXB0Ci12b2lkIEhU
TUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGludCBzdGFydGluZ0xp
bmVOdW1iZXIpCit2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3Jp
cHQsIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CiAgICAgQVNT
RVJUKG1fZG9jdW1lbnQpOwogICAgIEFTU0VSVCghaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgp
KTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChF
bGVtZW50KiBzY3JpcHQsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCiAgICAgICAgICAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDQ3CiAgICAgICAg
ICAgICAvLyBBU1NFUlQoZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOwogICAg
ICAgICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgICAgICAgICAgU2NyaXB0
U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxG
b3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAg
ICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgp
LCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQ
b3NpdGlvbik7CiAgICAgICAgICAgICBleGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmggYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAppbmRleCBiZTIx
ZGQyNDIxYjFkNDQyN2IwODQ3YjBiOTExYzFmZTk3YzZmNzY1Li41MjRmZTVkNDUzYzk4ZDdkZWE1
NGE0YzViZmYzZjZjNzg3N2NhNTYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxTY3JpcHRSdW5uZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXIuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiUGVuZGluZ1NjcmlwdC5oIgogI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9UZXh0UG9zaXRpb24uaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkBA
IC01Miw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogCiAgICAgLy8gUHJv
Y2Vzc2VzIHRoZSBwYXNzZWQgaW4gc2NyaXB0IGFuZCBhbnkgcGVuZGluZyBzY3JpcHRzIGlmIHBv
c3NpYmxlLgotICAgIGJvb2wgZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJv
Y2VzcywgaW50IHNjcmlwdFN0YXJ0TGluZSk7CisgICAgYm9vbCBleGVjdXRlKFBhc3NSZWZQdHI8
RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFy
dFBvc2l0aW9uKTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNo
ZWRSZXNvdXJjZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0czsgfQpAQCAt
NzYsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdERlZmVycmVkU2NyaXB0KEVs
ZW1lbnQqKTsKICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmLCBF
bGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50KiwgaW50IHN0YXJ0
aW5nTGluZU51bWJlcik7CisgICAgdm9pZCBydW5TY3JpcHQoRWxlbWVudCosIGNvbnN0IFRleHRQ
b3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgLy8gSGVscGVycyBmb3IgZGVh
bGluZyB3aXRoIEhUTUxTY3JpcHRSdW5uZXJIb3N0CiAgICAgdm9pZCB3YXRjaEZvckxvYWQoUGVu
ZGluZ1NjcmlwdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4
IDM1NWRjOGQ1MzJmNWM3YzQwOTBjY2QxZmZmYTVjMmFhNzYzODJkYTguLjkzZDM0ZGZmNzE0OGJl
ZTk4ZmYzNWE0ZGRkODA2NGNiOTlkYjE4YTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAKQEAgLTQ5LDEyICs0OSwxNSBAQAogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIK
ICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBpbnQgdW5pbml0aWFsaXplZExpbmVOdW1i
ZXJWYWx1ZSA9IC0xOworc3RhdGljIGNvbnN0IFRleHRQb3NpdGlvbjAgdW5pbml0aWFsaXplZFBv
c2l0aW9uVmFsdWUwID0gVGV4dFBvc2l0aW9uMDo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7CitzdGF0
aWMgY29uc3QgVGV4dFBvc2l0aW9uMSB1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoV1RGOjpP
bmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KC0xKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6
c19iYXNlLCAtMSk7CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTMzMyw4ICszMzYsOCBAQCBIVE1MVHJl
ZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxE
b2N1bWVudCogZG9jdW1lbgogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1v
ZGUpCiAgICAgLCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBt
X3Rva2VuaXplcih0b2tlbml6ZXIpCi0gICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1
bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQotICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0
YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9zY3JpcHRUb1By
b2Nlc3NTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSkKKyAgICAsIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVl
MCkKICAgICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJRdWly
a3MpCiB7CiB9CkBAIC0zNTIsOCArMzU1LDggQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1
aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmEKICAg
ICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zZWNvbmRh
cnlJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVy
KQotICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1i
ZXJWYWx1ZSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXpl
ZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1
bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEpCisgICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3Rh
cnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTApCiAgICAgLCBtX3VzZVByZUhU
TUw1UGFyc2VyUXVpcmtzKHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogewogICAgIGlmIChjb250
ZXh0RWxlbWVudCkgewpAQCAtNDE1LDE1ICs0MTgsMTUgQEAgSFRNTFRyZWVCdWlsZGVyOjpGcmFn
bWVudFBhcnNpbmdDb250ZXh0Ojp+RnJhZ21lbnRQYXJzaW5nQ29udGV4dCgpCiB7CiB9CiAKLVBh
c3NSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKGlu
dCYgc2NyaXB0U3RhcnRMaW5lKQorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6
OnRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikK
IHsKICAgICAvLyBVbnBhdXNlIG91cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2UgdXMgYWdhaW4g
d2hlbiBwcm9jZXNzaW5nIHRoZSBzY3JpcHQuCiAgICAgLy8gVGhlIEhUTUw1IHNwZWMgaXMgd3Jp
dHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVlCiAgICAg
Ly8gYnVpbGRlci4gIFdlIHBhdXNlIHRoZSBwYXJzZXIgdG8gZXhpdCB0aGUgdHJlZSBidWlsZGVy
LCBhbmQgdGhlbiByZXN1bWUKICAgICAvLyBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgogICAgIG1f
aXNQYXVzZWQgPSBmYWxzZTsKLSAgICBzY3JpcHRTdGFydExpbmUgPSBtX3NjcmlwdFRvUHJvY2Vz
c1N0YXJ0TGluZTsKLSAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSA9IHVuaW5pdGlhbGl6
ZWRMaW5lTnVtYmVyVmFsdWU7CisgICAgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IG1fc2NyaXB0VG9Q
cm9jZXNzU3RhcnRQb3NpdGlvbjsKKyAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24g
PSB1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTE7CiAgICAgcmV0dXJuIG1fc2NyaXB0VG9Qcm9j
ZXNzLnJlbGVhc2UoKTsKIH0KIApAQCAtMjIwMSw3ICsyMjA0LDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAg
IG1faXNQYXVzZWQgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50RWxl
bWVudCgpLT5oYXNUYWdOYW1lKHNjcmlwdFRhZykpOwogICAgICAgICAgICAgbV9zY3JpcHRUb1By
b2Nlc3MgPSBtX3RyZWUuY3VycmVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIG1fc2NyaXB0VG9Q
cm9jZXNzU3RhcnRMaW5lID0gbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSArIDE7CisgICAg
ICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSBXVEY6OnRvT25lQmFzZWRU
ZXh0UG9zaXRpb24obV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24pOwogICAgICAgICAg
ICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgIGlmIChpc1BhcnNp
bmdGcmFnbWVudCgpICYmIG1fZnJhZ21lbnRDb250ZXh0LnNjcmlwdGluZ1Blcm1pc3Npb24oKSA9
PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRU
b1Byb2Nlc3MtPnJlbW92ZUFsbENoaWxkcmVuKCk7CkBAIC0yNzUwLDcgKzI3NTMsMTAgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgIG1fdHJlZS5pbnNlcnRTY3JpcHRFbGVtZW50KHRva2VuKTsKICAgICBtX3Rv
a2VuaXplci0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6U2NyaXB0RGF0YVN0YXRlKTsKICAgICBt
X29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKLSAgICBtX2xhc3RTY3Jp
cHRFbGVtZW50U3RhcnRMaW5lID0gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsKKworICAgIFRl
eHRQb3NpdGlvbjAgcG9zaXRpb24gPSBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVy
Ojpmcm9tWmVyb0Jhc2VkSW50KG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCkpLCBXVEY6Olplcm9C
YXNlZE51bWJlcjo6c19iYXNlLCAwKTsKKyAgICBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3Np
dGlvbiA9IHBvc2l0aW9uOworCiAgICAgc2V0SW5zZXJ0aW9uTW9kZShUZXh0TW9kZSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmggYi9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IGU2MWZlNzM0NjZkYTE3OGQz
MzExZDI3NjIwZTQ2YjgyODFjMWU0NTUuLjJlMzdlNGY1ODlmYzU4NmYxZDJlOTBiYjc2YjllMWYy
Mjg4NWYzMzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50U3RhY2suaCIKICNpbmNsdWRlICJIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgorI2luY2x1
ZGUgPHd0Zi9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTcx
LDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tl
bihBdG9taWNIVE1MVG9rZW4mKTsKIAogICAgIC8vIE11c3QgYmUgY2FsbGVkIHdoZW4gcGFyc2Vy
IGlzIHBhdXNlZCBiZWZvcmUgY2FsbGluZyB0aGUgcGFyc2VyIGFnYWluLgotICAgIFBhc3NSZWZQ
dHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhpbnQmIHNjcmlwdFN0YXJ0TGluZSk7Cisg
ICAgUGFzc1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlvbjEm
IHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgLy8gRG9uZSwgY2xvc2UgYW55IG9wZW4gdGFn
cywgZXRjLgogICAgIHZvaWQgZmluaXNoZWQoKTsKQEAgLTI0NiwxMyArMjQ3LDEyIEBAIHByaXZh
dGU6CiAgICAgSFRNTFRva2VuaXplciogbV90b2tlbml6ZXI7CiAKICAgICBSZWZQdHI8RWxlbWVu
dD4gbV9zY3JpcHRUb1Byb2Nlc3M7IC8vIDxzY3JpcHQ+IHRhZyB3aGljaCBuZWVkcyBwcm9jZXNz
aW5nIGJlZm9yZSByZXN1bWluZyB0aGUgcGFyc2VyLgotICAgIGludCBtX3NjcmlwdFRvUHJvY2Vz
c1N0YXJ0TGluZTsgLy8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVl
ZGluZyBwcm9jZXNzaW5nLgorICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRUb1Byb2Nlc3NTdGFy
dFBvc2l0aW9uOyAvLyBTdGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUgc2NyaXB0IHRhZyBuZWVk
aW5nIHByb2Nlc3NpbmcuCiAKICAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCB0byByZW1v
dmUgdGhpcyBtZW1iZXIuICBPcmlnaW5hbGx5LCBpdCB3YXMKICAgICAvLyBjcmVhdGVkIHRvIHNl
cnZpY2UgdGhlIGxlZ2FjeSB0cmVlIGJ1aWxkZXIsIGJ1dCBpdCBzZWVtcyB0byBiZSB1c2VkIGZv
cgogICAgIC8vIHNvbWUgb3RoZXIgdGhpbmdzIG5vdy4KLSAgICBpbnQgbV9sYXN0U2NyaXB0RWxl
bWVudFN0YXJ0TGluZTsKLSAgICAKKyAgICBUZXh0UG9zaXRpb24wIG1fbGFzdFNjcmlwdEVsZW1l
bnRTdGFydFBvc2l0aW9uOwogICAgIGJvb2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczsKIH07
CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IGYzODFkMTVmODg0YjkzY2U5NGI1ZmQ2MTk5MzllOWEyNDU4ZGM0
YzkuLjllYjUxYjJmNzdiNDg0YmRkODViODRkNDM1ZjllY2U3ZGQ1NDM5ZWYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA5LTIzICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5Ymlu
QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBIVE1MIHBhcnNlciBzaG91bGQgcHJvdmlkZSBzY3JpcHQgY29sdW1uIHBvc2l0aW9uIHdp
dGhpbiBIVE1MIGRvY3VtZW50IHRvIEphdmFTY3JpcHQgZW5naW5lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTI3MQorCisgICAgICAgIFJlcGxhY2Vz
IHNjcmlwdCBsaW5lIG51bWJlciB3aXRoIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUuCisKKyAgICAg
ICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
OjpleGVjdXRlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpl
eGVjdXRlU2NyaXB0QW5kUmV0dXJuVmFsdWUpOgorCiAyMDEwLTA5LTIzICBUb255IENoYW5nICA8
dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggZjA0OGNiOTg0ZGUwOGE3MzQ4ZjBk
YTg4ZmVmN2ZmZmUxOGQ4OGY0Zi4uZDkyNGUzOGUwNDA1MDZiNWY0MWYxMGMwZTgzMzE4NzhhZWZi
NTIwNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtNzQxLDggKzc0MSw5
IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpiaW5kVG9XaW5kb3dPYmplY3QoY29uc3QgV2ViU3RyaW5n
JiBuYW1lLCBOUE9iamVjdCogb2JqZWN0KQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNj
cmlwdChjb25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBUZXh0UG9zaXRpb24x
IHBvc2l0aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3Rh
cnRMaW5lKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNlLCAwKTsKICAgICBtX2ZyYW1lLT5z
Y3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2Uu
Y29kZSwgc291cmNlLnVybCwgc291cmNlLnN0YXJ0TGluZSkpOworICAgICAgICBTY3JpcHRTb3Vy
Y2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikpOwogfQogCiB2b2lkIFdl
YkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKQEAgLTc1Miw4ICs3NTMs
OSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKICAg
ICBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBwb3Np
dGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlc0luW2ldLnN0
YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OnNfYmFzZSwgMCk7CiAgICAgICAgIHNvdXJj
ZXMuYXBwZW5kKFNjcmlwdFNvdXJjZUNvZGUoCi0gICAgICAgICAgICBzb3VyY2VzSW5baV0uY29k
ZSwgc291cmNlc0luW2ldLnVybCwgc291cmNlc0luW2ldLnN0YXJ0TGluZSkpOworICAgICAgICAg
ICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9uKSk7CiAgICAg
fQogCiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxk
SWQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKQEAgLTgwNSw4ICs4MDcsOSBAQCB2b2lkIFdl
YkZyYW1lSW1wbDo6Y29sbGVjdEdhcmJhZ2UoKQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZy
YW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgIGNvbnN0IFdlYlNjcmlw
dFNvdXJjZSYgc291cmNlKQogeworICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVC
YXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUpLCBXVEY6Ok9uZUJh
c2VkTnVtYmVyOjpzX2Jhc2UsIDApOwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhl
Y3V0ZVNjcmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNl
LnVybCwgc291cmNlLnN0YXJ0TGluZSkpLnY4VmFsdWUoKTsKKyAgICAgICAgU2NyaXB0U291cmNl
Q29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKS52OFZhbHVlKCk7CiB9CiAK
IC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9yIHRoaXMgZnJhbWUsIG9yIGFuIGVtcHR5IGhh
bmRsZSBpZiB0aGVyZSBpcyBub25lLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68746</attachid>
            <date>2010-09-24 14:21:39 -0700</date>
            <delta_ts>2010-10-07 05:48:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20100925012136.patch</filename>
            <type>text/plain</type>
            <size>58436</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiY2Y4ZDk0ZGZmMWY5Zjk0ZjE4Njc0MjdhNGM0NzdmZTFjMGY1Y2M1Li5h
NGQ1ZTU5MjNkY2MwZWZlODE4MGVhYTlhNjUxMjkzNWZhMTZkODQxIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTAtMDktMjQgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvdGV4dC9UZXh0UG9zaXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiB3
dGYvdGV4dC9UZXh0UG9zaXRpb24uaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRleHRQb3NpdGlv
bjo6VGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6VGV4dFBvc2l0aW9uOjptaW5pbXVtUG9z
aXRpb24pOgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbik6
CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCk6CisgICAg
ICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6WmVyb0Jhc2VkTnVtYmVyKToKKyAgICAgICAgKFdU
Rjo6WmVyb0Jhc2VkTnVtYmVyOjp6ZXJvQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPbmVCYXNl
ZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6
Ok9uZUJhc2VkTnVtYmVyKToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6Om9uZUJhc2Vk
SW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRBc1plcm9CYXNlZElu
dCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpjb252ZXJ0VG9aZXJvQmFzZWQpOgor
ICAgICAgICAoV1RGOjp0b1plcm9CYXNlZFRleHRQb3NpdGlvbik6CisgICAgICAgIChXVEY6OnRv
T25lQmFzZWRUZXh0UG9zaXRpb24pOgorICAgICAgICAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmNv
bnZlcnRUb09uZUJhc2VkKToKKyAgICAgICAgKiB3dGYvd3RmLnByaToKKwogMjAxMC0wOS0yMyAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY4MjIzLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUuYW0gYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA4OGQx
NzYxN2IzYTRiODg4NGMwNGEyNjg2OGM2ZjA2ZDE3MzFjNzUwLi4wMjY2NjQ1NmIyMTViYzAzMjJi
YzJkNDE3ZTBkMTRkZjE3MDFjODRiIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNTExLDYgKzUx
MSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBs
LmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwIFwKKwlKYXZh
U2NyaXB0Q29yZS93dGYvdGV4dC9UZXh0UG9zaXRpb24uY3BwIFwKKwlKYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9UZXh0UG9zaXRpb24uaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3Ry
aW5nLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmggXAogCUphdmFT
Y3JpcHRDb3JlL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBcCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpIGIvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZ3lwaQppbmRleCA0NjI5NjBkNTFkZDZkYmU0MDJkNTg2M2QyMDhjMTMy
OGNiYzE1YWNlLi4wMTA3NTk4NGE5MGIwZDE3MzA0ZDZkNmIwZDhjZDYwMDY1MTg0ODljIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKQEAgLTQ1NCw2ICs0NTQsOCBAQAogICAgICAgICAg
ICAgJ3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwJywKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJp
bmdJbXBsLmgnLAogICAgICAgICAgICAgJ3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwJywKKyAg
ICAgICAgICAgICd3dGYvdGV4dC9UZXh0UG9zaXRpb24uaCcsCisgICAgICAgICAgICAnd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmNwcCcsCiAgICAgICAgICAgICAnd3RmL3RleHQvV1RGU3RyaW5nLmNw
cCcsCiAgICAgICAgICAgICAnd3RmL3RleHQvV1RGU3RyaW5nLmgnLAogICAgICAgICAgICAgJ3d0
Zi91bmljb2RlL0NvbGxhdG9yLmgnLApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0NN
YWtlTGlzdHMudHh0IGIvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDg5
Njc5NGVmNDFlOGYwMjE4NDA5OTRhYzM1MjQ3ODcyYjJkYWUxNjkuLjkzZmFhOWMxMDExMmNmNjJl
OGZhYjcyODhhMThkOWFhNjFmMGMxYTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9D
TWFrZUxpc3RzLnR4dAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKQEAg
LTE4LDYgKzE4LDcgQEAgU0VUKFdURl9TT1VSQ0VTCiAgICAgdGV4dC9DU3RyaW5nLmNwcAogICAg
IHRleHQvU3RyaW5nSW1wbC5jcHAKICAgICB0ZXh0L1N0cmluZ1N0YXRpY3MuY3BwCisgICAgdGV4
dC9UZXh0UG9zaXRpb24uY3BwCiAgICAgdGV4dC9XVEZTdHJpbmcuY3BwCiAKICAgICB1bmljb2Rl
L1VURjguY3BwCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9UZXh0UG9zaXRp
b24uY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YTE3ZTAzMDk1OWQyN2E5ZDgxZDNlMTAyMDg5MDg4YTk2Nzk3MWFlCi0tLSAvZGV2L251
bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmNwcApAQCAtMCww
ICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRleHRQb3NpdGlvbi5oIgorCituYW1lc3BhY2UgV1RGIHsKKworY29uc3QgWmVyb0Jhc2VkTnVt
YmVyIFplcm9CYXNlZE51bWJlcjo6c19iYXNlKDApOworY29uc3QgWmVyb0Jhc2VkTnVtYmVyIFpl
cm9CYXNlZE51bWJlcjo6c19iZWxvd0Jhc2UoLTEpOworCitjb25zdCBPbmVCYXNlZE51bWJlciBP
bmVCYXNlZE51bWJlcjo6c19iYXNlKDEpOworY29uc3QgT25lQmFzZWROdW1iZXIgT25lQmFzZWRO
dW1iZXI6OnNfYmVsb3dCYXNlKDApOworCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmggYi9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9UZXh0UG9zaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzFhMTcwMGFiMzAwMmVjNjU0
Y2E1YTc5MTQ2NmJkODhiODNlZWNmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUv
d3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRleHRQb3NpdGlvbl9oCisjZGVmaW5lIFRleHRQb3NpdGlvbl9oCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworCisvKgorICogVGV4
dCBQb3NpdGlvbgorICoKKyAqIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUgc3BlY2lmaWVzIGNvb3Jk
aW5hdGVzIHdpdGhpbiBhbiB0ZXh0IHJlc291cmNlLiBJdCBpcyB1c2VkIG1vc3RseQorICogZm9y
IHNhdmluZyBzY3JpcHQgc291cmNlIHBvc2l0aW9uLgorICoKKyAqIExhdGVyIFRleHRQb3NpdGlv
bjAgYW5kIFRleHRQb3NpdGlvbjEgYW5kIGJvdGggbnVtYmVyIHR5cGVzIGNhbiBiZSBtZXJnZWQg
dG9nZXRoZXIgcXVpdGUgZWFzaWx5LgorICoKKyAqCisgKiAwLWJhc2VkIGFuZCAxLWJhc2VkCisg
KgorICogTGluZSBhbmQgY29sdW1uIG51bWJlcnMgY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgemVy
by1iYXNlZCBvciAxLWJhc2VkLiBTaW5jZQorICogYm90aCBwcmFjdGljZXMgY29leGlzdCBpbiBX
ZWJLaXQgc291cmNlIGJhc2UsICdpbnQnIHR5cGUgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGgKKyAq
IGEgZGVkaWNhdGVkIHdyYXBwZXIgdHlwZXMsIHNvIHRoYXQgY29tcGlsZXIgaGVscGVkIHVzIHdp
dGggdGhpcyBhbWJpZ3VpdHkuCisgKgorICogSGVyZSB3ZSBpbnRyb2R1Y2UgMiB0eXBlcyBvZiBu
dW1iZXJzOiBaZXJvQmFzZWROdW1iZXIgYW5kIE9uZUJhc2VkTnVtYmVyIGFuZAorICogMiBjb3Jy
ZXNwb25kaW5nIHR5cGVzIG9mIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUuIFdoaWxlIG9ubHkgb25l
IHR5cGUgb3VnaHQgdG8gYmUgZW5vdWdoLAorICogdGhpcyBpcyBkb25lIHRvIGtlZXAgdHJhbnNp
dGlvbiB0byB0aGUgbmV3IHR5cGVzIGFzIHRyYW5zcGFyZW50IGFzIHBvc3NpYmxlOgorICogZS5n
LiBpbiBhcmVhcyB3aGVyZSAwLWJhc2VkIGludGVnZXJzIGFyZSB1c2VkLCBUZXh0UG9zaXRpb24w
IHNob3VsZCBiZSBpbnRyb2R1Y2VkLiBUaGlzCisgKiB3YXkgYWxsIGNoYW5nZXMgd2lsbCByZW1h
aW4gdHJhY2thYmxlLgorICoKKyAqIExhdGVyIGJvdGggbnVtYmVyIHR5cGVzIGNhbiBiZSBtZXJn
ZWQgaW4gb25lIHR5cGUgcXVpdGUgZWFzaWx5LgorICoKKyAqIEZvciB0eXBlIHNhZmV0eSBhbmQg
Zm9yIHRoZSBmdXR1cmUgdHlwZSBtZXJnZSBpdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgb3BlcmF0
aW9ucyBpbiBBUEkKKyAqIHRoYXQgYWNjZXB0IG9yIHJldHVybiBpbnRlZ2VyIGhhdmUgYSBuYW1l
IGV4cGxpY2l0bHkgZGVmaW5pbmcgYmFzZSBvZiBpbnRlZ2VyLiBGb3IgdGhpcyByZWFzb24KKyAq
IGludC1yZWNlaXZpbmcgY29uc3RydWN0b3JzIGFyZSBoaWRkZW4gZnJvbSBBUEkuCisgKi8KKwor
dGVtcGxhdGU8dHlwZW5hbWUgTlVNQkVSPgorY2xhc3MgVGV4dFBvc2l0aW9uIHsKK3B1YmxpYzoK
KyAgICBUZXh0UG9zaXRpb24oTlVNQkVSIGxpbmUsIE5VTUJFUiBjb2x1bW4pCisgICAgICAgIDog
bV9saW5lKGxpbmUpCisgICAgICAgICwgbV9jb2x1bW4oY29sdW1uKQorICAgIHsKKyAgICB9Cisg
ICAgVGV4dFBvc2l0aW9uKCkge30KKworICAgIC8vIEEgJ21pbmltdW0nIHZhbHVlIG9mIHBvc2l0
aW9uLCB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KKyAgICBzdGF0aWMgVGV4dFBvc2l0aW9uPE5V
TUJFUj4gbWluaW11bVBvc2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPE5VTUJFUj4oTlVN
QkVSOjpzX2Jhc2UsIE5VTUJFUjo6c19iYXNlKTsgfQorCisgICAgLy8gQSB2YWx1ZSB3aXRoIGxp
bmUgdmFsdWUgbGVzcyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxlIHBvc2l0
aW9uLgorICAgIHN0YXRpYyBUZXh0UG9zaXRpb248TlVNQkVSPiBiZWxvd1JhbmdlUG9zaXRpb24o
KSB7IHJldHVybiBUZXh0UG9zaXRpb248TlVNQkVSPihOVU1CRVI6OnNfYmVsb3dCYXNlLCBOVU1C
RVI6OnNfYmFzZSk7IH0KKworICAgIE5VTUJFUiBtX2xpbmU7CisgICAgTlVNQkVSIG1fY29sdW1u
OworfTsKKworCitjbGFzcyBPbmVCYXNlZE51bWJlcjsKKworLy8gQW4gaW50IHdyYXBwZXIgdGhh
dCBhbHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAwLWJhc2VkCitj
bGFzcyBaZXJvQmFzZWROdW1iZXIgeworcHVibGljOgorICAgIHN0YXRpYyBaZXJvQmFzZWROdW1i
ZXIgZnJvbVplcm9CYXNlZEludChpbnQgemVyb0Jhc2VkSW50KSB7IHJldHVybiBaZXJvQmFzZWRO
dW1iZXIoemVyb0Jhc2VkSW50KTsgfQorCisgICAgWmVyb0Jhc2VkTnVtYmVyKCkge30KKworICAg
IGludCB6ZXJvQmFzZWRJbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBPbmVC
YXNlZE51bWJlciBjb252ZXJ0VG9PbmVCYXNlZCgpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0
IFplcm9CYXNlZE51bWJlciBzX2Jhc2U7IC8vIDAKKyAgICBzdGF0aWMgY29uc3QgWmVyb0Jhc2Vk
TnVtYmVyIHNfYmVsb3dCYXNlOyAvLyAtMQorCitwcml2YXRlOgorICAgIFplcm9CYXNlZE51bWJl
cihpbnQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkge30KKyAgICBpbnQgbV92YWx1ZTsKK307CisK
Ky8vIEFuIGludCB3cmFwcGVyIHRoYXQgYWx3YXlzIHJlbWluZHMgeW91IHRoYXQgdGhlIG51bWJl
ciBzaG91bGQgYmUgMS1iYXNlZAorY2xhc3MgT25lQmFzZWROdW1iZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBPbmVCYXNlZE51bWJlciBmcm9tT25lQmFzZWRJbnQoaW50IG9uZUJhc2VkSW50KSB7
IHJldHVybiBPbmVCYXNlZE51bWJlcihvbmVCYXNlZEludCk7IH0KKyAgICBPbmVCYXNlZE51bWJl
cigpIHt9CisKKyAgICBpbnQgb25lQmFzZWRJbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9
CisgICAgaW50IGNvbnZlcnRBc1plcm9CYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUg
LSAxOyB9CisgICAgWmVyb0Jhc2VkTnVtYmVyIGNvbnZlcnRUb1plcm9CYXNlZCgpIGNvbnN0IHsg
cmV0dXJuIFplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX3ZhbHVlIC0gMSk7IH0K
KworICAgIHN0YXRpYyBjb25zdCBPbmVCYXNlZE51bWJlciBzX2Jhc2U7IC8vIDEKKyAgICBzdGF0
aWMgY29uc3QgT25lQmFzZWROdW1iZXIgc19iZWxvd0Jhc2U7IC8vIDAKKworcHJpdmF0ZToKKyAg
ICBPbmVCYXNlZE51bWJlcihpbnQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkge30KKyAgICBpbnQg
bV92YWx1ZTsKK307CisKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPFplcm9CYXNlZE51bWJlcj4gVGV4
dFBvc2l0aW9uMDsKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPE9uZUJhc2VkTnVtYmVyPiBUZXh0UG9z
aXRpb24xOworCitpbmxpbmUgVGV4dFBvc2l0aW9uMCB0b1plcm9CYXNlZFRleHRQb3NpdGlvbihj
b25zdCBUZXh0UG9zaXRpb24xJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9u
MChwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvWmVyb0Jhc2VkKCksIHBvc2l0aW9uLm1fY29sdW1u
LmNvbnZlcnRUb1plcm9CYXNlZCgpKTsKK30KKworaW5saW5lIFRleHRQb3NpdGlvbjEgdG9PbmVC
YXNlZFRleHRQb3NpdGlvbihjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbikKK3sKKyAgICBy
ZXR1cm4gVGV4dFBvc2l0aW9uMShwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvT25lQmFzZWQoKSwg
cG9zaXRpb24ubV9jb2x1bW4uY29udmVydFRvT25lQmFzZWQoKSk7Cit9CisKK2lubGluZSBPbmVC
YXNlZE51bWJlciBaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChtX3ZhbHVlICsgMSk7
Cit9CisKK30KKworCit1c2luZyBXVEY6OlRleHRQb3NpdGlvbjA7Cit1c2luZyBXVEY6OlRleHRQ
b3NpdGlvbjE7CisKKyNlbmRpZiAvLyBUZXh0UG9zaXRpb25faApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvd3RmL3d0Zi5wcmkgYi9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQppbmRleCA4
NGFjMjBlM2ZjOWZlNGI1Y2EyNGY5NTM5MmY3YmExZTkxODAxMzQwLi5lZDRkYTc0OTE1YmFkNTU4
MmIwOTJiMjg4NTVkZjhhYzY3ZGMwNmQyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYv
d3RmLnByaQorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQpAQCAtMjQsNiArMjQsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICB3dGYvdGV4dC9DU3RyaW5nLmNwcCBcCiAgICAgd3RmL3RleHQv
U3RyaW5nSW1wbC5jcHAgXAogICAgIHd0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwIFwKKyAgICB3
dGYvdGV4dC9UZXh0UG9zaXRpb24uY3BwIFwKICAgICB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwIFwK
ICAgICB3dGYvdW5pY29kZS9Db2xsYXRvckRlZmF1bHQuY3BwIFwKICAgICB3dGYvdW5pY29kZS9p
Y3UvQ29sbGF0b3JJQ1UuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ3ZTQ4NDY4ZDczYTFmMWE0YjdkYzMxNWI0ZmE2NjBlYzc4
ZmFhMS4uNTkzMDVmMDQ4NTc5NDRmODMxNWNlNmQ5NzQwMjZlN2VlNmVjZDMxNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
OCBAQAorMjAxMC0wOS0yNCAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSFRNTCBwYXJz
ZXIgc2hvdWxkIHByb3ZpZGUgc2NyaXB0IGNvbHVtbiBwb3NpdGlvbiB3aXRoaW4gSFRNTCBkb2N1
bWVudCB0byBKYXZhU2NyaXB0IGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNzEKKworICAgICAgICBSZXBsYWNlcyBsaW5lIG51bWJlciB3
aXRoIFRleHRQb3NpdGlvbiBzdHJ1Y3Qgc28gdGhhdCBzY3JpcHQgZW5naW5lCisgICAgICAgIGdl
dHMgc2NyaXB0IHN0YXJ0aW5nIGxpbmUvY29sdW1uLgorCisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0U291cmNlQ29kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6
U2NyaXB0U291cmNlQ29kZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9u
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlclBvc2l0aW9uKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VD
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRTb3VyY2VD
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OnN0YXJ0TGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpzdGFydFBvc2l0aW9uKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0ZW5lcjo6cHJlcGFyZUxpc3RlbmVyT2JqZWN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y29tcGlsZVNjcmlwdCk6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5OjpydW5TY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJ1blNjcmlw
dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmg6
CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAg
ICogZG9tL1BlbmRpbmdTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1Njcmlw
dDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVhcik6CisgICAgICAgICogZG9tL1BlbmRpbmdTY3JpcHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdTY3JpcHQ6OnN0YXJ0aW5nUG9zaXRpb24pOgorICAgICAgICAqIGRvbS9TY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXIu
aDoKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcyk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERv
Y3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAgICAgICAqIGRvbS9YTUxEb2N1bWVudFBh
cnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1
bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZVN0YXJ0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VFbmRF
bGVtZW50KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2Vk
VHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjp0ZXh0
UG9zaXRpb24pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBlbmRpbmdTY3JpcHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxTY3JpcHRSdW5uZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmg6CisKIDIwMTAtMDktMjQg
IEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFNvdXJjZUNvZGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCmlu
ZGV4IDMyZDYyOThjZGJkYTc3MmRhYTEzZTEwMzNlM2NmMGFhNDBmNTk0YjIuLjA5MmVlYjhmMDhh
MzI5YTM5MWQ5ODcxNmRmZWRkOTk5NjU2MDg4YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0U291cmNlQ29kZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
U291cmNlQ29kZS5oCkBAIC0zNSwxNSArMzUsMTYgQEAKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VQ
cm92aWRlci5oIgogI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JpcHRTb3VyY2VD
b2RlIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNl
LCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGludCBzdGFydExpbmUgPSAxKQorICAgIFNjcmlw
dFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwo
KSwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6Om1p
bmltdW1Qb3NpdGlvbigpKQogICAgICAgICA6IG1fcHJvdmlkZXIoU3RyaW5nU291cmNlUHJvdmlk
ZXI6OmNyZWF0ZShzb3VyY2UsIHVybC5pc051bGwoKSA/IFN0cmluZygpIDogdXJsLnN0cmluZygp
KSkKLSAgICAgICAgLCBtX2NvZGUobV9wcm92aWRlciwgc3RhcnRMaW5lKQorICAgICAgICAsIG1f
Y29kZShtX3Byb3ZpZGVyLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpKQogICAg
ICAgICAsIG1fdXJsKHVybCkKICAgICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVs
ZWRBY3Rpb24uY3BwCmluZGV4IGRjZDBiYjMzNzcxODEzMTg0MjBjMTA3M2JlMjUxYTllNTg0YmE0
YjcuLjcwOGZiZTY3ZmU5NGQ3NzIyMTJjOGJjM2QyN2RlMThiZDUxMDEyY2MgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbih2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjb250ZXh0LCB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuYywgaW50
IGFyZ2MsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10pCiAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAsIG1fY29kZShTdHJpbmcoKSwgS1VSTCgpLCAwKQorICAgICwgbV9jb2RlKFN0
cmluZygpLCBLVVJMKCksIFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogewog
ICAgIG1fZnVuY3Rpb24gPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpOZXcoZnVuYyk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDU1NmI1YzZl
YTkxYjdhMDIxMmM0ZTliMmJiMmI5ZWRkZTJiZmE1NDYuLmI0NDc4NGUwZWIzNWE1MjY1ZGM0NzZm
NDk1YzFjMWVmYmQ4MTM4ZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmNwcApAQCAtMjYwLDIwICsyNjAsMTIgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgU2hvdWwKICAgICBy
ZXR1cm4gU2NyaXB0VmFsdWUob2JqZWN0KTsKIH0KIAotaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2
ZW50SGFuZGxlckxpbmVOdW1iZXIoKSBjb25zdAorVGV4dFBvc2l0aW9uMCBTY3JpcHRDb250cm9s
bGVyOjpldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgU2NyaXB0YWJsZURvY3Vt
ZW50UGFyc2VyKiBwYXJzZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIoKTsKICAgICBpZiAocGFyc2VyKQotICAgICAgICByZXR1cm4gcGFyc2VyLT5saW5l
TnVtYmVyKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBTY3JpcHRDb250cm9sbGVyOjpldmVu
dEhhbmRsZXJDb2x1bW5OdW1iZXIoKSBjb25zdAotewotICAgIFNjcmlwdGFibGVEb2N1bWVudFBh
cnNlciogcGFyc2VyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyKCk7Ci0gICAgaWYgKHBhcnNlcikKLSAgICAgICAgcmV0dXJuIHBhcnNlci0+Y29sdW1uTnVt
YmVyKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwYXJzZXItPnRleHRQb3NpdGlv
bigpOworICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKIH0KIAog
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpmaW5pc2hlZFdpdGhFdmVudChFdmVudCogZXZlbnQpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDNiYzQyZWZiMDNmOWE4Yzgw
YzE2NTRhNTJlYzNlMWM3NzJjNDhmMjMuLmMxZDMzMzE2NWE3YjM5MjhmMGY2ZGZlN2M2MDdmZWU2
Y2EwZjNhZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCkBAIC0xNTUs
OCArMTU1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hlZFdpdGhFdmVudChFdmVudCop
OwogCi0gICAgaW50IGV2ZW50SGFuZGxlckxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICBpbnQgZXZl
bnRIYW5kbGVyQ29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgVGV4dFBvc2l0aW9uMCBldmVudEhh
bmRsZXJQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQcm9jZXNzaW5nVGltZXJDYWxs
YmFjayhib29sIHByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKSB7IG1fcHJvY2Vzc2luZ1RpbWVyQ2Fs
bGJhY2sgPSBwcm9jZXNzaW5nVGltZXJDYWxsYmFjazsgfQogICAgIC8vIEZJWE1FOiBDdXJyZW50
bHkgd2UgZG9uJ3QgdXNlIHRoZSBwYXJhbWV0ZXIgd29ybGQgYXQgYWxsLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNzJkZjc5ZGVkM2VkNDdjZmYx
YTI3YjU5NTNhMzU5OTYzYzc3YTYzMC4uNDQ4MTA2Y2Y1MjU0OWFiM2Q2NGVhYzUxMmZjMzc2NjNi
YzdlZDA0OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3Rl
bmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3Bw
CkBAIC01MCw4ICs1MCw4IEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRl
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihOb2RlKiBub2RlLCBBdHRyaWJ1CiAgICAgaWYgKGF0dHIt
PmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBsaW5lTnVtYmVyID0gMTsK
LSAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKKyAgICAvLyBGSVhNRTogVmVyeSBzdHJhbmdlOiB3
ZSBpbml0aWFsaXplIHplcm8tYmFzZWQgbnVtYmVyIHdpdGggJzEnLgorICAgIFRleHRQb3NpdGlv
bjAgcG9zaXRpb24oV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoMSksIFdU
Rjo6WmVyb0Jhc2VkTnVtYmVyOjpzX2Jhc2UpOwogICAgIFN0cmluZyBzb3VyY2VVUkw7CiAKICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewpAQCAtNjQs
MTIgKzY0LDExIEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihOb2RlKiBub2RlLCBBdHRyaWJ1CiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgfQogCi0gICAgICAgIGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5l
dmVudEhhbmRsZXJMaW5lTnVtYmVyKCk7Ci0gICAgICAgIGNvbHVtbk51bWJlciA9IHNjcmlwdENv
bnRyb2xsZXItPmV2ZW50SGFuZGxlckNvbHVtbk51bWJlcigpOworICAgICAgICBwb3NpdGlvbiA9
IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlclBvc2l0aW9uKCk7CiAgICAgICAgIHNvdXJj
ZVVSTCA9IG5vZGUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpOwogICAgIH0KIAotICAgIHJl
dHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5n
KCksIG5vZGUtPmlzU1ZHRWxlbWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VVUkwsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgV29ybGRDb250ZXh0SGFuZGxlKFVzZU1haW5Xb3JsZCkpOwor
ICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCku
c3RyaW5nKCksIG5vZGUtPmlzU1ZHRWxlbWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VVUkws
IHBvc2l0aW9uLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CiB9CiAKIFBhc3NS
ZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihG
cmFtZSogZnJhbWUsIEF0dHJpYnV0ZSogYXR0cikKQEAgLTgxLDEwICs4MCw2IEBAIFBhc3NSZWZQ
dHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihGcmFt
ZSogZnJhbWUsIEF0dHJpCiAgICAgaWYgKGF0dHItPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIGludCBsaW5lTnVtYmVyID0gMTsKLSAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsK
LSAgICBTdHJpbmcgc291cmNlVVJMOwotCiAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29u
dHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRyb2xsZXItPmNh
bkV4ZWN1dGVTY3JpcHRzKEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC05NCwxMCArODksOSBAQCBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0
ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCBBdHRyaQogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICBsaW5lTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRI
YW5kbGVyTGluZU51bWJlcigpOwotICAgIGNvbHVtbk51bWJlciA9IHNjcmlwdENvbnRyb2xsZXIt
PmV2ZW50SGFuZGxlckNvbHVtbk51bWJlcigpOwotICAgIHNvdXJjZVVSTCA9IGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKLSAgICByZXR1cm4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKS0+aXNT
VkdEb2N1bWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlciwgV29ybGRDb250ZXh0SGFuZGxlKFVzZU1haW5Xb3JsZCkpOworICAgIFRleHRQb3Np
dGlvbjAgcG9zaXRpb24gPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJQb3NpdGlvbigp
OworICAgIFN0cmluZyBzb3VyY2VVUkwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCk7CisgICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5h
bWUoKS5zdHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCktPmlzU1ZHRG9jdW1lbnQoKSwgYXR0ci0+
dmFsdWUoKSwgc291cmNlVVJMLCBwb3NpdGlvbiwgV29ybGRDb250ZXh0SGFuZGxlKFVzZU1haW5X
b3JsZCkpOwogfQogCiBTdHJpbmcgZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KERvY3VtZW50KiBk
b2N1bWVudCwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
U291cmNlQ29kZS5oCmluZGV4IGRiYzlkNWU2ZmM2MDA3ZmNmZGQ2NjAyNGRiMDc4MjZjNjYyNjNi
NWIuLjI0NzgxNTFlNmY1NGZjNzUwMzhmMDQxZGVjOTgwZDdhNzU2ZDJhZGUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oCkBAIC0zNSwxNiArMzUsMTcgQEAKICNpbmNsdWRl
ICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlIHsKIHB1YmxpYzoKLSAgICBTY3Jp
cHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJM
KCksIGludCBzdGFydExpbmUgPSAxKQorICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgY29uc3QgVGV4dFBvc2l0aW9uMSYg
c3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAgICAg
ICA6IG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgLCBtX2NhY2hlZFNjcmlwdCgwKQogICAgICAg
ICAsIG1fdXJsKHVybCkKLSAgICAgICAgLCBtX3N0YXJ0TGluZShzdGFydExpbmUpCisgICAgICAg
ICwgbV9zdGFydFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pCiAgICAgewogICAgIH0KIApAQCAtNTQs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9zb3VyY2UoY3MtPnNjcmlwdCgpKQogICAg
ICAgICAsIG1fY2FjaGVkU2NyaXB0KGNzKQogICAgICAgICAsIG1fdXJsKFBhcnNlZFVSTFN0cmlu
ZywgY3MtPnVybCgpKQotICAgICAgICAsIG1fc3RhcnRMaW5lKDEpCisgICAgICAgICwgbV9zdGFy
dFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAgIHsKICAgICB9
CiAKQEAgLTYzLDEzICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2Ny
aXB0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQuZ2V0KCk7IH0KICAgICBjb25zdCBL
VVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQotICAgIGludCBzdGFydExpbmUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXJ0TGluZTsgfQorICAgIGludCBzdGFydExpbmUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCk7IH0KKyAgICBjb25z
dCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFBv
c2l0aW9uOyB9CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc291cmNlOwogICAgIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiAgICAgS1VSTCBtX3Vy
bDsKLSAgICBpbnQgbV9zdGFydExpbmU7CisgICAgVGV4dFBvc2l0aW9uMSBtX3N0YXJ0UG9zaXRp
b247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OExhenlFdmVudExpc3RlbmVyLmNwcAppbmRleCA3ZjEzYzVhOGZiMjdkMzNiYmYxZDM0MTBhMDEz
ZWJjNzk1ZDkzZDIzLi43ZjQ2MzMzMDYyZDZmZWI3YmU5ZjE3OTYzNTZjNmIwNWNiM2NiOGY4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTQxLDE0
ICs0MSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVY4TGF6eUV2ZW50TGlzdGVuZXI6
OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNT
VkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBpbnQg
bGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3
b3JsZENvbnRleHQpCitWOExhenlFdmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYg
Y29kZSwgY29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRp
b24sIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KQogICAgIDogVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXIodHJ1ZSwgd29ybGRDb250ZXh0KQogICAgICwgbV9mdW5jdGlvbk5h
bWUoZnVuY3Rpb25OYW1lKQogICAgICwgbV9pc1NWR0V2ZW50KGlzU1ZHRXZlbnQpCiAgICAgLCBt
X2NvZGUoY29kZSkKICAgICAsIG1fc291cmNlVVJMKHNvdXJjZVVSTCkKLSAgICAsIG1fbGluZU51
bWJlcihsaW5lTnVtYmVyKQotICAgICwgbV9jb2x1bW5OdW1iZXIoY29sdW1uTnVtYmVyKQorICAg
ICwgbV9wb3NpdGlvbihwb3NpdGlvbikKIHsKIH0KIApAQCAtMTE0LDcgKzExMyw3IEBAIHZvaWQg
VjhMYXp5RXZlbnRMaXN0ZW5lcjo6cHJlcGFyZUxpc3RlbmVyT2JqZWN0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiAgICAgLy8gSW5zZXJ0ICdcbicgb3RoZXJ3aXNlIC8vLXN0eWxl
IGNvbW1lbnRzIGNvdWxkIGJyZWFrIHRoZSBoYW5kbGVyLgogICAgIGNvZGUuYXBwZW5kKCAgIlxu
fSkuY2FsbCh0aGlzLCBldnQpO319fX0pIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBj
b2RlRXh0ZXJuYWxTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKGNvZGUpOwotICAgIHY4OjpIYW5k
bGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJu
YWxTdHJpbmcsIG1fc291cmNlVVJMLCBtX2xpbmVOdW1iZXIpOworICAgIHY4OjpIYW5kbGU8djg6
OlNjcmlwdD4gc2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJp
bmcsIG1fc291cmNlVVJMLCBtX3Bvc2l0aW9uKTsKICAgICBpZiAoIXNjcmlwdC5Jc0VtcHR5KCkp
IHsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSBwcm94eS0+cnVuU2NyaXB0
KHNjcmlwdCwgZmFsc2UpOwogICAgICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgewpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaAppbmRleCBmMTc0ZDIzYmYxMzFiMDEw
ZWU0ZjU5YmM0MjUyN2VlODY3NGEwNjA4Li4wODQ2N2ZlNWY3YWI5NzAxNGQ5NDUzYWYyNmZhM2Yx
NjZjZWU2M2IxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlz
dGVuZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDkgKzQ2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIC8vIEEgVjhMYXp5RXZlbnRMaXN0ZW5lciBpcyBhbHdheXMgYSBIVE1MIGV2ZW50IGhhbmRs
ZXIuCiAgICAgY2xhc3MgVjhMYXp5RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOExh
enlFdmVudExpc3RlbmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wg
aXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwg
aW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRs
ZSYgd29ybGRDb250ZXh0KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOExhenlFdmVudExp
c3RlbmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVu
dCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgVGV4
dFBvc2l0aW9uMCYgcG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250
ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4TGF6eUV2
ZW50TGlzdGVuZXIoZnVuY3Rpb25OYW1lLCBpc1NWR0V2ZW50LCBjb2RlLCBzb3VyY2VVUkwsIGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlciwgd29ybGRDb250ZXh0KSk7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFY4TGF6eUV2ZW50TGlzdGVuZXIoZnVuY3Rpb25OYW1lLCBpc1NWR0V2
ZW50LCBjb2RlLCBzb3VyY2VVUkwsIHBvc2l0aW9uLCB3b3JsZENvbnRleHQpKTsKICAgICAgICAg
fQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xhenkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CkBAIC01Niw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2
b2lkIHByZXBhcmVMaXN0ZW5lck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBWOExhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3Ry
aW5nIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFdv
cmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KTsKKyAgICAgICAgVjhMYXp5RXZlbnRMaXN0
ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBT
dHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAm
IHBvc2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCk7CiAKICAg
ICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2
ZW50Kik7CiAKQEAgLTcwLDggKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBi
b29sIG1faXNTVkdFdmVudDsKICAgICAgICAgU3RyaW5nIG1fY29kZTsKICAgICAgICAgU3RyaW5n
IG1fc291cmNlVVJMOwotICAgICAgICBpbnQgbV9saW5lTnVtYmVyOwotICAgICAgICBpbnQgbV9j
b2x1bW5OdW1iZXI7CisgICAgICAgIFRleHRQb3NpdGlvbjAgbV9wb3NpdGlvbjsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4UHJveHkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRleCAwYTYy
MDc5NGM5YjAxZmM4YjcxYmQ2NDM3ZTA2MDRiZWUyNmQ1N2ExLi4zYWZmYWU1OGU3MWE3MjZhNjY2
NzllZDg1MWI1YmQ0MmMzYjczZmMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTIzOCwx
MiArMjM4LDEzIEBAIFY4UHJveHk6On5WOFByb3h5KCkKICAgICB3aW5kb3dTaGVsbCgpLT5kZXN0
cm95R2xvYmFsKCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGls
ZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIGludCBiYXNlTGluZSwgdjg6OlNjcmlwdERhdGEqIHNjcmlwdERhdGEpCit2ODo6SGFuZGxl
PHY4OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5n
PiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24wJiBzY3Jp
cHRTdGFydFBvc2l0aW9uLCB2ODo6U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKIHsKICAgICBjb25z
dCB1aW50MTZfdCogZmlsZU5hbWVTdHJpbmcgPSBmcm9tV2ViQ29yZVN0cmluZyhmaWxlTmFtZSk7
Ci0gICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBuYW1lID0gdjg6OlN0cmluZzo6TmV3KGZpbGVO
YW1lU3RyaW5nLCBmaWxlTmFtZS5sZW5ndGgoKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdl
cj4gbGluZSA9IHY4OjpJbnRlZ2VyOjpOZXcoYmFzZUxpbmUpOwotICAgIHY4OjpTY3JpcHRPcmln
aW4gb3JpZ2luKG5hbWUsIGxpbmUpOworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gbmFtZTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhzY3Jp
cHRTdGFydFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKSk7CisgICAgdjg6OkhhbmRsZTx2
ODo6SW50ZWdlcj4gY29sdW1uID0gdjg6OkludGVnZXI6Ok5ldyhzY3JpcHRTdGFydFBvc2l0aW9u
Lm1fY29sdW1uLnplcm9CYXNlZEludCgpKTsKKyAgICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihu
YW1lLCBsaW5lLCBjb2x1bW4pOwogICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0g
djg6OlNjcmlwdDo6Q29tcGlsZShjb2RlLCAmb3JpZ2luLCBzY3JpcHREYXRhKTsKICAgICByZXR1
cm4gc2NyaXB0OwogfQpAQCAtMzk5LDcgKzQwMCw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4
UHJveHk6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZSwgTm9kZSogbm9k
CiAKICAgICAgICAgLy8gTk9URTogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBXZWJDb3JlLCBTY3Jp
cHRTb3VyY2VDb2RlJ3MgbGluZSBzdGFydHMgYXQKICAgICAgICAgLy8gMSwgd2hlcmVhcyB2OCBz
dGFydHMgYXQgMC4KLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21w
aWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51cmwoKSwgc291cmNlLnN0YXJ0TGluZSgpIC0gMSwgc2Ny
aXB0RGF0YS5nZXQoKSk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0g
Y29tcGlsZVNjcmlwdChjb2RlLCBzb3VyY2UudXJsKCksIFdURjo6dG9aZXJvQmFzZWRUZXh0UG9z
aXRpb24oc291cmNlLnN0YXJ0UG9zaXRpb24oKSksIHNjcmlwdERhdGEuZ2V0KCkpOwogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQogICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6dHJhY2VFdmVudEVuZCgi
djguY29tcGlsZSIsIG5vZGUsICIiKTsKIApAQCAtNDM0LDcgKzQzNSw3IEBAIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlw
dCwgYm9vbCBpc0luCiAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBzaG91bGQgYmUgYWJs
ZSB0byByZS11c2UgdGhlIG9yaWdpbiBvZiB0aGUKICAgICAgICAgLy8gc2NyaXB0IHBhc3NlZCB0
byB1cyBhcyB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiB1c2luZyBhbiBlbXB0eSBzdHJpbmcKICAg
ICAgICAgLy8gYW5kIDAgYmFzZUxpbmUuCi0gICAgICAgIHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQo
Y29kZSwgIiIsIDApOworICAgICAgICBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsICIiLCBU
ZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKGhhbmRs
ZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
aCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCmluZGV4IDdmMTBhMjZlZjc2M2Y3NTA3
MjhiNWEwZTI3ODk4Yjk1YzBmNTJiNjYuLjk4MDBkOTA5ZDcwMWFhODE5Y2I0ZTA0NGY2NzQ2ZDdl
ZGQ2MTM5NzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCkBAIC0yODksNyArMjg5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2hl
Y2tOZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRzJik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNv
ZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgdjg6OlNjcmlwdERhdGEq
ID0gMCk7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3Jp
cHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBj
b25zdCBUZXh0UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCB2ODo6U2NyaXB0RGF0YSog
PSAwKTsKIAogICAgICAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGNvZGUgaXMgZGlmZmVyZW50IGZy
b20gemVybywgYSBET00gZXhjZXB0aW9uIGlzCiAgICAgICAgIC8vIHNjaGVkdWxlIHRvIGJlIHRo
cm93bi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmNwcAppbmRleCAxNmUwYjQxMDFlZmRjMzVhZTc0NDE4MTdiMDY4N2RiNmI1YTY1YTI1
Li5jZWZiMmZhYTczOTA4OTRiMzVkNjVhZDUzZjIxYThmYmM3ZGRhNTYxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC0x
ODQsNyArMTg0LDcgQEAgYm9vbCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmZvcmdldFY4
RXZlbnRPYmplY3QoRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotU2NyaXB0
VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcm
IHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lLCBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRlKQorU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblN0YXRlKiBzdGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaHM7
CiAKQEAgLTE5Niw3ICsxOTYsNyBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdAogICAgIHY4OjpU
cnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwogCiAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHNj
cmlwdFN0cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoc2NyaXB0KTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpTY3JpcHQ+IGNvbXBpbGVkU2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChzY3JpcHRT
dHJpbmcsIGZpbGVOYW1lLCBiYXNlTGluZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBj
b21waWxlZFNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxl
TmFtZSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVz
dWx0ID0gcnVuU2NyaXB0KGNvbXBpbGVkU2NyaXB0KTsKIAogICAgIGlmICghZXhjZXB0aW9uQ2F0
Y2hlci5DYW5Db250aW51ZSgpKQpAQCAtMjI3LDcgKzIyNyw3IEBAIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2NyaXB0KHY4OjpIYW5kbGU8djg6
OlNjcmlwCiAgICAgLy8gQ29tcHV0ZSB0aGUgc291cmNlIHN0cmluZyBhbmQgcHJldmVudCBhZ2Fp
bnN0IGluZmluaXRlIHJlY3Vyc2lvbi4KICAgICBpZiAobV9yZWN1cnNpb24gPj0ga01heFJlY3Vy
c2lvbkRlcHRoKSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBjb2RlID0gdjhFeHRl
cm5hbFN0cmluZygidGhyb3cgUmFuZ2VFcnJvcignUmVjdXJzaW9uIHRvbyBkZWVwJykiKTsKLSAg
ICAgICAgc2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlLCAiIiwgMCk7CisgICAg
ICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZSwgIiIsIFRleHRQb3NpdGlv
bjA6Om1pbmltdW1Qb3NpdGlvbigpKTsKICAgICB9CiAKICAgICBpZiAoVjhQcm94eTo6aGFuZGxl
T3V0T2ZNZW1vcnkoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oCmluZGV4IDU4ODI0YjllZWY2ZjQ5MTQwODRjNzc3MTYxZTIzZjZlMzBh
YmUyODMuLmU3MGMzZDI4NGFiZTUyZTM1YmFjNDk4MDVlNzNhNGNmNDc0ZTljOTUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaApAQCAt
MzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTY2LDcgKzY3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRyYWNrRXZlbnQoRXZlbnQqKTsKIAogICAgICAg
ICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZp
cm9ubWVudC4KLSAgICAgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3Jp
cHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblN0YXRlKik7CisgICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24wJiBz
Y3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqKTsKIAogICAg
ICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRoZSBjb250ZXh0LgogICAgICAgICB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggN2RiMGQ4ZDM3MzcwOWIyZTk3M2I2N2U3NzIzZTRm
YzMxMWZiY2E1OS4uYjU2ZDM4MzZkN2U2YmIxYWM1ZDJjOGM1ZWQ2MzBmMDdjMjc2ZWYyMiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC03
NSw3ICs3NSw3IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAgICAgfQogCiAgICAgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblN0YXRlIHN0YXRlOwotICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1f
cHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNlKCksIHNvdXJjZUNvZGUudXJsKCkuc3Ry
aW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkgLSAxLCAmc3RhdGUpOworICAgIFNjcmlwdFZh
bHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNlKCksIHNvdXJj
ZUNvZGUudXJsKCkuc3RyaW5nKCksIFdURjo6dG9aZXJvQmFzZWRUZXh0UG9zaXRpb24oc291cmNl
Q29kZS5zdGFydFBvc2l0aW9uKCkpLCAmc3RhdGUpOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSBz
dGF0ZS5leGNlcHRpb247CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNw
cCBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCmluZGV4IDQyZTIyNWE3ZjMyYTFiMGNk
YzFiYzM0NTFiNjU0OTdhNDYxMzU2ODkuLjE4ZjYwNzExYTRjZDMwMjMyOWJjYWFkNGQ5OGI4YTIw
YzdjZTEyZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCisrKyBi
L1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBAIC00MCw3ICs0MCw3IEBAIFBlbmRpbmdT
Y3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkKIFBhc3NSZWZQdHI8RWxlbWVudD4gUGVuZGluZ1Njcmlw
dDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVhcigpCiB7CiAgICAgc2V0Q2FjaGVkU2NyaXB0KDApOwot
ICAgIG1fc3RhcnRpbmdMaW5lTnVtYmVyID0gMDsKKyAgICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBU
ZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKICAgICBtX3dhdGNoaW5nRm9yTG9h
ZCA9IGZhbHNlOwogICAgIHJldHVybiBtX2VsZW1lbnQucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvV2ViQ29yZS9kb20vUGVuZGluZ1Njcmlw
dC5oCmluZGV4IDQ0ZTFlNDkyODY3NmQ3OTYwMjJkZDI5MDU0NTc2MDE1YjdhMjZlNDQuLjA4MzUw
N2E5YjkwOTE2YmNmMjg2NTFkZjYyOWU1YjIzYmI5NDIyYzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL1BlbmRpbmdTY3JpcHQuaAorKysgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9z
aXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00MywxNCArNDQsMTQgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIFBlbmRpbmdTY3Jp
cHQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGljOgogICAgIFBlbmRpbmdT
Y3JpcHQoKQotICAgICAgICA6IG1fc3RhcnRpbmdMaW5lTnVtYmVyKDApCisgICAgICAgIDogbV9z
dGFydGluZ1Bvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAg
ICAgICAsIG1fd2F0Y2hpbmdGb3JMb2FkKGZhbHNlKQogICAgIHsKICAgICB9CiAKICAgICBQZW5k
aW5nU2NyaXB0KGNvbnN0IFBlbmRpbmdTY3JpcHQmIG90aGVyKQogICAgICAgICA6IENhY2hlZFJl
c291cmNlQ2xpZW50KG90aGVyKQotICAgICAgICAsIG1fc3RhcnRpbmdMaW5lTnVtYmVyKG90aGVy
Lm1fc3RhcnRpbmdMaW5lTnVtYmVyKQorICAgICAgICAsIG1fc3RhcnRpbmdQb3NpdGlvbihvdGhl
ci5tX3N0YXJ0aW5nUG9zaXRpb24pCiAgICAgICAgICwgbV93YXRjaGluZ0ZvckxvYWQob3RoZXIu
bV93YXRjaGluZ0ZvckxvYWQpCiAgICAgICAgICwgbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkK
ICAgICB7CkBAIC02NCw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgICAgIG1fc3RhcnRpbmdMaW5l
TnVtYmVyID0gb3RoZXIubV9zdGFydGluZ0xpbmVOdW1iZXI7CisgICAgICAgIG1fc3RhcnRpbmdQ
b3NpdGlvbiA9IG90aGVyLm1fc3RhcnRpbmdQb3NpdGlvbjsKICAgICAgICAgbV93YXRjaGluZ0Zv
ckxvYWQgPSBvdGhlci5tX3dhdGNoaW5nRm9yTG9hZDsKICAgICAgICAgbV9lbGVtZW50ID0gb3Ro
ZXIubV9lbGVtZW50OwogICAgICAgICBzZXRDYWNoZWRTY3JpcHQob3RoZXIuY2FjaGVkU2NyaXB0
KCkpOwpAQCAtNzQsNyArNzUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogTm8gc2V0dGVy
IG1lYW5zIHRoaXMgaXMgbmV2ZXIgc2V0IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gMC4KICAgICAv
LyBUaGlzIGlzIGVpdGhlciB1bm5lY2Vzc2FyeSBvciBpbmNvcnJlY3QuCi0gICAgaW50IHN0YXJ0
aW5nTGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdMaW5lTnVtYmVyOyB9Cisg
ICAgVGV4dFBvc2l0aW9uMSBzdGFydGluZ1Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dGluZ1Bvc2l0aW9uOyB9CiAKICAgICBib29sIHdhdGNoaW5nRm9yTG9hZCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2F0Y2hpbmdGb3JMb2FkOyB9CiAgICAgdm9pZCBzZXRXYXRjaGluZ0ZvckxvYWQoYm9v
bCBiKSB7IG1fd2F0Y2hpbmdGb3JMb2FkID0gYjsgfQpAQCAtODksNyArOTAsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CiAKIHBy
aXZhdGU6Ci0gICAgaW50IG1fc3RhcnRpbmdMaW5lTnVtYmVyOyAvLyBPbmx5IHVzZWQgZm9yIGlu
bGluZSBzY3JpcHQgdGFncy4KKyAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRpbmdQb3NpdGlvbjsg
Ly8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCiAgICAgYm9vbCBtX3dhdGNoaW5n
Rm9yTG9hZDsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OwogICAgIENhY2hlZFJlc291
cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdGFi
bGVEb2N1bWVudFBhcnNlci5oCmluZGV4IDhiMTYzMDQxMjEwNGU0ZTQ1YTAxMzIzZGQyMjU1ZTY1
NjRlMzQwNDUuLmQ5YmY4NWNhYmY0NTUzM2M5ODFiZTYwZmM1YmE5Njk3NzVlNDI0M2MgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNv
cmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCkBAIC0yNywxMCArMjcsMTAgQEAKICNk
ZWZpbmUgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyX2gKIAogI2luY2x1ZGUgIkRlY29kZWREYXRh
RG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTZWdtZW50ZWRTdHJpbmc7CiBjbGFzcyBYU1NB
dWRpdG9yOwogCiBjbGFzcyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgRGVjb2Rl
ZERhdGFEb2N1bWVudFBhcnNlciB7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IFRoZXNlIGFyZSB1c2VkIHRvIGV4cG9zZSB0aGUgY3VycmVudCBsaW5lL2NvbHVtbiB0byB0aGUg
c2NyaXB0aW5nIHN5c3RlbS4KICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3QgPSAwOwogCiAgICAgWFNTQXVkaXRv
ciogeHNzQXVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1feHNzQXVkaXRvcjsgfQogICAgIHZvaWQg
c2V0WFNTQXVkaXRvcihYU1NBdWRpdG9yKiBhdWRpdG9yKSB7IG1feHNzQXVkaXRvciA9IGF1ZGl0
b3I7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmggYi9XZWJD
b3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGUwNzcwYmFkYmFmZjdiYTExMDIwYWRk
YzcxMjQ5ZWYzZGVjODIwZDQuLmU4ODYyZTE5NzFhNjdkYTU2MzVkYzM3NWEzNWZkNjAyZDMyNmIx
NjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKKysrIGIvV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMTAyLDcgKzEwMiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV01MRXJyb3JIYW5kbGluZyB1c2VzIHRoZXNlIGZ1bmN0
aW9ucy4KICAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiAh
bV9zYXdFcnJvcjsgfQogICAgICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0OworICAgICAgICBUZXh0UG9z
aXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKIApAQCAtMTI5LDYgKzEyOSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGFwcGVuZEZyYWdtZW50U291cmNlKGNvbnN0
IFN0cmluZyYpOwogCisgICAgICAgIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKKwogI2lmIFVT
RShRWE1MU1RSRUFNKQogcHJpdmF0ZToKICAgICAgICAgdm9pZCBwYXJzZSgpOwpAQCAtMjA4LDcg
KzIxMCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRT
Y3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0
RWxlbWVudDsKLSAgICAgICAgaW50IG1fc2NyaXB0U3RhcnRMaW5lOworICAgICAgICBUZXh0UG9z
aXRpb24xIG1fc2NyaXB0U3RhcnRQb3NpdGlvbjsKIAogICAgICAgICBib29sIG1fcGFyc2luZ0Zy
YWdtZW50OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1dlYkNv
cmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggNTUzOTA3MmVlNThjYmEw
MTVmM2I2Y2U1ZDQ0Y2NiNzFkYjNmMTVmYi4uYzQ5YTI2MmQyMGU1YTc5ZGM5N2I5NmE4ZTE2N2Uw
MzVhMjZhMTM4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBA
IC01NTgsNyArNTU4LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERv
Y3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2xhc3RFcnJv
ckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3Jp
cHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9z
aXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNp
bmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNj
cmlwdGluZ0FsbG93ZWQpCiB7CkBAIC01ODUsNyArNTg1LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6
OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBw
YXJlbnQKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4o
MCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkK
KyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9z
aXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGlu
Z1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKIHsKQEAgLTgxNyw3ICs4MTcsNyBAQCB2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxM
b2NhbE5hbWUsIGNvbnN0IHhtbENoYQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVu
dCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2NyaXB0RWxl
bWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAg
IG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRvT25lQmFzZWRUZXh0UG9zaXRpb24odGV4dFBvc2l0
aW9uKCkpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKG5l
d0VsZW1lbnQuZ2V0KCkpOwogCkBAIC05MDMsNyArOTAzLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3
LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlw
dEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3Rh
cnRMaW5lKSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRl
U2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBk
b2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CiAKICAgICAgICAgLy8g
SmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCiAgICAgICAgIGlmIChpc0Rl
dGFjaGVkKCkpCkBAIC0xMzY5LDE0ICsxMzY5LDI2IEBAIHZvaWQqIHhtbERvY1B0ckZvclN0cmlu
ZyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0cmlu
CiAKIGludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiB7CisgICAgLy8g
RklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50LCBi
dXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KICAgICByZXR1cm4gY29udGV4dCgpID8g
Y29udGV4dCgpLT5pbnB1dC0+bGluZSA6IDE7CiB9CiAKIGludCBYTUxEb2N1bWVudFBhcnNlcjo6
Y29sdW1uTnVtYmVyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9u
IHByb2JhYmx5IHJldHVybnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVybiAw
LWJhc2VkLgogICAgIHJldHVybiBjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAx
OwogfQogCitUZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBj
b25zdAoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsK
KyAgICBpZiAoY29udGV4dCkgeworICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmxpbmUpLmNvbnZl
cnRUb1plcm9CYXNlZCgpLAorICAgICAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9u
ZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wpLmNvbnZlcnRUb1plcm9CYXNlZCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOworfQorCiB2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCiB7CiAgICAgRG9jdW1lbnRQYXJz
ZXI6OnN0b3BQYXJzaW5nKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBh
cnNlclF0LmNwcCBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmluZGV4IDc1
YTIwYmUzNTQxY2Y1MjdlZTU0OTg0ZDIxNDgyODFhZDA4MjRmNjQuLjUwMzExZmJmN2I2YzUxZjI1
YWQ0Yzc2YjNiMWFlZDc4MzEyZmNlNjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3Vt
ZW50UGFyc2VyUXQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3Bw
CkBAIC0xMDMsNyArMTAzLDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2xhc3RF
cnJvckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdT
Y3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0
UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3Bh
cnNpbmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVu
dFNjcmlwdGluZ0FsbG93ZWQpCiB7CkBAIC0xMzAsNyArMTMwLDcgQEAgWE1MRG9jdW1lbnRQYXJz
ZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50
KiBwYXJlbnQKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1
bW4oMCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUo
MCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1Jhbmdl
UG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3Njcmlw
dGluZ1Blcm1pc3Npb24ocGVybWlzc2lvbikKIHsKQEAgLTIzMiw2ICsyMzIsMTEgQEAgaW50IFhN
TERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAogICAgIHJldHVybiBtX3N0cmVh
bS5jb2x1bW5OdW1iZXIoKTsKIH0KIAorVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6
dGV4dFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olpl
cm9CYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jh
c2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKCkpKTsKK30KKwogdm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQogewogICAgIFNjcmlwdGFibGVEb2N1bWVu
dFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKQEAgLTUxNiw3ICs1MjEsNyBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpwYXJzZVN0YXJ0RWxlbWVudCgpCiAKICAgICBTY3JpcHRFbGVtZW50KiBzY3Jp
cHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwogICAgIGlmIChz
Y3JpcHRFbGVtZW50KQotICAgICAgICBtX3NjcmlwdFN0YXJ0TGluZSA9IGxpbmVOdW1iZXIoKTsK
KyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gV1RGOjp0b09uZUJhc2VkVGV4dFBvc2l0
aW9uKHRleHRQb3NpdGlvbigpKTsKIAogICAgIG1fY3VycmVudE5vZGUtPmRlcHJlY2F0ZWRQYXJz
ZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgpKTsKIApAQCAtNTg4LDcgKzU5Myw3IEBAIHZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCgpCiAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0
U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVy
bCgpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOworICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5z
Y3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNj
cmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikp
OwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBwb3BDdXJyZW50
Tm9kZSgpOwpAQCAtNzA5LDQgKzcxNCwzIEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNl
RHRkKCkKIAogfQogfQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAKaW5kZXggNjMwYjZhYTZlMWIwZDY2NTA4Y2ZkMTI5NGE3MDJjM2RkM2VkMmNmMC4uNmUxYTY5
ZTc2NThjMGVhZGVhNmUwMWIyNDM2YWIyM2VjNGJiMWZhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMTk0LDEyICsxOTQsMTIgQEAgYm9vbCBIVE1M
RG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpCiB7CiAgICAg
QVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOwogCi0gICAgaW50IHNjcmlwdFN0YXJ0
TGluZSA9IDA7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWls
ZGVyLT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0TGluZSk7CisgICAgVGV4dFBvc2l0
aW9uMSBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0
aW9uKCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWlsZGVy
LT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIC8vIFdlIHdp
bGwgbm90IGhhdmUgYSBzY3JpcHRSdW5uZXIgd2hlbiBwYXJzaW5nIGEgRG9jdW1lbnRGcmFnbWVu
dC4KICAgICBpZiAoIW1fc2NyaXB0UnVubmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVudC5yZWxlYXNlKCksIHNj
cmlwdFN0YXJ0TGluZSk7CisgICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlw
dEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIH0KIAogdm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCkBAIC00
MTUsOSArNDE1LDEzIEBAIGludCBIVE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25z
dAogICAgIHJldHVybiBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOwogfQogCi1pbnQgSFRNTERv
Y3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAorVGV4dFBvc2l0aW9uMCBIVE1MRG9j
dW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdG9rZW5p
emVyLT5jb2x1bW5OdW1iZXIoKTsKKyAgICBpbnQgbGluZVplcm9CYXNlZCA9IG1fdG9rZW5pemVy
LT5saW5lTnVtYmVyKCk7CisgICAgaW50IGNvbHVtbk9uZUJhc2VkID0gbV90b2tlbml6ZXItPmNv
bHVtbk51bWJlcigpOworCisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RGOjpaZXJvQmFzZWRO
dW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobGluZVplcm9CYXNlZCksCisgICAgICAgIFdURjo6T25l
QmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5PbmVCYXNlZCkuY29udmVydFRvWmVy
b0Jhc2VkKCkpOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2Ny
aXB0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRl
eCBlNjVhNTgyYTc1ZTBlMDNjZjQ4ZmRiYjRiYzhlOGMwN2MyNTI2MDAwLi41ZDI2YTU2NTk2Yjhh
MDMxZDA3YTY1MDdhNjk1NTRiZDI3OTlmMmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERv
Y3VtZW50UGFyc2VyLmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgaXNFeGVjdXRpbmdTY3JpcHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNj
cmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVy
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgdmly
dHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgLy8gSFRNTFNj
cmlwdFJ1bm5lckhvc3QKICAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291
cmNlKik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIu
Y3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCA0ZjU0
ZjQyOTI4NzBhY2Q1Mzg1NGZjNDcxMDg3MGRkOWRmMTRmMmQxLi45NjRlNThhOWUwZjJmYjg5MmFi
NmU4MzkyYWU5ZWE1N2JkNGRmM2Y3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxTY3JpcHRSdW5uZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1
bm5lci5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgU2NyaXB0U291cmNlQ29kZSBIVE1MU2NyaXB0UnVu
bmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JgogICAgICAg
ICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwogICAgIH0K
ICAgICBlcnJvck9jY3VycmVkID0gZmFsc2U7Ci0gICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVj
dXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ0xpbmVOdW1iZXIoKSk7CisgICAgcmV0
dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9j
dW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ1Bv
c2l0aW9uKCkpOwogfQogCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGluZ1NjcmlwdFJl
YWR5KGNvbnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCkKQEAgLTE3MCwxMyArMTcwLDEzIEBAIHZv
aWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JiBw
ZW5kaW5nU2NyaXB0KQogCiAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXRjaCAxMC4yLjUuMTEg
IkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMgJ3NjcmlwdCciCiAvLyBTY3JpcHQgaGFuZGxp
bmcgbGl2ZXMgb3V0c2lkZSB0aGUgdHJlZSBidWlsZGVyIHRvIGtlZXAgdGhlIGVhY2ggY2xhc3Mg
c2ltcGxlLgotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVu
dD4gc2NyaXB0RWxlbWVudCwgaW50IHN0YXJ0TGluZSkKK2Jvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6
ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGNvbnN0IFRleHRQb3Np
dGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQp
OwogICAgIC8vIEZJWE1FOiBJZiBzY3JpcHRpbmcgaXMgZGlzYWJsZWQsIGFsd2F5cyBqdXN0IHJl
dHVybiB0cnVlOwogCiAgICAgLy8gVHJ5IHRvIGV4ZWN1dGUgdGhlIHNjcmlwdCBnaXZlbiB0byB1
cy4KLSAgICBydW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc3RhcnRMaW5lKTsKKyAgICBy
dW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAg
ICBpZiAoaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpKSB7CiAgICAgICAgIGlmIChtX3Njcmlw
dE5lc3RpbmdMZXZlbCkKQEAgLTI4OCw3ICsyODgsNyBAQCBib29sIEhUTUxTY3JpcHRSdW5uZXI6
OnJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQsIEVsZW1l
bgogCiAvLyBUaGlzIG1ldGhvZCBpcyBtZWFudCB0byBtYXRjaCB0aGUgSFRNTDUgZGVmaW5pdGlv
biBvZiAicnVubmluZyBhIHNjcmlwdCIKIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93
ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3NjcmlwdGluZy0xLmh0bWwjcnVubmluZy1h
LXNjcmlwdAotdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0
LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQordm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3Jp
cHQoRWxlbWVudCogc2NyaXB0LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0
aW9uKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NFUlQoIWhhdmVQYXJzaW5n
QmxvY2tpbmdTY3JpcHQoKSk7CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBIVE1MU2NyaXB0UnVu
bmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQog
ICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDA0NwogICAgICAgICAgICAgLy8gQVNTRVJUKGRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0
c0xvYWRlZCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKLSAg
ICAgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50
KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzdGFydGluZ0xp
bmVOdW1iZXIpOworICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlw
dC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVu
dCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdChzb3Vy
Y2VDb2RlKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmgKaW5kZXggYmUyMWRkMjQyMWIxZDQ0MjdiMDg0N2IwYjkxMWMxZmU5N2M2Zjc2NS4uMmRm
Mjk1ZjljMTM1OTRkZWNiNmVmMWYxMDBlM2NkOTVkMzc5OTQyYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlBlbmRp
bmdTY3JpcHQuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCkBAIC01Miw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRl
dGFjaCgpOwogCiAgICAgLy8gUHJvY2Vzc2VzIHRoZSBwYXNzZWQgaW4gc2NyaXB0IGFuZCBhbnkg
cGVuZGluZyBzY3JpcHRzIGlmIHBvc3NpYmxlLgotICAgIGJvb2wgZXhlY3V0ZShQYXNzUmVmUHRy
PEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgaW50IHNjcmlwdFN0YXJ0TGluZSk7CisgICAgYm9v
bCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25zdCBUZXh0
UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlw
dHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dh
aXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdG
b3JTdHlsZXNoZWV0czsgfQpAQCAtNzYsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVx
dWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQqKTsKICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2Ny
aXB0KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlw
dChFbGVtZW50KiwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgdm9pZCBydW5TY3JpcHQo
RWxlbWVudCosIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAg
ICAgLy8gSGVscGVycyBmb3IgZGVhbGluZyB3aXRoIEhUTUxTY3JpcHRSdW5uZXJIb3N0CiAgICAg
dm9pZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwCmluZGV4IDM1NWRjOGQ1MzJmNWM3YzQwOTBjY2QxZmZmYTVjMmFhNzYz
ODJkYTguLjVmZDlhY2MzNzY4MWFhYzI0NTI0NjgxNDMwMGFhZDk0ZjkyODllZWYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTQ5LDEyICs0OSwxNSBAQAogI2lu
Y2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAi
WE1MTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBpbnQg
dW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSA9IC0xOworc3RhdGljIGNvbnN0IFRleHRQb3Np
dGlvbjAgdW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUwID0gVGV4dFBvc2l0aW9uMDo6YmVsb3dS
YW5nZVBvc2l0aW9uKCk7CitzdGF0aWMgY29uc3QgVGV4dFBvc2l0aW9uMSB1bmluaXRpYWxpemVk
UG9zaXRpb25WYWx1ZTEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KC0xKSwg
V1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNlKTsKIAogbmFtZXNwYWNlIHsKIApAQCAtMzMzLDgg
KzMzNiw4IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIq
IHRva2VuaXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVuCiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0
aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fc2Vjb25kYXJ5SW5zZXJ0aW9uTW9kZShJbml0
aWFsTW9kZSkKICAgICAsIG1fdG9rZW5pemVyKHRva2VuaXplcikKLSAgICAsIG1fc2NyaXB0VG9Q
cm9jZXNzU3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCi0gICAgLCBtX2xh
c3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCisg
ICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24odW5pbml0aWFsaXplZFBvc2l0aW9u
VmFsdWUxKQorICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24odW5pbml0aWFs
aXplZFBvc2l0aW9uVmFsdWUwKQogICAgICwgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyh1c2VQ
cmVIVE1MNVBhcnNlclF1aXJrcykKIHsKIH0KQEAgLTM1Miw4ICszNTUsOCBAQCBIVE1MVHJlZUJ1
aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3VtZW50
RnJhZ21lbnQqIGZyYQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUp
CiAgICAgLCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX3Rv
a2VuaXplcih0b2tlbml6ZXIpCi0gICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1bmlu
aXRpYWxpemVkTGluZU51bWJlclZhbHVlKQotICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0
TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9zY3JpcHRUb1Byb2Nl
c3NTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSkKKyAgICAsIG1fbGFz
dFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMCkK
ICAgICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJRdWlya3Mp
CiB7CiAgICAgaWYgKGNvbnRleHRFbGVtZW50KSB7CkBAIC00MTUsMTUgKzQxOCwxNSBAQCBIVE1M
VHJlZUJ1aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6On5GcmFnbWVudFBhcnNpbmdDb250
ZXh0KCkKIHsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VT
Y3JpcHRUb1Byb2Nlc3MoaW50JiBzY3JpcHRTdGFydExpbmUpCitQYXNzUmVmUHRyPEVsZW1lbnQ+
IEhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24xJiBzY3Jp
cHRTdGFydFBvc2l0aW9uKQogewogICAgIC8vIFVucGF1c2Ugb3Vyc2VsdmVzLCBjYWxsZXJzIG1h
eSBwYXVzZSB1cyBhZ2FpbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHNjcmlwdC4KICAgICAvLyBUaGUg
SFRNTDUgc3BlYyBpcyB3cml0dGVuIGFzIHRob3VnaCBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbnNp
ZGUgdGhlIHRyZWUKICAgICAvLyBidWlsZGVyLiAgV2UgcGF1c2UgdGhlIHBhcnNlciB0byBleGl0
IHRoZSB0cmVlIGJ1aWxkZXIsIGFuZCB0aGVuIHJlc3VtZQogICAgIC8vIGJlZm9yZSBydW5uaW5n
IHNjcmlwdHMuCiAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwotICAgIHNjcmlwdFN0YXJ0TGluZSA9
IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lOwotICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRM
aW5lID0gdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZTsKKyAgICBzY3JpcHRTdGFydFBvc2l0
aW9uID0gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOworICAgIG1fc2NyaXB0VG9Qcm9j
ZXNzU3RhcnRQb3NpdGlvbiA9IHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMTsKICAgICByZXR1
cm4gbV9zY3JpcHRUb1Byb2Nlc3MucmVsZWFzZSgpOwogfQogCkBAIC0yMjAxLDcgKzIyMDQsNyBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICBBU1NFUlQo
bV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7CiAgICAgICAg
ICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwotICAgICAg
ICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUgPSBtX2xhc3RTY3JpcHRFbGVtZW50U3Rh
cnRMaW5lICsgMTsKKyAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9
IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbihtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3Np
dGlvbik7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAg
ICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYgbV9mcmFnbWVudENvbnRleHQuc2NyaXB0
aW5nUGVybWlzc2lvbigpID09IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCkKICAgICAgICAg
ICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKQEAgLTI3NTAs
NyArMjc1MywxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFn
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgbV90cmVlLmluc2VydFNjcmlwdEVsZW1lbnQo
dG9rZW4pOwogICAgIG1fdG9rZW5pemVyLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpTY3JpcHRE
YXRhU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2Rl
OwotICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUgPSBtX3Rva2VuaXplci0+bGluZU51
bWJlcigpOworCisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbiA9IFRleHRQb3NpdGlvbjAoV1RG
OjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV90b2tlbml6ZXItPmxpbmVOdW1i
ZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpzX2Jhc2UpOworICAgIG1fbGFzdFNjcmlwdEVs
ZW1lbnRTdGFydFBvc2l0aW9uID0gcG9zaXRpb247CisKICAgICBzZXRJbnNlcnRpb25Nb2RlKFRl
eHRNb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKaW5kZXggZTYx
ZmU3MzQ2NmRhMTc4ZDMzMTFkMjc2MjBlNDZiODI4MWMxZTQ1NS4uYmIzNTk2ZGZlZTdmY2NlOTJl
NzFmMmUxZmEwZTVmMTVlOTQ4YjE4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRTdGFjay5oIgogI2lu
Y2x1ZGUgIkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCIKICNpbmNsdWRlICJIVE1MVG9rZW5p
emVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnN0cnVj
dFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRNTFRva2VuJik7CiAKICAgICAvLyBNdXN0IGJl
IGNhbGxlZCB3aGVuIHBhcnNlciBpcyBwYXVzZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNlciBh
Z2Fpbi4KLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nlc3MoaW50JiBz
Y3JpcHRTdGFydExpbmUpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJv
Y2VzcyhUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIC8vIERvbmUs
IGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KICAgICB2b2lkIGZpbmlzaGVkKCk7CkBAIC0yNDYs
MTMgKzI0NywxMiBAQCBwcml2YXRlOgogICAgIEhUTUxUb2tlbml6ZXIqIG1fdG9rZW5pemVyOwog
CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0VG9Qcm9jZXNzOyAvLyA8c2NyaXB0PiB0YWcg
d2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUgcmVzdW1pbmcgdGhlIHBhcnNlci4KLSAgICBp
bnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7IC8vIFN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9m
IHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KKyAgICBUZXh0UG9zaXRpb24xIG1f
c2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsgLy8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2Yg
dGhlIHNjcmlwdCB0YWcgbmVlZGluZyBwcm9jZXNzaW5nLgogCiAgICAgLy8gRklYTUU6IFdlIHBy
b2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoaXMgbWVtYmVyLiAgT3JpZ2luYWxseSwgaXQgd2FzCiAg
ICAgLy8gY3JlYXRlZCB0byBzZXJ2aWNlIHRoZSBsZWdhY3kgdHJlZSBidWlsZGVyLCBidXQgaXQg
c2VlbXMgdG8gYmUgdXNlZCBmb3IKICAgICAvLyBzb21lIG90aGVyIHRoaW5ncyBub3cuCi0gICAg
aW50IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmU7Ci0gICAgCisgICAgVGV4dFBvc2l0aW9u
MCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbjsKICAgICBib29sIG1fdXNlUHJlSFRN
TDVQYXJzZXJRdWlya3M7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0MTZjYTMxN2M3ZGUxZDM2OTA3
ZDY5NTk1OGVmYzFiMWJhNTNkMjZiLi43YjFlOGNmOWZjNWE2N2E2MTA1ZDkyZjk4ZjQ3M2ZjZGZl
Nzc5ZGIwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0wOS0yNCAgUGV0ZXIg
UnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2NyaXB0
IGNvbHVtbiBwb3NpdGlvbiB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVuZ2lu
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNzEK
KworICAgICAgICBSZXBsYWNlcyBzY3JpcHQgbGluZSBudW1iZXIgd2l0aCBUZXh0UG9zaXRpb24g
c3RydWN0dXJlLgorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKToKKwogMjAxMC0w
OS0yNCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIGZpeCBjaHJvbWl1bSBjb21waWxlIGFmdGVyIHI2ODI3NiB3aGljaCByZW5hbWVkCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggZDhmNTU5ZTQ2YWM5Y2U3MWNlMzdmMDc5
NTlhZDZmOTRjY2FlZDE2NC4uZDk0ZTI3MWU0NDQwMjk3Y2FjN2JjOTZlZWY1NDM4MTI5YWNiZmQ4
MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtNzQyLDggKzc0Miw5IEBA
IHZvaWQgV2ViRnJhbWVJbXBsOjpiaW5kVG9XaW5kb3dPYmplY3QoY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBOUE9iamVjdCogb2JqZWN0KQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlw
dChjb25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBUZXh0UG9zaXRpb24xIHBv
c2l0aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3RhcnRM
aW5lKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNlKTsKICAgICBtX2ZyYW1lLT5zY3JpcHQo
KS0+ZXhlY3V0ZVNjcmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwg
c291cmNlLnVybCwgc291cmNlLnN0YXJ0TGluZSkpOworICAgICAgICBTY3JpcHRTb3VyY2VDb2Rl
KHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikpOwogfQogCiB2b2lkIFdlYkZyYW1l
SW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKQEAgLTc1Myw4ICs3NTQsOSBAQCB2
b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKICAgICBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbihX
VEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlc0luW2ldLnN0YXJ0TGlu
ZSksIFdURjo6T25lQmFzZWROdW1iZXI6OnNfYmFzZSk7CiAgICAgICAgIHNvdXJjZXMuYXBwZW5k
KFNjcmlwdFNvdXJjZUNvZGUoCi0gICAgICAgICAgICBzb3VyY2VzSW5baV0uY29kZSwgc291cmNl
c0luW2ldLnVybCwgc291cmNlc0luW2ldLnN0YXJ0TGluZSkpOworICAgICAgICAgICAgc291cmNl
c0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9uKSk7CiAgICAgfQogCiAgICAg
bV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSWQsIHNvdXJj
ZXMsIGV4dGVuc2lvbkdyb3VwKTsKQEAgLTgwNiw4ICs4MDgsOSBAQCB2b2lkIFdlYkZyYW1lSW1w
bDo6Y29sbGVjdEdhcmJhZ2UoKQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZyYW1lSW1wbDo6
ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSYg
c291cmNlKQogeworICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2VkTnVtYmVy
OjpzX2Jhc2UpOwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdCgK
LSAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgc291cmNl
LnN0YXJ0TGluZSkpLnY4VmFsdWUoKTsKKyAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2Uu
Y29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKS52OFZhbHVlKCk7CiB9CiAKIC8vIFJldHVybnMg
dGhlIFY4IGNvbnRleHQgZm9yIHRoaXMgZnJhbWUsIG9yIGFuIGVtcHR5IGhhbmRsZSBpZiB0aGVy
ZSBpcyBub25lLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70071</attachid>
            <date>2010-10-07 05:49:03 -0700</date>
            <delta_ts>2010-10-08 07:31:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20101007164900.patch</filename>
            <type>text/plain</type>
            <size>59149</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiOWM5ZjkwN2MzODA5NTZkZjRlNGQ0NzFjZWY4YjMxODBmMTJhYThkLi5h
YmMwM2Y5OGU2ZjBiNzZkN2Y1NzZjYjJjNzI4NTNjNzRlZWEyODU3IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTAtMTAtMDcgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvdGV4dC9UZXh0UG9zaXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiB3
dGYvdGV4dC9UZXh0UG9zaXRpb24uaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRleHRQb3NpdGlv
bjo6VGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6VGV4dFBvc2l0aW9uOjptaW5pbXVtUG9z
aXRpb24pOgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbik6
CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCk6CisgICAg
ICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6WmVyb0Jhc2VkTnVtYmVyKToKKyAgICAgICAgKFdU
Rjo6WmVyb0Jhc2VkTnVtYmVyOjp6ZXJvQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPbmVCYXNl
ZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6
Ok9uZUJhc2VkTnVtYmVyKToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6Om9uZUJhc2Vk
SW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRBc1plcm9CYXNlZElu
dCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpjb252ZXJ0VG9aZXJvQmFzZWQpOgor
ICAgICAgICAoV1RGOjp0b1plcm9CYXNlZFRleHRQb3NpdGlvbik6CisgICAgICAgIChXVEY6OnRv
T25lQmFzZWRUZXh0UG9zaXRpb24pOgorICAgICAgICAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmNv
bnZlcnRUb09uZUJhc2VkKToKKyAgICAgICAgKiB3dGYvd3RmLnByaToKKwogMjAxMC0xMC0wNiAg
Q2hyaXMgRXZhbnMgIDxjZXZhbnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggODhkMTc2MTdiM2E0Yjg4ODRjMDRh
MjY4NjhjNmYwNmQxNzMxYzc1MC4uMDI2NjY0NTZiMjE1YmMwMzIyYmMyZDQxN2UwZDE0ZGYxNzAx
Yzg0YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTUxMSw2ICs1MTEsOCBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oIFwKIAlKYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0
aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAgXAogCUphdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5
cGkKaW5kZXggNDYyOTYwZDUxZGQ2ZGJlNDAyZDU4NjNkMjA4YzEzMjhjYmMxNWFjZS4uMDEwNzU5
ODRhOTBiMGQxNzMwNGQ2ZDZiMGQ4Y2Q2MDA2NTE4NDg5YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5neXBpCkBAIC00NTQsNiArNDU0LDggQEAKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcCcsCiAgICAgICAgICAgICAnd3RmL3RleHQvU3RyaW5nSW1wbC5oJywKICAgICAg
ICAgICAgICd3dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCcsCisgICAgICAgICAgICAnd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmgnLAorICAgICAgICAgICAgJ3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ3d0Zi90ZXh0L1dURlN0cmluZy5jcHAnLAogICAgICAgICAgICAg
J3d0Zi90ZXh0L1dURlN0cmluZy5oJywKICAgICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRv
ci5oJywKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL0ph
dmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA4OTY3OTRlZjQxZThmMDIxODQw
OTk0YWMzNTI0Nzg3MmIyZGFlMTY5Li45M2ZhYTljMTAxMTJjZjYyZThmYWI3Mjg4YTE4ZDlhYTYx
ZjBjMWE0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKKysr
IGIvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xOCw2ICsxOCw3IEBAIFNF
VChXVEZfU09VUkNFUwogICAgIHRleHQvQ1N0cmluZy5jcHAKICAgICB0ZXh0L1N0cmluZ0ltcGwu
Y3BwCiAgICAgdGV4dC9TdHJpbmdTdGF0aWNzLmNwcAorICAgIHRleHQvVGV4dFBvc2l0aW9uLmNw
cAogICAgIHRleHQvV1RGU3RyaW5nLmNwcAogCiAgICAgdW5pY29kZS9VVEY4LmNwcApkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmNwcCBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExN2UwMzA5NTlk
MjdhOWQ4MWQzZTEwMjA4OTA4OGE5Njc5NzFhZQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5jcHAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0UG9zaXRpb24uaCIK
KworbmFtZXNwYWNlIFdURiB7CisKK2NvbnN0IFplcm9CYXNlZE51bWJlciBaZXJvQmFzZWROdW1i
ZXI6OnNfYmFzZSgwKTsKK2NvbnN0IFplcm9CYXNlZE51bWJlciBaZXJvQmFzZWROdW1iZXI6OnNf
YmVsb3dCYXNlKC0xKTsKKworY29uc3QgT25lQmFzZWROdW1iZXIgT25lQmFzZWROdW1iZXI6OnNf
YmFzZSgxKTsKK2NvbnN0IE9uZUJhc2VkTnVtYmVyIE9uZUJhc2VkTnVtYmVyOjpzX2JlbG93QmFz
ZSgwKTsKKworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBv
c2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODcxYTE3MDBhYjMwMDJlYzY1NGNhNWE3OTE0NjZiZDg4Yjgz
ZWVjZgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1RleHRQb3Np
dGlvbi5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0UG9z
aXRpb25faAorI2RlZmluZSBUZXh0UG9zaXRpb25faAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKworLyoKKyAqIFRleHQgUG9zaXRpb24KKyAqCisg
KiBUZXh0UG9zaXRpb24gc3RydWN0dXJlIHNwZWNpZmllcyBjb29yZGluYXRlcyB3aXRoaW4gYW4g
dGV4dCByZXNvdXJjZS4gSXQgaXMgdXNlZCBtb3N0bHkKKyAqIGZvciBzYXZpbmcgc2NyaXB0IHNv
dXJjZSBwb3NpdGlvbi4KKyAqCisgKiBMYXRlciBUZXh0UG9zaXRpb24wIGFuZCBUZXh0UG9zaXRp
b24xIGFuZCBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUgbWVyZ2VkIHRvZ2V0aGVyIHF1aXRlIGVh
c2lseS4KKyAqCisgKgorICogMC1iYXNlZCBhbmQgMS1iYXNlZAorICoKKyAqIExpbmUgYW5kIGNv
bHVtbiBudW1iZXJzIGNvdWxkIGJlIGludGVycHJldGVkIGFzIHplcm8tYmFzZWQgb3IgMS1iYXNl
ZC4gU2luY2UKKyAqIGJvdGggcHJhY3RpY2VzIGNvZXhpc3QgaW4gV2ViS2l0IHNvdXJjZSBiYXNl
LCAnaW50JyB0eXBlIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoCisgKiBhIGRlZGljYXRlZCB3cmFw
cGVyIHR5cGVzLCBzbyB0aGF0IGNvbXBpbGVyIGhlbHBlZCB1cyB3aXRoIHRoaXMgYW1iaWd1aXR5
LgorICoKKyAqIEhlcmUgd2UgaW50cm9kdWNlIDIgdHlwZXMgb2YgbnVtYmVyczogWmVyb0Jhc2Vk
TnVtYmVyIGFuZCBPbmVCYXNlZE51bWJlciBhbmQKKyAqIDIgY29ycmVzcG9uZGluZyB0eXBlcyBv
ZiBUZXh0UG9zaXRpb24gc3RydWN0dXJlLiBXaGlsZSBvbmx5IG9uZSB0eXBlIG91Z2h0IHRvIGJl
IGVub3VnaCwKKyAqIHRoaXMgaXMgZG9uZSB0byBrZWVwIHRyYW5zaXRpb24gdG8gdGhlIG5ldyB0
eXBlcyBhcyB0cmFuc3BhcmVudCBhcyBwb3NzaWJsZToKKyAqIGUuZy4gaW4gYXJlYXMgd2hlcmUg
MC1iYXNlZCBpbnRlZ2VycyBhcmUgdXNlZCwgVGV4dFBvc2l0aW9uMCBzaG91bGQgYmUgaW50cm9k
dWNlZC4gVGhpcworICogd2F5IGFsbCBjaGFuZ2VzIHdpbGwgcmVtYWluIHRyYWNrYWJsZS4KKyAq
CisgKiBMYXRlciBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUgbWVyZ2VkIGluIG9uZSB0eXBlIHF1
aXRlIGVhc2lseS4KKyAqCisgKiBGb3IgdHlwZSBzYWZldHkgYW5kIGZvciB0aGUgZnV0dXJlIHR5
cGUgbWVyZ2UgaXQgaXMgaW1wb3J0YW50IHRoYXQgYWxsIG9wZXJhdGlvbnMgaW4gQVBJCisgKiB0
aGF0IGFjY2VwdCBvciByZXR1cm4gaW50ZWdlciBoYXZlIGEgbmFtZSBleHBsaWNpdGx5IGRlZmlu
aW5nIGJhc2Ugb2YgaW50ZWdlci4gRm9yIHRoaXMgcmVhc29uCisgKiBpbnQtcmVjZWl2aW5nIGNv
bnN0cnVjdG9ycyBhcmUgaGlkZGVuIGZyb20gQVBJLgorICovCisKK3RlbXBsYXRlPHR5cGVuYW1l
IE5VTUJFUj4KK2NsYXNzIFRleHRQb3NpdGlvbiB7CitwdWJsaWM6CisgICAgVGV4dFBvc2l0aW9u
KE5VTUJFUiBsaW5lLCBOVU1CRVIgY29sdW1uKQorICAgICAgICA6IG1fbGluZShsaW5lKQorICAg
ICAgICAsIG1fY29sdW1uKGNvbHVtbikKKyAgICB7CisgICAgfQorICAgIFRleHRQb3NpdGlvbigp
IHt9CisKKyAgICAvLyBBICdtaW5pbXVtJyB2YWx1ZSBvZiBwb3NpdGlvbiwgdXNlZCBhcyBhIGRl
ZmF1bHQgdmFsdWUuCisgICAgc3RhdGljIFRleHRQb3NpdGlvbjxOVU1CRVI+IG1pbmltdW1Qb3Np
dGlvbigpIHsgcmV0dXJuIFRleHRQb3NpdGlvbjxOVU1CRVI+KE5VTUJFUjo6c19iYXNlLCBOVU1C
RVI6OnNfYmFzZSk7IH0KKworICAgIC8vIEEgdmFsdWUgd2l0aCBsaW5lIHZhbHVlIGxlc3MgdGhh
biBhIG1pbmltdW07IHVzZWQgYXMgYW4gaW1wb3NzaWJsZSBwb3NpdGlvbi4KKyAgICBzdGF0aWMg
VGV4dFBvc2l0aW9uPE5VTUJFUj4gYmVsb3dSYW5nZVBvc2l0aW9uKCkgeyByZXR1cm4gVGV4dFBv
c2l0aW9uPE5VTUJFUj4oTlVNQkVSOjpzX2JlbG93QmFzZSwgTlVNQkVSOjpzX2Jhc2UpOyB9CisK
KyAgICBOVU1CRVIgbV9saW5lOworICAgIE5VTUJFUiBtX2NvbHVtbjsKK307CisKKworY2xhc3Mg
T25lQmFzZWROdW1iZXI7CisKKy8vIEFuIGludCB3cmFwcGVyIHRoYXQgYWx3YXlzIHJlbWluZHMg
eW91IHRoYXQgdGhlIG51bWJlciBzaG91bGQgYmUgMC1iYXNlZAorY2xhc3MgWmVyb0Jhc2VkTnVt
YmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGZyb21aZXJvQmFzZWRJ
bnQoaW50IHplcm9CYXNlZEludCkgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyKHplcm9CYXNlZElu
dCk7IH0KKworICAgIFplcm9CYXNlZE51bWJlcigpIHt9CisKKyAgICBpbnQgemVyb0Jhc2VkSW50
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgT25lQmFzZWROdW1iZXIgY29udmVy
dFRvT25lQmFzZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCBaZXJvQmFzZWROdW1iZXIg
c19iYXNlOyAvLyAwCisgICAgc3RhdGljIGNvbnN0IFplcm9CYXNlZE51bWJlciBzX2JlbG93QmFz
ZTsgLy8gLTEKKworcHJpdmF0ZToKKyAgICBaZXJvQmFzZWROdW1iZXIoaW50IHZhbHVlKSA6IG1f
dmFsdWUodmFsdWUpIHt9CisgICAgaW50IG1fdmFsdWU7Cit9OworCisvLyBBbiBpbnQgd3JhcHBl
ciB0aGF0IGFsd2F5cyByZW1pbmRzIHlvdSB0aGF0IHRoZSBudW1iZXIgc2hvdWxkIGJlIDEtYmFz
ZWQKK2NsYXNzIE9uZUJhc2VkTnVtYmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgT25lQmFzZWRO
dW1iZXIgZnJvbU9uZUJhc2VkSW50KGludCBvbmVCYXNlZEludCkgeyByZXR1cm4gT25lQmFzZWRO
dW1iZXIob25lQmFzZWRJbnQpOyB9CisgICAgT25lQmFzZWROdW1iZXIoKSB7fQorCisgICAgaW50
IG9uZUJhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGludCBjb252ZXJ0
QXNaZXJvQmFzZWRJbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlIC0gMTsgfQorICAgIFplcm9C
YXNlZE51bWJlciBjb252ZXJ0VG9aZXJvQmFzZWQoKSBjb25zdCB7IHJldHVybiBaZXJvQmFzZWRO
dW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV92YWx1ZSAtIDEpOyB9CisKKyAgICBzdGF0aWMgY29u
c3QgT25lQmFzZWROdW1iZXIgc19iYXNlOyAvLyAxCisgICAgc3RhdGljIGNvbnN0IE9uZUJhc2Vk
TnVtYmVyIHNfYmVsb3dCYXNlOyAvLyAwCisKK3ByaXZhdGU6CisgICAgT25lQmFzZWROdW1iZXIo
aW50IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHt9CisgICAgaW50IG1fdmFsdWU7Cit9OworCit0
eXBlZGVmIFRleHRQb3NpdGlvbjxaZXJvQmFzZWROdW1iZXI+IFRleHRQb3NpdGlvbjA7Cit0eXBl
ZGVmIFRleHRQb3NpdGlvbjxPbmVCYXNlZE51bWJlcj4gVGV4dFBvc2l0aW9uMTsKKworaW5saW5l
IFRleHRQb3NpdGlvbjAgdG9aZXJvQmFzZWRUZXh0UG9zaXRpb24oY29uc3QgVGV4dFBvc2l0aW9u
MSYgcG9zaXRpb24pCit7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAocG9zaXRpb24ubV9saW5l
LmNvbnZlcnRUb1plcm9CYXNlZCgpLCBwb3NpdGlvbi5tX2NvbHVtbi5jb252ZXJ0VG9aZXJvQmFz
ZWQoKSk7Cit9CisKK2lubGluZSBUZXh0UG9zaXRpb24xIHRvT25lQmFzZWRUZXh0UG9zaXRpb24o
Y29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24pCit7CisgICAgcmV0dXJuIFRleHRQb3NpdGlv
bjEocG9zaXRpb24ubV9saW5lLmNvbnZlcnRUb09uZUJhc2VkKCksIHBvc2l0aW9uLm1fY29sdW1u
LmNvbnZlcnRUb09uZUJhc2VkKCkpOworfQorCitpbmxpbmUgT25lQmFzZWROdW1iZXIgWmVyb0Jh
c2VkTnVtYmVyOjpjb252ZXJ0VG9PbmVCYXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE9uZUJh
c2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV92YWx1ZSArIDEpOworfQorCit9CisKKwordXNp
bmcgV1RGOjpUZXh0UG9zaXRpb24wOwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb24xOworCisjZW5k
aWYgLy8gVGV4dFBvc2l0aW9uX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYu
cHJpIGIvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKaW5kZXggODRhYzIwZTNmYzlmZTRiNWNh
MjRmOTUzOTJmN2JhMWU5MTgwMTM0MC4uZWQ0ZGE3NDkxNWJhZDU1ODJiMDkyYjI4ODU1ZGY4YWM2
N2RjMDZkMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKKysrIGIvSmF2
YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKQEAgLTI0LDYgKzI0LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgd3RmL3RleHQvQ1N0cmluZy5jcHAgXAogICAgIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIFwK
ICAgICB3dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCBcCisgICAgd3RmL3RleHQvVGV4dFBvc2l0
aW9uLmNwcCBcCiAgICAgd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBcCiAgICAgd3RmL3VuaWNvZGUv
Q29sbGF0b3JEZWZhdWx0LmNwcCBcCiAgICAgd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNw
cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDQxODk1MGU5ODU0ZTJjYTM5Mzg5NjgyNjY0M2IzOTczZTdmYTllMWUuLmVkNjhhYmEwMTg2
ZTMxNWRjOThhZjkzMzI3MmQwZTU1ZTYwZWRkYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTAtMTAtMDcg
IFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhUTUwgcGFyc2VyIHNob3VsZCBwcm92aWRl
IHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhUTUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlw
dCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1MjcxCisKKyAgICAgICAgUmVwbGFjZXMgbGluZSBudW1iZXIgd2l0aCBUZXh0UG9zaXRpb24g
c3RydWN0IHNvIHRoYXQgc2NyaXB0IGVuZ2luZQorICAgICAgICBnZXRzIHNjcmlwdCBzdGFydGlu
ZyBsaW5lL2NvbHVtbi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlwdFNvdXJjZUNvZGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpldmVudEhhbmRsZXJQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlz
dGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpzdGFydExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0U291cmNlQ29kZTo6c3RhcnRQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExp
c3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2
ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6cnVuU2Ny
aXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgICogYmluZGlu
Z3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpydW5TY3JpcHQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2Ny
aXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50
QW5kQ2xlYXIpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdTY3JpcHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0
OjpzdGFydGluZ1Bvc2l0aW9uKToKKyAgICAgICAgKiBkb20vU2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyLmg6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogZG9t
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmNvbHVtbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4
dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9z
aXRpb25PbmVCYXNlZCk6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Ny
aXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDoKKwogMjAxMC0xMC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFu
IExvcGV6LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2Rl
LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAppbmRleCAzMmQ2Mjk4
Y2RiZGE3NzJkYWExM2UxMDMzZTNjZjBhYTQwZjU5NGIyLi4wOTJlZWI4ZjA4YTMyOWEzOTFkOTg3
MTZkZmVkZDk5OTY1NjA4OGMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFNvdXJjZUNvZGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUu
aApAQCAtMzUsMTUgKzM1LDE2IEBACiAjaW5jbHVkZSAiU2NyaXB0U291cmNlUHJvdmlkZXIuaCIK
ICNpbmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2NyaXB0U291cmNlQ29kZSB7CiBwdWJs
aWM6Ci0gICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VS
TCYgdXJsID0gS1VSTCgpLCBpbnQgc3RhcnRMaW5lID0gMSkKKyAgICBTY3JpcHRTb3VyY2VDb2Rl
KGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGNvbnN0IFRl
eHRQb3NpdGlvbjEmIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRp
b24oKSkKICAgICAgICAgOiBtX3Byb3ZpZGVyKFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUo
c291cmNlLCB1cmwuaXNOdWxsKCkgPyBTdHJpbmcoKSA6IHVybC5zdHJpbmcoKSkpCi0gICAgICAg
ICwgbV9jb2RlKG1fcHJvdmlkZXIsIHN0YXJ0TGluZSkKKyAgICAgICAgLCBtX2NvZGUobV9wcm92
aWRlciwgc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSkKICAgICAgICAgLCBtX3Vy
bCh1cmwpCiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2No
ZWR1bGVkQWN0aW9uLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNw
cAppbmRleCBkY2QwYmIzMzc3MTgxMzE4NDIwYzEwNzNiZTI1MWE5ZTU4NGJhNGI3Li43MDhmYmU2
N2ZlOTRkNzcyMjEyYzhiYzNkMjdkZTE4YmQ1MTAxMmNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y2hlZHVsZWRBY3Rpb24uY3BwCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogU2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24odjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dCwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmMsIGludCBhcmdjLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAg
LCBtX2NvZGUoU3RyaW5nKCksIEtVUkwoKSwgMCkKKyAgICAsIG1fY29kZShTdHJpbmcoKSwgS1VS
TCgpLCBUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKIHsKICAgICBtX2Z1bmN0
aW9uID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPjo6TmV3KGZ1bmMpOwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA5ODE5Njc5MjQ2YjA3OTQ2Nzc4
MWRjOWUyNDJjNjgyYjkzNmE5OWIxLi5hOWM3YzY5MTI4MGZiZmFjNDlkZjhkN2U2NWZiZjk5MThh
NjlkYzVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTI2
MiwyMCArMjYyLDEyIEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIFNob3VsCiAgICAgcmV0dXJuIFNjcmlw
dFZhbHVlKG9iamVjdCk7CiB9CiAKLWludCBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJM
aW5lTnVtYmVyKCkgY29uc3QKK1RleHRQb3NpdGlvbjAgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRI
YW5kbGVyUG9zaXRpb24oKSBjb25zdAogewogICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciog
cGFyc2VyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCk7
CiAgICAgaWYgKHBhcnNlcikKLSAgICAgICAgcmV0dXJuIHBhcnNlci0+bGluZU51bWJlcigpOwot
ICAgIHJldHVybiAwOwotfQotCi1pbnQgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyQ29s
dW1uTnVtYmVyKCkgY29uc3QKLXsKLSAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNl
ciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwotICAg
IGlmIChwYXJzZXIpCi0gICAgICAgIHJldHVybiBwYXJzZXItPmNvbHVtbk51bWJlcigpOwotICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gcGFyc2VyLT50ZXh0UG9zaXRpb24oKTsKKyAgICBy
ZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7CiB9CiAKIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6ZmluaXNoZWRXaXRoRXZlbnQoRXZlbnQqIGV2ZW50KQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCA4YWM5MDY0N2JiZmVhOWZmNWM1MmJiNDQ2Y2Zi
MmQxMjhhZjlmYjdhLi45MDEzYTlmNGExZDJiZTNjZTg4NmYwN2RlNGEzODEyMmQxODIwMTIwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaApAQCAtMTU1LDggKzE1NSw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZmluaXNoZWRXaXRoRXZlbnQoRXZlbnQqKTsKIAotICAgIGlu
dCBldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkgY29uc3Q7Ci0gICAgaW50IGV2ZW50SGFuZGxlckNv
bHVtbk51bWJlcigpIGNvbnN0OworICAgIFRleHRQb3NpdGlvbjAgZXZlbnRIYW5kbGVyUG9zaXRp
b24oKSBjb25zdDsKIAogICAgIHZvaWQgc2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soYm9vbCBw
cm9jZXNzaW5nVGltZXJDYWxsYmFjaykgeyBtX3Byb2Nlc3NpbmdUaW1lckNhbGxiYWNrID0gcHJv
Y2Vzc2luZ1RpbWVyQ2FsbGJhY2s7IH0KICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGRvbid0
IHVzZSB0aGUgcGFyYW1ldGVyIHdvcmxkIGF0IGFsbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDcyZGY3OWRlZDNlZDQ3Y2ZmMWEyN2I1OTUzYTM1
OTk2M2M3N2E2MzAuLjQ0ODEwNmNmNTI1NDlhYjNkNjRlYWM1MTJmYzM3NjYzYmM3ZWQwNDggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcApAQCAtNTAsOCAr
NTAsOCBAQCBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoTm9kZSogbm9kZSwgQXR0cmlidQogICAgIGlmIChhdHRyLT5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgbGluZU51bWJlciA9IDE7Ci0gICAgaW50IGNv
bHVtbk51bWJlciA9IDA7CisgICAgLy8gRklYTUU6IFZlcnkgc3RyYW5nZTogd2UgaW5pdGlhbGl6
ZSB6ZXJvLWJhc2VkIG51bWJlciB3aXRoICcxJy4KKyAgICBUZXh0UG9zaXRpb24wIHBvc2l0aW9u
KFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KDEpLCBXVEY6Olplcm9CYXNl
ZE51bWJlcjo6c19iYXNlKTsKICAgICBTdHJpbmcgc291cmNlVVJMOwogCiAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKQEAgLTY0LDEyICs2NCwxMSBA
QCBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoTm9kZSogbm9kZSwgQXR0cmlidQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IH0KIAotICAgICAgICBsaW5lTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVy
TGluZU51bWJlcigpOwotICAgICAgICBjb2x1bW5OdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5l
dmVudEhhbmRsZXJDb2x1bW5OdW1iZXIoKTsKKyAgICAgICAgcG9zaXRpb24gPSBzY3JpcHRDb250
cm9sbGVyLT5ldmVudEhhbmRsZXJQb3NpdGlvbigpOwogICAgICAgICBzb3VyY2VVUkwgPSBub2Rl
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKICAgICB9CiAKLSAgICByZXR1cm4gVjhMYXp5
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBub2RlLT5p
c1NWR0VsZW1lbnQoKSwgYXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIFdvcmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKKyAgICByZXR1cm4g
VjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBu
b2RlLT5pc1NWR0VsZW1lbnQoKSwgYXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBwb3NpdGlvbiwg
V29ybGRDb250ZXh0SGFuZGxlKFVzZU1haW5Xb3JsZCkpOwogfQogCiBQYXNzUmVmUHRyPFY4TGF6
eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1l
LCBBdHRyaWJ1dGUqIGF0dHIpCkBAIC04MSwxMCArODAsNiBAQCBQYXNzUmVmUHRyPFY4TGF6eUV2
ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRnJhbWUqIGZyYW1lLCBB
dHRyaQogICAgIGlmIChhdHRyLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBp
bnQgbGluZU51bWJlciA9IDE7Ci0gICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0gICAgU3RyaW5n
IHNvdXJjZVVSTDsKLQogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBm
cmFtZS0+c2NyaXB0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250cm9sbGVyLT5jYW5FeGVjdXRlU2Ny
aXB0cyhBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtOTQsMTAg
Kzg5LDkgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgbGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckxpbmVO
dW1iZXIoKTsKLSAgICBjb2x1bW5OdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRs
ZXJDb2x1bW5OdW1iZXIoKTsKLSAgICBzb3VyY2VVUkwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCkuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRy
LT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCktPmlzU1ZHRG9jdW1lbnQo
KSwgYXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIFdv
cmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKKyAgICBUZXh0UG9zaXRpb24wIHBvc2l0
aW9uID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKKyAgICBTdHJp
bmcgc291cmNlVVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpOworICAgIHJl
dHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5n
KCksIGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCksIGF0dHItPnZhbHVlKCksIHNv
dXJjZVVSTCwgcG9zaXRpb24sIFdvcmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKIH0K
IAogU3RyaW5nIGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShEb2N1bWVudCogZG9jdW1lbnQsIEV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRTb3VyY2VDb2RlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUu
aAppbmRleCBkYmM5ZDVlNmZjNjAwN2ZjZmRkNjYwMjRkYjA3ODI2YzY2MjYzYjViLi4yNDc4MTUx
ZTZmNTRmYzc1MDM4ZjA0MWRlYzk4MGQ3YTc1NmQyYWRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFNvdXJjZUNvZGUuaApAQCAtMzUsMTYgKzM1LDE3IEBACiAjaW5jbHVkZSAiQ2FjaGVkU2Ny
aXB0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU2NyaXB0U291cmNlQ29kZSB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0U291cmNlQ29k
ZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBpbnQgc3Rh
cnRMaW5lID0gMSkKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBj
b25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGNvbnN0IFRleHRQb3NpdGlvbjEmIHN0YXJ0UG9zaXRp
b24gPSBUZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKSkKICAgICAgICAgOiBtX3NvdXJj
ZShzb3VyY2UpCiAgICAgICAgICwgbV9jYWNoZWRTY3JpcHQoMCkKICAgICAgICAgLCBtX3VybCh1
cmwpCi0gICAgICAgICwgbV9zdGFydExpbmUoc3RhcnRMaW5lKQorICAgICAgICAsIG1fc3RhcnRQ
b3NpdGlvbihzdGFydFBvc2l0aW9uKQogICAgIHsKICAgICB9CiAKQEAgLTU0LDcgKzU1LDcgQEAg
cHVibGljOgogICAgICAgICA6IG1fc291cmNlKGNzLT5zY3JpcHQoKSkKICAgICAgICAgLCBtX2Nh
Y2hlZFNjcmlwdChjcykKICAgICAgICAgLCBtX3VybChQYXJzZWRVUkxTdHJpbmcsIGNzLT51cmwo
KSkKLSAgICAgICAgLCBtX3N0YXJ0TGluZSgxKQorICAgICAgICAsIG1fc3RhcnRQb3NpdGlvbihU
ZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKSkKICAgICB7CiAgICAgfQogCkBAIC02Mywx
MyArNjQsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgc291cmNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2U7IH0KICAgICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LmdldCgpOyB9CiAgICAgY29uc3QgS1VSTCYgdXJsKCkg
Y29uc3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICBpbnQgc3RhcnRMaW5lKCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydExpbmU7IH0KKyAgICBpbnQgc3RhcnRMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpOyB9CisgICAgY29uc3QgVGV4dFBvc2l0
aW9uMSYgc3RhcnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRQb3NpdGlvbjsgfQog
CiBwcml2YXRlOgogICAgIFN0cmluZyBtX3NvdXJjZTsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRs
ZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OwogICAgIEtVUkwgbV91cmw7Ci0gICAgaW50
IG1fc3RhcnRMaW5lOworICAgIFRleHRQb3NpdGlvbjEgbV9zdGFydFBvc2l0aW9uOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OExhenlFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRM
aXN0ZW5lci5jcHAKaW5kZXggN2YxM2M1YThmYjI3ZDMzYmJmMWQzNDEwYTAxM2ViYzc5NWQ5M2Qy
My4uN2Y0NjMzMzA2MmQ2ZmViN2JlOWYxNzk2MzU2YzZiMDVjYjNjYjhmOCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCkBAIC00MSwxNCArNDEsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WOExhenlFdmVudExpc3RlbmVyOjpWOExhenlFdmVu
dExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNv
bnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIs
IGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0
KQorVjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0
IFN0cmluZyBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uLCBjb25zdCBX
b3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKICAgICA6IFY4QWJzdHJhY3RFdmVudExp
c3RlbmVyKHRydWUsIHdvcmxkQ29udGV4dCkKICAgICAsIG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9u
TmFtZSkKICAgICAsIG1faXNTVkdFdmVudChpc1NWR0V2ZW50KQogICAgICwgbV9jb2RlKGNvZGUp
CiAgICAgLCBtX3NvdXJjZVVSTChzb3VyY2VVUkwpCi0gICAgLCBtX2xpbmVOdW1iZXIobGluZU51
bWJlcikKLSAgICAsIG1fY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKKyAgICAsIG1fcG9zaXRp
b24ocG9zaXRpb24pCiB7CiB9CiAKQEAgLTExNCw3ICsxMTMsNyBAQCB2b2lkIFY4TGF6eUV2ZW50
TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQogICAgIC8vIEluc2VydCAnXG4nIG90aGVyd2lzZSAvLy1zdHlsZSBjb21tZW50cyBj
b3VsZCBicmVhayB0aGUgaGFuZGxlci4KICAgICBjb2RlLmFwcGVuZCggICJcbn0pLmNhbGwodGhp
cywgZXZ0KTt9fX19KSIpOwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZUV4dGVybmFs
U3RyaW5nID0gdjhFeHRlcm5hbFN0cmluZyhjb2RlKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpTY3Jp
cHQ+IHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZUV4dGVybmFsU3RyaW5nLCBt
X3NvdXJjZVVSTCwgbV9saW5lTnVtYmVyKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNj
cmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZUV4dGVybmFsU3RyaW5nLCBtX3NvdXJj
ZVVSTCwgbV9wb3NpdGlvbik7CiAgICAgaWYgKCFzY3JpcHQuSXNFbXB0eSgpKSB7CiAgICAgICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gcHJveHktPnJ1blNjcmlwdChzY3JpcHQsIGZh
bHNlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOExhenlFdmVudExpc3RlbmVyLmgKaW5kZXggZjE3NGQyM2JmMTMxYjAxMGVlNGY1OWJjNDI1
MjdlZTg2NzRhMDYwOC4uMDg0NjdmZTVmN2FiOTcwMTRkOTQ1M2FmMjZmYTNmMTY2Y2VlNjNiMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlY4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00NSw5ICs0Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBBIFY4
TGF6eUV2ZW50TGlzdGVuZXIgaXMgYWx3YXlzIGEgSFRNTCBldmVudCBoYW5kbGVyLgogICAgIGNs
YXNzIFY4TGF6eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0
ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQs
IGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVt
YmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29u
dGV4dCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0
cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAm
IHBvc2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVudExpc3RlbmVy
KGZ1bmN0aW9uTmFtZSwgaXNTVkdFdmVudCwgY29kZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIsIHdvcmxkQ29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBWOExhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgaXNTVkdFdmVudCwgY29kZSwg
c291cmNlVVJMLCBwb3NpdGlvbiwgd29ybGRDb250ZXh0KSk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNMYXp5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNTYsNyAr
NTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
TGlzdGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgVjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwg
Ym9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VV
UkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRI
YW5kbGUmIHdvcmxkQ29udGV4dCk7CisgICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2Rl
LCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbiwg
Y29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpOwogCiAgICAgICAgIHZpcnR1
YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCopOwogCkBA
IC03MCw4ICs3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2lzU1ZH
RXZlbnQ7CiAgICAgICAgIFN0cmluZyBtX2NvZGU7CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZVVS
TDsKLSAgICAgICAgaW50IG1fbGluZU51bWJlcjsKLSAgICAgICAgaW50IG1fY29sdW1uTnVtYmVy
OworICAgICAgICBUZXh0UG9zaXRpb24wIG1fcG9zaXRpb247CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggZWY3MmI3N2FkNDczOTVm
Yzg0NTRkM2EwZGU2YWMxNTUyMTFmOWZhZC4uNDZlYTA2NmE1ZDQzNDQyMTc3NDZjMzg2ODQ4M2Qz
ZTc0NmYyYzJlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCkBAIC0yMzgsMTIgKzIzOCwxMyBA
QCBWOFByb3h5Ojp+VjhQcm94eSgpCiAgICAgd2luZG93U2hlbGwoKS0+ZGVzdHJveUdsb2JhbCgp
OwogfQogCi12ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFz
ZUxpbmUsIHY4OjpTY3JpcHREYXRhKiBzY3JpcHREYXRhKQordjg6OkhhbmRsZTx2ODo6U2NyaXB0
PiBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3Np
dGlvbiwgdjg6OlNjcmlwdERhdGEqIHNjcmlwdERhdGEpCiB7CiAgICAgY29uc3QgdWludDE2X3Qq
IGZpbGVOYW1lU3RyaW5nID0gZnJvbVdlYkNvcmVTdHJpbmcoZmlsZU5hbWUpOwogICAgIHY4OjpI
YW5kbGU8djg6OlN0cmluZz4gbmFtZSA9IHY4OjpTdHJpbmc6Ok5ldyhmaWxlTmFtZVN0cmluZywg
ZmlsZU5hbWUubGVuZ3RoKCkpOwotICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGxpbmUgPSB2
ODo6SW50ZWdlcjo6TmV3KGJhc2VMaW5lKTsKLSAgICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihu
YW1lLCBsaW5lKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBsaW5lID0gdjg6OkludGVn
ZXI6Ok5ldyhzY3JpcHRTdGFydFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKSk7CisgICAg
djg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gY29sdW1uID0gdjg6OkludGVnZXI6Ok5ldyhzY3JpcHRT
dGFydFBvc2l0aW9uLm1fY29sdW1uLnplcm9CYXNlZEludCgpKTsKKyAgICB2ODo6U2NyaXB0T3Jp
Z2luIG9yaWdpbihuYW1lLCBsaW5lLCBjb2x1bW4pOwogICAgIHY4OjpIYW5kbGU8djg6OlNjcmlw
dD4gc2NyaXB0ID0gdjg6OlNjcmlwdDo6Q29tcGlsZShjb2RlLCAmb3JpZ2luLCBzY3JpcHREYXRh
KTsKICAgICByZXR1cm4gc2NyaXB0OwogfQpAQCAtMzk2LDcgKzM5Nyw3IEBAIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IFY4UHJveHk6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJj
ZSwgTm9kZSogbm9kCiAKICAgICAgICAgLy8gTk9URTogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBX
ZWJDb3JlLCBTY3JpcHRTb3VyY2VDb2RlJ3MgbGluZSBzdGFydHMgYXQKICAgICAgICAgLy8gMSwg
d2hlcmVhcyB2OCBzdGFydHMgYXQgMC4KLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBz
Y3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51cmwoKSwgc291cmNlLnN0YXJ0TGlu
ZSgpIC0gMSwgc2NyaXB0RGF0YS5nZXQoKSk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlw
dD4gc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCBzb3VyY2UudXJsKCksIFdURjo6dG9aZXJv
QmFzZWRUZXh0UG9zaXRpb24oc291cmNlLnN0YXJ0UG9zaXRpb24oKSksIHNjcmlwdERhdGEuZ2V0
KCkpOwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6dHJh
Y2VFdmVudEVuZCgidjguY29tcGlsZSIsIG5vZGUsICIiKTsKIApAQCAtNDI4LDcgKzQyOSw3IEBA
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpT
Y3JpcHQ+IHNjcmlwdCwgYm9vbCBpc0luCiAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBz
aG91bGQgYmUgYWJsZSB0byByZS11c2UgdGhlIG9yaWdpbiBvZiB0aGUKICAgICAgICAgLy8gc2Ny
aXB0IHBhc3NlZCB0byB1cyBhcyB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiB1c2luZyBhbiBlbXB0
eSBzdHJpbmcKICAgICAgICAgLy8gYW5kIDAgYmFzZUxpbmUuCi0gICAgICAgIHNjcmlwdCA9IGNv
bXBpbGVTY3JpcHQoY29kZSwgIiIsIDApOworICAgICAgICBzY3JpcHQgPSBjb21waWxlU2NyaXB0
KGNvZGUsICIiLCBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQogCiAg
ICAgaWYgKGhhbmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCmluZGV4IDhhMGRh
NzI5NTY4MGQ1MjNjZjc0MGYzODZmM2NlZjFlOTkxMTA1YzMuLjgwZDQ2OTFiNDgwNTQ4ZjNhZDdk
ZGY3OWRlMmIzNzk3MzQxNzk4ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCkBAIC0yNzksNyArMjc5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY2hlY2tOZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRzJik7CiAKLSAgICAgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgdjg6
OlNjcmlwdERhdGEqID0gMCk7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+
IGNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCB2ODo6
U2NyaXB0RGF0YSogPSAwKTsKIAogICAgICAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGNvZGUgaXMg
ZGlmZmVyZW50IGZyb20gemVybywgYSBET00gZXhjZXB0aW9uIGlzCiAgICAgICAgIC8vIHNjaGVk
dWxlIHRvIGJlIHRocm93bi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmNwcAppbmRleCAxNmUwYjQxMDFlZmRjMzVhZTc0NDE4MTdiMDY4
N2RiNmI1YTY1YTI1Li5jZWZiMmZhYTczOTA4OTRiMzVkNjVhZDUzZjIxYThmYmM3ZGRhNTYxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgYm9vbCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHk6OmZvcmdldFY4RXZlbnRPYmplY3QoRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShj
b25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5l
LCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRlKQorU2NyaXB0VmFsdWUgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3Np
dGlvbiwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKiBzdGF0ZSkKIHsKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaHM7CiAKQEAgLTE5Niw3ICsxOTYsNyBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBT
dAogICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwogCiAgICAgdjg6OkxvY2FsPHY4
OjpTdHJpbmc+IHNjcmlwdFN0cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoc2NyaXB0KTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVkU2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNj
cmlwdChzY3JpcHRTdHJpbmcsIGZpbGVOYW1lLCBiYXNlTGluZSk7CisgICAgdjg6OkhhbmRsZTx2
ODo6U2NyaXB0PiBjb21waWxlZFNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoc2NyaXB0
U3RyaW5nLCBmaWxlTmFtZSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gcmVzdWx0ID0gcnVuU2NyaXB0KGNvbXBpbGVkU2NyaXB0KTsKIAogICAgIGlmICgh
ZXhjZXB0aW9uQ2F0Y2hlci5DYW5Db250aW51ZSgpKQpAQCAtMjI3LDcgKzIyNyw3IEBAIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2NyaXB0KHY4
OjpIYW5kbGU8djg6OlNjcmlwCiAgICAgLy8gQ29tcHV0ZSB0aGUgc291cmNlIHN0cmluZyBhbmQg
cHJldmVudCBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbi4KICAgICBpZiAobV9yZWN1cnNpb24g
Pj0ga01heFJlY3Vyc2lvbkRlcHRoKSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBj
b2RlID0gdjhFeHRlcm5hbFN0cmluZygidGhyb3cgUmFuZ2VFcnJvcignUmVjdXJzaW9uIHRvbyBk
ZWVwJykiKTsKLSAgICAgICAgc2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlLCAi
IiwgMCk7CisgICAgICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZSwgIiIs
IFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpKTsKICAgICB9CiAKICAgICBpZiAoVjhQ
cm94eTo6aGFuZGxlT3V0T2ZNZW1vcnkoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCmluZGV4IDU4ODI0YjllZWY2ZjQ5MTQwODRjNzc3
MTYxZTIzZjZlMzBhYmUyODMuLmU3MGMzZDI4NGFiZTUyZTM1YmFjNDk4MDVlNzNhNGNmNDc0ZTlj
OTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuaApAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNp
bmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTY2LDcgKzY3
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRyYWNrRXZlbnQoRXZlbnQq
KTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRoZSBjdXJyZW50IGV4
ZWN1dGlvbiBlbnZpcm9ubWVudC4KLSAgICAgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3Qg
U3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgV29y
a2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKik7CisgICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRl
KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0
UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3Rh
dGUqKTsKIAogICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRoZSBjb250ZXh0
LgogICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggN2RiMGQ4ZDM3MzcwOWIyZTk3
M2I2N2U3NzIzZTRmYzMxMWZiY2E1OS4uYjU2ZDM4MzZkN2U2YmIxYWM1ZDJjOGM1ZWQ2MzBmMDdj
Mjc2ZWYyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuY3BwCkBAIC03NSw3ICs3NSw3IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAgICAgfQog
CiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlIHN0YXRlOwotICAgIFNjcmlwdFZhbHVl
IHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNlKCksIHNvdXJjZUNv
ZGUudXJsKCkuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkgLSAxLCAmc3RhdGUpOwor
ICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291
cmNlKCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIFdURjo6dG9aZXJvQmFzZWRUZXh0UG9z
aXRpb24oc291cmNlQ29kZS5zdGFydFBvc2l0aW9uKCkpLCAmc3RhdGUpOwogICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpl
eGNlcHRpb24gPSBzdGF0ZS5leGNlcHRpb247CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9QZW5k
aW5nU2NyaXB0LmNwcCBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCmluZGV4IDQyZTIy
NWE3ZjMyYTFiMGNkYzFiYzM0NTFiNjU0OTdhNDYxMzU2ODkuLjE4ZjYwNzExYTRjZDMwMjMyOWJj
YWFkNGQ5OGI4YTIwYzdjZTEyZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3Jp
cHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBAIC00MCw3ICs0MCw3
IEBAIFBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkKIFBhc3NSZWZQdHI8RWxlbWVudD4g
UGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVhcigpCiB7CiAgICAgc2V0Q2FjaGVk
U2NyaXB0KDApOwotICAgIG1fc3RhcnRpbmdMaW5lTnVtYmVyID0gMDsKKyAgICBtX3N0YXJ0aW5n
UG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKICAgICBtX3dh
dGNoaW5nRm9yTG9hZCA9IGZhbHNlOwogICAgIHJldHVybiBtX2VsZW1lbnQucmVsZWFzZSgpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvV2ViQ29yZS9kb20v
UGVuZGluZ1NjcmlwdC5oCmluZGV4IDQ0ZTFlNDkyODY3NmQ3OTYwMjJkZDI5MDU0NTc2MDE1Yjdh
MjZlNDQuLjA4MzUwN2E5YjkwOTE2YmNmMjg2NTFkZjYyOWU1YjIzYmI5NDIyYzggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAorKysgYi9XZWJDb3JlL2RvbS9QZW5kaW5n
U2NyaXB0LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00MywxNCArNDQsMTQgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNz
IFBlbmRpbmdTY3JpcHQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGljOgog
ICAgIFBlbmRpbmdTY3JpcHQoKQotICAgICAgICA6IG1fc3RhcnRpbmdMaW5lTnVtYmVyKDApCisg
ICAgICAgIDogbV9zdGFydGluZ1Bvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3Np
dGlvbigpKQogICAgICAgICAsIG1fd2F0Y2hpbmdGb3JMb2FkKGZhbHNlKQogICAgIHsKICAgICB9
CiAKICAgICBQZW5kaW5nU2NyaXB0KGNvbnN0IFBlbmRpbmdTY3JpcHQmIG90aGVyKQogICAgICAg
ICA6IENhY2hlZFJlc291cmNlQ2xpZW50KG90aGVyKQotICAgICAgICAsIG1fc3RhcnRpbmdMaW5l
TnVtYmVyKG90aGVyLm1fc3RhcnRpbmdMaW5lTnVtYmVyKQorICAgICAgICAsIG1fc3RhcnRpbmdQ
b3NpdGlvbihvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb24pCiAgICAgICAgICwgbV93YXRjaGluZ0Zv
ckxvYWQob3RoZXIubV93YXRjaGluZ0ZvckxvYWQpCiAgICAgICAgICwgbV9lbGVtZW50KG90aGVy
Lm1fZWxlbWVudCkKICAgICB7CkBAIC02NCw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KHRoaXMgPT0gJm90aGVyKQogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgICAgIG1f
c3RhcnRpbmdMaW5lTnVtYmVyID0gb3RoZXIubV9zdGFydGluZ0xpbmVOdW1iZXI7CisgICAgICAg
IG1fc3RhcnRpbmdQb3NpdGlvbiA9IG90aGVyLm1fc3RhcnRpbmdQb3NpdGlvbjsKICAgICAgICAg
bV93YXRjaGluZ0ZvckxvYWQgPSBvdGhlci5tX3dhdGNoaW5nRm9yTG9hZDsKICAgICAgICAgbV9l
bGVtZW50ID0gb3RoZXIubV9lbGVtZW50OwogICAgICAgICBzZXRDYWNoZWRTY3JpcHQob3RoZXIu
Y2FjaGVkU2NyaXB0KCkpOwpAQCAtNzQsNyArNzUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhN
RTogTm8gc2V0dGVyIG1lYW5zIHRoaXMgaXMgbmV2ZXIgc2V0IHRvIGFueXRoaW5nIG90aGVyIHRo
YW4gMC4KICAgICAvLyBUaGlzIGlzIGVpdGhlciB1bm5lY2Vzc2FyeSBvciBpbmNvcnJlY3QuCi0g
ICAgaW50IHN0YXJ0aW5nTGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdMaW5l
TnVtYmVyOyB9CisgICAgVGV4dFBvc2l0aW9uMSBzdGFydGluZ1Bvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydGluZ1Bvc2l0aW9uOyB9CiAKICAgICBib29sIHdhdGNoaW5nRm9yTG9hZCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2F0Y2hpbmdGb3JMb2FkOyB9CiAgICAgdm9pZCBzZXRXYXRjaGlu
Z0ZvckxvYWQoYm9vbCBiKSB7IG1fd2F0Y2hpbmdGb3JMb2FkID0gYjsgfQpAQCAtODksNyArOTAs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlKik7CiAKIHByaXZhdGU6Ci0gICAgaW50IG1fc3RhcnRpbmdMaW5lTnVtYmVyOyAvLyBPbmx5
IHVzZWQgZm9yIGlubGluZSBzY3JpcHQgdGFncy4KKyAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRp
bmdQb3NpdGlvbjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCiAgICAgYm9v
bCBtX3dhdGNoaW5nRm9yTG9hZDsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OwogICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUv
ZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCmluZGV4IDhiMTYzMDQxMjEwNGU0ZTQ1YTAx
MzIzZGQyMjU1ZTY1NjRlMzQwNDUuLmQ5YmY4NWNhYmY0NTUzM2M5ODFiZTYwZmM1YmE5Njk3NzVl
NDI0M2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5o
CisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCkBAIC0yNywxMCAr
MjcsMTAgQEAKICNkZWZpbmUgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyX2gKIAogI2luY2x1ZGUg
IkRlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9z
aXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTZWdtZW50ZWRTdHJpbmc7
CiBjbGFzcyBYU1NBdWRpdG9yOwogCiBjbGFzcyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIgOiBw
dWJsaWMgRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlciB7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1Ymxp
YzoKIAogICAgIC8vIFRoZXNlIGFyZSB1c2VkIHRvIGV4cG9zZSB0aGUgY3VycmVudCBsaW5lL2Nv
bHVtbiB0byB0aGUgc2NyaXB0aW5nIHN5c3RlbS4KICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVy
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3QgPSAwOwogCiAg
ICAgWFNTQXVkaXRvciogeHNzQXVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1feHNzQXVkaXRvcjsg
fQogICAgIHZvaWQgc2V0WFNTQXVkaXRvcihYU1NBdWRpdG9yKiBhdWRpdG9yKSB7IG1feHNzQXVk
aXRvciA9IGF1ZGl0b3I7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFy
c2VyLmggYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGUwNzcwYmFkYmFm
ZjdiYTExMDIwYWRkYzcxMjQ5ZWYzZGVjODIwZDQuLjQwZDVjMDVkM2FiNzUxZmZjNjNiNmI1ZWI2
Mjc1ODk3NTJjZmJlMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2Vy
LmgKKysrIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMTAyLDcgKzEwMiw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV01MRXJyb3JIYW5kbGluZyB1c2Vz
IHRoZXNlIGZ1bmN0aW9ucy4KICAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQoKSBjb25z
dCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQogICAgICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVy
KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0OworICAg
ICAgICBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKIApAQCAtMTI5LDYgKzEy
OSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBhcHBlbmRGcmFnbWVu
dFNvdXJjZShjb25zdCBTdHJpbmcmKTsKIAorICAgICAgICBpbnQgY29sdW1uTnVtYmVyKCkgY29u
c3Q7CisgICAgICAgIC8vIFRoZSBtZXRob2QgaXMgdXNlZCBpbiBYTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwIG9ubHksCisgICAgICAgIC8vIEl0IGlzIG5laXRoZXIgdXNlZCBub3IgaW1wbGVt
ZW50ZWQgaW4gWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAuCisgICAgICAgIFRleHRQb3NpdGlvbjEg
dGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdDsKKwogI2lmIFVTRShRWE1MU1RSRUFNKQogcHJp
dmF0ZToKICAgICAgICAgdm9pZCBwYXJzZSgpOwpAQCAtMjA4LDcgKzIxMyw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1Nj
cmlwdDsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVudDsKLSAgICAgICAg
aW50IG1fc2NyaXB0U3RhcnRMaW5lOworICAgICAgICBUZXh0UG9zaXRpb24xIG1fc2NyaXB0U3Rh
cnRQb3NpdGlvbjsKIAogICAgICAgICBib29sIG1fcGFyc2luZ0ZyYWdtZW50OwogICAgICAgICBB
dG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggYzAxYTU3ZWVmNDU5MTlkOGU3ZjAyNmU4YjY3YzNjNGU1
MzAwOTI1Ny4uOGVlOTc2ZDA4MmQzZjllYjg1MDc0Y2UxNTJhZjNiYTAzY2VkMTUzOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9XZWJD
b3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC01NjAsNyArNTYwLDcgQEAg
WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwg
RnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAgICAsIG1f
bGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2Ny
aXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9u
MTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkK
ICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiB7
CkBAIC01ODcsNyArNTg3LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICAsIG1fbGFz
dEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGlu
Z1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3Rh
cnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1f
cGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0
aW5nUGVybWlzc2lvbikKIHsKQEAgLTgxOSw3ICs4MTksNyBAQCB2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHht
bENoYQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVu
dChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9z
Y3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3Np
dGlvbiA9IHRleHRQb3NpdGlvbk9uZUJhc2VkKCk7CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXBy
ZWNhdGVkUGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAgLTkxMCw3ICs5MTAs
NyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVu
dCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJh
bWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVt
ZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9z
aXRpb24pKTsKIAogICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRldGFjaGVkIHRoZSBw
YXJzZXIKICAgICAgICAgaWYgKGlzRGV0YWNoZWQoKSkKQEAgLTEzNzYsMTQgKzEzNzYsNDEgQEAg
dm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNv
dXJjZUxvYWRlciwgY29uc3QgU3RyaW4KIAogaW50IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVt
YmVyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9uIHByb2JhYmx5
IHJldHVybnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVybiAwLWJhc2VkLgog
ICAgIHJldHVybiBjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5saW5lIDogMTsKIH0KIAog
aW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAogeworICAgIC8vIEZJ
WE1FOiBUaGUgaW1wbGVtZW50YXRpb24gcHJvYmFibHkgcmV0dXJucyAxLWJhc2VkIGludCwgYnV0
IG1ldGhvZCBzaG91bGQgcmV0dXJuIDAtYmFzZWQuCiAgICAgcmV0dXJuIGNvbnRleHQoKSA/IGNv
bnRleHQoKS0+aW5wdXQtPmNvbCA6IDE7CiB9CiAKK1RleHRQb3NpdGlvbjAgWE1MRG9jdW1lbnRQ
YXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250
ZXh0ID0gdGhpcy0+Y29udGV4dCgpOworICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGUgY29udGV4dCBwcm9iYWJseSBjb250YWlucyAxLWJhc2VkIG51bWJlcnMsIGJ1dCB3
ZSB0cmVhdCB0aGVtIGFzIDAtYmFzZWQsCisgICAgICAgIC8vICAgICAgICB0byBiZSBjb25zaXN0
ZW50IHdpdGggZml4bWUncyBpbiBsaW5lTnVtYmVyKCkgYW5kIGNvbHVtbk51bWJlcgorICAgICAg
ICAvLyAgICAgICAgbWV0aG9kcy4KKyAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RGOjpa
ZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmxpbmUpLAor
ICAgICAgICAgICAgV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4
dC0+aW5wdXQtPmNvbCkpOworICAgIH0KKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11
bVBvc2l0aW9uKCk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGhhcyBhIGNvcnJlY3QgaW1wbGVtZW50
YXRpb24sIGluIGNvbnRyYXN0IHRvIHRleHRQb3NpdGlvbigpIG1ldGhvZC4KKy8vIEl0IHNob3Vs
ZCByZXBsYWNlIHRleHRQb3NpdGlvbigpLgorVGV4dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBhcnNl
cjo6dGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdAoreworICAgIHhtbFBhcnNlckN0eHRQdHIg
Y29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dCkgeworICAgICAgICBy
ZXR1cm4gVGV4dFBvc2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQo
Y29udGV4dC0+aW5wdXQtPmxpbmUpLAorICAgICAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6
ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wpKTsKKyAgICB9CisgICAgcmV0dXJu
IFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpOworfQorCiB2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpzdG9wUGFyc2luZygpCiB7CiAgICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5n
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmluZGV4IDAzYjA4M2VjMWM5MjVjY2Q1
MWU2YjFkMjFjOWI1MmVhMTZiY2U5Y2UuLjkwMWNiYzE4ZmFmZGZiNzRiNDVmMzNhYjhjNTc5YzIz
MTZiNzFiNmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3Bw
CisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC0xMDUsNyArMTA1
LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1
bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAg
ICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAs
IG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBv
c2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudChm
YWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93
ZWQpCiB7CkBAIC0xMzIsNyArMTMyLDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50
UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICAs
IG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1f
cGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2Ny
aXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAg
ICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24o
cGVybWlzc2lvbikKIHsKQEAgLTIzNCw2ICsyMzQsMTEgQEAgaW50IFhNTERvY3VtZW50UGFyc2Vy
Ojpjb2x1bW5OdW1iZXIoKSBjb25zdAogICAgIHJldHVybiBtX3N0cmVhbS5jb2x1bW5OdW1iZXIo
KTsKIH0KIAorVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6
ZnJvbVplcm9CYXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJv
bVplcm9CYXNlZEludChjb2x1bW5OdW1iZXIoKSkpOworfQorCiB2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpzdG9wUGFyc2luZygpCiB7CiAgICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpzdG9w
UGFyc2luZygpOwpAQCAtNTE4LDcgKzUyMyw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBh
cnNlU3RhcnRFbGVtZW50KCkKIAogICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0
b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKHNjcmlwdEVsZW1lbnQp
Ci0gICAgICAgIG1fc2NyaXB0U3RhcnRMaW5lID0gbGluZU51bWJlcigpOworICAgICAgICBtX3Nj
cmlwdFN0YXJ0UG9zaXRpb24gPSBXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRpb24odGV4dFBvc2l0
aW9uKCkpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKG5l
d0VsZW1lbnQuZ2V0KCkpOwogCkBAIC01OTUsNyArNjAwLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6cGFyc2VFbmRFbGVtZW50KCkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92
aWV3LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNj
cmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0
U3RhcnRMaW5lKSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVj
dXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgp
LCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CiAgICAgfQogICAg
IG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIHBvcEN1cnJlbnROb2RlKCk7CkBAIC03
MTYsNCArNzIxLDMgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEdGQoKQogCiB9CiB9
Ci0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNw
cCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCBkNjY4
ZDVlZjg4YTdmN2MwYjg2NDZhOTdlMGFlZDkzN2E1ZTY4MDRhLi4xM2ZmMDBkNjQ3MTlkMTdjNjNl
ZDUxN2IxYzM4YjJiM2Y5YTk5MDYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuY3BwCkBAIC0xOTEsMTIgKzE5MSwxMiBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNl
cjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVyKCkKIHsKICAgICBBU1NFUlQobV90cmVl
QnVpbGRlci0+aXNQYXVzZWQoKSk7CiAKLSAgICBpbnQgc2NyaXB0U3RhcnRMaW5lID0gMDsKLSAg
ICBSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3Jp
cHRUb1Byb2Nlc3Moc2NyaXB0U3RhcnRMaW5lKTsKKyAgICBUZXh0UG9zaXRpb24xIHNjcmlwdFN0
YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKKyAgICBS
ZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRU
b1Byb2Nlc3Moc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAgICAgLy8gV2Ugd2lsbCBub3QgaGF2ZSBh
IHNjcmlwdFJ1bm5lciB3aGVuIHBhcnNpbmcgYSBEb2N1bWVudEZyYWdtZW50LgogICAgIGlmICgh
bV9zY3JpcHRSdW5uZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Njcmlw
dFJ1bm5lci0+ZXhlY3V0ZShzY3JpcHRFbGVtZW50LnJlbGVhc2UoKSwgc2NyaXB0U3RhcnRMaW5l
KTsKKyAgICByZXR1cm4gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVudC5yZWxl
YXNlKCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6cHVtcFRva2VuaXplcihTeW5jaHJvbm91c01vZGUgbW9kZSkKQEAgLTM5Niw5ICszOTYsMTMg
QEAgaW50IEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCk7CiB9CiAKLWludCBIVE1MRG9jdW1lbnRQYXJzZXI6
OmNvbHVtbk51bWJlcigpIGNvbnN0CitUZXh0UG9zaXRpb24wIEhUTUxEb2N1bWVudFBhcnNlcjo6
dGV4dFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90b2tlbml6ZXItPmNvbHVtbk51
bWJlcigpOworICAgIGludCBsaW5lWmVyb0Jhc2VkID0gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIo
KTsKKyAgICBpbnQgY29sdW1uT25lQmFzZWQgPSBtX3Rva2VuaXplci0+Y29sdW1uTnVtYmVyKCk7
CisKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVpl
cm9CYXNlZEludChsaW5lWmVyb0Jhc2VkKSwKKyAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6
ZnJvbU9uZUJhc2VkSW50KGNvbHVtbk9uZUJhc2VkKS5jb252ZXJ0VG9aZXJvQmFzZWQoKSk7CiB9
CiAKIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGQ5NjI1ZjEyMThi
Njc0YTQ2ZGFlM2UxYjA4ZDhiYjdlM2E1NGU3MzUuLjA1MDUzZGYyZjFjYjQ1NzUxMWVhNzQ2ODFm
NDJjNzIyYjNkNmM5YTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
aApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0V4ZWN1dGlu
Z1NjcmlwdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdG
b3JTdHlsZXNoZWV0cygpOwogICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRleHRQb3Np
dGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBIVE1MU2NyaXB0UnVubmVySG9z
dAogICAgIHZpcnR1YWwgdm9pZCB3YXRjaEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IDRmNTRmNDI5Mjg3MGFjZDUz
ODU0ZmM0NzEwODcwZGQ5ZGYxNGYyZDEuLjk2NGU1OGE5ZTBmMmZiODkyYWI2ZTgzOTJhZTllYTU3
YmQ0ZGYzZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAt
OTgsNyArOTgsNyBAQCBTY3JpcHRTb3VyY2VDb2RlIEhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZy
b21QZW5kaW5nU2NyaXB0KGNvbnN0IFBlbmRpbmdTY3JpcHQmCiAgICAgICAgIHJldHVybiBTY3Jp
cHRTb3VyY2VDb2RlKHNjcmlwdC5jYWNoZWRTY3JpcHQoKSk7CiAgICAgfQogICAgIGVycm9yT2Nj
dXJyZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVu
dCgpLT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3Vt
ZW50KSwgc2NyaXB0LnN0YXJ0aW5nTGluZU51bWJlcigpKTsKKyAgICByZXR1cm4gU2NyaXB0U291
cmNlQ29kZShzY3JpcHQuZWxlbWVudCgpLT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNj
cmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0LnN0YXJ0aW5nUG9zaXRpb24oKSk7CiB9
CiAKIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6aXNQZW5kaW5nU2NyaXB0UmVhZHkoY29uc3QgUGVu
ZGluZ1NjcmlwdCYgc2NyaXB0KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAgdm9pZCBIVE1MU2NyaXB0
UnVubmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQp
CiAKIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hdGNoIDEwLjIuNS4xMSAiQW4gZW5kIHRhZyB3
aG9zZSB0YWcgbmFtZSBpcyAnc2NyaXB0JyIKIC8vIFNjcmlwdCBoYW5kbGluZyBsaXZlcyBvdXRz
aWRlIHRoZSB0cmVlIGJ1aWxkZXIgdG8ga2VlcCB0aGUgZWFjaCBjbGFzcyBzaW1wbGUuCi1ib29s
IEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVt
ZW50LCBpbnQgc3RhcnRMaW5lKQorYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NS
ZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0
U3RhcnRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CiAgICAgLy8gRklY
TUU6IElmIHNjcmlwdGluZyBpcyBkaXNhYmxlZCwgYWx3YXlzIGp1c3QgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBUcnkgdG8gZXhlY3V0ZSB0aGUgc2NyaXB0IGdpdmVuIHRvIHVzLgotICAgIHJ1blNj
cmlwdChzY3JpcHRFbGVtZW50LmdldCgpLCBzdGFydExpbmUpOworICAgIHJ1blNjcmlwdChzY3Jp
cHRFbGVtZW50LmdldCgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGlmIChoYXZlUGFy
c2luZ0Jsb2NraW5nU2NyaXB0KCkpIHsKICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVs
KQpAQCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBlbmRp
bmdTY3JpcHQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCwgRWxlbWVuCiAKIC8vIFRoaXMg
bWV0aG9kIGlzIG1lYW50IHRvIG1hdGNoIHRoZSBIVE1MNSBkZWZpbml0aW9uIG9mICJydW5uaW5n
IGEgc2NyaXB0IgogLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNydW5uaW5nLWEtc2NyaXB0Ci12b2lk
IEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGludCBzdGFydGlu
Z0xpbmVOdW1iZXIpCit2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBz
Y3JpcHQsIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CiAgICAg
QVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEFTU0VSVCghaGF2ZVBhcnNpbmdCbG9ja2luZ1Njcmlw
dCgpKTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlw
dChFbGVtZW50KiBzY3JpcHQsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCiAgICAgICAgICAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDQ3CiAgICAg
ICAgICAgICAvLyBBU1NFUlQoZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOwog
ICAgICAgICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgICAgICAgICAgU2Ny
aXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRV
UkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHN0YXJ0aW5nTGluZU51bWJlcik7Cisg
ICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVu
dCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3Rh
cnRQb3NpdGlvbik7CiAgICAgICAgICAgICBleGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmggYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAppbmRleCBi
ZTIxZGQyNDIxYjFkNDQyN2IwODQ3YjBiOTExYzFmZTk3YzZmNzY1Li4yZGYyOTVmOWMxMzU5NGRl
Y2I2ZWYxZjEwMGUzY2Q5NWQzNzk5NDJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRS
dW5uZXIuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiUGVuZGluZ1NjcmlwdC5oIgog
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKQEAgLTUyLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNoKCk7CiAKICAg
ICAvLyBQcm9jZXNzZXMgdGhlIHBhc3NlZCBpbiBzY3JpcHQgYW5kIGFueSBwZW5kaW5nIHNjcmlw
dHMgaWYgcG9zc2libGUuCi0gICAgYm9vbCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2Ny
aXB0VG9Qcm9jZXNzLCBpbnQgc2NyaXB0U3RhcnRMaW5lKTsKKyAgICBib29sIGV4ZWN1dGUoUGFz
c1JlZlB0cjxFbGVtZW50PiBzY3JpcHRUb1Byb2Nlc3MsIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNj
cmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgYm9vbCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JM
b2FkKENhY2hlZFJlc291cmNlKik7CiAgICAgYm9vbCBoYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxl
c2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRz
OyB9CkBAIC03Niw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXF1ZXN0RGVmZXJyZWRT
Y3JpcHQoRWxlbWVudCopOwogICAgIGJvb2wgcmVxdWVzdFBlbmRpbmdTY3JpcHQoUGVuZGluZ1Nj
cmlwdCYsIEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZvaWQgcnVuU2NyaXB0KEVsZW1lbnQqLCBp
bnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50KiwgY29u
c3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBIZWxwZXJz
IGZvciBkZWFsaW5nIHdpdGggSFRNTFNjcmlwdFJ1bm5lckhvc3QKICAgICB2b2lkIHdhdGNoRm9y
TG9hZChQZW5kaW5nU2NyaXB0Jik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5jcHAgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKaW5kZXggYTIyMzZkNTQ0ZTIxM2JmY2Q2MDRmZjFjYzlhNTZjNWY0OGE0NWY2MS4uMzY3OWM3
MTc1MzgxODQ1Mjg0MDBmNzA2NGEyMWEyYzcwY2YxOGE5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNTUsNiArNTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgY29uc3QgaW50IHVuaW5pdGlh
bGl6ZWRMaW5lTnVtYmVyVmFsdWUgPSAtMTsKK3N0YXRpYyBjb25zdCBUZXh0UG9zaXRpb24wIHVu
aW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMCA9IFRleHRQb3NpdGlvbjA6OmJlbG93UmFuZ2VQb3Np
dGlvbigpOworc3RhdGljIGNvbnN0IFRleHRQb3NpdGlvbjEgdW5pbml0aWFsaXplZFBvc2l0aW9u
VmFsdWUxKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludCgtMSksIFdURjo6T25l
QmFzZWROdW1iZXI6OnNfYmFzZSk7CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTMzMyw4ICszMzUsOCBA
QCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6
ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbgogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUo
SW5pdGlhbE1vZGUpCiAgICAgLCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUp
CiAgICAgLCBtX3Rva2VuaXplcih0b2tlbml6ZXIpCi0gICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0
YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQotICAgICwgbV9sYXN0U2NyaXB0
RWxlbWVudFN0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9z
Y3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSkK
KyAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3Np
dGlvblZhbHVlMCkKICAgICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQ
YXJzZXJRdWlya3MpCiB7CiB9CkBAIC0zNTIsOCArMzU0LDggQEAgSFRNTFRyZWVCdWlsZGVyOjpI
VE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50
KiBmcmEKICAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwg
bV9zZWNvbmRhcnlJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV90b2tlbml6ZXIo
dG9rZW5pemVyKQotICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXpl
ZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5p
bml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQ
b3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEpCisgICAgLCBtX2xhc3RTY3JpcHRF
bGVtZW50U3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTApCiAgICAgLCBt
X3VzZVByZUhUTUw1UGFyc2VyUXVpcmtzKHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogewogICAg
IGlmIChjb250ZXh0RWxlbWVudCkgewpAQCAtNDE1LDE1ICs0MTcsMTUgQEAgSFRNTFRyZWVCdWls
ZGVyOjpGcmFnbWVudFBhcnNpbmdDb250ZXh0Ojp+RnJhZ21lbnRQYXJzaW5nQ29udGV4dCgpCiB7
CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Q
cm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5lKQorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJl
ZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQ
b3NpdGlvbikKIHsKICAgICAvLyBVbnBhdXNlIG91cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2Ug
dXMgYWdhaW4gd2hlbiBwcm9jZXNzaW5nIHRoZSBzY3JpcHQuCiAgICAgLy8gVGhlIEhUTUw1IHNw
ZWMgaXMgd3JpdHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0
cmVlCiAgICAgLy8gYnVpbGRlci4gIFdlIHBhdXNlIHRoZSBwYXJzZXIgdG8gZXhpdCB0aGUgdHJl
ZSBidWlsZGVyLCBhbmQgdGhlbiByZXN1bWUKICAgICAvLyBiZWZvcmUgcnVubmluZyBzY3JpcHRz
LgogICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKLSAgICBzY3JpcHRTdGFydExpbmUgPSBtX3Njcmlw
dFRvUHJvY2Vzc1N0YXJ0TGluZTsKLSAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSA9IHVu
aW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWU7CisgICAgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IG1f
c2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsKKyAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0
UG9zaXRpb24gPSB1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTE7CiAgICAgcmV0dXJuIG1fc2Ny
aXB0VG9Qcm9jZXNzLnJlbGVhc2UoKTsKIH0KIApAQCAtMjIwMSw3ICsyMjAzLDcgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAgICAgICAgIG1faXNQYXVzZWQgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5j
dXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKHNjcmlwdFRhZykpOwogICAgICAgICAgICAgbV9z
Y3JpcHRUb1Byb2Nlc3MgPSBtX3RyZWUuY3VycmVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIG1f
c2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lID0gbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSAr
IDE7CisgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSBXVEY6OnRv
T25lQmFzZWRUZXh0UG9zaXRpb24obV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24pOwog
ICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgIGlm
IChpc1BhcnNpbmdGcmFnbWVudCgpICYmIG1fZnJhZ21lbnRDb250ZXh0LnNjcmlwdGluZ1Blcm1p
c3Npb24oKSA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpCiAgICAgICAgICAgICAgICAg
bV9zY3JpcHRUb1Byb2Nlc3MtPnJlbW92ZUFsbENoaWxkcmVuKCk7CkBAIC0yNzUwLDcgKzI3NTIs
MTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIG1fdHJlZS5pbnNlcnRTY3JpcHRFbGVtZW50KHRva2VuKTsK
ICAgICBtX3Rva2VuaXplci0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6U2NyaXB0RGF0YVN0YXRl
KTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKLSAgICBt
X2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lID0gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsK
KworICAgIFRleHRQb3NpdGlvbjAgcG9zaXRpb24gPSBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jh
c2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCkpLCBX
VEY6Olplcm9CYXNlZE51bWJlcjo6c19iYXNlKTsKKyAgICBtX2xhc3RTY3JpcHRFbGVtZW50U3Rh
cnRQb3NpdGlvbiA9IHBvc2l0aW9uOworCiAgICAgc2V0SW5zZXJ0aW9uTW9kZShUZXh0TW9kZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgg
Yi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IGU2MWZlNzM0NjZk
YTE3OGQzMzExZDI3NjIwZTQ2YjgyODFjMWU0NTUuLmJiMzU5NmRmZWU3ZmNjZTkyZTcxZjJlMWZh
MGU1ZjE1ZTk0OGIxODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaApAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50U3RhY2suaCIKICNpbmNsdWRlICJI
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgpAQCAtNzEsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJv
bUF0b21pY1Rva2VuKEF0b21pY0hUTUxUb2tlbiYpOwogCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQg
d2hlbiBwYXJzZXIgaXMgcGF1c2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4uCi0g
ICAgUGFzc1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3Rh
cnRMaW5lKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4
dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBEb25lLCBjbG9zZSBh
bnkgb3BlbiB0YWdzLCBldGMuCiAgICAgdm9pZCBmaW5pc2hlZCgpOwpAQCAtMjQ2LDEzICsyNDcs
MTIgQEAgcHJpdmF0ZToKICAgICBIVE1MVG9rZW5pemVyKiBtX3Rva2VuaXplcjsKIAogICAgIFJl
ZlB0cjxFbGVtZW50PiBtX3NjcmlwdFRvUHJvY2VzczsgLy8gPHNjcmlwdD4gdGFnIHdoaWNoIG5l
ZWRzIHByb2Nlc3NpbmcgYmVmb3JlIHJlc3VtaW5nIHRoZSBwYXJzZXIuCi0gICAgaW50IG1fc2Ny
aXB0VG9Qcm9jZXNzU3RhcnRMaW5lOyAvLyBTdGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUgc2Ny
aXB0IHRhZyBuZWVkaW5nIHByb2Nlc3NpbmcuCisgICAgVGV4dFBvc2l0aW9uMSBtX3NjcmlwdFRv
UHJvY2Vzc1N0YXJ0UG9zaXRpb247IC8vIFN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSBzY3Jp
cHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KIAogICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3
YW50IHRvIHJlbW92ZSB0aGlzIG1lbWJlci4gIE9yaWdpbmFsbHksIGl0IHdhcwogICAgIC8vIGNy
ZWF0ZWQgdG8gc2VydmljZSB0aGUgbGVnYWN5IHRyZWUgYnVpbGRlciwgYnV0IGl0IHNlZW1zIHRv
IGJlIHVzZWQgZm9yCiAgICAgLy8gc29tZSBvdGhlciB0aGluZ3Mgbm93LgotICAgIGludCBtX2xh
c3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lOwotICAgIAorICAgIFRleHRQb3NpdGlvbjAgbV9sYXN0
U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb247CiAgICAgYm9vbCBtX3VzZVByZUhUTUw1UGFyc2Vy
UXVpcmtzOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzAxYThmZTU4YTEzOTZjY2M2NzUwYjMyODNj
OTZlZWI4NmU5ZmFmMC4uYTAzNDU2MzViMTY4ZDY4YmM3MjdmNmZkNTgwNDJlZmU1ZDFlNTIzZSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMDcgIFBldGVyIFJ5YmluICA8
cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEhUTUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4g
cG9zaXRpb24gd2l0aGluIEhUTUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAg
ICAgUmVwbGFjZXMgc2NyaXB0IGxpbmUgbnVtYmVyIHdpdGggVGV4dFBvc2l0aW9uIHN0cnVjdHVy
ZS4KKworICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUlt
cGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSk6CisKIDIwMTAtMTAtMDYgIENo
cmlzIEd1aWxsb3J5ICA8Y2hyaXMuZ3VpbGxvcnlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBDaHJpcyBGbGVpemFjaC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApp
bmRleCA5ZGFmMjZmMWZmNzg2NzkwMWIwMDZlNTMxM2ViZTgxNGFmNWYzN2ExLi4zMzEyNTBkYjMy
ZDM4Y2Y5MmIyMDg1MmUyMzEzZjkxZTYxOGEwMjA1IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuY3BwCkBAIC03NTMsOCArNzUzLDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmJpbmRUb1dp
bmRvd09iamVjdChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIE5QT2JqZWN0KiBvYmplY3QpCiAKIHZv
aWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0KGNvbnN0IFdlYlNjcmlwdFNvdXJjZSYgc291
cmNlKQogeworICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJlcjo6
ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpz
X2Jhc2UpOwogICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KAotICAgICAgICBT
Y3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBzb3VyY2Uuc3RhcnRMaW5l
KSk7CisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBv
c2l0aW9uKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKApAQCAtNzY0LDggKzc2NSw5IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkKAogICAgIFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiBzb3VyY2Vz
OwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNvdXJjZXM7ICsraSkgeworICAg
ICAgICBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVC
YXNlZEludChzb3VyY2VzSW5baV0uc3RhcnRMaW5lKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19i
YXNlKTsKICAgICAgICAgc291cmNlcy5hcHBlbmQoU2NyaXB0U291cmNlQ29kZSgKLSAgICAgICAg
ICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBzb3VyY2VzSW5baV0uc3Rh
cnRMaW5lKSk7CisgICAgICAgICAgICBzb3VyY2VzSW5baV0uY29kZSwgc291cmNlc0luW2ldLnVy
bCwgcG9zaXRpb24pKTsKICAgICB9CiAKICAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQod29ybGRJZCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXApOwpAQCAtODE3
LDggKzgxOSw5IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpjb2xsZWN0R2FyYmFnZSgpCiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0QW5kUmV0dXJuVmFsdWUo
CiAgICAgY29uc3QgV2ViU2NyaXB0U291cmNlJiBzb3VyY2UpCiB7CisgICAgVGV4dFBvc2l0aW9u
MSBwb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0
YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OnNfYmFzZSk7CiAgICAgcmV0dXJuIG1fZnJh
bWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KAotICAgICAgICBTY3JpcHRTb3VyY2VDb2RlKHNv
dXJjZS5jb2RlLCBzb3VyY2UudXJsLCBzb3VyY2Uuc3RhcnRMaW5lKSkudjhWYWx1ZSgpOworICAg
ICAgICBTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikp
LnY4VmFsdWUoKTsKIH0KIAogLy8gUmV0dXJucyB0aGUgVjggY29udGV4dCBmb3IgdGhpcyBmcmFt
ZSwgb3IgYW4gZW1wdHkgaGFuZGxlIGlmIHRoZXJlIGlzIG5vbmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70250</attachid>
            <date>2010-10-08 07:31:12 -0700</date>
            <delta_ts>2010-10-19 15:02:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20101008183109.patch</filename>
            <type>text/plain</type>
            <size>59103</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiOWM5ZjkwN2MzODA5NTZkZjRlNGQ0NzFjZWY4YjMxODBmMTJhYThkLi5h
YmMwM2Y5OGU2ZjBiNzZkN2Y1NzZjYjJjNzI4NTNjNzRlZWEyODU3IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTAtMTAtMDcgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvdGV4dC9UZXh0UG9zaXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiB3
dGYvdGV4dC9UZXh0UG9zaXRpb24uaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRleHRQb3NpdGlv
bjo6VGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6VGV4dFBvc2l0aW9uOjptaW5pbXVtUG9z
aXRpb24pOgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbik6
CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCk6CisgICAg
ICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6WmVyb0Jhc2VkTnVtYmVyKToKKyAgICAgICAgKFdU
Rjo6WmVyb0Jhc2VkTnVtYmVyOjp6ZXJvQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPbmVCYXNl
ZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6
Ok9uZUJhc2VkTnVtYmVyKToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6Om9uZUJhc2Vk
SW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRBc1plcm9CYXNlZElu
dCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpjb252ZXJ0VG9aZXJvQmFzZWQpOgor
ICAgICAgICAoV1RGOjp0b1plcm9CYXNlZFRleHRQb3NpdGlvbik6CisgICAgICAgIChXVEY6OnRv
T25lQmFzZWRUZXh0UG9zaXRpb24pOgorICAgICAgICAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmNv
bnZlcnRUb09uZUJhc2VkKToKKyAgICAgICAgKiB3dGYvd3RmLnByaToKKwogMjAxMC0xMC0wNiAg
Q2hyaXMgRXZhbnMgIDxjZXZhbnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggODhkMTc2MTdiM2E0Yjg4ODRjMDRh
MjY4NjhjNmYwNmQxNzMxYzc1MC4uMDI2NjY0NTZiMjE1YmMwMzIyYmMyZDQxN2UwZDE0ZGYxNzAx
Yzg0YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTUxMSw2ICs1MTEsOCBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oIFwKIAlKYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0
aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAgXAogCUphdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5
cGkKaW5kZXggNDYyOTYwZDUxZGQ2ZGJlNDAyZDU4NjNkMjA4YzEzMjhjYmMxNWFjZS4uMDEwNzU5
ODRhOTBiMGQxNzMwNGQ2ZDZiMGQ4Y2Q2MDA2NTE4NDg5YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5neXBpCkBAIC00NTQsNiArNDU0LDggQEAKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcCcsCiAgICAgICAgICAgICAnd3RmL3RleHQvU3RyaW5nSW1wbC5oJywKICAgICAg
ICAgICAgICd3dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCcsCisgICAgICAgICAgICAnd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmgnLAorICAgICAgICAgICAgJ3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ3d0Zi90ZXh0L1dURlN0cmluZy5jcHAnLAogICAgICAgICAgICAg
J3d0Zi90ZXh0L1dURlN0cmluZy5oJywKICAgICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRv
ci5oJywKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL0ph
dmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA4OTY3OTRlZjQxZThmMDIxODQw
OTk0YWMzNTI0Nzg3MmIyZGFlMTY5Li45M2ZhYTljMTAxMTJjZjYyZThmYWI3Mjg4YTE4ZDlhYTYx
ZjBjMWE0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKKysr
IGIvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xOCw2ICsxOCw3IEBAIFNF
VChXVEZfU09VUkNFUwogICAgIHRleHQvQ1N0cmluZy5jcHAKICAgICB0ZXh0L1N0cmluZ0ltcGwu
Y3BwCiAgICAgdGV4dC9TdHJpbmdTdGF0aWNzLmNwcAorICAgIHRleHQvVGV4dFBvc2l0aW9uLmNw
cAogICAgIHRleHQvV1RGU3RyaW5nLmNwcAogCiAgICAgdW5pY29kZS9VVEY4LmNwcApkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmNwcCBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExN2UwMzA5NTlk
MjdhOWQ4MWQzZTEwMjA4OTA4OGE5Njc5NzFhZQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5jcHAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0UG9zaXRpb24uaCIK
KworbmFtZXNwYWNlIFdURiB7CisKK2NvbnN0IFplcm9CYXNlZE51bWJlciBaZXJvQmFzZWROdW1i
ZXI6OnNfYmFzZSgwKTsKK2NvbnN0IFplcm9CYXNlZE51bWJlciBaZXJvQmFzZWROdW1iZXI6OnNf
YmVsb3dCYXNlKC0xKTsKKworY29uc3QgT25lQmFzZWROdW1iZXIgT25lQmFzZWROdW1iZXI6OnNf
YmFzZSgxKTsKK2NvbnN0IE9uZUJhc2VkTnVtYmVyIE9uZUJhc2VkTnVtYmVyOjpzX2JlbG93QmFz
ZSgwKTsKKworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBv
c2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTc4NTcyNjdkMzg0MzczZTI0ODI5MDdjZjU5YzEzNmUzMzRj
ZWU1MgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1RleHRQb3Np
dGlvbi5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0UG9z
aXRpb25faAorI2RlZmluZSBUZXh0UG9zaXRpb25faAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8qCisgKiBUZXh0IFBvc2l0aW9uCisgKgorICog
VGV4dFBvc2l0aW9uIHN0cnVjdHVyZSBzcGVjaWZpZXMgY29vcmRpbmF0ZXMgd2l0aGluIGFuIHRl
eHQgcmVzb3VyY2UuIEl0IGlzIHVzZWQgbW9zdGx5CisgKiBmb3Igc2F2aW5nIHNjcmlwdCBzb3Vy
Y2UgcG9zaXRpb24uCisgKgorICogTGF0ZXIgVGV4dFBvc2l0aW9uMCBhbmQgVGV4dFBvc2l0aW9u
MSBhbmQgYm90aCBudW1iZXIgdHlwZXMgY2FuIGJlIG1lcmdlZCB0b2dldGhlciBxdWl0ZSBlYXNp
bHkuCisgKgorICogMC1iYXNlZCBhbmQgMS1iYXNlZAorICoKKyAqIExpbmUgYW5kIGNvbHVtbiBu
dW1iZXJzIGNvdWxkIGJlIGludGVycHJldGVkIGFzIHplcm8tYmFzZWQgb3IgMS1iYXNlZC4gU2lu
Y2UKKyAqIGJvdGggcHJhY3RpY2VzIGNvZXhpc3QgaW4gV2ViS2l0IHNvdXJjZSBiYXNlLCAnaW50
JyB0eXBlIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoCisgKiBhIGRlZGljYXRlZCB3cmFwcGVyIHR5
cGVzLCBzbyB0aGF0IGNvbXBpbGVyIGhlbHBlZCB1cyB3aXRoIHRoaXMgYW1iaWd1aXR5LgorICoK
KyAqIEhlcmUgd2UgaW50cm9kdWNlIDIgdHlwZXMgb2YgbnVtYmVyczogWmVyb0Jhc2VkTnVtYmVy
IGFuZCBPbmVCYXNlZE51bWJlciBhbmQKKyAqIDIgY29ycmVzcG9uZGluZyB0eXBlcyBvZiBUZXh0
UG9zaXRpb24gc3RydWN0dXJlLiBXaGlsZSBvbmx5IG9uZSB0eXBlIG91Z2h0IHRvIGJlIGVub3Vn
aCwKKyAqIHRoaXMgaXMgZG9uZSB0byBrZWVwIHRyYW5zaXRpb24gdG8gdGhlIG5ldyB0eXBlcyBh
cyB0cmFuc3BhcmVudCBhcyBwb3NzaWJsZToKKyAqIGUuZy4gaW4gYXJlYXMgd2hlcmUgMC1iYXNl
ZCBpbnRlZ2VycyBhcmUgdXNlZCwgVGV4dFBvc2l0aW9uMCBzaG91bGQgYmUgaW50cm9kdWNlZC4g
VGhpcworICogd2F5IGFsbCBjaGFuZ2VzIHdpbGwgcmVtYWluIHRyYWNrYWJsZS4KKyAqCisgKiBM
YXRlciBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUgbWVyZ2VkIGluIG9uZSB0eXBlIHF1aXRlIGVh
c2lseS4KKyAqCisgKiBGb3IgdHlwZSBzYWZldHkgYW5kIGZvciB0aGUgZnV0dXJlIHR5cGUgbWVy
Z2UgaXQgaXMgaW1wb3J0YW50IHRoYXQgYWxsIG9wZXJhdGlvbnMgaW4gQVBJCisgKiB0aGF0IGFj
Y2VwdCBvciByZXR1cm4gaW50ZWdlciBoYXZlIGEgbmFtZSBleHBsaWNpdGx5IGRlZmluaW5nIGJh
c2Ugb2YgaW50ZWdlci4gRm9yIHRoaXMgcmVhc29uCisgKiBpbnQtcmVjZWl2aW5nIGNvbnN0cnVj
dG9ycyBhcmUgaGlkZGVuIGZyb20gQVBJLgorICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIE5VTUJF
Uj4KK2NsYXNzIFRleHRQb3NpdGlvbiB7CitwdWJsaWM6CisgICAgVGV4dFBvc2l0aW9uKE5VTUJF
UiBsaW5lLCBOVU1CRVIgY29sdW1uKQorICAgICAgICA6IG1fbGluZShsaW5lKQorICAgICAgICAs
IG1fY29sdW1uKGNvbHVtbikKKyAgICB7CisgICAgfQorICAgIFRleHRQb3NpdGlvbigpIHt9CisK
KyAgICAvLyBBICdtaW5pbXVtJyB2YWx1ZSBvZiBwb3NpdGlvbiwgdXNlZCBhcyBhIGRlZmF1bHQg
dmFsdWUuCisgICAgc3RhdGljIFRleHRQb3NpdGlvbjxOVU1CRVI+IG1pbmltdW1Qb3NpdGlvbigp
IHsgcmV0dXJuIFRleHRQb3NpdGlvbjxOVU1CRVI+KE5VTUJFUjo6c19iYXNlLCBOVU1CRVI6OnNf
YmFzZSk7IH0KKworICAgIC8vIEEgdmFsdWUgd2l0aCBsaW5lIHZhbHVlIGxlc3MgdGhhbiBhIG1p
bmltdW07IHVzZWQgYXMgYW4gaW1wb3NzaWJsZSBwb3NpdGlvbi4KKyAgICBzdGF0aWMgVGV4dFBv
c2l0aW9uPE5VTUJFUj4gYmVsb3dSYW5nZVBvc2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9u
PE5VTUJFUj4oTlVNQkVSOjpzX2JlbG93QmFzZSwgTlVNQkVSOjpzX2Jhc2UpOyB9CisKKyAgICBO
VU1CRVIgbV9saW5lOworICAgIE5VTUJFUiBtX2NvbHVtbjsKK307CisKK2NsYXNzIE9uZUJhc2Vk
TnVtYmVyOworCisvLyBBbiBpbnQgd3JhcHBlciB0aGF0IGFsd2F5cyByZW1pbmRzIHlvdSB0aGF0
IHRoZSBudW1iZXIgc2hvdWxkIGJlIDAtYmFzZWQKK2NsYXNzIFplcm9CYXNlZE51bWJlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFplcm9CYXNlZE51bWJlciBmcm9tWmVyb0Jhc2VkSW50KGludCB6
ZXJvQmFzZWRJbnQpIHsgcmV0dXJuIFplcm9CYXNlZE51bWJlcih6ZXJvQmFzZWRJbnQpOyB9CisK
KyAgICBaZXJvQmFzZWROdW1iZXIoKSB7fQorCisgICAgaW50IHplcm9CYXNlZEludCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIE9uZUJhc2VkTnVtYmVyIGNvbnZlcnRUb09uZUJh
c2VkKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgWmVyb0Jhc2VkTnVtYmVyIHNfYmFzZTsg
Ly8gMAorICAgIHN0YXRpYyBjb25zdCBaZXJvQmFzZWROdW1iZXIgc19iZWxvd0Jhc2U7IC8vIC0x
CisKK3ByaXZhdGU6CisgICAgWmVyb0Jhc2VkTnVtYmVyKGludCB2YWx1ZSkgOiBtX3ZhbHVlKHZh
bHVlKSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKworLy8gQW4gaW50IHdyYXBwZXIgdGhhdCBh
bHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAxLWJhc2VkCitjbGFz
cyBPbmVCYXNlZE51bWJlciB7CitwdWJsaWM6CisgICAgc3RhdGljIE9uZUJhc2VkTnVtYmVyIGZy
b21PbmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9uZUJhc2VkTnVtYmVyKG9u
ZUJhc2VkSW50KTsgfQorICAgIE9uZUJhc2VkTnVtYmVyKCkge30KKworICAgIGludCBvbmVCYXNl
ZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBpbnQgY29udmVydEFzWmVyb0Jh
c2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KKyAgICBaZXJvQmFzZWROdW1i
ZXIgY29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyOjpm
cm9tWmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQorCisgICAgc3RhdGljIGNvbnN0IE9uZUJh
c2VkTnVtYmVyIHNfYmFzZTsgLy8gMQorICAgIHN0YXRpYyBjb25zdCBPbmVCYXNlZE51bWJlciBz
X2JlbG93QmFzZTsgLy8gMAorCitwcml2YXRlOgorICAgIE9uZUJhc2VkTnVtYmVyKGludCB2YWx1
ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKwordHlwZWRlZiBU
ZXh0UG9zaXRpb248WmVyb0Jhc2VkTnVtYmVyPiBUZXh0UG9zaXRpb24wOwordHlwZWRlZiBUZXh0
UG9zaXRpb248T25lQmFzZWROdW1iZXI+IFRleHRQb3NpdGlvbjE7CisKK2lubGluZSBUZXh0UG9z
aXRpb24wIHRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKGNvbnN0IFRleHRQb3NpdGlvbjEmIHBvc2l0
aW9uKQoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24wKHBvc2l0aW9uLm1fbGluZS5jb252ZXJ0
VG9aZXJvQmFzZWQoKSwgcG9zaXRpb24ubV9jb2x1bW4uY29udmVydFRvWmVyb0Jhc2VkKCkpOwor
fQorCitpbmxpbmUgVGV4dFBvc2l0aW9uMSB0b09uZUJhc2VkVGV4dFBvc2l0aW9uKGNvbnN0IFRl
eHRQb3NpdGlvbjAmIHBvc2l0aW9uKQoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKHBvc2l0
aW9uLm1fbGluZS5jb252ZXJ0VG9PbmVCYXNlZCgpLCBwb3NpdGlvbi5tX2NvbHVtbi5jb252ZXJ0
VG9PbmVCYXNlZCgpKTsKK30KKworaW5saW5lIE9uZUJhc2VkTnVtYmVyIFplcm9CYXNlZE51bWJl
cjo6Y29udmVydFRvT25lQmFzZWQoKSBjb25zdAoreworICAgIHJldHVybiBPbmVCYXNlZE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KG1fdmFsdWUgKyAxKTsKK30KKworfQorCit1c2luZyBXVEY6OlRl
eHRQb3NpdGlvbjA7Cit1c2luZyBXVEY6OlRleHRQb3NpdGlvbjE7CisKKyNlbmRpZiAvLyBUZXh0
UG9zaXRpb25faApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkgYi9KYXZh
U2NyaXB0Q29yZS93dGYvd3RmLnByaQppbmRleCA4NGFjMjBlM2ZjOWZlNGI1Y2EyNGY5NTM5MmY3
YmExZTkxODAxMzQwLi5lZDRkYTc0OTE1YmFkNTU4MmIwOTJiMjg4NTVkZjhhYzY3ZGMwNmQyIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQorKysgYi9KYXZhU2NyaXB0Q29y
ZS93dGYvd3RmLnByaQpAQCAtMjQsNiArMjQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvdGV4
dC9DU3RyaW5nLmNwcCBcCiAgICAgd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgXAogICAgIHd0Zi90
ZXh0L1N0cmluZ1N0YXRpY3MuY3BwIFwKKyAgICB3dGYvdGV4dC9UZXh0UG9zaXRpb24uY3BwIFwK
ICAgICB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwIFwKICAgICB3dGYvdW5pY29kZS9Db2xsYXRvckRl
ZmF1bHQuY3BwIFwKICAgICB3dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwIFwKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDE4OTUw
ZTk4NTRlMmNhMzkzODk2ODI2NjQzYjM5NzNlN2ZhOWUxZS4uZWQ2OGFiYTAxODZlMzE1ZGM5OGFm
OTMzMjcyZDBlNTVlNjBlZGRhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAxMC0xMC0wNyAgUGV0ZXIgUnli
aW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2NyaXB0IGNv
bHVtbiBwb3NpdGlvbiB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVuZ2luZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNzEKKwor
ICAgICAgICBSZXBsYWNlcyBsaW5lIG51bWJlciB3aXRoIFRleHRQb3NpdGlvbiBzdHJ1Y3Qgc28g
dGhhdCBzY3JpcHQgZW5naW5lCisgICAgICAgIGdldHMgc2NyaXB0IHN0YXJ0aW5nIGxpbmUvY29s
dW1uLgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
aGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV2ZW50SGFuZGxlclBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdFNvdXJjZUNvZGU6OnN0YXJ0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3Vy
Y2VDb2RlOjpzdGFydFBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlFdmVu
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVuZXI6OlY4
TGF6eUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0ZW5l
cjo6cHJlcGFyZUxpc3RlbmVyT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpj
cmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6Y29tcGlsZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5
OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpydW5TY3JpcHQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHk6OnJ1blNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogZG9tL1BlbmRpbmdTY3JpcHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVhcik6
CisgICAgICAgICogZG9tL1BlbmRpbmdTY3JpcHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1Njcmlw
dDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnN0YXJ0aW5n
UG9zaXRpb24pOgorICAgICAgICAqIGRvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaDoKKyAg
ICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBkb20vWE1MRG9jdW1l
bnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
OjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmVuZEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6bGlu
ZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbk9uZUJh
c2VkKToKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxE
b2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6
OnNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRS
dW5uZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVu
U2NyaXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5oOgorCiAyMDEwLTEwLTA3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCmluZGV4IDMyZDYyOThjZGJkYTc3MmRh
YTEzZTEwMzNlM2NmMGFhNDBmNTk0YjIuLjA5MmVlYjhmMDhhMzI5YTM5MWQ5ODcxNmRmZWRkOTk5
NjU2MDg4YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29k
ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCkBAIC0zNSwx
NSArMzUsMTYgQEAKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUg
IlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlIHsKIHB1YmxpYzoKLSAgICBT
Y3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBL
VVJMKCksIGludCBzdGFydExpbmUgPSAxKQorICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3Ry
aW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgY29uc3QgVGV4dFBvc2l0aW9u
MSYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAg
ICAgICA6IG1fcHJvdmlkZXIoU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShzb3VyY2UsIHVy
bC5pc051bGwoKSA/IFN0cmluZygpIDogdXJsLnN0cmluZygpKSkKLSAgICAgICAgLCBtX2NvZGUo
bV9wcm92aWRlciwgc3RhcnRMaW5lKQorICAgICAgICAsIG1fY29kZShtX3Byb3ZpZGVyLCBzdGFy
dFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpKQogICAgICAgICAsIG1fdXJsKHVybCkKICAg
ICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rp
b24uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCmluZGV4IGRj
ZDBiYjMzNzcxODEzMTg0MjBjMTA3M2JlMjUxYTllNTg0YmE0YjcuLjcwOGZiZTY3ZmU5NGQ3NzIy
MTJjOGJjM2QyN2RlMThiZDUxMDEyY2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NoZWR1bGVkQWN0aW9uLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFj
dGlvbi5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY2hlZHVs
ZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbih2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0
LCB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuYywgaW50IGFyZ2MsIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBhcmd2W10pCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fY29kZShT
dHJpbmcoKSwgS1VSTCgpLCAwKQorICAgICwgbV9jb2RlKFN0cmluZygpLCBLVVJMKCksIFRleHRQ
b3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogewogICAgIG1fZnVuY3Rpb24gPSB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpOZXcoZnVuYyk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDk4MTk2NzkyNDZiMDc5NDY3NzgxZGM5ZTI0MmM2
ODJiOTM2YTk5YjEuLmE5YzdjNjkxMjgwZmJmYWM0OWRmOGQ3ZTY1ZmJmOTkxOGE2OWRjNWEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMjYyLDIwICsyNjIs
MTIgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlQ29kZSwgU2hvdWwKICAgICByZXR1cm4gU2NyaXB0VmFsdWUob2Jq
ZWN0KTsKIH0KIAotaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlckxpbmVOdW1iZXIo
KSBjb25zdAorVGV4dFBvc2l0aW9uMCBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJQb3Np
dGlvbigpIGNvbnN0CiB7CiAgICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBwYXJzZXIgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKICAgICBpZiAo
cGFyc2VyKQotICAgICAgICByZXR1cm4gcGFyc2VyLT5saW5lTnVtYmVyKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLWludCBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJDb2x1bW5OdW1iZXIo
KSBjb25zdAotewotICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCk7Ci0gICAgaWYgKHBhcnNl
cikKLSAgICAgICAgcmV0dXJuIHBhcnNlci0+Y29sdW1uTnVtYmVyKCk7Ci0gICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBwYXJzZXItPnRleHRQb3NpdGlvbigpOworICAgIHJldHVybiBUZXh0
UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpmaW5pc2hlZFdpdGhFdmVudChFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5oCmluZGV4IDhhYzkwNjQ3YmJmZWE5ZmY1YzUyYmI0NDZjZmIyZDEyOGFmOWZi
N2EuLjkwMTNhOWY0YTFkMmJlM2NlODg2ZjA3ZGU0YTM4MTIyZDE4MjAxMjAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCkBAIC0xNTUsOCArMTU1LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmaW5pc2hlZFdpdGhFdmVudChFdmVudCopOwogCi0gICAgaW50IGV2ZW50SGFu
ZGxlckxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICBpbnQgZXZlbnRIYW5kbGVyQ29sdW1uTnVtYmVy
KCkgY29uc3Q7CisgICAgVGV4dFBvc2l0aW9uMCBldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRQcm9jZXNzaW5nVGltZXJDYWxsYmFjayhib29sIHByb2Nlc3NpbmdU
aW1lckNhbGxiYWNrKSB7IG1fcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2sgPSBwcm9jZXNzaW5nVGlt
ZXJDYWxsYmFjazsgfQogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHRoZSBw
YXJhbWV0ZXIgd29ybGQgYXQgYWxsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRM
aXN0ZW5lci5jcHAKaW5kZXggNzJkZjc5ZGVkM2VkNDdjZmYxYTI3YjU5NTNhMzU5OTYzYzc3YTYz
MC4uNDQ4MTA2Y2Y1MjU0OWFiM2Q2NGVhYzUxMmZjMzc2NjNiYzdlZDA0OCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC01MCw4ICs1MCw4IEBAIFBh
c3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihOb2RlKiBub2RlLCBBdHRyaWJ1CiAgICAgaWYgKGF0dHItPmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGludCBsaW5lTnVtYmVyID0gMTsKLSAgICBpbnQgY29sdW1uTnVtYmVy
ID0gMDsKKyAgICAvLyBGSVhNRTogVmVyeSBzdHJhbmdlOiB3ZSBpbml0aWFsaXplIHplcm8tYmFz
ZWQgbnVtYmVyIHdpdGggJzEnLgorICAgIFRleHRQb3NpdGlvbjAgcG9zaXRpb24oV1RGOjpaZXJv
QmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoMSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpz
X2Jhc2UpOwogICAgIFN0cmluZyBzb3VyY2VVUkw7CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
bm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewpAQCAtNjQsMTIgKzY0LDExIEBAIFBhc3NSZWZQ
dHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihOb2Rl
KiBub2RlLCBBdHRyaWJ1CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAg
ICAgIGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVtYmVy
KCk7Ci0gICAgICAgIGNvbHVtbk51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxl
ckNvbHVtbk51bWJlcigpOworICAgICAgICBwb3NpdGlvbiA9IHNjcmlwdENvbnRyb2xsZXItPmV2
ZW50SGFuZGxlclBvc2l0aW9uKCk7CiAgICAgICAgIHNvdXJjZVVSTCA9IG5vZGUtPmRvY3VtZW50
KCktPnVybCgpLnN0cmluZygpOwogICAgIH0KIAotICAgIHJldHVybiBWOExhenlFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIG5vZGUtPmlzU1ZHRWxlbWVu
dCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
V29ybGRDb250ZXh0SGFuZGxlKFVzZU1haW5Xb3JsZCkpOworICAgIHJldHVybiBWOExhenlFdmVu
dExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIG5vZGUtPmlzU1ZH
RWxlbWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VVUkwsIHBvc2l0aW9uLCBXb3JsZENvbnRl
eHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CiB9CiAKIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0
ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpYnV0
ZSogYXR0cikKQEAgLTgxLDEwICs4MCw2IEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5l
cj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpCiAgICAg
aWYgKGF0dHItPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBsaW5lTnVt
YmVyID0gMTsKLSAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKLSAgICBTdHJpbmcgc291cmNlVVJM
OwotCiAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLT5zY3Jp
cHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRyb2xsZXItPmNhbkV4ZWN1dGVTY3JpcHRzKEFib3V0
VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC05NCwxMCArODksOSBAQCBQ
YXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoRnJhbWUqIGZyYW1lLCBBdHRyaQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBs
aW5lTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyTGluZU51bWJlcigpOwot
ICAgIGNvbHVtbk51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckNvbHVtbk51
bWJlcigpOwotICAgIHNvdXJjZVVSTCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmco
KTsKLSAgICByZXR1cm4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFt
ZSgpLnN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpLCBhdHRyLT52
YWx1ZSgpLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgV29ybGRDb250ZXh0
SGFuZGxlKFVzZU1haW5Xb3JsZCkpOworICAgIFRleHRQb3NpdGlvbjAgcG9zaXRpb24gPSBzY3Jp
cHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJQb3NpdGlvbigpOworICAgIFN0cmluZyBzb3VyY2VV
UkwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CisgICAgcmV0dXJuIFY4TGF6
eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZnJhbWUt
PmRvY3VtZW50KCktPmlzU1ZHRG9jdW1lbnQoKSwgYXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBw
b3NpdGlvbiwgV29ybGRDb250ZXh0SGFuZGxlKFVzZU1haW5Xb3JsZCkpOwogfQogCiBTdHJpbmcg
ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KERvY3VtZW50KiBkb2N1bWVudCwgRXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNvdXJj
ZUNvZGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oCmluZGV4IGRi
YzlkNWU2ZmM2MDA3ZmNmZGQ2NjAyNGRiMDc4MjZjNjYyNjNiNWIuLjI0NzgxNTFlNmY1NGZjNzUw
MzhmMDQxZGVjOTgwZDdhNzU2ZDJhZGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0U291cmNlQ29kZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNl
Q29kZS5oCkBAIC0zNSwxNiArMzUsMTcgQEAKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
Y3JpcHRTb3VyY2VDb2RlIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGludCBzdGFydExpbmUgPSAx
KQorICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwm
IHVybCA9IEtVUkwoKSwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc3RhcnRQb3NpdGlvbiA9IFRleHRQ
b3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAgICAgICA6IG1fc291cmNlKHNvdXJjZSkK
ICAgICAgICAgLCBtX2NhY2hlZFNjcmlwdCgwKQogICAgICAgICAsIG1fdXJsKHVybCkKLSAgICAg
ICAgLCBtX3N0YXJ0TGluZShzdGFydExpbmUpCisgICAgICAgICwgbV9zdGFydFBvc2l0aW9uKHN0
YXJ0UG9zaXRpb24pCiAgICAgewogICAgIH0KIApAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9zb3VyY2UoY3MtPnNjcmlwdCgpKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0
KGNzKQogICAgICAgICAsIG1fdXJsKFBhcnNlZFVSTFN0cmluZywgY3MtPnVybCgpKQotICAgICAg
ICAsIG1fc3RhcnRMaW5lKDEpCisgICAgICAgICwgbV9zdGFydFBvc2l0aW9uKFRleHRQb3NpdGlv
bjE6Om1pbmltdW1Qb3NpdGlvbigpKQogICAgIHsKICAgICB9CiAKQEAgLTYzLDEzICs2NCwxNCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZTsgfQogICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRTY3JpcHQuZ2V0KCk7IH0KICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQotICAgIGludCBzdGFydExpbmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0
TGluZTsgfQorICAgIGludCBzdGFydExpbmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRp
b24ubV9saW5lLm9uZUJhc2VkSW50KCk7IH0KKyAgICBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFy
dFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFBvc2l0aW9uOyB9CiAKIHByaXZhdGU6
CiAgICAgU3RyaW5nIG1fc291cmNlOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNj
cmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiAgICAgS1VSTCBtX3VybDsKLSAgICBpbnQgbV9zdGFydExp
bmU7CisgICAgVGV4dFBvc2l0aW9uMSBtX3N0YXJ0UG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNw
cAppbmRleCA3ZjEzYzVhOGZiMjdkMzNiYmYxZDM0MTBhMDEzZWJjNzk1ZDkzZDIzLi43ZjQ2MzMz
MDYyZDZmZWI3YmU5ZjE3OTYzNTZjNmIwNWNiM2NiOGY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTQxLDE0ICs0MSwxMyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVY4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIo
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5n
JiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVt
bk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCitWOExhenlF
dmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25O
YW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNv
dXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4
dEhhbmRsZSYgd29ybGRDb250ZXh0KQogICAgIDogVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIodHJ1
ZSwgd29ybGRDb250ZXh0KQogICAgICwgbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQogICAg
ICwgbV9pc1NWR0V2ZW50KGlzU1ZHRXZlbnQpCiAgICAgLCBtX2NvZGUoY29kZSkKICAgICAsIG1f
c291cmNlVVJMKHNvdXJjZVVSTCkKLSAgICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQotICAg
ICwgbV9jb2x1bW5OdW1iZXIoY29sdW1uTnVtYmVyKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlv
bikKIHsKIH0KIApAQCAtMTE0LDcgKzExMyw3IEBAIHZvaWQgVjhMYXp5RXZlbnRMaXN0ZW5lcjo6
cHJlcGFyZUxpc3RlbmVyT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAg
ICAgLy8gSW5zZXJ0ICdcbicgb3RoZXJ3aXNlIC8vLXN0eWxlIGNvbW1lbnRzIGNvdWxkIGJyZWFr
IHRoZSBoYW5kbGVyLgogICAgIGNvZGUuYXBwZW5kKCAgIlxufSkuY2FsbCh0aGlzLCBldnQpO319
fX0pIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlRXh0ZXJuYWxTdHJpbmcgPSB2
OEV4dGVybmFsU3RyaW5nKGNvZGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0
ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fc291cmNlVVJM
LCBtX2xpbmVOdW1iZXIpOworICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gVjhQ
cm94eTo6Y29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fc291cmNlVVJMLCBtX3Bv
c2l0aW9uKTsKICAgICBpZiAoIXNjcmlwdC5Jc0VtcHR5KCkpIHsKICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUgPSBwcm94eS0+cnVuU2NyaXB0KHNjcmlwdCwgZmFsc2UpOwogICAg
ICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOExhenlFdmVudExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2
ZW50TGlzdGVuZXIuaAppbmRleCBmMTc0ZDIzYmYxMzFiMDEwZWU0ZjU5YmM0MjUyN2VlODY3NGEw
NjA4Li4wODQ2N2ZlNWY3YWI5NzAxNGQ5NDUzYWYyNmZhM2YxNjZjZWU2M2IxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQ1LDkgKzQ2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEEgVjhMYXp5RXZlbnRM
aXN0ZW5lciBpcyBhbHdheXMgYSBIVE1MIGV2ZW50IGhhbmRsZXIuCiAgICAgY2xhc3MgVjhMYXp5
RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3Ry
aW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBj
b2x1bW5OdW1iZXIsIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2Rl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24s
IGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4TGF6eUV2ZW50TGlzdGVuZXIoZnVuY3Rpb25O
YW1lLCBpc1NWR0V2ZW50LCBjb2RlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
ciwgd29ybGRDb250ZXh0KSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4TGF6
eUV2ZW50TGlzdGVuZXIoZnVuY3Rpb25OYW1lLCBpc1NWR0V2ZW50LCBjb2RlLCBzb3VyY2VVUkws
IHBvc2l0aW9uLCB3b3JsZENvbnRleHQpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0xhenkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC01Niw3ICs1Nyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVMaXN0ZW5lck9i
amVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBW
OExhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZH
RXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgaW50IGxp
bmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29y
bGRDb250ZXh0KTsKKyAgICAgICAgVjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1
bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0
cmluZyBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uLCBjb25zdCBXb3Js
ZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCk7CiAKICAgICAgICAgdmlydHVhbCB2ODo6TG9j
YWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50Kik7CiAKQEAgLTcwLDggKzcx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faXNTVkdFdmVudDsKICAg
ICAgICAgU3RyaW5nIG1fY29kZTsKICAgICAgICAgU3RyaW5nIG1fc291cmNlVVJMOwotICAgICAg
ICBpbnQgbV9saW5lTnVtYmVyOwotICAgICAgICBpbnQgbV9jb2x1bW5OdW1iZXI7CisgICAgICAg
IFRleHRQb3NpdGlvbjAgbV9wb3NpdGlvbjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRleCBlZjcyYjc3YWQ0NzM5NWZjODQ1NGQzYTBk
ZTZhYzE1NTIxMWY5ZmFkLi40NmVhMDY2YTVkNDM0NDIxNzc0NmMzODY4NDgzZDNlNzQ2ZjJjMmU2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTIzOCwxMiArMjM4LDEzIEBAIFY4UHJveHk6
On5WOFByb3h5KCkKICAgICB3aW5kb3dTaGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CiB9CiAKLXY4
OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgdjg6
OlNjcmlwdERhdGEqIHNjcmlwdERhdGEpCit2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IFY4UHJveHk6
OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCB2ODo6
U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKIHsKICAgICBjb25zdCB1aW50MTZfdCogZmlsZU5hbWVT
dHJpbmcgPSBmcm9tV2ViQ29yZVN0cmluZyhmaWxlTmFtZSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6
U3RyaW5nPiBuYW1lID0gdjg6OlN0cmluZzo6TmV3KGZpbGVOYW1lU3RyaW5nLCBmaWxlTmFtZS5s
ZW5ndGgoKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gbGluZSA9IHY4OjpJbnRlZ2Vy
OjpOZXcoYmFzZUxpbmUpOwotICAgIHY4OjpTY3JpcHRPcmlnaW4gb3JpZ2luKG5hbWUsIGxpbmUp
OworICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGxpbmUgPSB2ODo6SW50ZWdlcjo6TmV3KHNj
cmlwdFN0YXJ0UG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpKTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpJbnRlZ2VyPiBjb2x1bW4gPSB2ODo6SW50ZWdlcjo6TmV3KHNjcmlwdFN0YXJ0UG9zaXRp
b24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCkpOworICAgIHY4OjpTY3JpcHRPcmlnaW4gb3JpZ2lu
KG5hbWUsIGxpbmUsIGNvbHVtbik7CiAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQg
PSB2ODo6U2NyaXB0OjpDb21waWxlKGNvZGUsICZvcmlnaW4sIHNjcmlwdERhdGEpOwogICAgIHJl
dHVybiBzY3JpcHQ7CiB9CkBAIC0zOTYsNyArMzk3LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
VjhQcm94eTo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlLCBOb2RlKiBu
b2QKIAogICAgICAgICAvLyBOT1RFOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdlYkNvcmUsIFNj
cmlwdFNvdXJjZUNvZGUncyBsaW5lIHN0YXJ0cyBhdAogICAgICAgICAvLyAxLCB3aGVyZWFzIHY4
IHN0YXJ0cyBhdCAwLgotICAgICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IGNv
bXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgpLCBzb3VyY2Uuc3RhcnRMaW5lKCkgLSAxLCBz
Y3JpcHREYXRhLmdldCgpKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQg
PSBjb21waWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51cmwoKSwgV1RGOjp0b1plcm9CYXNlZFRleHRQ
b3NpdGlvbihzb3VyY2Uuc3RhcnRQb3NpdGlvbigpKSwgc2NyaXB0RGF0YS5nZXQoKSk7CiAjaWYg
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50RW5k
KCJ2OC5jb21waWxlIiwgbm9kZSwgIiIpOwogCkBAIC00MjgsNyArNDI5LDcgQEAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gVjhQcm94eTo6cnVuU2NyaXB0KHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2Ny
aXB0LCBib29sIGlzSW4KICAgICAgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHNob3VsZCBiZSBh
YmxlIHRvIHJlLXVzZSB0aGUgb3JpZ2luIG9mIHRoZQogICAgICAgICAvLyBzY3JpcHQgcGFzc2Vk
IHRvIHVzIGFzIHRoZSBhcmd1bWVudCBpbnN0ZWFkIG9mIHVzaW5nIGFuIGVtcHR5IHN0cmluZwog
ICAgICAgICAvLyBhbmQgMCBiYXNlTGluZS4KLSAgICAgICAgc2NyaXB0ID0gY29tcGlsZVNjcmlw
dChjb2RlLCAiIiwgMCk7CisgICAgICAgIHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgIiIs
IFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpKTsKICAgICB9CiAKICAgICBpZiAoaGFu
ZGxlT3V0T2ZNZW1vcnkoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKaW5kZXggOGEwZGE3Mjk1NjgwZDUy
M2NmNzQwZjM4NmYzY2VmMWU5OTExMDVjMy4uODBkNDY5MWI0ODA1NDhmM2FkN2RkZjc5ZGUyYjM3
OTczNDE3OThkYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKQEAgLTI3OSw3ICsyNzksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
aGVja05ld0xlZ2FsKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKIAotICAgICAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4g
Y29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lLCB2ODo6U2NyaXB0RGF0
YSogPSAwKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNj
cmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHREYXRh
KiA9IDApOwogCiAgICAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gY29kZSBpcyBkaWZmZXJlbnQg
ZnJvbSB6ZXJvLCBhIERPTSBleGNlcHRpb24gaXMKICAgICAgICAgLy8gc2NoZWR1bGUgdG8gYmUg
dGhyb3duLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHkuY3BwCmluZGV4IDE2ZTBiNDEwMWVmZGMzNWFlNzQ0MTgxN2IwNjg3ZGI2YjVhNjVh
MjUuLmNlZmIyZmFhNzM5MDg5NGIzNWQ2NWFkNTNmMjFhOGZiYzdkZGE1NjEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAg
LTE4NCw3ICsxODQsNyBAQCBib29sIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Zm9yZ2V0
VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TY3Jp
cHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIFdvcmtlckNv
bnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCitTY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRlKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBo
czsKIApAQCAtMTk2LDcgKzE5Niw3IEBAIFNjcmlwdFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0CiAgICAgdjg6
OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CiAKICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4g
c2NyaXB0U3RyaW5nID0gdjhFeHRlcm5hbFN0cmluZyhzY3JpcHQpOwotICAgIHY4OjpIYW5kbGU8
djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHNjcmlw
dFN0cmluZywgZmlsZU5hbWUsIGJhc2VMaW5lKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+
IGNvbXBpbGVkU2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChzY3JpcHRTdHJpbmcsIGZp
bGVOYW1lLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBy
ZXN1bHQgPSBydW5TY3JpcHQoY29tcGlsZWRTY3JpcHQpOwogCiAgICAgaWYgKCFleGNlcHRpb25D
YXRjaGVyLkNhbkNvbnRpbnVlKCkpCkBAIC0yMjcsNyArMjI3LDcgQEAgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2
ODo6U2NyaXAKICAgICAvLyBDb21wdXRlIHRoZSBzb3VyY2Ugc3RyaW5nIGFuZCBwcmV2ZW50IGFn
YWluc3QgaW5maW5pdGUgcmVjdXJzaW9uLgogICAgIGlmIChtX3JlY3Vyc2lvbiA+PSBrTWF4UmVj
dXJzaW9uRGVwdGgpIHsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IGNvZGUgPSB2OEV4
dGVybmFsU3RyaW5nKCJ0aHJvdyBSYW5nZUVycm9yKCdSZWN1cnNpb24gdG9vIGRlZXAnKSIpOwot
ICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGUsICIiLCAwKTsKKyAg
ICAgICAgc2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlLCAiIiwgVGV4dFBvc2l0
aW9uMDo6bWluaW11bVBvc2l0aW9uKCkpOwogICAgIH0KIAogICAgIGlmIChWOFByb3h5OjpoYW5k
bGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmgKaW5kZXggNTg4MjRiOWVlZjZmNDkxNDA4NGM3NzcxNjFlMjNmNmUz
MGFiZTI4My4uZTcwYzNkMjg0YWJlNTJlMzViYWM0OTgwNWU3M2E0Y2Y0NzRlOWM5NSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCkBA
IC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNjYsNyArNjcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdHJhY2tFdmVudChFdmVudCopOwogCiAgICAg
ICAgIC8vIEV2YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVu
dmlyb25tZW50LgotICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNj
cmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lLCBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uU3RhdGUqKTsKKyAgICAgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAm
IHNjcmlwdFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSopOwogCiAg
ICAgICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUgb2YgdGhlIGNvbnRleHQuCiAgICAgICAg
IHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA3ZGIwZDhkMzczNzA5YjJlOTczYjY3ZTc3MjNl
NGZjMzExZmJjYTU5Li5iNTZkMzgzNmQ3ZTZiYjFhYzVkMmM4YzVlZDYzMGYwN2MyNzZlZjIyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKQEAg
LTc1LDcgKzc1LDcgQEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVh
dGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwKICAgICB9CiAKICAgICBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUgc3RhdGU7Ci0gICAgU2NyaXB0VmFsdWUgcmVzdWx0ID0g
bV9wcm94eS0+ZXZhbHVhdGUoc291cmNlQ29kZS5zb3VyY2UoKSwgc291cmNlQ29kZS51cmwoKS5z
dHJpbmcoKSwgc291cmNlQ29kZS5zdGFydExpbmUoKSAtIDEsICZzdGF0ZSk7CisgICAgU2NyaXB0
VmFsdWUgcmVzdWx0ID0gbV9wcm94eS0+ZXZhbHVhdGUoc291cmNlQ29kZS5zb3VyY2UoKSwgc291
cmNlQ29kZS51cmwoKS5zdHJpbmcoKSwgV1RGOjp0b1plcm9CYXNlZFRleHRQb3NpdGlvbihzb3Vy
Y2VDb2RlLnN0YXJ0UG9zaXRpb24oKSksICZzdGF0ZSk7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbikgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHN0YXRlLmV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQu
Y3BwIGIvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKaW5kZXggNDJlMjI1YTdmMzJhMWIw
Y2RjMWJjMzQ1MWI2NTQ5N2E0NjEzNTY4OS4uMThmNjA3MTFhNGNkMzAyMzI5YmNhYWQ0ZDk4Yjhh
MjBjN2NlMTJmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKKysr
IGIvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgUGVuZGlu
Z1NjcmlwdDo6flBlbmRpbmdTY3JpcHQoKQogUGFzc1JlZlB0cjxFbGVtZW50PiBQZW5kaW5nU2Ny
aXB0OjpyZWxlYXNlRWxlbWVudEFuZENsZWFyKCkKIHsKICAgICBzZXRDYWNoZWRTY3JpcHQoMCk7
Ci0gICAgbV9zdGFydGluZ0xpbmVOdW1iZXIgPSAwOworICAgIG1fc3RhcnRpbmdQb3NpdGlvbiA9
IFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpOwogICAgIG1fd2F0Y2hpbmdGb3JM
b2FkID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fZWxlbWVudC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmggYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2Ny
aXB0LmgKaW5kZXggNDRlMWU0OTI4Njc2ZDc5NjAyMmRkMjkwNTQ1NzYwMTViN2EyNmU0NC4uMDgz
NTA3YTliOTA5MTZiY2YyODY1MWRmNjI5ZTViMjNiYjk0MjJjOCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vUGVuZGluZ1NjcmlwdC5oCisrKyBiL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQ
b3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQzLDE0ICs0NCwxNCBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgUGVuZGluZ1Nj
cmlwdCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgUGVuZGlu
Z1NjcmlwdCgpCi0gICAgICAgIDogbV9zdGFydGluZ0xpbmVOdW1iZXIoMCkKKyAgICAgICAgOiBt
X3N0YXJ0aW5nUG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAg
ICAgICAgICwgbV93YXRjaGluZ0ZvckxvYWQoZmFsc2UpCiAgICAgewogICAgIH0KIAogICAgIFBl
bmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1NjcmlwdCYgb3RoZXIpCiAgICAgICAgIDogQ2FjaGVk
UmVzb3VyY2VDbGllbnQob3RoZXIpCi0gICAgICAgICwgbV9zdGFydGluZ0xpbmVOdW1iZXIob3Ro
ZXIubV9zdGFydGluZ0xpbmVOdW1iZXIpCisgICAgICAgICwgbV9zdGFydGluZ1Bvc2l0aW9uKG90
aGVyLm1fc3RhcnRpbmdQb3NpdGlvbikKICAgICAgICAgLCBtX3dhdGNoaW5nRm9yTG9hZChvdGhl
ci5tX3dhdGNoaW5nRm9yTG9hZCkKICAgICAgICAgLCBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50
KQogICAgIHsKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICBpZiAodGhpcyA9PSAm
b3RoZXIpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICAgICAgbV9zdGFydGluZ0xp
bmVOdW1iZXIgPSBvdGhlci5tX3N0YXJ0aW5nTGluZU51bWJlcjsKKyAgICAgICAgbV9zdGFydGlu
Z1Bvc2l0aW9uID0gb3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uOwogICAgICAgICBtX3dhdGNoaW5n
Rm9yTG9hZCA9IG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkOwogICAgICAgICBtX2VsZW1lbnQgPSBv
dGhlci5tX2VsZW1lbnQ7CiAgICAgICAgIHNldENhY2hlZFNjcmlwdChvdGhlci5jYWNoZWRTY3Jp
cHQoKSk7CkBAIC03NCw3ICs3NSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBObyBzZXR0
ZXIgbWVhbnMgdGhpcyBpcyBuZXZlciBzZXQgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiAwLgogICAg
IC8vIFRoaXMgaXMgZWl0aGVyIHVubmVjZXNzYXJ5IG9yIGluY29ycmVjdC4KLSAgICBpbnQgc3Rh
cnRpbmdMaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGluZ0xpbmVOdW1iZXI7IH0K
KyAgICBUZXh0UG9zaXRpb24xIHN0YXJ0aW5nUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0aW5nUG9zaXRpb247IH0KIAogICAgIGJvb2wgd2F0Y2hpbmdGb3JMb2FkKCkgY29uc3QgeyBy
ZXR1cm4gbV93YXRjaGluZ0ZvckxvYWQ7IH0KICAgICB2b2lkIHNldFdhdGNoaW5nRm9yTG9hZChi
b29sIGIpIHsgbV93YXRjaGluZ0ZvckxvYWQgPSBiOyB9CkBAIC04OSw3ICs5MCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKIAog
cHJpdmF0ZToKLSAgICBpbnQgbV9zdGFydGluZ0xpbmVOdW1iZXI7IC8vIE9ubHkgdXNlZCBmb3Ig
aW5saW5lIHNjcmlwdCB0YWdzLgorICAgIFRleHRQb3NpdGlvbjEgbV9zdGFydGluZ1Bvc2l0aW9u
OyAvLyBPbmx5IHVzZWQgZm9yIGlubGluZSBzY3JpcHQgdGFncy4KICAgICBib29sIG1fd2F0Y2hp
bmdGb3JMb2FkOwogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9kb20vU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyLmgKaW5kZXggOGIxNjMwNDEyMTA0ZTRlNDVhMDEzMjNkZDIyNTVl
NjU2NGUzNDA0NS4uZDliZjg1Y2FiZjQ1NTMzYzk4MWJlNjBmYzViYTk2OTc3NWU0MjQzYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgKKysrIGIvV2Vi
Q29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgKQEAgLTI3LDEwICsyNywxMCBAQAog
I2RlZmluZSBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXJfaAogCiAjaW5jbHVkZSAiRGVjb2RlZERh
dGFEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNsYXNzIFhT
U0F1ZGl0b3I7CiAKIGNsYXNzIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBEZWNv
ZGVkRGF0YURvY3VtZW50UGFyc2VyIHsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gVGhlc2UgYXJlIHVzZWQgdG8gZXhwb3NlIHRoZSBjdXJyZW50IGxpbmUvY29sdW1uIHRvIHRo
ZSBzY3JpcHRpbmcgc3lzdGVtLgogICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdCA9IDA7CiAKICAgICBYU1NBdWRp
dG9yKiB4c3NBdWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV94c3NBdWRpdG9yOyB9CiAgICAgdm9p
ZCBzZXRYU1NBdWRpdG9yKFhTU0F1ZGl0b3IqIGF1ZGl0b3IpIHsgbV94c3NBdWRpdG9yID0gYXVk
aXRvcjsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBiL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZTA3NzBiYWRiYWZmN2JhMTEwMjBh
ZGRjNzEyNDllZjNkZWM4MjBkNC4uNDBkNWMwNWQzYWI3NTFmZmM2M2I2YjVlYjYyNzU4OTc1MmNm
YmUwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9X
ZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oCkBAIC0xMDIsNyArMTAyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAvLyBXTUxFcnJvckhhbmRsaW5nIHVzZXMgdGhlc2UgZnVu
Y3Rpb25zLgogICAgICAgICB2aXJ0dWFsIGJvb2wgd2VsbEZvcm1lZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3Nhd0Vycm9yOyB9CiAgICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsK
LSAgICAgICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgICAgIFRleHRQ
b3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwogCkBAIC0xMjksNiArMTI5LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGFwcGVuZEZyYWdtZW50U291cmNlKGNv
bnN0IFN0cmluZyYpOwogCisgICAgICAgIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKKyAgICAg
ICAgLy8gVGhlIG1ldGhvZCBpcyB1c2VkIGluIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAg
b25seSwKKyAgICAgICAgLy8gSXQgaXMgbmVpdGhlciB1c2VkIG5vciBpbXBsZW1lbnRlZCBpbiBY
TUxEb2N1bWVudFBhcnNlclF0LmNwcC4KKyAgICAgICAgVGV4dFBvc2l0aW9uMSB0ZXh0UG9zaXRp
b25PbmVCYXNlZCgpIGNvbnN0OworCiAjaWYgVVNFKFFYTUxTVFJFQU0pCiBwcml2YXRlOgogICAg
ICAgICB2b2lkIHBhcnNlKCk7CkBAIC0yMDgsNyArMjEzLDcgQEAgcHVibGljOgogCiAgICAgICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9wZW5kaW5nU2NyaXB0OwogICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gbV9zY3JpcHRFbGVtZW50OwotICAgICAgICBpbnQgbV9zY3Jp
cHRTdGFydExpbmU7CisgICAgICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRTdGFydFBvc2l0aW9u
OwogCiAgICAgICAgIGJvb2wgbV9wYXJzaW5nRnJhZ21lbnQ7CiAgICAgICAgIEF0b21pY1N0cmlu
ZyBtX2RlZmF1bHROYW1lc3BhY2VVUkk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcAppbmRleCBjMDFhNTdlZWY0NTkxOWQ4ZTdmMDI2ZThiNjdjM2M0ZTUzMDA5MjU3Li4z
NzJiN2MxNmM0YTIwNWVkNzU0ZjgyNjI5YTdlOTUxNjExYzc4OTM5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKQEAgLTU2MCw3ICs1NjAsNyBAQCBYTUxEb2N1bWVu
dFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcq
IGZyYW1lVmlldykKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JD
b2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExp
bmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1Jh
bmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9z
Y3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKIHsKQEAgLTU4Nyw3
ICs1ODcsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRG
cmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudAogICAgICwgbV9sYXN0RXJyb3JMaW5l
KDApCiAgICAgLCBtX2xhc3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDAp
Ci0gICAgLCBtX3NjcmlwdFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9u
KFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJh
Z21lbnQodHJ1ZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihzY3JpcHRpbmdQZXJtaXNz
aW9uKQogewpAQCAtODE5LDcgKzgxOSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0
RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhCiAKICAg
ICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1l
bnQuZ2V0KCkpOwogICAgIGlmIChzY3JpcHRFbGVtZW50KQotICAgICAgICBtX3NjcmlwdFN0YXJ0
TGluZSA9IGxpbmVOdW1iZXIoKTsKKyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4
dFBvc2l0aW9uT25lQmFzZWQoKTsKIAogICAgIG1fY3VycmVudE5vZGUtPmRlcHJlY2F0ZWRQYXJz
ZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgpKTsKIApAQCAtOTEwLDcgKzkxMCw3IEBAIHZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCiAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291
cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgp
LCBtX3NjcmlwdFN0YXJ0TGluZSkpOworICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5zY3Jp
cHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlw
dENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikpOwog
CiAgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgogICAg
ICAgICBpZiAoaXNEZXRhY2hlZCgpKQpAQCAtMTM3NiwxNCArMTM3NiwzOSBAQCB2b2lkKiB4bWxE
b2NQdHJGb3JTdHJpbmcoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
LCBjb25zdCBTdHJpbgogCiBpbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25z
dAogeworICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gcHJvYmFibHkgcmV0dXJucyAx
LWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0dXJuIDAtYmFzZWQuCiAgICAgcmV0dXJu
IGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxOwogfQogCiBpbnQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IFRoZSBp
bXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNo
b3VsZCByZXR1cm4gMC1iYXNlZC4KICAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5p
bnB1dC0+Y29sIDogMTsKIH0KIAorVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4
dFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlz
LT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gVGV4dFBvc2l0
aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7CisgICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IHByb2Jh
Ymx5IGNvbnRhaW5zIDEtYmFzZWQgbnVtYmVycywgYnV0IHdlIHRyZWF0IHRoZW0gYXMgMC1iYXNl
ZCwKKyAgICAvLyAgICAgICAgdG8gYmUgY29uc2lzdGVudCB3aXRoIGZpeG1lJ3MgaW4gbGluZU51
bWJlcigpIGFuZCBjb2x1bW5OdW1iZXIKKyAgICAvLyAgICAgICAgbWV0aG9kcy4KKyAgICByZXR1
cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChj
b250ZXh0LT5pbnB1dC0+bGluZSksCisgICAgICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9t
WmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wpKTsKK30KKworLy8gVGhpcyBtZXRob2Qg
aGFzIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiwgaW4gY29udHJhc3QgdG8gdGV4dFBvc2l0aW9u
KCkgbWV0aG9kLgorLy8gSXQgc2hvdWxkIHJlcGxhY2UgdGV4dFBvc2l0aW9uKCkuCitUZXh0UG9z
aXRpb24xIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCgpIGNvbnN0Cit7
CisgICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0ID0gdGhpcy0+Y29udGV4dCgpOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlv
bigpOworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21P
bmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSksCisgICAgICAgIFdURjo6T25lQmFzZWRO
dW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+Y29sKSk7Cit9CisKIHZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkKIHsKICAgICBEb2N1bWVudFBhcnNlcjo6
c3RvcFBhcnNpbmcoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2Vy
UXQuY3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKaW5kZXggMDNiMDgz
ZWMxYzkyNWNjZDUxZTZiMWQyMWM5YjUyZWExNmJjZTljZS4uOTAxY2JjMThmYWZkZmI3NGI0NWYz
M2FiOGM1NzljMjMxNmI3MWI2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQ
YXJzZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKQEAg
LTEwNSw3ICsxMDUsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9j
dW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmlldykKICAgICAsIG1fbGFzdEVycm9y
TGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1Njcmlw
dCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3Np
dGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2lu
Z0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2Ny
aXB0aW5nQWxsb3dlZCkKIHsKQEAgLTEzMiw3ICsxMzIsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6
WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBh
cmVudAogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCiAgICAgLCBtX2xhc3RFcnJvckNvbHVtbigw
KQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0TGluZSgwKQor
ICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3Np
dGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1ZSkKICAgICAsIG1fc2NyaXB0aW5n
UGVybWlzc2lvbihwZXJtaXNzaW9uKQogewpAQCAtMjM0LDYgKzIzNCwxMSBAQCBpbnQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RyZWFtLmNv
bHVtbk51bWJlcigpOwogfQogCitUZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0
UG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jh
c2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2Vk
TnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbHVtbk51bWJlcigpKSk7Cit9CisKIHZvaWQgWE1M
RG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXI6OnN0b3BQYXJzaW5nKCk7CkBAIC01MTgsNyArNTIzLDcgQEAgdm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQoKQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0
RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2Ny
aXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7Cisg
ICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlv
bih0ZXh0UG9zaXRpb24oKSk7CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXByZWNhdGVkUGFyc2Vy
QWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAgLTU5NSw3ICs2MDAsNyBAQCB2b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQoKQogICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNv
dXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwo
KSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2Ny
aXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3Jp
cHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsK
ICAgICB9CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgcG9wQ3VycmVudE5v
ZGUoKTsKQEAgLTcxNiw0ICs3MjEsMyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUR0
ZCgpCiAKIH0KIH0KLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3Bw
CmluZGV4IGQ2NjhkNWVmODhhN2Y3YzBiODY0NmE5N2UwYWVkOTM3YTVlNjgwNGEuLjEzZmYwMGQ2
NDcxOWQxN2M2M2VkNTE3YjFjMzhiMmIzZjlhOTkwNjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTE5MSwxMiArMTkxLDEyIEBAIGJvb2wgSFRNTERv
Y3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKQogewogICAgIEFT
U0VSVChtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKTsKIAotICAgIGludCBzY3JpcHRTdGFydExp
bmUgPSAwOwotICAgIFJlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQnVpbGRl
ci0+dGFrZVNjcmlwdFRvUHJvY2VzcyhzY3JpcHRTdGFydExpbmUpOworICAgIFRleHRQb3NpdGlv
bjEgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlv
bigpOworICAgIFJlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+
dGFrZVNjcmlwdFRvUHJvY2VzcyhzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICAvLyBXZSB3aWxs
IG5vdCBoYXZlIGEgc2NyaXB0UnVubmVyIHdoZW4gcGFyc2luZyBhIERvY3VtZW50RnJhZ21lbnQu
CiAgICAgaWYgKCFtX3NjcmlwdFJ1bm5lcikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlwdEVsZW1lbnQucmVsZWFzZSgpLCBzY3Jp
cHRTdGFydExpbmUpOworICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZShzY3JpcHRF
bGVtZW50LnJlbGVhc2UoKSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiB9CiAKIHZvaWQgSFRNTERv
Y3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQpAQCAtMzk2
LDkgKzM5NiwxMyBAQCBpbnQgSFRNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QK
ICAgICByZXR1cm4gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsKIH0KIAotaW50IEhUTUxEb2N1
bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKK1RleHRQb3NpdGlvbjAgSFRNTERvY3Vt
ZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX3Rva2VuaXpl
ci0+Y29sdW1uTnVtYmVyKCk7CisgICAgaW50IGxpbmVaZXJvQmFzZWQgPSBtX3Rva2VuaXplci0+
bGluZU51bWJlcigpOworICAgIGludCBjb2x1bW5PbmVCYXNlZCA9IG1fdG9rZW5pemVyLT5jb2x1
bW5OdW1iZXIoKTsKKworICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVt
YmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxpbmVaZXJvQmFzZWQpLAorICAgICAgICBXVEY6Ok9uZUJh
c2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uT25lQmFzZWQpLmNvbnZlcnRUb1plcm9C
YXNlZCgpKTsKIH0KIAogYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlw
dHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXgg
ZDk2MjVmMTIxOGI2NzRhNDZkYWUzZTFiMDhkOGJiN2UzYTU0ZTczNS4uMDUwNTNkZjJmMWNiNDU3
NTExZWE3NDY4MWY0MmM3MjJiM2Q2YzlhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5oCkBAIC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGlzRXhlY3V0aW5nU2NyaXB0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTY3Jp
cHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCk7CiAgICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0OworICAgIHZpcnR1
YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdDsKIAogICAgIC8vIEhUTUxTY3Jp
cHRSdW5uZXJIb3N0CiAgICAgdmlydHVhbCB2b2lkIHdhdGNoRm9yTG9hZChDYWNoZWRSZXNvdXJj
ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXggNGY1NGY0
MjkyODcwYWNkNTM4NTRmYzQ3MTA4NzBkZDlkZjE0ZjJkMS4uOTY0ZTU4YTllMGYyZmI4OTJhYjZl
ODM5MmFlOWVhNTdiZDRkZjNmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
U2NyaXB0UnVubmVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXIuY3BwCkBAIC05OCw3ICs5OCw3IEBAIFNjcmlwdFNvdXJjZUNvZGUgSFRNTFNjcmlwdFJ1bm5l
cjo6c291cmNlRnJvbVBlbmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1NjcmlwdCYKICAgICAgICAg
cmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKICAgICB9CiAg
ICAgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwotICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNj
cmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0
aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdMaW5lTnVtYmVyKCkpOworICAgIHJldHVy
biBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50KCksIGRvY3Vt
ZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdQb3Np
dGlvbigpKTsKIH0KIAogYm9vbCBIVE1MU2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3JpcHRSZWFk
eShjb25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCkBAIC0xNzAsMTMgKzE3MCwxMyBAQCB2b2lk
IEhUTUxTY3JpcHRSdW5uZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVu
ZGluZ1NjcmlwdCkKIAogLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggMTAuMi41LjExICJB
biBlbmQgdGFnIHdob3NlIHRhZyBuYW1lIGlzICdzY3JpcHQnIgogLy8gU2NyaXB0IGhhbmRsaW5n
IGxpdmVzIG91dHNpZGUgdGhlIHRyZWUgYnVpbGRlciB0byBrZWVwIHRoZSBlYWNoIGNsYXNzIHNp
bXBsZS4KLWJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+
IHNjcmlwdEVsZW1lbnQsIGludCBzdGFydExpbmUpCitib29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4
ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50LCBjb25zdCBUZXh0UG9zaXRp
b24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewogICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsK
ICAgICAvLyBGSVhNRTogSWYgc2NyaXB0aW5nIGlzIGRpc2FibGVkLCBhbHdheXMganVzdCByZXR1
cm4gdHJ1ZTsKIAogICAgIC8vIFRyeSB0byBleGVjdXRlIHRoZSBzY3JpcHQgZ2l2ZW4gdG8gdXMu
Ci0gICAgcnVuU2NyaXB0KHNjcmlwdEVsZW1lbnQuZ2V0KCksIHN0YXJ0TGluZSk7CisgICAgcnVu
U2NyaXB0KHNjcmlwdEVsZW1lbnQuZ2V0KCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAg
aWYgKGhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSkgewogICAgICAgICBpZiAobV9zY3JpcHRO
ZXN0aW5nTGV2ZWwpCkBAIC0yODgsNyArMjg4LDcgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpy
ZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW4K
IAogLy8gVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8gbWF0Y2ggdGhlIEhUTUw1IGRlZmluaXRpb24g
b2YgInJ1bm5pbmcgYSBzY3JpcHQiCiAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2Vi
LWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3J1bm5pbmctYS1z
Y3JpcHQKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwg
aW50IHN0YXJ0aW5nTGluZU51bWJlcikKK3ZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0
KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlv
bikKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKCFoYXZlUGFyc2luZ0Js
b2NraW5nU2NyaXB0KCkpOwpAQCAtMzE1LDcgKzMxNSw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5l
cjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcikKICAg
ICAgICAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDAwNDcKICAgICAgICAgICAgIC8vIEFTU0VSVChkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNM
b2FkZWQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAg
ICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgp
LCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc3RhcnRpbmdMaW5l
TnVtYmVyKTsKKyAgICAgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQt
PnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQp
LCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQoc291cmNl
Q29kZSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oCmluZGV4IGJlMjFkZDI0MjFiMWQ0NDI3YjA4NDdiMGI5MTFjMWZlOTdjNmY3NjUuLjJkZjI5
NWY5YzEzNTk0ZGVjYjZlZjFmMTAwZTNjZDk1ZDM3OTk0MmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFNjcmlwdFJ1bm5lci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJQZW5kaW5n
U2NyaXB0LmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIApAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRh
Y2goKTsKIAogICAgIC8vIFByb2Nlc3NlcyB0aGUgcGFzc2VkIGluIHNjcmlwdCBhbmQgYW55IHBl
bmRpbmcgc2NyaXB0cyBpZiBwb3NzaWJsZS4KLSAgICBib29sIGV4ZWN1dGUoUGFzc1JlZlB0cjxF
bGVtZW50PiBzY3JpcHRUb1Byb2Nlc3MsIGludCBzY3JpcHRTdGFydExpbmUpOworICAgIGJvb2wg
ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgY29uc3QgVGV4dFBv
c2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICBib29sIGV4ZWN1dGVTY3JpcHRz
V2FpdGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICBib29sIGhhc1NjcmlwdHNXYWl0
aW5nRm9yU3R5bGVzaGVldHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1NjcmlwdHNXYWl0aW5nRm9y
U3R5bGVzaGVldHM7IH0KQEAgLTc2LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlcXVl
c3REZWZlcnJlZFNjcmlwdChFbGVtZW50Kik7CiAgICAgYm9vbCByZXF1ZXN0UGVuZGluZ1Njcmlw
dChQZW5kaW5nU2NyaXB0JiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdm9pZCBydW5TY3JpcHQo
RWxlbWVudCosIGludCBzdGFydGluZ0xpbmVOdW1iZXIpOworICAgIHZvaWQgcnVuU2NyaXB0KEVs
ZW1lbnQqLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAg
IC8vIEhlbHBlcnMgZm9yIGRlYWxpbmcgd2l0aCBIVE1MU2NyaXB0UnVubmVySG9zdAogICAgIHZv
aWQgd2F0Y2hGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmNwcAppbmRleCBhMjIzNmQ1NDRlMjEzYmZjZDYwNGZmMWNjOWE1NmM1ZjQ4YTQ1
ZjYxLi4zNjc5YzcxNzUzODE4NDUyODQwMGY3MDY0YTIxYTJjNzBjZjE4YTliIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC01NSw2ICs1NSw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBp
bnQgdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSA9IC0xOworc3RhdGljIGNvbnN0IFRleHRQ
b3NpdGlvbjAgdW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUwID0gVGV4dFBvc2l0aW9uMDo6YmVs
b3dSYW5nZVBvc2l0aW9uKCk7CitzdGF0aWMgY29uc3QgVGV4dFBvc2l0aW9uMSB1bmluaXRpYWxp
emVkUG9zaXRpb25WYWx1ZTEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KC0x
KSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNlKTsKIAogbmFtZXNwYWNlIHsKIApAQCAtMzMz
LDggKzMzNSw4IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6
ZXIqIHRva2VuaXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVuCiAgICAgLCBtX29yaWdpbmFsSW5z
ZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fc2Vjb25kYXJ5SW5zZXJ0aW9uTW9kZShJ
bml0aWFsTW9kZSkKICAgICAsIG1fdG9rZW5pemVyKHRva2VuaXplcikKLSAgICAsIG1fc2NyaXB0
VG9Qcm9jZXNzU3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCi0gICAgLCBt
X2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUp
CisgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24odW5pbml0aWFsaXplZFBvc2l0
aW9uVmFsdWUxKQorICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24odW5pbml0
aWFsaXplZFBvc2l0aW9uVmFsdWUwKQogICAgICwgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyh1
c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKIHsKIH0KQEAgLTM1Miw4ICszNTQsOCBAQCBIVE1MVHJl
ZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3Vt
ZW50RnJhZ21lbnQqIGZyYQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1v
ZGUpCiAgICAgLCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBt
X3Rva2VuaXplcih0b2tlbml6ZXIpCi0gICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1
bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQotICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0
YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9zY3JpcHRUb1By
b2Nlc3NTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSkKKyAgICAsIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVl
MCkKICAgICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJRdWly
a3MpCiB7CiAgICAgaWYgKGNvbnRleHRFbGVtZW50KSB7CkBAIC00MTUsMTUgKzQxNywxNSBAQCBI
VE1MVHJlZUJ1aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6On5GcmFnbWVudFBhcnNpbmdD
b250ZXh0KCkKIHsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRh
a2VTY3JpcHRUb1Byb2Nlc3MoaW50JiBzY3JpcHRTdGFydExpbmUpCitQYXNzUmVmUHRyPEVsZW1l
bnQ+IEhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24xJiBz
Y3JpcHRTdGFydFBvc2l0aW9uKQogewogICAgIC8vIFVucGF1c2Ugb3Vyc2VsdmVzLCBjYWxsZXJz
IG1heSBwYXVzZSB1cyBhZ2FpbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHNjcmlwdC4KICAgICAvLyBU
aGUgSFRNTDUgc3BlYyBpcyB3cml0dGVuIGFzIHRob3VnaCBzY3JpcHRzIGFyZSBleGVjdXRlZCBp
bnNpZGUgdGhlIHRyZWUKICAgICAvLyBidWlsZGVyLiAgV2UgcGF1c2UgdGhlIHBhcnNlciB0byBl
eGl0IHRoZSB0cmVlIGJ1aWxkZXIsIGFuZCB0aGVuIHJlc3VtZQogICAgIC8vIGJlZm9yZSBydW5u
aW5nIHNjcmlwdHMuCiAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwotICAgIHNjcmlwdFN0YXJ0TGlu
ZSA9IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lOwotICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3Rh
cnRMaW5lID0gdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZTsKKyAgICBzY3JpcHRTdGFydFBv
c2l0aW9uID0gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOworICAgIG1fc2NyaXB0VG9Q
cm9jZXNzU3RhcnRQb3NpdGlvbiA9IHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMTsKICAgICBy
ZXR1cm4gbV9zY3JpcHRUb1Byb2Nlc3MucmVsZWFzZSgpOwogfQogCkBAIC0yMjAxLDcgKzIyMDMs
NyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICBBU1NF
UlQobV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7CiAgICAg
ICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwotICAg
ICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUgPSBtX2xhc3RTY3JpcHRFbGVtZW50
U3RhcnRMaW5lICsgMTsKKyAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlv
biA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbihtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQ
b3NpdGlvbik7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAg
ICAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYgbV9mcmFnbWVudENvbnRleHQuc2Ny
aXB0aW5nUGVybWlzc2lvbigpID09IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCkKICAgICAg
ICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKQEAgLTI3
NTAsNyArMjc1MiwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgbV90cmVlLmluc2VydFNjcmlwdEVsZW1l
bnQodG9rZW4pOwogICAgIG1fdG9rZW5pemVyLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpTY3Jp
cHREYXRhU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25N
b2RlOwotICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUgPSBtX3Rva2VuaXplci0+bGlu
ZU51bWJlcigpOworCisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbiA9IFRleHRQb3NpdGlvbjAo
V1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV90b2tlbml6ZXItPmxpbmVO
dW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpzX2Jhc2UpOworICAgIG1fbGFzdFNjcmlw
dEVsZW1lbnRTdGFydFBvc2l0aW9uID0gcG9zaXRpb247CisKICAgICBzZXRJbnNlcnRpb25Nb2Rl
KFRleHRNb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKaW5kZXgg
ZTYxZmU3MzQ2NmRhMTc4ZDMzMTFkMjc2MjBlNDZiODI4MWMxZTQ1NS4uYmIzNTk2ZGZlZTdmY2Nl
OTJlNzFmMmUxZmEwZTVmMTVlOTQ4YjE4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRTdGFjay5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCIKICNpbmNsdWRlICJIVE1MVG9r
ZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnN0
cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRNTFRva2VuJik7CiAKICAgICAvLyBNdXN0
IGJlIGNhbGxlZCB3aGVuIHBhcnNlciBpcyBwYXVzZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNl
ciBhZ2Fpbi4KLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nlc3MoaW50
JiBzY3JpcHRTdGFydExpbmUpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlwdFRv
UHJvY2VzcyhUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIC8vIERv
bmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KICAgICB2b2lkIGZpbmlzaGVkKCk7CkBAIC0y
NDYsMTMgKzI0NywxMiBAQCBwcml2YXRlOgogICAgIEhUTUxUb2tlbml6ZXIqIG1fdG9rZW5pemVy
OwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0VG9Qcm9jZXNzOyAvLyA8c2NyaXB0PiB0
YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUgcmVzdW1pbmcgdGhlIHBhcnNlci4KLSAg
ICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7IC8vIFN0YXJ0aW5nIGxpbmUgbnVtYmVy
IG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KKyAgICBUZXh0UG9zaXRpb24x
IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsgLy8gU3RhcnRpbmcgbGluZSBudW1iZXIg
b2YgdGhlIHNjcmlwdCB0YWcgbmVlZGluZyBwcm9jZXNzaW5nLgogCiAgICAgLy8gRklYTUU6IFdl
IHByb2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoaXMgbWVtYmVyLiAgT3JpZ2luYWxseSwgaXQgd2Fz
CiAgICAgLy8gY3JlYXRlZCB0byBzZXJ2aWNlIHRoZSBsZWdhY3kgdHJlZSBidWlsZGVyLCBidXQg
aXQgc2VlbXMgdG8gYmUgdXNlZCBmb3IKICAgICAvLyBzb21lIG90aGVyIHRoaW5ncyBub3cuCi0g
ICAgaW50IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmU7Ci0gICAgCisgICAgVGV4dFBvc2l0
aW9uMCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbjsKICAgICBib29sIG1fdXNlUHJl
SFRNTDVQYXJzZXJRdWlya3M7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3MDFhOGZlNThhMTM5NmNj
YzY3NTBiMzI4M2M5NmVlYjg2ZTlmYWYwLi5hMDM0NTYzNWIxNjhkNjhiYzcyN2Y2ZmQ1ODA0MmVm
ZTVkMWU1MjNlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMC0wNyAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2Ny
aXB0IGNvbHVtbiBwb3NpdGlvbiB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVu
Z2luZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUy
NzEKKworICAgICAgICBSZXBsYWNlcyBzY3JpcHQgbGluZSBudW1iZXIgd2l0aCBUZXh0UG9zaXRp
b24gc3RydWN0dXJlLgorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKToKKwogMjAx
MC0xMC0wNiAgQ2hyaXMgR3VpbGxvcnkgIDxjaHJpcy5ndWlsbG9yeUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuY3BwCmluZGV4IDlkYWYyNmYxZmY3ODY3OTAxYjAwNmU1MzEzZWJlODE0YWY1ZjM3YTEu
LjMzMTI1MGRiMzJkMzhjZjkyYjIwODUyZTIzMTNmOTFlNjE4YTAyMDUgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTc1Myw4ICs3NTMsOSBAQCB2b2lkIFdlYkZyYW1lSW1w
bDo6YmluZFRvV2luZG93T2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgTlBPYmplY3QqIG9i
amVjdCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHQoY29uc3QgV2ViU2NyaXB0
U291cmNlJiBzb3VyY2UpCiB7CisgICAgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbihXVEY6Ok9uZUJh
c2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIFdURjo6T25lQmFz
ZWROdW1iZXI6OnNfYmFzZSk7CiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQo
Ci0gICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHNvdXJj
ZS5zdGFydExpbmUpKTsKKyAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291
cmNlLnVybCwgcG9zaXRpb24pKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoCkBAIC03NjQsOCArNzY1LDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6
OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCiAgICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+IHNvdXJjZXM7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU291cmNlczsg
KytpKSB7CisgICAgICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZXNJbltpXS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2Vk
TnVtYmVyOjpzX2Jhc2UpOwogICAgICAgICBzb3VyY2VzLmFwcGVuZChTY3JpcHRTb3VyY2VDb2Rl
KAotICAgICAgICAgICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHNvdXJj
ZXNJbltpXS5zdGFydExpbmUpKTsKKyAgICAgICAgICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3Vy
Y2VzSW5baV0udXJsLCBwb3NpdGlvbikpOwogICAgIH0KIAogICAgIG1fZnJhbWUtPnNjcmlwdCgp
LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElkLCBzb3VyY2VzLCBleHRlbnNpb25Hcm91
cCk7CkBAIC04MTcsOCArODE5LDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmNvbGxlY3RHYXJiYWdl
KCkKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRS
ZXR1cm5WYWx1ZSgKICAgICBjb25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBU
ZXh0UG9zaXRpb24xIHBvc2l0aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZElu
dChzb3VyY2Uuc3RhcnRMaW5lKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6c19iYXNlKTsKICAgICBy
ZXR1cm4gbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoCi0gICAgICAgIFNjcmlwdFNv
dXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHNvdXJjZS5zdGFydExpbmUpKS52OFZh
bHVlKCk7CisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmws
IHBvc2l0aW9uKSkudjhWYWx1ZSgpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBWOCBjb250ZXh0IGZv
ciB0aGlzIGZyYW1lLCBvciBhbiBlbXB0eSBoYW5kbGUgaWYgdGhlcmUgaXMgbm9uZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71204</attachid>
            <date>2010-10-19 15:02:38 -0700</date>
            <delta_ts>2010-10-20 07:47:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20101020020235.patch</filename>
            <type>text/plain</type>
            <size>59982</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkZDA2NjIyYWY1ZDVjNDAyNzVjOWEzYTkxNTQ3YWMyM2NiZWRjM2RiLi5l
ZDM2NzFiNzg3ODg3NGVhNWE5NDBmMWY3OGYyMDdjYTRjYzEyYzRjIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMTAtMTAtMTkgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL3RleHQvVGV4dFBvc2l0aW9uLmg6
IEFkZGVkLgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OlRleHRQb3NpdGlvbik6CisgICAg
ICAgIChXVEY6OlRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6
VGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24pOgorICAgICAgICAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpaZXJvQmFzZWROdW1i
ZXI6Olplcm9CYXNlZE51bWJlcik6CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6emVy
b0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKToKKyAgICAg
ICAgKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiZWxvd0Jhc2UpOgorICAgICAgICAoV1RGOjpPbmVC
YXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1i
ZXI6Ok9uZUJhc2VkTnVtYmVyKToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6Om9uZUJh
c2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRBc1plcm9CYXNl
ZEludCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpjb252ZXJ0VG9aZXJvQmFzZWQp
OgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSk6CisgICAgICAgIChXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpiZWxvd0Jhc2UpOgorICAgICAgICAoV1RGOjp0b1plcm9CYXNlZFRleHRQ
b3NpdGlvbik6CisgICAgICAgIChXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRpb24pOgorICAgICAg
ICAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKToKKwogMjAxMC0xMC0x
OSAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIEtpbHplci4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggN2VlMzY4YWRjMjlk
Njg0MjkxODg0MTI3ZTQ2Y2U4NDBmMWI0ZjNkYi4uYWQ0ZjVhYjRkNWZlZDhkOTliZGQ4Mzk1ZjAw
ZmEwYTI3ODFkYzkxNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTUxNyw2ICs1MTcsNyBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCBcCisJSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dU
RlN0cmluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgXApkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggMTE5MGE5Njk4MjU2MzNiZDE0YWU1OWU5ZWZi
N2M4ZDI3ODAxYmE2Zi4uOGExZDdkMjMxYTljYzg0NzQ1ZDc5OTk0Y2Y5OGQwNzZmYjljNjRmYyAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC00NjAsNiArNDYwLDcgQEAKICAgICAg
ICAgICAgICd3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCcsCiAgICAgICAgICAgICAnd3RmL3RleHQv
U3RyaW5nSW1wbC5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCcs
CisgICAgICAgICAgICAnd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgnLAogICAgICAgICAgICAgJ3d0
Zi90ZXh0L1dURlN0cmluZy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi90ZXh0L1dURlN0cmluZy5o
JywKICAgICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRvci5oJywKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQ1NjI4YTllZTdkZTNhNTZiNTE1NGZlY2Q4OGUyMWM3OWRiYjM3N2EuLmY5NWZhOWNkMTNh
MzQyYmQ0NDg0ZWY1OTdhNTA0N2FjYTIzMGM0YjYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTU0LDYg
KzU1NCw3IEBACiAJCUUxRUU3OTNEMEQ2QzlCOTIwMEZFQTNCQSAvKiBUaHJlYWRpbmdQdGhyZWFk
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVF
NzkzQzBENkM5QjkyMDBGRUEzQkEgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwICovOyB9OwogCQlF
MUVGNzlBQTBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVGNzlBODBDRTk3QkE2MDA4OEQ1MDAgLyogVVRG
OC5jcHAgKi87IH07CiAJCUU0OEUwRjJEMEY4MjE1MTcwMEE4Q0EzNyAvKiBGYXN0QWxsb2NCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhFMEYy
QzBGODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzQkQzMUVEMTI2NzM1NzcwMDY1NDY3RiAv
KiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEYzQkQzMUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTFCNDQ3QTBFQ0NE
NzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFCNDQ3OTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0
cmFzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIC8q
IEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCkBAIC0xMTQyLDYgKzExNDMsNyBAQAogCQlF
MUVGNzlBODBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVVEY4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTFFRjc5QTkwQ0U5N0JBNjAwODhENTAwIC8qIFVURjguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVVRGOC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDhFMEYy
QzBGODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGYXN0QWxsb2NCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUYzQkQzMUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGV4dFBvc2l0aW9uLmg7IHBhdGggPSB0ZXh0L1RleHRQ
b3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUJCMkJDNTAzMEY3NzIx
MDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgfTsKIAkJRjVDMjkwRTYwMjg0Rjk4RTAxODYzNUNBIC8qIEphdmFTY3Jp
cHRDb3JlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEphdmFTY3JpcHRDb3JlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgfTsKIAkJRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25m
aWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpAQCAtMTg1Nyw2
ICsxODU5LDcgQEAKIAkJCQk4NjhCRkEwNzExN0NFRkQxMDBCOTA4QjEgLyogU3RyaW5nSW1wbC5o
ICovLAogCQkJCTg2Qjk5QUUyMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdJbXBsQmFzZS5oICov
LAogCQkJCTg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCAqLywK
KwkJCQlGM0JEMzFEMDEyNjczMDE4MDA2NTQ2N0YgLyogVGV4dFBvc2l0aW9uLmggKi8sCiAJCQkJ
ODY4QkZBMTUxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5jcHAgKi8sCiAJCQkJODY4QkZB
MTYxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5oICovLAogCQkJKTsKQEAgLTIzNDYsNiAr
MjM0OSw3IEBACiAJCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3Rp
Y3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzRjVDREMxMjY5MjI5QjAw
NDkxOTFFIC8qIE51bGxQdHIuaCBpbiBIZWFkZXJzICovLAorCQkJCUYzQkQzMUVEMTI2NzM1Nzcw
MDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmggYi9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9UZXh0UG9zaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2RjNTk0OTBkZGFjYWIxZDdlYTk4OTFm
Zjc1MTUxZmZkNTYwYjZmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFRleHRQb3NpdGlvbl9oCisjZGVmaW5lIFRleHRQb3NpdGlvbl9oCisKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLyoKKyAqIFRleHQgUG9zaXRp
b24KKyAqCisgKiBUZXh0UG9zaXRpb24gc3RydWN0dXJlIHNwZWNpZmllcyBjb29yZGluYXRlcyB3
aXRoaW4gYW4gdGV4dCByZXNvdXJjZS4gSXQgaXMgdXNlZCBtb3N0bHkKKyAqIGZvciBzYXZpbmcg
c2NyaXB0IHNvdXJjZSBwb3NpdGlvbi4KKyAqCisgKiBMYXRlciBUZXh0UG9zaXRpb24wIGFuZCBU
ZXh0UG9zaXRpb24xIGFuZCBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUgbWVyZ2VkIHRvZ2V0aGVy
IHF1aXRlIGVhc2lseS4KKyAqCisgKiAwLWJhc2VkIGFuZCAxLWJhc2VkCisgKgorICogTGluZSBh
bmQgY29sdW1uIG51bWJlcnMgY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgemVyby1iYXNlZCBvciAx
LWJhc2VkLiBTaW5jZQorICogYm90aCBwcmFjdGljZXMgY29leGlzdCBpbiBXZWJLaXQgc291cmNl
IGJhc2UsICdpbnQnIHR5cGUgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGgKKyAqIGEgZGVkaWNhdGVk
IHdyYXBwZXIgdHlwZXMsIHNvIHRoYXQgY29tcGlsZXIgaGVscGVkIHVzIHdpdGggdGhpcyBhbWJp
Z3VpdHkuCisgKgorICogSGVyZSB3ZSBpbnRyb2R1Y2UgMiB0eXBlcyBvZiBudW1iZXJzOiBaZXJv
QmFzZWROdW1iZXIgYW5kIE9uZUJhc2VkTnVtYmVyIGFuZAorICogMiBjb3JyZXNwb25kaW5nIHR5
cGVzIG9mIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUuIFdoaWxlIG9ubHkgb25lIHR5cGUgb3VnaHQg
dG8gYmUgZW5vdWdoLAorICogdGhpcyBpcyBkb25lIHRvIGtlZXAgdHJhbnNpdGlvbiB0byB0aGUg
bmV3IHR5cGVzIGFzIHRyYW5zcGFyZW50IGFzIHBvc3NpYmxlOgorICogZS5nLiBpbiBhcmVhcyB3
aGVyZSAwLWJhc2VkIGludGVnZXJzIGFyZSB1c2VkLCBUZXh0UG9zaXRpb24wIHNob3VsZCBiZSBp
bnRyb2R1Y2VkLiBUaGlzCisgKiB3YXkgYWxsIGNoYW5nZXMgd2lsbCByZW1haW4gdHJhY2thYmxl
LgorICoKKyAqIExhdGVyIGJvdGggbnVtYmVyIHR5cGVzIGNhbiBiZSBtZXJnZWQgaW4gb25lIHR5
cGUgcXVpdGUgZWFzaWx5LgorICoKKyAqIEZvciB0eXBlIHNhZmV0eSBhbmQgZm9yIHRoZSBmdXR1
cmUgdHlwZSBtZXJnZSBpdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgb3BlcmF0aW9ucyBpbiBBUEkK
KyAqIHRoYXQgYWNjZXB0IG9yIHJldHVybiBpbnRlZ2VyIGhhdmUgYSBuYW1lIGV4cGxpY2l0bHkg
ZGVmaW5pbmcgYmFzZSBvZiBpbnRlZ2VyLiBGb3IgdGhpcyByZWFzb24KKyAqIGludC1yZWNlaXZp
bmcgY29uc3RydWN0b3JzIGFyZSBoaWRkZW4gZnJvbSBBUEkuCisgKi8KKwordGVtcGxhdGU8dHlw
ZW5hbWUgTlVNQkVSPgorY2xhc3MgVGV4dFBvc2l0aW9uIHsKK3B1YmxpYzoKKyAgICBUZXh0UG9z
aXRpb24oTlVNQkVSIGxpbmUsIE5VTUJFUiBjb2x1bW4pCisgICAgICAgIDogbV9saW5lKGxpbmUp
CisgICAgICAgICwgbV9jb2x1bW4oY29sdW1uKQorICAgIHsKKyAgICB9CisgICAgVGV4dFBvc2l0
aW9uKCkge30KKworICAgIC8vIEEgJ21pbmltdW0nIHZhbHVlIG9mIHBvc2l0aW9uLCB1c2VkIGFz
IGEgZGVmYXVsdCB2YWx1ZS4KKyAgICBzdGF0aWMgVGV4dFBvc2l0aW9uPE5VTUJFUj4gbWluaW11
bVBvc2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPE5VTUJFUj4oTlVNQkVSOjpiYXNlKCks
IE5VTUJFUjo6YmFzZSgpKTsgfQorCisgICAgLy8gQSB2YWx1ZSB3aXRoIGxpbmUgdmFsdWUgbGVz
cyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxlIHBvc2l0aW9uLgorICAgIHN0
YXRpYyBUZXh0UG9zaXRpb248TlVNQkVSPiBiZWxvd1JhbmdlUG9zaXRpb24oKSB7IHJldHVybiBU
ZXh0UG9zaXRpb248TlVNQkVSPihOVU1CRVI6OmJlbG93QmFzZSgpLCBOVU1CRVI6OmJhc2UoKSk7
IH0KKworICAgIE5VTUJFUiBtX2xpbmU7CisgICAgTlVNQkVSIG1fY29sdW1uOworfTsKKworY2xh
c3MgT25lQmFzZWROdW1iZXI7CisKKy8vIEFuIGludCB3cmFwcGVyIHRoYXQgYWx3YXlzIHJlbWlu
ZHMgeW91IHRoYXQgdGhlIG51bWJlciBzaG91bGQgYmUgMC1iYXNlZAorY2xhc3MgWmVyb0Jhc2Vk
TnVtYmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGZyb21aZXJvQmFz
ZWRJbnQoaW50IHplcm9CYXNlZEludCkgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyKHplcm9CYXNl
ZEludCk7IH0KKworICAgIFplcm9CYXNlZE51bWJlcigpIHt9CisKKyAgICBpbnQgemVyb0Jhc2Vk
SW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgT25lQmFzZWROdW1iZXIgY29u
dmVydFRvT25lQmFzZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBaZXJvQmFzZWROdW1iZXIgYmFz
ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGJlbG93QmFzZSgp
IHsgcmV0dXJuIC0xOyB9CisKK3ByaXZhdGU6CisgICAgWmVyb0Jhc2VkTnVtYmVyKGludCB2YWx1
ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKworLy8gQW4gaW50
IHdyYXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBi
ZSAxLWJhc2VkCitjbGFzcyBPbmVCYXNlZE51bWJlciB7CitwdWJsaWM6CisgICAgc3RhdGljIE9u
ZUJhc2VkTnVtYmVyIGZyb21PbmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9u
ZUJhc2VkTnVtYmVyKG9uZUJhc2VkSW50KTsgfQorICAgIE9uZUJhc2VkTnVtYmVyKCkge30KKwor
ICAgIGludCBvbmVCYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBpbnQg
Y29udmVydEFzWmVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KKyAg
ICBaZXJvQmFzZWROdW1iZXIgY29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVy
b0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQorCisgICAgc3Rh
dGljIE9uZUJhc2VkTnVtYmVyIGJhc2UoKSB7IHJldHVybiAxOyB9CisgICAgc3RhdGljIE9uZUJh
c2VkTnVtYmVyIGJlbG93QmFzZSgpIHsgcmV0dXJuIDA7IH0KKworcHJpdmF0ZToKKyAgICBPbmVC
YXNlZE51bWJlcihpbnQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkge30KKyAgICBpbnQgbV92YWx1
ZTsKK307CisKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPFplcm9CYXNlZE51bWJlcj4gVGV4dFBvc2l0
aW9uMDsKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPE9uZUJhc2VkTnVtYmVyPiBUZXh0UG9zaXRpb24x
OworCitpbmxpbmUgVGV4dFBvc2l0aW9uMCB0b1plcm9CYXNlZFRleHRQb3NpdGlvbihjb25zdCBU
ZXh0UG9zaXRpb24xJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChwb3Np
dGlvbi5tX2xpbmUuY29udmVydFRvWmVyb0Jhc2VkKCksIHBvc2l0aW9uLm1fY29sdW1uLmNvbnZl
cnRUb1plcm9CYXNlZCgpKTsKK30KKworaW5saW5lIFRleHRQb3NpdGlvbjEgdG9PbmVCYXNlZFRl
eHRQb3NpdGlvbihjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4g
VGV4dFBvc2l0aW9uMShwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvT25lQmFzZWQoKSwgcG9zaXRp
b24ubV9jb2x1bW4uY29udmVydFRvT25lQmFzZWQoKSk7Cit9CisKK2lubGluZSBPbmVCYXNlZE51
bWJlciBaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChtX3ZhbHVlICsgMSk7Cit9CisK
K30KKwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb24wOwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb24x
OworCisjZW5kaWYgLy8gVGV4dFBvc2l0aW9uX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDZlMDk2MTA5NzI3Nzg5NmZkZTE5NDAwMzcz
MGE5MThlN2Q4YTNlNS4uNTI0MTBjOGU1NDgyOTc4Yjg0OGQ4MTlmNjQ2YjFjNGYzYmIyYmY5OCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw3OSBAQAorMjAxMC0xMC0xOSAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFp
bC5jb20+CisKKyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2NyaXB0IGNvbHVt
biBwb3NpdGlvbiB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVuZ2luZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNzEKKworICAg
ICAgICBSZXBsYWNlcyBsaW5lIG51bWJlciB3aXRoIFRleHRQb3NpdGlvbiBzdHJ1Y3Qgc28gdGhh
dCBzY3JpcHQgZW5naW5lCisgICAgICAgIGdldHMgc2NyaXB0IHN0YXJ0aW5nIGxpbmUvY29sdW1u
LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmg6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlwdFNvdXJjZUNvZGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjpldmVudEhhbmRsZXJQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29u
dHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRTb3VyY2VDb2RlOjpzdGFydExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291
cmNlQ29kZTo6c3RhcnRQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZl
bnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpW
OExhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVu
ZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6OmNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6cnVuU2NyaXB0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5OjpydW5TY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIp
OgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3Jp
cHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpzdGFydGlu
Z1Bvc2l0aW9uKToKKyAgICAgICAgKiBkb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmg6Cisg
ICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogZG9tL1hNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
OjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6Omxp
bmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVC
YXNlZCk6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgICog
aHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVy
Ojpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0
UnVubmVyOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJ1
blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVC
dWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmg6CisKIDIwMTAtMTAtMDYgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvdGV4dC9UZXh0UG9zaXRpb24uaCBiL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYw
MDk4NDZlYTA1MmRmYmZmMDZhNDA5ZjIxOTlhNzAyMmU4OTdkNAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKQEAgLTAs
MCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1RleHRQb3NpdGlvbl9oCisjZGVmaW5lIFdl
YkNvcmVfRldEX1RleHRQb3NpdGlvbl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGV4dFBv
c2l0aW9uLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
U291cmNlQ29kZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgKaW5k
ZXggMzJkNjI5OGNkYmRhNzcyZGFhMTNlMTAzM2UzY2YwYWE0MGY1OTRiMi4uMDkyZWViOGYwOGEz
MjlhMzkxZDk4NzE2ZGZlZGQ5OTk2NTYwODhjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
b3VyY2VDb2RlLmgKQEAgLTM1LDE1ICszNSwxNiBAQAogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZVBy
b3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJL
VVJMLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNv
ZGUgewogcHVibGljOgotICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0
U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgp
LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWlu
aW11bVBvc2l0aW9uKCkpCiAgICAgICAgIDogbV9wcm92aWRlcihTdHJpbmdTb3VyY2VQcm92aWRl
cjo6Y3JlYXRlKHNvdXJjZSwgdXJsLmlzTnVsbCgpID8gU3RyaW5nKCkgOiB1cmwuc3RyaW5nKCkp
KQotICAgICAgICAsIG1fY29kZShtX3Byb3ZpZGVyLCBzdGFydExpbmUpCisgICAgICAgICwgbV9j
b2RlKG1fcHJvdmlkZXIsIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpCiAgICAg
ICAgICwgbV91cmwodXJsKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxl
ZEFjdGlvbi5jcHAKaW5kZXggZGNkMGJiMzM3NzE4MTMxODQyMGMxMDczYmUyNTFhOWU1ODRiYTRi
Ny4uNzA4ZmJlNjdmZTk0ZDc3MjIxMmM4YmMzZDI3ZGUxOGJkNTEwMTJjYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQsIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jLCBpbnQg
YXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSkKICAgICA6IG1fY29udGV4dChjb250
ZXh0KQotICAgICwgbV9jb2RlKFN0cmluZygpLCBLVVJMKCksIDApCisgICAgLCBtX2NvZGUoU3Ry
aW5nKCksIEtVUkwoKSwgVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7CiAg
ICAgbV9mdW5jdGlvbiA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jKTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNDkwNGE0ZTY1
ZmRlOWNiM2JmNDNiYmE1NGE1YjE4ZDJhZjc4MmQxMC4uYjlkMTA3NWQyNDM1MDBjMTI0OTYwMDVh
NWNlYzhmZmNlNmZmNjViZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRD
b250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwCkBAIC0yNjIsMjAgKzI2MiwxMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTaG91bAogICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShvYmplY3QpOwogfQogCi1pbnQgU2NyaXB0Q29udHJvbGxlcjo6ZXZl
bnRIYW5kbGVyTGluZU51bWJlcigpIGNvbnN0CitUZXh0UG9zaXRpb24wIFNjcmlwdENvbnRyb2xs
ZXI6OmV2ZW50SGFuZGxlclBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIqIHBhcnNlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1bWVu
dFBhcnNlcigpOwogICAgIGlmIChwYXJzZXIpCi0gICAgICAgIHJldHVybiBwYXJzZXItPmxpbmVO
dW1iZXIoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50
SGFuZGxlckNvbHVtbk51bWJlcigpIGNvbnN0Ci17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyKiBwYXJzZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIoKTsKLSAgICBpZiAocGFyc2VyKQotICAgICAgICByZXR1cm4gcGFyc2VyLT5jb2x1bW5OdW1i
ZXIoKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHBhcnNlci0+dGV4dFBvc2l0aW9u
KCk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOwogfQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggNjNmMWMxN2RmNDU2NTYxZGMy
YWMzMWE0YmQ0NjQzYjlmODNmMmQ4Mi4uZDA5M2YzOTkwOGE2NDRjZWQ2NzBlZWIwZDM4NTA2ODUy
ZWVmYTBkYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE1NSw4
ICsxNTUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50Kik7
CiAKLSAgICBpbnQgZXZlbnRIYW5kbGVyTGluZU51bWJlcigpIGNvbnN0OwotICAgIGludCBldmVu
dEhhbmRsZXJDb2x1bW5OdW1iZXIoKSBjb25zdDsKKyAgICBUZXh0UG9zaXRpb24wIGV2ZW50SGFu
ZGxlclBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxi
YWNrKGJvb2wgcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJDYWxs
YmFjayA9IHByb2Nlc3NpbmdUaW1lckNhbGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJlbnRs
eSB3ZSBkb24ndCB1c2UgdGhlIHBhcmFtZXRlciB3b3JsZCBhdCBhbGwuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAppbmRleCA3MmRmNzlkZWQzZWQ0N2NmZjFh
MjdiNTk1M2EzNTk5NjNjNzdhNjMwLi5iNDZmYzVhNmQ1NjNiYzlkNmQ0ZDRlNmY2MzNhMTI5Y2Y5
OTEzNmUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVu
ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAK
QEAgLTUwLDggKzUwLDggQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICBpZiAoYXR0ci0+
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAxOwot
ICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOworICAgIC8vIEZJWE1FOiBWZXJ5IHN0cmFuZ2U6IHdl
IGluaXRpYWxpemUgemVyby1iYXNlZCBudW1iZXIgd2l0aCAnMScuCisgICAgVGV4dFBvc2l0aW9u
MCBwb3NpdGlvbihXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCgxKSwgV1RG
OjpaZXJvQmFzZWROdW1iZXI6OmJhc2UoKSk7CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKIAogICAg
IGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7CkBAIC02NCwx
MiArNjQsMTEgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICB9CiAKLSAgICAgICAgbGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2
ZW50SGFuZGxlckxpbmVOdW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29u
dHJvbGxlci0+ZXZlbnRIYW5kbGVyQ29sdW1uTnVtYmVyKCk7CisgICAgICAgIHBvc2l0aW9uID0g
c2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKICAgICAgICAgc291cmNl
VVJMID0gbm9kZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmco
KSwgbm9kZS0+aXNTVkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7Cisg
ICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5z
dHJpbmcoKSwgbm9kZS0+aXNTVkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwg
cG9zaXRpb24sIFdvcmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKIH0KIAogUGFzc1Jl
ZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZy
YW1lKiBmcmFtZSwgQXR0cmlidXRlKiBhdHRyKQpAQCAtODEsMTAgKzgwLDYgQEAgUGFzc1JlZlB0
cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1l
KiBmcmFtZSwgQXR0cmkKICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwot
ICAgIFN0cmluZyBzb3VyY2VVUkw7Ci0KICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250
cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+Y2Fu
RXhlY3V0ZVNjcmlwdHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTk0LDEwICs4OSw5IEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRl
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpCiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhh
bmRsZXJMaW5lTnVtYmVyKCk7Ci0gICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+
ZXZlbnRIYW5kbGVyQ29sdW1uTnVtYmVyKCk7Ci0gICAgc291cmNlVVJMID0gZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpOwotICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpj
cmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpLT5pc1NW
R0RvY3VtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgVGV4dFBvc2l0
aW9uMCBwb3NpdGlvbiA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlclBvc2l0aW9uKCk7
CisgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmco
KTsKKyAgICByZXR1cm4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFt
ZSgpLnN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpLCBhdHRyLT52
YWx1ZSgpLCBzb3VyY2VVUkwsIHBvc2l0aW9uLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldv
cmxkKSk7CiB9CiAKIFN0cmluZyBldmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQqIGRv
Y3VtZW50LCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
b3VyY2VDb2RlLmgKaW5kZXggZGJjOWQ1ZTZmYzYwMDdmY2ZkZDY2MDI0ZGIwNzgyNmM2NjI2M2I1
Yi4uMjQ3ODE1MWU2ZjU0ZmM3NTAzOGYwNDFkZWM5ODBkN2E3NTZkMmFkZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKQEAgLTM1LDE2ICszNSwxNyBAQAogI2luY2x1ZGUg
IkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAgIFNjcmlw
dFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwo
KSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcm
IHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0UG9zaXRpb24xJiBz
dGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgICAg
IDogbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCiAgICAgICAg
ICwgbV91cmwodXJsKQotICAgICAgICAsIG1fc3RhcnRMaW5lKHN0YXJ0TGluZSkKKyAgICAgICAg
LCBtX3N0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbikKICAgICB7CiAgICAgfQogCkBAIC01NCw3
ICs1NSw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3NvdXJjZShjcy0+c2NyaXB0KCkpCiAgICAg
ICAgICwgbV9jYWNoZWRTY3JpcHQoY3MpCiAgICAgICAgICwgbV91cmwoUGFyc2VkVVJMU3RyaW5n
LCBjcy0+dXJsKCkpCi0gICAgICAgICwgbV9zdGFydExpbmUoMSkKKyAgICAgICAgLCBtX3N0YXJ0
UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgewogICAgIH0K
IApAQCAtNjMsMTMgKzY0LDE0IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3Jp
cHQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC5nZXQoKTsgfQogICAgIGNvbnN0IEtV
UkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgaW50IHN0YXJ0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lOyB9CisgICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsgfQorICAgIGNvbnN0
IFRleHRQb3NpdGlvbjEmIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9z
aXRpb247IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zb3VyY2U7CiAgICAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKICAgICBLVVJMIG1fdXJs
OwotICAgIGludCBtX3N0YXJ0TGluZTsKKyAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRQb3NpdGlv
bjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
TGF6eUV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDdmMTNjNWE4ZmIyN2QzM2JiZjFkMzQxMGEwMTNl
YmM3OTVkOTNkMjMuLjdmNDYzMzMwNjJkNmZlYjdiZTlmMTc5NjM1NmM2YjA1Y2IzY2I4ZjggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAtNDEsMTQg
KzQxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhMYXp5RXZlbnRMaXN0ZW5lcjo6
VjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NW
R0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGludCBs
aW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdv
cmxkQ29udGV4dCkKK1Y4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29u
c3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBj
b2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlv
biwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCiAgICAgOiBWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcih0cnVlLCB3b3JsZENvbnRleHQpCiAgICAgLCBtX2Z1bmN0aW9uTmFt
ZShmdW5jdGlvbk5hbWUpCiAgICAgLCBtX2lzU1ZHRXZlbnQoaXNTVkdFdmVudCkKICAgICAsIG1f
Y29kZShjb2RlKQogICAgICwgbV9zb3VyY2VVUkwoc291cmNlVVJMKQotICAgICwgbV9saW5lTnVt
YmVyKGxpbmVOdW1iZXIpCi0gICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCisgICAg
LCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogewogfQogCkBAIC0xMTQsNyArMTEzLDcgQEAgdm9pZCBW
OExhenlFdmVudExpc3RlbmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKICAgICAvLyBJbnNlcnQgJ1xuJyBvdGhlcndpc2UgLy8tc3R5bGUg
Y29tbWVudHMgY291bGQgYnJlYWsgdGhlIGhhbmRsZXIuCiAgICAgY29kZS5hcHBlbmQoICAiXG59
KS5jYWxsKHRoaXMsIGV2dCk7fX19fSkiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNv
ZGVFeHRlcm5hbFN0cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5h
bFN0cmluZywgbV9zb3VyY2VVUkwsIG1fbGluZU51bWJlcik7CisgICAgdjg6OkhhbmRsZTx2ODo6
U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmlu
ZywgbV9zb3VyY2VVUkwsIG1fcG9zaXRpb24pOwogICAgIGlmICghc2NyaXB0LklzRW1wdHkoKSkg
ewogICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHByb3h5LT5ydW5TY3JpcHQo
c2NyaXB0LCBmYWxzZSk7CiAgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCmluZGV4IGYxNzRkMjNiZjEzMWIwMTBl
ZTRmNTliYzQyNTI3ZWU4Njc0YTA2MDguLjA4NDY3ZmU1ZjdhYjk3MDE0ZDk0NTNhZjI2ZmEzZjE2
NmNlZTYzYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0
ZW5lci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJW
OEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsOSArNDYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgLy8gQSBWOExhenlFdmVudExpc3RlbmVyIGlzIGFsd2F5cyBhIEhUTUwgZXZlbnQgaGFuZGxl
ci4KICAgICBjbGFzcyBWOExhenlFdmVudExpc3RlbmVyIDogcHVibGljIFY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6
eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBp
c1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBp
bnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxl
JiB3b3JsZENvbnRleHQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlz
dGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50
LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBjb25zdCBUZXh0
UG9zaXRpb24wJiBwb3NpdGlvbiwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhMYXp5RXZl
bnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGlzU1ZHRXZlbnQsIGNvZGUsIHNvdXJjZVVSTCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCB3b3JsZENvbnRleHQpKTsKKyAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVjhMYXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGlzU1ZHRXZl
bnQsIGNvZGUsIHNvdXJjZVVSTCwgcG9zaXRpb24sIHdvcmxkQ29udGV4dCkpOwogICAgICAgICB9
CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzTGF6eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
QEAgLTU2LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZUxpc3RlbmVyT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5j
dGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJp
bmcgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgV29y
bGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpOworICAgICAgICBWOExhenlFdmVudExpc3Rl
bmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0
cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uMCYg
cG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KTsKIAogICAg
ICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZl
bnQqKTsKIApAQCAtNzAsOCArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJv
b2wgbV9pc1NWR0V2ZW50OwogICAgICAgICBTdHJpbmcgbV9jb2RlOwogICAgICAgICBTdHJpbmcg
bV9zb3VyY2VVUkw7Ci0gICAgICAgIGludCBtX2xpbmVOdW1iZXI7Ci0gICAgICAgIGludCBtX2Nv
bHVtbk51bWJlcjsKKyAgICAgICAgVGV4dFBvc2l0aW9uMCBtX3Bvc2l0aW9uOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCmluZGV4IDkwYzJl
ZDgwYmZmNGZmYTVhOTRiMWIzN2Q5YjEyYjVkZDU5ZDcxYTAuLjkyYjgyMTYwYjA1NDk1NzI5OWI5
NTIzNTUxNzNjZjdjM2EzMjQ3NzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcApAQCAtMjM1LDEy
ICsyMzUsMTMgQEAgVjhQcm94eTo6flY4UHJveHkoKQogICAgIHdpbmRvd1NoZWxsKCktPmRlc3Ry
b3lHbG9iYWwoKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21waWxl
U2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgaW50IGJhc2VMaW5lLCB2ODo6U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKK3Y4OjpIYW5kbGU8
djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlw
dFN0YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHREYXRhKiBzY3JpcHREYXRhKQogewogICAgIGNvbnN0
IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG5hbWUgPSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5h
bWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2Vy
PiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhiYXNlTGluZSk7Ci0gICAgdjg6OlNjcmlwdE9yaWdp
biBvcmlnaW4obmFtZSwgbGluZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gbGluZSA9
IHY4OjpJbnRlZ2VyOjpOZXcoc2NyaXB0U3RhcnRQb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50
KCkpOworICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGNvbHVtbiA9IHY4OjpJbnRlZ2VyOjpO
ZXcoc2NyaXB0U3RhcnRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKSk7CisgICAgdjg6
OlNjcmlwdE9yaWdpbiBvcmlnaW4obmFtZSwgbGluZSwgY29sdW1uKTsKICAgICB2ODo6SGFuZGxl
PHY4OjpTY3JpcHQ+IHNjcmlwdCA9IHY4OjpTY3JpcHQ6OkNvbXBpbGUoY29kZSwgJm9yaWdpbiwg
c2NyaXB0RGF0YSk7CiAgICAgcmV0dXJuIHNjcmlwdDsKIH0KQEAgLTM5Myw3ICszOTQsNyBAQCB2
ODo6TG9jYWw8djg6OlZhbHVlPiBWOFByb3h5OjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJiBzb3VyY2UsIE5vZGUqIG5vZAogCiAgICAgICAgIC8vIE5PVEU6IEZvciBjb21wYXRpYmls
aXR5IHdpdGggV2ViQ29yZSwgU2NyaXB0U291cmNlQ29kZSdzIGxpbmUgc3RhcnRzIGF0CiAgICAg
ICAgIC8vIDEsIHdoZXJlYXMgdjggc3RhcnRzIGF0IDAuCi0gICAgICAgIHY4OjpIYW5kbGU8djg6
OlNjcmlwdD4gc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCBzb3VyY2UudXJsKCksIHNvdXJj
ZS5zdGFydExpbmUoKSAtIDEsIHNjcmlwdERhdGEuZ2V0KCkpOworICAgICAgICB2ODo6SGFuZGxl
PHY4OjpTY3JpcHQ+IHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgpLCBX
VEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKHNvdXJjZS5zdGFydFBvc2l0aW9uKCkpLCBzY3Jp
cHREYXRhLmdldCgpKTsKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgUGxhdGZvcm1C
cmlkZ2U6OnRyYWNlRXZlbnRFbmQoInY4LmNvbXBpbGUiLCBub2RlLCAiIik7CiAKQEAgLTQyNSw3
ICs0MjYsNyBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOFByb3h5OjpydW5TY3JpcHQodjg6Okhh
bmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQsIGJvb2wgaXNJbgogICAgICAgICAvLyBGSVhNRTogSWRl
YWxseSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmUtdXNlIHRoZSBvcmlnaW4gb2YgdGhlCiAgICAg
ICAgIC8vIHNjcmlwdCBwYXNzZWQgdG8gdXMgYXMgdGhlIGFyZ3VtZW50IGluc3RlYWQgb2YgdXNp
bmcgYW4gZW1wdHkgc3RyaW5nCiAgICAgICAgIC8vIGFuZCAwIGJhc2VMaW5lLgotICAgICAgICBz
Y3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsICIiLCAwKTsKKyAgICAgICAgc2NyaXB0ID0gY29t
cGlsZVNjcmlwdChjb2RlLCAiIiwgVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkpOwog
ICAgIH0KIAogICAgIGlmIChoYW5kbGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApp
bmRleCA4YTBkYTcyOTU2ODBkNTIzY2Y3NDBmMzg2ZjNjZWYxZTk5MTEwNWMzLi44MGQ0NjkxYjQ4
MDU0OGYzYWQ3ZGRmNzlkZTJiMzc5NzM0MTc5OGRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAt
Mjc5LDcgKzI3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNoZWNrTmV3TGVnYWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwog
Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQodjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFz
ZUxpbmUsIHY4OjpTY3JpcHREYXRhKiA9IDApOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6U2NyaXB0PiBjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3Np
dGlvbiwgdjg6OlNjcmlwdERhdGEqID0gMCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlv
biBjb2RlIGlzIGRpZmZlcmVudCBmcm9tIHplcm8sIGEgRE9NIGV4Y2VwdGlvbiBpcwogICAgICAg
ICAvLyBzY2hlZHVsZSB0byBiZSB0aHJvd24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggMTZlMGI0MTAxZWZkYzM1YWU3
NDQxODE3YjA2ODdkYjZiNWE2NWEyNS4uY2VmYjJmYWE3MzkwODk0YjM1ZDY1YWQ1M2YyMWE4ZmJj
N2RkYTU2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5Ojpmb3JnZXRWOEV2ZW50T2JqZWN0KEV2ZW50KiBldmVudCkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVNjcmlwdFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGlu
dCBiYXNlTGluZSwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKiBzdGF0ZSkKK1NjcmlwdFZh
bHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBz
Y3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlw
dFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAgU2NyaXB0VmFsdWUg
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlw
dCwgY29uc3QgU3QKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKIAogICAgIHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBzY3JpcHRTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKHNjcmlw
dCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlZFNjcmlwdCA9IFY4UHJveHk6
OmNvbXBpbGVTY3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwgYmFzZUxpbmUpOworICAgIHY4
OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2Ny
aXB0KHNjcmlwdFN0cmluZywgZmlsZU5hbWUsIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IHJ1blNjcmlwdChjb21waWxlZFNjcmlwdCk7CiAK
ICAgICBpZiAoIWV4Y2VwdGlvbkNhdGNoZXIuQ2FuQ29udGludWUoKSkKQEAgLTIyNyw3ICsyMjcs
NyBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJ1
blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTY3JpcAogICAgIC8vIENvbXB1dGUgdGhlIHNvdXJjZSBz
dHJpbmcgYW5kIHByZXZlbnQgYWdhaW5zdCBpbmZpbml0ZSByZWN1cnNpb24uCiAgICAgaWYgKG1f
cmVjdXJzaW9uID49IGtNYXhSZWN1cnNpb25EZXB0aCkgewogICAgICAgICB2ODo6TG9jYWw8djg6
OlN0cmluZz4gY29kZSA9IHY4RXh0ZXJuYWxTdHJpbmcoInRocm93IFJhbmdlRXJyb3IoJ1JlY3Vy
c2lvbiB0b28gZGVlcCcpIik7Ci0gICAgICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3Jp
cHQoY29kZSwgIiIsIDApOworICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0
KGNvZGUsICIiLCBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQogCiAg
ICAgaWYgKFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA1ODgyNGI5ZWVmNmY0
OTE0MDg0Yzc3NzE2MWUyM2Y2ZTMwYWJlMjgzLi5lNzBjM2QyODRhYmU1MmUzNWJhYzQ5ODA1ZTcz
YTRjZjQ3NGU5Yzk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiCiAjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24u
aD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC02Niw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0cmFja0V2
ZW50KEV2ZW50Kik7CiAKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUg
Y3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuCi0gICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1
YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFz
ZUxpbmUsIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSopOworICAgICAgICBTY3JpcHRWYWx1
ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
Y29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblN0YXRlKik7CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRsZSBvZiB0
aGUgY29udGV4dC4KICAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyBy
ZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7IH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDdkYjBkOGQz
NzM3MDliMmU5NzNiNjdlNzcyM2U0ZmMzMTFmYmNhNTkuLmI1NmQzODM2ZDdlNmJiMWFjNWQyYzhj
NWVkNjMwZjA3YzI3NmVmMjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmNwcApAQCAtNzUsNyArNzUsNyBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2Rl
LAogICAgIH0KIAogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKLSAgICBT
Y3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgp
LCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgpIC0gMSwg
JnN0YXRlKTsKKyAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3Vy
Y2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBXVEY6OnRvWmVyb0Jh
c2VkVGV4dFBvc2l0aW9uKHNvdXJjZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwgJnN0YXRlKTsKICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAg
ICAgICAgICAqZXhjZXB0aW9uID0gc3RhdGUuZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcApp
bmRleCA0MmUyMjVhN2YzMmExYjBjZGMxYmMzNDUxYjY1NDk3YTQ2MTM1Njg5Li4xOGY2MDcxMWE0
Y2QzMDIzMjliY2FhZDRkOThiOGEyMGM3Y2UxMmZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Q
ZW5kaW5nU2NyaXB0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcApAQCAt
NDAsNyArNDAsNyBAQCBQZW5kaW5nU2NyaXB0Ojp+UGVuZGluZ1NjcmlwdCgpCiBQYXNzUmVmUHRy
PEVsZW1lbnQ+IFBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKQogewogICAg
IHNldENhY2hlZFNjcmlwdCgwKTsKLSAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IDA7CisgICAg
bV9zdGFydGluZ1Bvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7
CiAgICAgbV93YXRjaGluZ0ZvckxvYWQgPSBmYWxzZTsKICAgICByZXR1cm4gbV9lbGVtZW50LnJl
bGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaCBiL1dl
YkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCA0NGUxZTQ5Mjg2NzZkNzk2MDIyZGQyOTA1
NDU3NjAxNWI3YTI2ZTQ0Li4wODM1MDdhOWI5MDkxNmJjZjI4NjUxZGY2MjllNWIyM2JiOTQyMmM4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKKysrIGIvV2ViQ29yZS9k
b20vUGVuZGluZ1NjcmlwdC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMTQgKzQ0LDE0IEBAIGNsYXNzIEVsZW1l
bnQ7CiBjbGFzcyBQZW5kaW5nU2NyaXB0IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsK
IHB1YmxpYzoKICAgICBQZW5kaW5nU2NyaXB0KCkKLSAgICAgICAgOiBtX3N0YXJ0aW5nTGluZU51
bWJlcigwKQorICAgICAgICA6IG1fc3RhcnRpbmdQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxv
d1JhbmdlUG9zaXRpb24oKSkKICAgICAgICAgLCBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKICAg
ICB7CiAgICAgfQogCiAgICAgUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JiBvdGhl
cikKICAgICAgICAgOiBDYWNoZWRSZXNvdXJjZUNsaWVudChvdGhlcikKLSAgICAgICAgLCBtX3N0
YXJ0aW5nTGluZU51bWJlcihvdGhlci5tX3N0YXJ0aW5nTGluZU51bWJlcikKKyAgICAgICAgLCBt
X3N0YXJ0aW5nUG9zaXRpb24ob3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQogICAgICAgICAsIG1f
d2F0Y2hpbmdGb3JMb2FkKG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkKQogICAgICAgICAsIG1fZWxl
bWVudChvdGhlci5tX2VsZW1lbnQpCiAgICAgewpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKIAot
ICAgICAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IG90aGVyLm1fc3RhcnRpbmdMaW5lTnVtYmVy
OworICAgICAgICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247
CiAgICAgICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gb3RoZXIubV93YXRjaGluZ0ZvckxvYWQ7CiAg
ICAgICAgIG1fZWxlbWVudCA9IG90aGVyLm1fZWxlbWVudDsKICAgICAgICAgc2V0Q2FjaGVkU2Ny
aXB0KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKQEAgLTc0LDcgKzc1LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gRklYTUU6IE5vIHNldHRlciBtZWFucyB0aGlzIGlzIG5ldmVyIHNldCB0byBhbnl0aGlu
ZyBvdGhlciB0aGFuIDAuCiAgICAgLy8gVGhpcyBpcyBlaXRoZXIgdW5uZWNlc3Nhcnkgb3IgaW5j
b3JyZWN0LgotICAgIGludCBzdGFydGluZ0xpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0aW5nTGluZU51bWJlcjsgfQorICAgIFRleHRQb3NpdGlvbjEgc3RhcnRpbmdQb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdQb3NpdGlvbjsgfQogCiAgICAgYm9vbCB3YXRjaGlu
Z0ZvckxvYWQoKSBjb25zdCB7IHJldHVybiBtX3dhdGNoaW5nRm9yTG9hZDsgfQogICAgIHZvaWQg
c2V0V2F0Y2hpbmdGb3JMb2FkKGJvb2wgYikgeyBtX3dhdGNoaW5nRm9yTG9hZCA9IGI7IH0KQEAg
LTg5LDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSopOwogCiBwcml2YXRlOgotICAgIGludCBtX3N0YXJ0aW5nTGluZU51bWJl
cjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCisgICAgVGV4dFBvc2l0aW9u
MSBtX3N0YXJ0aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdz
LgogICAgIGJvb2wgbV93YXRjaGluZ0ZvckxvYWQ7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxl
bWVudDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2Ny
aXB0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgg
Yi9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAppbmRleCA4YjE2MzA0MTIx
MDRlNGU0NWEwMTMyM2RkMjI1NWU2NTY0ZTM0MDQ1Li5kOWJmODVjYWJmNDU1MzNjOTgxYmU2MGZj
NWJhOTY5Nzc1ZTQyNDNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIuaAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaApA
QCAtMjcsMTAgKzI3LDEwIEBACiAjZGVmaW5lIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcl9oCiAK
ICNpbmNsdWRlICJEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2VnbWVu
dGVkU3RyaW5nOwogY2xhc3MgWFNTQXVkaXRvcjsKIAogY2xhc3MgU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyIDogcHVibGljIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIgewpAQCAtNDcsNyArNDcs
NyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBhcmUgdXNlZCB0byBleHBvc2UgdGhlIGN1cnJl
bnQgbGluZS9jb2x1bW4gdG8gdGhlIHNjcmlwdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBpbnQg
bGluZU51bWJlcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0
ID0gMDsKIAogICAgIFhTU0F1ZGl0b3IqIHhzc0F1ZGl0b3IoKSBjb25zdCB7IHJldHVybiBtX3hz
c0F1ZGl0b3I7IH0KICAgICB2b2lkIHNldFhTU0F1ZGl0b3IoWFNTQXVkaXRvciogYXVkaXRvcikg
eyBtX3hzc0F1ZGl0b3IgPSBhdWRpdG9yOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBl
MDc3MGJhZGJhZmY3YmExMTAyMGFkZGM3MTI0OWVmM2RlYzgyMGQ0Li40MGQ1YzA1ZDNhYjc1MWZm
YzYzYjZiNWViNjI3NTg5NzUyY2ZiZTA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKQEAgLTEw
Miw3ICsxMDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdNTEVycm9ySGFu
ZGxpbmcgdXNlcyB0aGVzZSBmdW5jdGlvbnMuCiAgICAgICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9y
bWVkKCkgY29uc3QgeyByZXR1cm4gIW1fc2F3RXJyb3I7IH0KICAgICAgICAgdmlydHVhbCBpbnQg
bGluZU51bWJlcigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBj
b25zdDsKKyAgICAgICAgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdDsKIAogICAg
ICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7CiAKQEAg
LTEyOSw2ICsxMjksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgYXBw
ZW5kRnJhZ21lbnRTb3VyY2UoY29uc3QgU3RyaW5nJik7CiAKKyAgICAgICAgaW50IGNvbHVtbk51
bWJlcigpIGNvbnN0OworICAgICAgICAvLyBUaGUgbWV0aG9kIGlzIHVzZWQgaW4gWE1MRG9jdW1l
bnRQYXJzZXJMaWJ4bWwyLmNwcCBvbmx5LAorICAgICAgICAvLyBJdCBpcyBuZWl0aGVyIHVzZWQg
bm9yIGltcGxlbWVudGVkIGluIFhNTERvY3VtZW50UGFyc2VyUXQuY3BwLgorICAgICAgICBUZXh0
UG9zaXRpb24xIHRleHRQb3NpdGlvbk9uZUJhc2VkKCkgY29uc3Q7CisKICNpZiBVU0UoUVhNTFNU
UkVBTSkKIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcGFyc2UoKTsKQEAgLTIwOCw3ICsyMTMsNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBt
X3BlbmRpbmdTY3JpcHQ7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBtX3NjcmlwdEVsZW1lbnQ7
Ci0gICAgICAgIGludCBtX3NjcmlwdFN0YXJ0TGluZTsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBt
X3NjcmlwdFN0YXJ0UG9zaXRpb247CiAKICAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsK
ICAgICAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9XZWJDb3JlL2RvbS9Y
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmluZGV4IDViNWFjODlmYWIyZTY1MzU2NDMwMmUw
YjYxM2NmMjMwYTQ2NGJhODkuLmRjZThmZWYxZTg3YjMyM2ExNWYxNzJhZDE1MDU1YTU4OTllMDk1
MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAK
KysrIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtNTYwLDcg
KzU2MCw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCog
ZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVWaWV3KQogICAgICwgbV9sYXN0RXJyb3JMaW5lKDAp
CiAgICAgLCBtX2xhc3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0g
ICAgLCBtX3NjcmlwdFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRl
eHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21l
bnQoZmFsc2UpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdB
bGxvd2VkKQogewpAQCAtNTg3LDcgKzU4Nyw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1
bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAg
ICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAg
LCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBt
X3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkp
CiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNz
aW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7CkBAIC04MTksNyArODE5LDcgQEAgdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1l
LCBjb25zdCB4bWxDaGEKIAogICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1Nj
cmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKHNjcmlwdEVsZW1lbnQpCi0g
ICAgICAgIG1fc2NyaXB0U3RhcnRMaW5lID0gbGluZU51bWJlcigpOworICAgICAgICBtX3Njcmlw
dFN0YXJ0UG9zaXRpb24gPSB0ZXh0UG9zaXRpb25PbmVCYXNlZCgpOwogCiAgICAgbV9jdXJyZW50
Tm9kZS0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwogCkBAIC05
MTAsNyArOTEwLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhl
Y3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQo
KSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7CisgICAgICAgICAgICBt
X3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3Jp
cHRTdGFydFBvc2l0aW9uKSk7CiAKICAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRh
Y2hlZCB0aGUgcGFyc2VyCiAgICAgICAgIGlmIChpc0RldGFjaGVkKCkpCkBAIC0xMzc2LDE0ICsx
Mzc2LDM5IEBAIHZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0cmluCiAKIGludCBYTUxEb2N1bWVudFBhcnNl
cjo6bGluZU51bWJlcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlv
biBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4g
MC1iYXNlZC4KICAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+bGluZSA6
IDE7CiB9CiAKIGludCBYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKIHsK
KyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IHJldHVybnMgMS1iYXNl
ZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVybiAwLWJhc2VkLgogICAgIHJldHVybiBjb250
ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxOwogfQogCitUZXh0UG9zaXRpb24wIFhN
TERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAoreworICAgIHhtbFBhcnNlckN0
eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKKyAgICAvLyBGSVhN
RTogVGhlIGNvbnRleHQgcHJvYmFibHkgY29udGFpbnMgMS1iYXNlZCBudW1iZXJzLCBidXQgd2Ug
dHJlYXQgdGhlbSBhcyAwLWJhc2VkLAorICAgIC8vICAgICAgICB0byBiZSBjb25zaXN0ZW50IHdp
dGggZml4bWUncyBpbiBsaW5lTnVtYmVyKCkgYW5kIGNvbHVtbk51bWJlcgorICAgIC8vICAgICAg
ICBtZXRob2RzLgorICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVy
Ojpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAgICAgICAgV1RGOjpa
ZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkpOwor
fQorCisvLyBUaGlzIG1ldGhvZCBoYXMgYSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLCBpbiBjb250
cmFzdCB0byB0ZXh0UG9zaXRpb24oKSBtZXRob2QuCisvLyBJdCBzaG91bGQgcmVwbGFjZSB0ZXh0
UG9zaXRpb24oKS4KK1RleHRQb3NpdGlvbjEgWE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlv
bk9uZUJhc2VkKCkgY29uc3QKK3sKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlz
LT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gVGV4dFBvc2l0
aW9uMTo6bWluaW11bVBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpP
bmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAg
ICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0
LT5jb2wpKTsKK30KKwogdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQogewog
ICAgIERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNl
clF0LmNwcAppbmRleCAwM2IwODNlYzFjOTI1Y2NkNTFlNmIxZDIxYzliNTJlYTE2YmNlOWNlLi45
MDFjYmMxOGZhZmRmYjc0YjQ1ZjMzYWI4YzU3OWMyMzE2YjcxYjZmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlclF0LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpY
TUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVWaWV3
KQogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCiAgICAgLCBtX2xhc3RFcnJvckNvbHVtbigwKQog
ICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0TGluZSgwKQorICAg
ICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlv
bigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCiAgICAgLCBtX3NjcmlwdGluZ1Bl
cm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQogewpAQCAtMTMyLDcgKzEzMiw3IEBA
IFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBm
cmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAgICAs
IG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1f
c2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0
aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVl
KQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHBlcm1pc3Npb24pCiB7CkBAIC0yMzQsNiAr
MjM0LDExIEBAIGludCBYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKICAg
ICByZXR1cm4gbV9zdHJlYW0uY29sdW1uTnVtYmVyKCk7CiB9CiAKK1RleHRQb3NpdGlvbjAgWE1M
RG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRleHRQ
b3NpdGlvbjAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobGluZU51bWJl
cigpKSwgV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29sdW1uTnVtYmVy
KCkpKTsKK30KKwogdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQogewogICAg
IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKQEAgLTUxOCw3ICs1MjMs
NyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZVN0YXJ0RWxlbWVudCgpCiAKICAgICBT
Y3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQu
Z2V0KCkpOwogICAgIGlmIChzY3JpcHRFbGVtZW50KQotICAgICAgICBtX3NjcmlwdFN0YXJ0TGlu
ZSA9IGxpbmVOdW1iZXIoKTsKKyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gV1RGOjp0
b09uZUJhc2VkVGV4dFBvc2l0aW9uKHRleHRQb3NpdGlvbigpKTsKIAogICAgIG1fY3VycmVudE5v
ZGUtPmRlcHJlY2F0ZWRQYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgpKTsKIApAQCAtNTk1
LDcgKzYwMCw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCgpCiAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4
ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50
KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOworICAgICAgICAgICAg
bV92aWV3LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2Ny
aXB0U3RhcnRQb3NpdGlvbikpOwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxz
ZTsKICAgICBwb3BDdXJyZW50Tm9kZSgpOwpAQCAtNzE2LDQgKzcyMSwzIEBAIHZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OnBhcnNlRHRkKCkKIAogfQogfQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggOTRjYzJhYTYyMzg2MmY1Y2YwNTgwNDc5MjA3MjY2
M2YxOTIzYzg2Ny4uZDE2OTQxN2E0YmU4MzkzMDkwMzBiNzM3NGI3NTg5ZGM3MTVjNjdjNCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBi
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMTkxLDEyICsx
OTEsMTIgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVl
QnVpbGRlcigpCiB7CiAgICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOwogCi0g
ICAgaW50IHNjcmlwdFN0YXJ0TGluZSA9IDA7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVs
ZW1lbnQgPSBtX3RyZWVCdWlsZGVyLT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0TGlu
ZSk7CisgICAgVGV4dFBvc2l0aW9uMSBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9u
MTo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1l
bnQgPSBtX3RyZWVCdWlsZGVyLT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0UG9zaXRp
b24pOwogICAgIC8vIFdlIHdpbGwgbm90IGhhdmUgYSBzY3JpcHRSdW5uZXIgd2hlbiBwYXJzaW5n
IGEgRG9jdW1lbnRGcmFnbWVudC4KICAgICBpZiAoIW1fc2NyaXB0UnVubmVyKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxl
bWVudC5yZWxlYXNlKCksIHNjcmlwdFN0YXJ0TGluZSk7CisgICAgcmV0dXJuIG1fc2NyaXB0UnVu
bmVyLT5leGVjdXRlKHNjcmlwdEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydFBvc2l0aW9u
KTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25v
dXNNb2RlIG1vZGUpCkBAIC0zOTYsOSArMzk2LDEzIEBAIGludCBIVE1MRG9jdW1lbnRQYXJzZXI6
OmxpbmVOdW1iZXIoKSBjb25zdAogICAgIHJldHVybiBtX3Rva2VuaXplci0+bGluZU51bWJlcigp
OwogfQogCi1pbnQgSFRNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAorVGV4
dFBvc2l0aW9uMCBIVE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fdG9rZW5pemVyLT5jb2x1bW5OdW1iZXIoKTsKKyAgICBpbnQgbGluZVplcm9C
YXNlZCA9IG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCk7CisgICAgaW50IGNvbHVtbk9uZUJhc2Vk
ID0gbV90b2tlbml6ZXItPmNvbHVtbk51bWJlcigpOworCisgICAgcmV0dXJuIFRleHRQb3NpdGlv
bjAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobGluZVplcm9CYXNlZCks
CisgICAgICAgIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5PbmVC
YXNlZCkuY29udmVydFRvWmVyb0Jhc2VkKCkpOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNl
cjo6aXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9j
dW1lbnRQYXJzZXIuaAppbmRleCBkOTYyNWYxMjE4YjY3NGE0NmRhZTNlMWIwOGQ4YmI3ZTNhNTRl
NzM1Li4wNTA1M2RmMmYxY2I0NTc1MTFlYTc0NjgxZjQyYzcyMmIzZDZjOWEwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNFeGVjdXRpbmdTY3JpcHQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAgICB2aXJ0
dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVy
KCkgY29uc3Q7CisgICAgdmlydHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0
OwogCiAgICAgLy8gSFRNTFNjcmlwdFJ1bm5lckhvc3QKICAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hG
b3JMb2FkKENhY2hlZFJlc291cmNlKik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmNwcAppbmRleCA0ZjU0ZjQyOTI4NzBhY2Q1Mzg1NGZjNDcxMDg3MGRkOWRmMTRmMmQxLi45
NjRlNThhOWUwZjJmYjg5MmFiNmU4MzkyYWU5ZWE1N2JkNGRmM2Y3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgU2NyaXB0U291cmNl
Q29kZSBIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5k
aW5nU2NyaXB0JgogICAgICAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuY2FjaGVk
U2NyaXB0KCkpOwogICAgIH0KICAgICBlcnJvck9jY3VycmVkID0gZmFsc2U7Ci0gICAgcmV0dXJu
IFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9jdW1l
bnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ0xpbmVO
dW1iZXIoKSk7CisgICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS0+
dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCks
IHNjcmlwdC5zdGFydGluZ1Bvc2l0aW9uKCkpOwogfQogCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6
OmlzUGVuZGluZ1NjcmlwdFJlYWR5KGNvbnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCkKQEAgLTE3
MCwxMyArMTcwLDEzIEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3RvcFdhdGNoaW5nRm9yTG9h
ZChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQogCiAvLyBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCBtYXRjaCAxMC4yLjUuMTEgIkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMgJ3NjcmlwdCci
CiAvLyBTY3JpcHQgaGFuZGxpbmcgbGl2ZXMgb3V0c2lkZSB0aGUgdHJlZSBidWlsZGVyIHRvIGtl
ZXAgdGhlIGVhY2ggY2xhc3Mgc2ltcGxlLgotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRl
KFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgaW50IHN0YXJ0TGluZSkKK2Jvb2wg
SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1l
bnQsIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CiAgICAgQVNT
RVJUKHNjcmlwdEVsZW1lbnQpOwogICAgIC8vIEZJWE1FOiBJZiBzY3JpcHRpbmcgaXMgZGlzYWJs
ZWQsIGFsd2F5cyBqdXN0IHJldHVybiB0cnVlOwogCiAgICAgLy8gVHJ5IHRvIGV4ZWN1dGUgdGhl
IHNjcmlwdCBnaXZlbiB0byB1cy4KLSAgICBydW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwg
c3RhcnRMaW5lKTsKKyAgICBydW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc2NyaXB0U3Rh
cnRQb3NpdGlvbik7CiAKICAgICBpZiAoaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpKSB7CiAg
ICAgICAgIGlmIChtX3NjcmlwdE5lc3RpbmdMZXZlbCkKQEAgLTI4OCw3ICsyODgsNyBAQCBib29s
IEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmIHBl
bmRpbmdTY3JpcHQsIEVsZW1lbgogCiAvLyBUaGlzIG1ldGhvZCBpcyBtZWFudCB0byBtYXRjaCB0
aGUgSFRNTDUgZGVmaW5pdGlvbiBvZiAicnVubmluZyBhIHNjcmlwdCIKIC8vIGh0dHA6Ly93d3cu
d2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3NjcmlwdGlu
Zy0xLmh0bWwjcnVubmluZy1hLXNjcmlwdAotdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3Jp
cHQoRWxlbWVudCogc2NyaXB0LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQordm9pZCBIVE1MU2Ny
aXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBjb25zdCBUZXh0UG9zaXRpb24x
JiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBB
U1NFUlQoIWhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSk7CkBAIC0zMTUsNyArMzE1LDcgQEAg
dm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBpbnQgc3Rh
cnRpbmdMaW5lTnVtYmVyKQogICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MDA0NwogICAgICAgICAgICAgLy8gQVNTRVJUKGRvY3VtZW50
KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1
dGluZ1NjcmlwdCgpKTsKLSAgICAgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShz
Y3JpcHQtPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9j
dW1lbnQpLCBzdGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgU2NyaXB0U291cmNlQ29k
ZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRF
eGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAg
ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oIGIvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU2NyaXB0UnVubmVyLmgKaW5kZXggYmUyMWRkMjQyMWIxZDQ0MjdiMDg0N2IwYjkx
MWMxZmU5N2M2Zjc2NS4uMmRmMjk1ZjljMTM1OTRkZWNiNmVmMWYxMDBlM2NkOTVkMzc5OTQyYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKKysrIGIv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIlBlbmRpbmdTY3JpcHQuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkBAIC01Miw3ICs1Myw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogCiAgICAgLy8gUHJvY2Vzc2VzIHRoZSBwYXNzZWQg
aW4gc2NyaXB0IGFuZCBhbnkgcGVuZGluZyBzY3JpcHRzIGlmIHBvc3NpYmxlLgotICAgIGJvb2wg
ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgaW50IHNjcmlwdFN0
YXJ0TGluZSk7CisgICAgYm9vbCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Q
cm9jZXNzLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAg
IGJvb2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwogICAg
IGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0czsgfQpAQCAtNzYsNyArNzcsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcmVxdWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQqKTsKICAgICBib29s
IHJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CiAK
LSAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50KiwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7Cisg
ICAgdm9pZCBydW5TY3JpcHQoRWxlbWVudCosIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0
YXJ0UG9zaXRpb24pOwogCiAgICAgLy8gSGVscGVycyBmb3IgZGVhbGluZyB3aXRoIEhUTUxTY3Jp
cHRSdW5uZXJIb3N0CiAgICAgdm9pZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGEyMjM2ZDU0NGUyMTNiZmNk
NjA0ZmYxY2M5YTU2YzVmNDhhNDVmNjEuLjc0YmI5YzkwMmRmYzg2M2NiNzJjYzU2ZTUxN2Q2ZGE3
MDg4MDczYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTU2
LDYgKzU2LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBp
bnQgdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSA9IC0xOwogCitzdGF0aWMgVGV4dFBvc2l0
aW9uMSB1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKQoreworICAgIHJldHVybiBUZXh0UG9z
aXRpb24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludCgtMSksIFdURjo6T25l
QmFzZWROdW1iZXI6OmJhc2UoKSk7Cit9CisKIG5hbWVzcGFjZSB7CiAKIGlubGluZSBib29sIGlz
SFRNTFNwYWNlT3JSZXBsYWNlbWVudENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCkBAIC0zMzMs
OCArMzM4LDggQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXpl
ciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW4KICAgICAsIG1fb3JpZ2luYWxJbnNl
cnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zZWNvbmRhcnlJbnNlcnRpb25Nb2RlKElu
aXRpYWxNb2RlKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQotICAgICwgbV9zY3JpcHRU
b1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkK
KyAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRp
b25WYWx1ZTEoKSkKKyAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRleHRQ
b3NpdGlvbjA6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV91c2VQcmVIVE1MNVBhcnNl
clF1aXJrcyh1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKIHsKIH0KQEAgLTM1Miw4ICszNTcsOCBA
QCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6
ZXIsIERvY3VtZW50RnJhZ21lbnQqIGZyYQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUo
SW5pdGlhbE1vZGUpCiAgICAgLCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUp
CiAgICAgLCBtX3Rva2VuaXplcih0b2tlbml6ZXIpCi0gICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0
YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQotICAgICwgbV9sYXN0U2NyaXB0
RWxlbWVudFN0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9z
Y3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgp
KQorICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMDo6
YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3VzZVByZUhUTUw1UGFyc2VyUXVpcmtzKHVz
ZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogewogICAgIGlmIChjb250ZXh0RWxlbWVudCkgewpAQCAt
NDE1LDE1ICs0MjAsMTUgQEAgSFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVudFBhcnNpbmdDb250ZXh0
Ojp+RnJhZ21lbnRQYXJzaW5nQ29udGV4dCgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4g
SFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5l
KQorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nl
c3MoVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAgICAvLyBVbnBhdXNl
IG91cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2UgdXMgYWdhaW4gd2hlbiBwcm9jZXNzaW5nIHRo
ZSBzY3JpcHQuCiAgICAgLy8gVGhlIEhUTUw1IHNwZWMgaXMgd3JpdHRlbiBhcyB0aG91Z2ggc2Ny
aXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVlCiAgICAgLy8gYnVpbGRlci4gIFdlIHBh
dXNlIHRoZSBwYXJzZXIgdG8gZXhpdCB0aGUgdHJlZSBidWlsZGVyLCBhbmQgdGhlbiByZXN1bWUK
ICAgICAvLyBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgogICAgIG1faXNQYXVzZWQgPSBmYWxzZTsK
LSAgICBzY3JpcHRTdGFydExpbmUgPSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZTsKLSAgICBt
X3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSA9IHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWU7
CisgICAgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlv
bjsKKyAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSB1bmluaXRpYWxpemVkUG9z
aXRpb25WYWx1ZTEoKTsKICAgICByZXR1cm4gbV9zY3JpcHRUb1Byb2Nlc3MucmVsZWFzZSgpOwog
fQogCkBAIC0yMjAxLDcgKzIyMDYsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRy
dWU7CiAgICAgICAgICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05h
bWUoc2NyaXB0VGFnKSk7CiAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5j
dXJyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUg
PSBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lICsgMTsKKyAgICAgICAgICAgIG1fc2NyaXB0
VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbihtX2xh
c3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbik7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYg
bV9mcmFnbWVudENvbnRleHQuc2NyaXB0aW5nUGVybWlzc2lvbigpID09IEZyYWdtZW50U2NyaXB0
aW5nTm90QWxsb3dlZCkKICAgICAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVtb3Zl
QWxsQ2hpbGRyZW4oKTsKQEAgLTI3NTAsNyArMjc1NSwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgbV90
cmVlLmluc2VydFNjcmlwdEVsZW1lbnQodG9rZW4pOwogICAgIG1fdG9rZW5pemVyLT5zZXRTdGF0
ZShIVE1MVG9rZW5pemVyOjpTY3JpcHREYXRhU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRp
b25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwotICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExp
bmUgPSBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOworCisgICAgVGV4dFBvc2l0aW9uMCBwb3Np
dGlvbiA9IFRleHRQb3NpdGlvbjAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJ
bnQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNl
KCkpOworICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uID0gcG9zaXRpb247CisK
ICAgICBzZXRJbnNlcnRpb25Nb2RlKFRleHRNb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmgKaW5kZXggZTYxZmU3MzQ2NmRhMTc4ZDMzMTFkMjc2MjBlNDZiODI4MWMx
ZTQ1NS4uYmIzNTk2ZGZlZTdmY2NlOTJlNzFmMmUxZmEwZTVmMTVlOTQ4YjE4OSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnRTdGFjay5oIgogI2luY2x1ZGUgIkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Qu
aCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBv
c2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC03MSw3ICs3Miw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRNTFRv
a2VuJik7CiAKICAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aGVuIHBhcnNlciBpcyBwYXVzZWQgYmVm
b3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRh
a2VTY3JpcHRUb1Byb2Nlc3MoaW50JiBzY3JpcHRTdGFydExpbmUpOworICAgIFBhc3NSZWZQdHI8
RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBv
c2l0aW9uKTsKIAogICAgIC8vIERvbmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KICAgICB2
b2lkIGZpbmlzaGVkKCk7CkBAIC0yNDYsMTMgKzI0NywxMiBAQCBwcml2YXRlOgogICAgIEhUTUxU
b2tlbml6ZXIqIG1fdG9rZW5pemVyOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0VG9Q
cm9jZXNzOyAvLyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUgcmVz
dW1pbmcgdGhlIHBhcnNlci4KLSAgICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7IC8v
IFN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2lu
Zy4KKyAgICBUZXh0UG9zaXRpb24xIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsgLy8g
U3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVlZGluZyBwcm9jZXNzaW5n
LgogCiAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoaXMgbWVtYmVy
LiAgT3JpZ2luYWxseSwgaXQgd2FzCiAgICAgLy8gY3JlYXRlZCB0byBzZXJ2aWNlIHRoZSBsZWdh
Y3kgdHJlZSBidWlsZGVyLCBidXQgaXQgc2VlbXMgdG8gYmUgdXNlZCBmb3IKICAgICAvLyBzb21l
IG90aGVyIHRoaW5ncyBub3cuCi0gICAgaW50IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmU7
Ci0gICAgCisgICAgVGV4dFBvc2l0aW9uMCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlv
bjsKICAgICBib29sIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3M7CiB9OwogCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA1NDFiZDI2MTE1NjZhMjU1NWJmNDRkNTIxNzIzMzU4YjNhMjU1YjQ3Li5jN2VkMjA2MjIz
NzYxNWVlZDcxOWUzMWQ3YTY2MmFiZWY0NDlkNzZlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAxMC0xMC0xOSAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisK
KyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2NyaXB0IGNvbHVtbiBwb3NpdGlv
biB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVuZ2luZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNzEKKworICAgICAgICBSZXBs
YWNlcyBzY3JpcHQgbGluZSBudW1iZXIgd2l0aCBUZXh0UG9zaXRpb24gc3RydWN0dXJlLgorCisg
ICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhl
Y3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKToKKwogMjAxMC0xMC0xOSAgVG9ueSBDaGFu
ZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJh
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IDlkYWYyNmYxZmY3ODY3OTAx
YjAwNmU1MzEzZWJlODE0YWY1ZjM3YTEuLjQwOTFiNTI0MzcxOWIwMzQ2MjkwZDcwMTRiMDE5Nzcw
NmVhNmUxOTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNw
cAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTc1Myw4ICs3
NTMsOSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6YmluZFRvV2luZG93T2JqZWN0KGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgTlBPYmplY3QqIG9iamVjdCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1
dGVTY3JpcHQoY29uc3QgV2ViU2NyaXB0U291cmNlJiBzb3VyY2UpCiB7CisgICAgVGV4dFBvc2l0
aW9uMSBwb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNl
LnN0YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OmJhc2UoKSk7CiAgICAgbV9mcmFtZS0+
c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoCi0gICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNl
LmNvZGUsIHNvdXJjZS51cmwsIHNvdXJjZS5zdGFydExpbmUpKTsKKyAgICAgICAgU2NyaXB0U291
cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKTsKIH0KIAogdm9pZCBX
ZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCkBAIC03NjQsOCArNzY1
LDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCiAg
ICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+IHNvdXJjZXM7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtU291cmNlczsgKytpKSB7CisgICAgICAgIFRleHRQb3NpdGlvbjEgcG9z
aXRpb24oV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZXNJbltpXS5z
dGFydExpbmUpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpiYXNlKCkpOwogICAgICAgICBzb3VyY2Vz
LmFwcGVuZChTY3JpcHRTb3VyY2VDb2RlKAotICAgICAgICAgICAgc291cmNlc0luW2ldLmNvZGUs
IHNvdXJjZXNJbltpXS51cmwsIHNvdXJjZXNJbltpXS5zdGFydExpbmUpKTsKKyAgICAgICAgICAg
IHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBwb3NpdGlvbikpOwogICAgIH0K
IAogICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElk
LCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CkBAIC04MTcsOCArODE5LDkgQEAgdm9pZCBXZWJG
cmFtZUltcGw6OmNvbGxlY3RHYXJiYWdlKCkKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJGcmFt
ZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSgKICAgICBjb25zdCBXZWJTY3JpcHRT
b3VyY2UmIHNvdXJjZSkKIHsKKyAgICBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKFdURjo6T25lQmFz
ZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3RhcnRMaW5lKSwgV1RGOjpPbmVCYXNl
ZE51bWJlcjo6YmFzZSgpKTsKICAgICByZXR1cm4gbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVT
Y3JpcHQoCi0gICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmws
IHNvdXJjZS5zdGFydExpbmUpKS52OFZhbHVlKCk7CisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUo
c291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0aW9uKSkudjhWYWx1ZSgpOwogfQogCiAvLyBS
ZXR1cm5zIHRoZSBWOCBjb250ZXh0IGZvciB0aGlzIGZyYW1lLCBvciBhbiBlbXB0eSBoYW5kbGUg
aWYgdGhlcmUgaXMgbm9uZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71294</attachid>
            <date>2010-10-20 07:47:59 -0700</date>
            <delta_ts>2010-10-23 15:02:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20101020184756.patch</filename>
            <type>text/plain</type>
            <size>60060</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkZDA2NjIyYWY1ZDVjNDAyNzVjOWEzYTkxNTQ3YWMyM2NiZWRjM2RiLi5l
ZDM2NzFiNzg3ODg3NGVhNWE5NDBmMWY3OGYyMDdjYTRjYzEyYzRjIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMTAtMTAtMTkgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL3RleHQvVGV4dFBvc2l0aW9uLmg6
IEFkZGVkLgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OlRleHRQb3NpdGlvbik6CisgICAg
ICAgIChXVEY6OlRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6
VGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24pOgorICAgICAgICAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpaZXJvQmFzZWROdW1i
ZXI6Olplcm9CYXNlZE51bWJlcik6CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6emVy
b0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKToKKyAgICAg
ICAgKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiZWxvd0Jhc2UpOgorICAgICAgICAoV1RGOjpPbmVC
YXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1i
ZXI6Ok9uZUJhc2VkTnVtYmVyKToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6Om9uZUJh
c2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRBc1plcm9CYXNl
ZEludCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpjb252ZXJ0VG9aZXJvQmFzZWQp
OgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSk6CisgICAgICAgIChXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpiZWxvd0Jhc2UpOgorICAgICAgICAoV1RGOjp0b1plcm9CYXNlZFRleHRQ
b3NpdGlvbik6CisgICAgICAgIChXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRpb24pOgorICAgICAg
ICAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKToKKwogMjAxMC0xMC0x
OSAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIEtpbHplci4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggN2VlMzY4YWRjMjlk
Njg0MjkxODg0MTI3ZTQ2Y2U4NDBmMWI0ZjNkYi4uYWQ0ZjVhYjRkNWZlZDhkOTliZGQ4Mzk1ZjAw
ZmEwYTI3ODFkYzkxNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTUxNyw2ICs1MTcsNyBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCBcCisJSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dU
RlN0cmluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgXApkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggMTE5MGE5Njk4MjU2MzNiZDE0YWU1OWU5ZWZi
N2M4ZDI3ODAxYmE2Zi4uOGExZDdkMjMxYTljYzg0NzQ1ZDc5OTk0Y2Y5OGQwNzZmYjljNjRmYyAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC00NjAsNiArNDYwLDcgQEAKICAgICAg
ICAgICAgICd3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCcsCiAgICAgICAgICAgICAnd3RmL3RleHQv
U3RyaW5nSW1wbC5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCcs
CisgICAgICAgICAgICAnd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgnLAogICAgICAgICAgICAgJ3d0
Zi90ZXh0L1dURlN0cmluZy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi90ZXh0L1dURlN0cmluZy5o
JywKICAgICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRvci5oJywKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQ1NjI4YTllZTdkZTNhNTZiNTE1NGZlY2Q4OGUyMWM3OWRiYjM3N2EuLmY5NWZhOWNkMTNh
MzQyYmQ0NDg0ZWY1OTdhNTA0N2FjYTIzMGM0YjYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTU0LDYg
KzU1NCw3IEBACiAJCUUxRUU3OTNEMEQ2QzlCOTIwMEZFQTNCQSAvKiBUaHJlYWRpbmdQdGhyZWFk
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVF
NzkzQzBENkM5QjkyMDBGRUEzQkEgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwICovOyB9OwogCQlF
MUVGNzlBQTBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVGNzlBODBDRTk3QkE2MDA4OEQ1MDAgLyogVVRG
OC5jcHAgKi87IH07CiAJCUU0OEUwRjJEMEY4MjE1MTcwMEE4Q0EzNyAvKiBGYXN0QWxsb2NCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhFMEYy
QzBGODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzQkQzMUVEMTI2NzM1NzcwMDY1NDY3RiAv
KiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEYzQkQzMUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTFCNDQ3QTBFQ0NE
NzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFCNDQ3OTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0
cmFzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIC8q
IEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCkBAIC0xMTQyLDYgKzExNDMsNyBAQAogCQlF
MUVGNzlBODBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVVEY4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTFFRjc5QTkwQ0U5N0JBNjAwODhENTAwIC8qIFVURjguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVVRGOC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDhFMEYy
QzBGODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGYXN0QWxsb2NCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUYzQkQzMUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGV4dFBvc2l0aW9uLmg7IHBhdGggPSB0ZXh0L1RleHRQ
b3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUJCMkJDNTAzMEY3NzIx
MDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgfTsKIAkJRjVDMjkwRTYwMjg0Rjk4RTAxODYzNUNBIC8qIEphdmFTY3Jp
cHRDb3JlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEphdmFTY3JpcHRDb3JlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgfTsKIAkJRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25m
aWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpAQCAtMTg1Nyw2
ICsxODU5LDcgQEAKIAkJCQk4NjhCRkEwNzExN0NFRkQxMDBCOTA4QjEgLyogU3RyaW5nSW1wbC5o
ICovLAogCQkJCTg2Qjk5QUUyMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdJbXBsQmFzZS5oICov
LAogCQkJCTg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCAqLywK
KwkJCQlGM0JEMzFEMDEyNjczMDE4MDA2NTQ2N0YgLyogVGV4dFBvc2l0aW9uLmggKi8sCiAJCQkJ
ODY4QkZBMTUxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5jcHAgKi8sCiAJCQkJODY4QkZB
MTYxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5oICovLAogCQkJKTsKQEAgLTIzNDYsNiAr
MjM0OSw3IEBACiAJCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3Rp
Y3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzRjVDREMxMjY5MjI5QjAw
NDkxOTFFIC8qIE51bGxQdHIuaCBpbiBIZWFkZXJzICovLAorCQkJCUYzQkQzMUVEMTI2NzM1Nzcw
MDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmggYi9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9UZXh0UG9zaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2RjNTk0OTBkZGFjYWIxZDdlYTk4OTFm
Zjc1MTUxZmZkNTYwYjZmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFRleHRQb3NpdGlvbl9oCisjZGVmaW5lIFRleHRQb3NpdGlvbl9oCisKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLyoKKyAqIFRleHQgUG9zaXRp
b24KKyAqCisgKiBUZXh0UG9zaXRpb24gc3RydWN0dXJlIHNwZWNpZmllcyBjb29yZGluYXRlcyB3
aXRoaW4gYW4gdGV4dCByZXNvdXJjZS4gSXQgaXMgdXNlZCBtb3N0bHkKKyAqIGZvciBzYXZpbmcg
c2NyaXB0IHNvdXJjZSBwb3NpdGlvbi4KKyAqCisgKiBMYXRlciBUZXh0UG9zaXRpb24wIGFuZCBU
ZXh0UG9zaXRpb24xIGFuZCBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUgbWVyZ2VkIHRvZ2V0aGVy
IHF1aXRlIGVhc2lseS4KKyAqCisgKiAwLWJhc2VkIGFuZCAxLWJhc2VkCisgKgorICogTGluZSBh
bmQgY29sdW1uIG51bWJlcnMgY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgemVyby1iYXNlZCBvciAx
LWJhc2VkLiBTaW5jZQorICogYm90aCBwcmFjdGljZXMgY29leGlzdCBpbiBXZWJLaXQgc291cmNl
IGJhc2UsICdpbnQnIHR5cGUgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGgKKyAqIGEgZGVkaWNhdGVk
IHdyYXBwZXIgdHlwZXMsIHNvIHRoYXQgY29tcGlsZXIgaGVscGVkIHVzIHdpdGggdGhpcyBhbWJp
Z3VpdHkuCisgKgorICogSGVyZSB3ZSBpbnRyb2R1Y2UgMiB0eXBlcyBvZiBudW1iZXJzOiBaZXJv
QmFzZWROdW1iZXIgYW5kIE9uZUJhc2VkTnVtYmVyIGFuZAorICogMiBjb3JyZXNwb25kaW5nIHR5
cGVzIG9mIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUuIFdoaWxlIG9ubHkgb25lIHR5cGUgb3VnaHQg
dG8gYmUgZW5vdWdoLAorICogdGhpcyBpcyBkb25lIHRvIGtlZXAgdHJhbnNpdGlvbiB0byB0aGUg
bmV3IHR5cGVzIGFzIHRyYW5zcGFyZW50IGFzIHBvc3NpYmxlOgorICogZS5nLiBpbiBhcmVhcyB3
aGVyZSAwLWJhc2VkIGludGVnZXJzIGFyZSB1c2VkLCBUZXh0UG9zaXRpb24wIHNob3VsZCBiZSBp
bnRyb2R1Y2VkLiBUaGlzCisgKiB3YXkgYWxsIGNoYW5nZXMgd2lsbCByZW1haW4gdHJhY2thYmxl
LgorICoKKyAqIExhdGVyIGJvdGggbnVtYmVyIHR5cGVzIGNhbiBiZSBtZXJnZWQgaW4gb25lIHR5
cGUgcXVpdGUgZWFzaWx5LgorICoKKyAqIEZvciB0eXBlIHNhZmV0eSBhbmQgZm9yIHRoZSBmdXR1
cmUgdHlwZSBtZXJnZSBpdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgb3BlcmF0aW9ucyBpbiBBUEkK
KyAqIHRoYXQgYWNjZXB0IG9yIHJldHVybiBpbnRlZ2VyIGhhdmUgYSBuYW1lIGV4cGxpY2l0bHkg
ZGVmaW5pbmcgYmFzZSBvZiBpbnRlZ2VyLiBGb3IgdGhpcyByZWFzb24KKyAqIGludC1yZWNlaXZp
bmcgY29uc3RydWN0b3JzIGFyZSBoaWRkZW4gZnJvbSBBUEkuCisgKi8KKwordGVtcGxhdGU8dHlw
ZW5hbWUgTlVNQkVSPgorY2xhc3MgVGV4dFBvc2l0aW9uIHsKK3B1YmxpYzoKKyAgICBUZXh0UG9z
aXRpb24oTlVNQkVSIGxpbmUsIE5VTUJFUiBjb2x1bW4pCisgICAgICAgIDogbV9saW5lKGxpbmUp
CisgICAgICAgICwgbV9jb2x1bW4oY29sdW1uKQorICAgIHsKKyAgICB9CisgICAgVGV4dFBvc2l0
aW9uKCkge30KKworICAgIC8vIEEgJ21pbmltdW0nIHZhbHVlIG9mIHBvc2l0aW9uLCB1c2VkIGFz
IGEgZGVmYXVsdCB2YWx1ZS4KKyAgICBzdGF0aWMgVGV4dFBvc2l0aW9uPE5VTUJFUj4gbWluaW11
bVBvc2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPE5VTUJFUj4oTlVNQkVSOjpiYXNlKCks
IE5VTUJFUjo6YmFzZSgpKTsgfQorCisgICAgLy8gQSB2YWx1ZSB3aXRoIGxpbmUgdmFsdWUgbGVz
cyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxlIHBvc2l0aW9uLgorICAgIHN0
YXRpYyBUZXh0UG9zaXRpb248TlVNQkVSPiBiZWxvd1JhbmdlUG9zaXRpb24oKSB7IHJldHVybiBU
ZXh0UG9zaXRpb248TlVNQkVSPihOVU1CRVI6OmJlbG93QmFzZSgpLCBOVU1CRVI6OmJhc2UoKSk7
IH0KKworICAgIE5VTUJFUiBtX2xpbmU7CisgICAgTlVNQkVSIG1fY29sdW1uOworfTsKKworY2xh
c3MgT25lQmFzZWROdW1iZXI7CisKKy8vIEFuIGludCB3cmFwcGVyIHRoYXQgYWx3YXlzIHJlbWlu
ZHMgeW91IHRoYXQgdGhlIG51bWJlciBzaG91bGQgYmUgMC1iYXNlZAorY2xhc3MgWmVyb0Jhc2Vk
TnVtYmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGZyb21aZXJvQmFz
ZWRJbnQoaW50IHplcm9CYXNlZEludCkgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyKHplcm9CYXNl
ZEludCk7IH0KKworICAgIFplcm9CYXNlZE51bWJlcigpIHt9CisKKyAgICBpbnQgemVyb0Jhc2Vk
SW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgT25lQmFzZWROdW1iZXIgY29u
dmVydFRvT25lQmFzZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBaZXJvQmFzZWROdW1iZXIgYmFz
ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGJlbG93QmFzZSgp
IHsgcmV0dXJuIC0xOyB9CisKK3ByaXZhdGU6CisgICAgWmVyb0Jhc2VkTnVtYmVyKGludCB2YWx1
ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKworLy8gQW4gaW50
IHdyYXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBi
ZSAxLWJhc2VkCitjbGFzcyBPbmVCYXNlZE51bWJlciB7CitwdWJsaWM6CisgICAgc3RhdGljIE9u
ZUJhc2VkTnVtYmVyIGZyb21PbmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9u
ZUJhc2VkTnVtYmVyKG9uZUJhc2VkSW50KTsgfQorICAgIE9uZUJhc2VkTnVtYmVyKCkge30KKwor
ICAgIGludCBvbmVCYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBpbnQg
Y29udmVydEFzWmVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KKyAg
ICBaZXJvQmFzZWROdW1iZXIgY29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVy
b0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQorCisgICAgc3Rh
dGljIE9uZUJhc2VkTnVtYmVyIGJhc2UoKSB7IHJldHVybiAxOyB9CisgICAgc3RhdGljIE9uZUJh
c2VkTnVtYmVyIGJlbG93QmFzZSgpIHsgcmV0dXJuIDA7IH0KKworcHJpdmF0ZToKKyAgICBPbmVC
YXNlZE51bWJlcihpbnQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkge30KKyAgICBpbnQgbV92YWx1
ZTsKK307CisKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPFplcm9CYXNlZE51bWJlcj4gVGV4dFBvc2l0
aW9uMDsKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPE9uZUJhc2VkTnVtYmVyPiBUZXh0UG9zaXRpb24x
OworCitpbmxpbmUgVGV4dFBvc2l0aW9uMCB0b1plcm9CYXNlZFRleHRQb3NpdGlvbihjb25zdCBU
ZXh0UG9zaXRpb24xJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChwb3Np
dGlvbi5tX2xpbmUuY29udmVydFRvWmVyb0Jhc2VkKCksIHBvc2l0aW9uLm1fY29sdW1uLmNvbnZl
cnRUb1plcm9CYXNlZCgpKTsKK30KKworaW5saW5lIFRleHRQb3NpdGlvbjEgdG9PbmVCYXNlZFRl
eHRQb3NpdGlvbihjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4g
VGV4dFBvc2l0aW9uMShwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvT25lQmFzZWQoKSwgcG9zaXRp
b24ubV9jb2x1bW4uY29udmVydFRvT25lQmFzZWQoKSk7Cit9CisKK2lubGluZSBPbmVCYXNlZE51
bWJlciBaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChtX3ZhbHVlICsgMSk7Cit9CisK
K30KKwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb24wOwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb24x
OworCisjZW5kaWYgLy8gVGV4dFBvc2l0aW9uX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDZlMDk2MTA5NzI3Nzg5NmZkZTE5NDAwMzcz
MGE5MThlN2Q4YTNlNS4uZTMyN2Y0NTJiNDUzZmViMjFjZWExNjIxZTA4MmMyNDAzYjEzZjYwOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw4MSBAQAorMjAxMC0xMC0xOSAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2NyaXB0IGNvbHVtbiBwb3NpdGlvbiB3aXRoaW4g
SFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNzEKKworICAgICAgICBSZXBsYWNlcyBsaW5l
IG51bWJlciB3aXRoIFRleHRQb3NpdGlvbiBzdHJ1Y3Qgc28gdGhhdCBzY3JpcHQgZW5naW5lCisg
ICAgICAgIGdldHMgc2NyaXB0IHN0YXJ0aW5nIGxpbmUvY29sdW1uLgorCisgICAgICAgICogRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFNvdXJjZUNvZGU6OlNjcmlwdFNvdXJjZUNvZGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
aGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNj
aGVkdWxlZEFjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJQb3Np
dGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
U2NyaXB0U291cmNlQ29kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6
U2NyaXB0U291cmNlQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpz
dGFydExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6c3RhcnRQb3Np
dGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5l
ck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOgor
ICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNv
bXBpbGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhQcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOFByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5OjpydW5TY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVh
dGUpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIpOgorICAgICAgICAqIGRvbS9Q
ZW5kaW5nU2NyaXB0Lmg6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5n
U2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpzdGFydGluZ1Bvc2l0aW9uKToKKyAgICAg
ICAgKiBkb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogZG9tL1hNTERv
Y3VtZW50UGFyc2VyLmg6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5z
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6CisgICAgICAgICog
ZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1
blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERv
Y3VtZW50UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGlu
Z1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bmluaXRpYWxpemVkUG9z
aXRpb25WYWx1ZTEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJl
ZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0
VG9Qcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRT
dGFydFRhZyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmg6CisKIDIw
MTAtMTAtMDYgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93dGYvdGV4dC9UZXh0UG9zaXRpb24uaCBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYwMDk4NDZlYTA1MmRmYmZmMDZh
NDA5ZjIxOTlhNzAyMmU4OTdkNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVm
IFdlYkNvcmVfRldEX1RleHRQb3NpdGlvbl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX1RleHRQb3Np
dGlvbl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGV4dFBvc2l0aW9uLmg+CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgKaW5kZXggMzJkNjI5OGNkYmRhNzcy
ZGFhMTNlMTAzM2UzY2YwYWE0MGY1OTRiMi4uMDkyZWViOGYwOGEzMjlhMzkxZDk4NzE2ZGZlZGQ5
OTk2NTYwODhjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VD
b2RlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgKQEAgLTM1
LDE1ICszNSwxNiBAQAogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVk
ZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAg
IFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9
IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBT
dHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0UG9zaXRp
b24xJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAg
ICAgICAgIDogbV9wcm92aWRlcihTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwg
dXJsLmlzTnVsbCgpID8gU3RyaW5nKCkgOiB1cmwuc3RyaW5nKCkpKQotICAgICAgICAsIG1fY29k
ZShtX3Byb3ZpZGVyLCBzdGFydExpbmUpCisgICAgICAgICwgbV9jb2RlKG1fcHJvdmlkZXIsIHN0
YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpCiAgICAgICAgICwgbV91cmwodXJsKQog
ICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFj
dGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKaW5kZXgg
ZGNkMGJiMzM3NzE4MTMxODQyMGMxMDczYmUyNTFhOWU1ODRiYTRiNy4uNzA4ZmJlNjdmZTk0ZDc3
MjIxMmM4YmMzZDI3ZGUxOGJkNTEwMTJjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVk
QWN0aW9uLmNwcApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjaGVk
dWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQsIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9jb2Rl
KFN0cmluZygpLCBLVVJMKCksIDApCisgICAgLCBtX2NvZGUoU3RyaW5nKCksIEtVUkwoKSwgVGV4
dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7CiAgICAgbV9mdW5jdGlvbiA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNDkwNGE0ZTY1ZmRlOWNiM2JmNDNiYmE1NGE1
YjE4ZDJhZjc4MmQxMC4uYjlkMTA3NWQyNDM1MDBjMTI0OTYwMDVhNWNlYzhmZmNlNmZmNjViZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0yNjIsMjAgKzI2
MiwxMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTaG91bAogICAgIHJldHVybiBTY3JpcHRWYWx1ZShv
YmplY3QpOwogfQogCi1pbnQgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyTGluZU51bWJl
cigpIGNvbnN0CitUZXh0UG9zaXRpb24wIFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlclBv
c2l0aW9uKCkgY29uc3QKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwogICAgIGlm
IChwYXJzZXIpCi0gICAgICAgIHJldHVybiBwYXJzZXItPmxpbmVOdW1iZXIoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlckNvbHVtbk51bWJl
cigpIGNvbnN0Ci17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBwYXJzZXIgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKLSAgICBpZiAocGFy
c2VyKQotICAgICAgICByZXR1cm4gcGFyc2VyLT5jb2x1bW5OdW1iZXIoKTsKLSAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIHBhcnNlci0+dGV4dFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFRl
eHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmgKaW5kZXggNjNmMWMxN2RmNDU2NTYxZGMyYWMzMWE0YmQ0NjQzYjlmODNm
MmQ4Mi4uZDA5M2YzOTkwOGE2NDRjZWQ2NzBlZWIwZDM4NTA2ODUyZWVmYTBkYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE1NSw4ICsxNTUsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50Kik7CiAKLSAgICBpbnQgZXZlbnRI
YW5kbGVyTGluZU51bWJlcigpIGNvbnN0OwotICAgIGludCBldmVudEhhbmRsZXJDb2x1bW5OdW1i
ZXIoKSBjb25zdDsKKyAgICBUZXh0UG9zaXRpb24wIGV2ZW50SGFuZGxlclBvc2l0aW9uKCkgY29u
c3Q7CiAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGJvb2wgcHJvY2Vzc2lu
Z1RpbWVyQ2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayA9IHByb2Nlc3NpbmdU
aW1lckNhbGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCB1c2UgdGhl
IHBhcmFtZXRlciB3b3JsZCBhdCBhbGwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcAppbmRleCA3MmRmNzlkZWQzZWQ0N2NmZjFhMjdiNTk1M2EzNTk5NjNjNzdh
NjMwLi5iNDZmYzVhNmQ1NjNiYzlkNmQ0ZDRlNmY2MzNhMTI5Y2Y5OTEzNmUxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTUwLDggKzUwLDggQEAg
UGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1i
ZXIgPSAwOworICAgIC8vIEZJWE1FOiBWZXJ5IHN0cmFuZ2U6IHdlIGluaXRpYWxpemUgemVyby1i
YXNlZCBudW1iZXIgd2l0aCAnMScuCisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbihXVEY6Olpl
cm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCgxKSwgV1RGOjpaZXJvQmFzZWROdW1iZXI6
OmJhc2UoKSk7CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKIAogICAgIGlmIChGcmFtZSogZnJhbWUg
PSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7CkBAIC02NCwxMiArNjQsMTEgQEAgUGFzc1Jl
ZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKE5v
ZGUqIG5vZGUsIEF0dHJpYnUKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKLSAg
ICAgICAgbGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckxpbmVOdW1i
ZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5k
bGVyQ29sdW1uTnVtYmVyKCk7CisgICAgICAgIHBvc2l0aW9uID0gc2NyaXB0Q29udHJvbGxlci0+
ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKICAgICAgICAgc291cmNlVVJMID0gbm9kZS0+ZG9jdW1l
bnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlz
dGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgbm9kZS0+aXNTVkdFbGVt
ZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgcmV0dXJuIFY4TGF6eUV2
ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgbm9kZS0+aXNT
VkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgcG9zaXRpb24sIFdvcmxkQ29u
dGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKIH0KIAogUGFzc1JlZlB0cjxWOExhenlFdmVudExp
c3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmli
dXRlKiBhdHRyKQpAQCAtODEsMTAgKzgwLDYgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3Rl
bmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkKICAg
ICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGxpbmVO
dW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBzb3VyY2VV
Ukw7Ci0KICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNj
cmlwdCgpOwogICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+Y2FuRXhlY3V0ZVNjcmlwdHMoQWJv
dXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk0LDEwICs4OSw5IEBA
IFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVtYmVyKCk7
Ci0gICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyQ29sdW1u
TnVtYmVyKCk7Ci0gICAgc291cmNlVVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmlu
ZygpOwotICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxO
YW1lKCkuc3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCksIGF0dHIt
PnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXb3JsZENvbnRl
eHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbiA9IHNj
cmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlclBvc2l0aW9uKCk7CisgICAgU3RyaW5nIHNvdXJj
ZVVSTCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gVjhM
YXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBmcmFt
ZS0+ZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VVUkws
IHBvc2l0aW9uLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CiB9CiAKIFN0cmlu
ZyBldmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQqIGRvY3VtZW50LCBFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291
cmNlQ29kZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKaW5kZXgg
ZGJjOWQ1ZTZmYzYwMDdmY2ZkZDY2MDI0ZGIwNzgyNmM2NjI2M2I1Yi4uMjQ3ODE1MWU2ZjU0ZmM3
NTAzOGYwNDFkZWM5ODBkN2E3NTZkMmFkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3Vy
Y2VDb2RlLmgKQEAgLTM1LDE2ICszNSwxNyBAQAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3Qg
U3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9
IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VS
TCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uID0gVGV4
dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgICAgIDogbV9zb3VyY2Uoc291cmNl
KQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCiAgICAgICAgICwgbV91cmwodXJsKQotICAg
ICAgICAsIG1fc3RhcnRMaW5lKHN0YXJ0TGluZSkKKyAgICAgICAgLCBtX3N0YXJ0UG9zaXRpb24o
c3RhcnRQb3NpdGlvbikKICAgICB7CiAgICAgfQogCkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgOiBtX3NvdXJjZShjcy0+c2NyaXB0KCkpCiAgICAgICAgICwgbV9jYWNoZWRTY3Jp
cHQoY3MpCiAgICAgICAgICwgbV91cmwoUGFyc2VkVVJMU3RyaW5nLCBjcy0+dXJsKCkpCi0gICAg
ICAgICwgbV9zdGFydExpbmUoMSkKKyAgICAgICAgLCBtX3N0YXJ0UG9zaXRpb24oVGV4dFBvc2l0
aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgewogICAgIH0KIApAQCAtNjMsMTMgKzY0LDE0
IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlOyB9CiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQoKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlZFNjcmlwdC5nZXQoKTsgfQogICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsg
cmV0dXJuIG1fdXJsOyB9Ci0gICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnRMaW5lOyB9CisgICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRQb3Np
dGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsgfQorICAgIGNvbnN0IFRleHRQb3NpdGlvbjEmIHN0
YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRpb247IH0KIAogcHJpdmF0
ZToKICAgICBTdHJpbmcgbV9zb3VyY2U7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
U2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKICAgICBLVVJMIG1fdXJsOwotICAgIGludCBtX3N0YXJ0
TGluZTsKKyAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRQb3NpdGlvbjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZl
bnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIu
Y3BwCmluZGV4IDdmMTNjNWE4ZmIyN2QzM2JiZjFkMzQxMGEwMTNlYmM3OTVkOTNkMjMuLjdmNDYz
MzMwNjJkNmZlYjdiZTlmMTc5NjM1NmM2YjA1Y2IzY2I4ZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAtNDEsMTQgKzQxLDEzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotVjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5l
cihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJp
bmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29s
dW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKK1Y4TGF6
eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlv
bk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcg
c291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbiwgY29uc3QgV29ybGRDb250
ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCiAgICAgOiBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcih0
cnVlLCB3b3JsZENvbnRleHQpCiAgICAgLCBtX2Z1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCiAg
ICAgLCBtX2lzU1ZHRXZlbnQoaXNTVkdFdmVudCkKICAgICAsIG1fY29kZShjb2RlKQogICAgICwg
bV9zb3VyY2VVUkwoc291cmNlVVJMKQotICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0g
ICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCisgICAgLCBtX3Bvc2l0aW9uKHBvc2l0
aW9uKQogewogfQogCkBAIC0xMTQsNyArMTEzLDcgQEAgdm9pZCBWOExhenlFdmVudExpc3RlbmVy
OjpwcmVwYXJlTGlzdGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
ICAgICAvLyBJbnNlcnQgJ1xuJyBvdGhlcndpc2UgLy8tc3R5bGUgY29tbWVudHMgY291bGQgYnJl
YWsgdGhlIGhhbmRsZXIuCiAgICAgY29kZS5hcHBlbmQoICAiXG59KS5jYWxsKHRoaXMsIGV2dCk7
fX19fSkiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0cmluZyA9
IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3Jp
cHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmluZywgbV9zb3VyY2VV
UkwsIG1fbGluZU51bWJlcik7CisgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBW
OFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmluZywgbV9zb3VyY2VVUkwsIG1f
cG9zaXRpb24pOwogICAgIGlmICghc2NyaXB0LklzRW1wdHkoKSkgewogICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSA9IHByb3h5LT5ydW5TY3JpcHQoc2NyaXB0LCBmYWxzZSk7CiAg
ICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5oCmluZGV4IGYxNzRkMjNiZjEzMWIwMTBlZTRmNTliYzQyNTI3ZWU4Njc0
YTA2MDguLjA4NDY3ZmU1ZjdhYjk3MDE0ZDk0NTNhZjI2ZmEzZjE2NmNlZTYzYjEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDUsOSArNDYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gQSBWOExhenlFdmVu
dExpc3RlbmVyIGlzIGFsd2F5cyBhIEhUTUwgZXZlbnQgaGFuZGxlci4KICAgICBjbGFzcyBWOExh
enlFdmVudExpc3RlbmVyIDogcHVibGljIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBT
dHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50
IGNvbHVtbk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNv
ZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlv
biwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhMYXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlv
bk5hbWUsIGlzU1ZHRXZlbnQsIGNvZGUsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyLCB3b3JsZENvbnRleHQpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhM
YXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGlzU1ZHRXZlbnQsIGNvZGUsIHNvdXJjZVVS
TCwgcG9zaXRpb24sIHdvcmxkQ29udGV4dCkpOwogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCBib29sIGlzTGF6eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTU2LDcgKzU3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUxpc3RlbmVy
T2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNT
VkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBpbnQg
bGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3
b3JsZENvbnRleHQpOworICAgICAgICBWOExhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYg
ZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3Qg
U3RyaW5nIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24sIGNvbnN0IFdv
cmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KTsKIAogICAgICAgICB2aXJ0dWFsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqKTsKIApAQCAtNzAsOCAr
NzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9pc1NWR0V2ZW50Owog
ICAgICAgICBTdHJpbmcgbV9jb2RlOwogICAgICAgICBTdHJpbmcgbV9zb3VyY2VVUkw7Ci0gICAg
ICAgIGludCBtX2xpbmVOdW1iZXI7Ci0gICAgICAgIGludCBtX2NvbHVtbk51bWJlcjsKKyAgICAg
ICAgVGV4dFBvc2l0aW9uMCBtX3Bvc2l0aW9uOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCmluZGV4IDkwYzJlZDgwYmZmNGZmYTVhOTRiMWIz
N2Q5YjEyYjVkZDU5ZDcxYTAuLjkyYjgyMTYwYjA1NDk1NzI5OWI5NTIzNTUxNzNjZjdjM2EzMjQ3
NzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcApAQCAtMjM1LDEyICsyMzUsMTMgQEAgVjhQcm94
eTo6flY4UHJveHkoKQogICAgIHdpbmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9iYWwoKTsKIH0KIAot
djg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lLCB2
ODo6U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKK3Y4OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94
eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRpb24sIHY4
OjpTY3JpcHREYXRhKiBzY3JpcHREYXRhKQogewogICAgIGNvbnN0IHVpbnQxNl90KiBmaWxlTmFt
ZVN0cmluZyA9IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsKICAgICB2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IG5hbWUgPSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5hbWVTdHJpbmcsIGZpbGVOYW1l
Lmxlbmd0aCgpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBsaW5lID0gdjg6OkludGVn
ZXI6Ok5ldyhiYXNlTGluZSk7Ci0gICAgdjg6OlNjcmlwdE9yaWdpbiBvcmlnaW4obmFtZSwgbGlu
ZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gbGluZSA9IHY4OjpJbnRlZ2VyOjpOZXco
c2NyaXB0U3RhcnRQb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCkpOworICAgIHY4OjpIYW5k
bGU8djg6OkludGVnZXI+IGNvbHVtbiA9IHY4OjpJbnRlZ2VyOjpOZXcoc2NyaXB0U3RhcnRQb3Np
dGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKSk7CisgICAgdjg6OlNjcmlwdE9yaWdpbiBvcmln
aW4obmFtZSwgbGluZSwgY29sdW1uKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlw
dCA9IHY4OjpTY3JpcHQ6OkNvbXBpbGUoY29kZSwgJm9yaWdpbiwgc2NyaXB0RGF0YSk7CiAgICAg
cmV0dXJuIHNjcmlwdDsKIH0KQEAgLTM5Myw3ICszOTQsNyBAQCB2ODo6TG9jYWw8djg6OlZhbHVl
PiBWOFByb3h5OjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2UsIE5vZGUq
IG5vZAogCiAgICAgICAgIC8vIE5PVEU6IEZvciBjb21wYXRpYmlsaXR5IHdpdGggV2ViQ29yZSwg
U2NyaXB0U291cmNlQ29kZSdzIGxpbmUgc3RhcnRzIGF0CiAgICAgICAgIC8vIDEsIHdoZXJlYXMg
djggc3RhcnRzIGF0IDAuCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0g
Y29tcGlsZVNjcmlwdChjb2RlLCBzb3VyY2UudXJsKCksIHNvdXJjZS5zdGFydExpbmUoKSAtIDEs
IHNjcmlwdERhdGEuZ2V0KCkpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlw
dCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgpLCBXVEY6OnRvWmVyb0Jhc2VkVGV4
dFBvc2l0aW9uKHNvdXJjZS5zdGFydFBvc2l0aW9uKCkpLCBzY3JpcHREYXRhLmdldCgpKTsKICNp
ZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnRyYWNlRXZlbnRF
bmQoInY4LmNvbXBpbGUiLCBub2RlLCAiIik7CiAKQEAgLTQyNSw3ICs0MjYsNyBAQCB2ODo6TG9j
YWw8djg6OlZhbHVlPiBWOFByb3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBz
Y3JpcHQsIGJvb2wgaXNJbgogICAgICAgICAvLyBGSVhNRTogSWRlYWxseSwgd2Ugc2hvdWxkIGJl
IGFibGUgdG8gcmUtdXNlIHRoZSBvcmlnaW4gb2YgdGhlCiAgICAgICAgIC8vIHNjcmlwdCBwYXNz
ZWQgdG8gdXMgYXMgdGhlIGFyZ3VtZW50IGluc3RlYWQgb2YgdXNpbmcgYW4gZW1wdHkgc3RyaW5n
CiAgICAgICAgIC8vIGFuZCAwIGJhc2VMaW5lLgotICAgICAgICBzY3JpcHQgPSBjb21waWxlU2Ny
aXB0KGNvZGUsICIiLCAwKTsKKyAgICAgICAgc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCAi
IiwgVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkpOwogICAgIH0KIAogICAgIGlmICho
YW5kbGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAppbmRleCA4YTBkYTcyOTU2ODBk
NTIzY2Y3NDBmMzg2ZjNjZWYxZTk5MTEwNWMzLi44MGQ0NjkxYjQ4MDU0OGYzYWQ3ZGRmNzlkZTJi
Mzc5NzM0MTc5OGRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAtMjc5LDcgKzI3OSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNoZWNrTmV3TGVnYWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogCi0gICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5n
PiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIHY4OjpTY3JpcHRE
YXRhKiA9IDApOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxl
U2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgdjg6OlNjcmlwdERh
dGEqID0gMCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBjb2RlIGlzIGRpZmZlcmVu
dCBmcm9tIHplcm8sIGEgRE9NIGV4Y2VwdGlvbiBpcwogICAgICAgICAvLyBzY2hlZHVsZSB0byBi
ZSB0aHJvd24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAKaW5kZXggMTZlMGI0MTAxZWZkYzM1YWU3NDQxODE3YjA2ODdkYjZiNWE2
NWEyNS4uY2VmYjJmYWE3MzkwODk0YjM1ZDY1YWQ1M2YyMWE4ZmJjN2RkYTU2MSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcApA
QCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpmb3Jn
ZXRWOEV2ZW50T2JqZWN0KEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVNj
cmlwdFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblN0YXRlKiBzdGF0ZSkKK1NjcmlwdFZhbHVlIFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRpb24sIFdv
cmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAgU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3QKICAgICB2
ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKIAogICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBzY3JpcHRTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKHNjcmlwdCk7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6U2NyaXB0PiBjb21waWxlZFNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoc2Ny
aXB0U3RyaW5nLCBmaWxlTmFtZSwgYmFzZUxpbmUpOworICAgIHY4OjpIYW5kbGU8djg6OlNjcmlw
dD4gY29tcGlsZWRTY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHNjcmlwdFN0cmluZywg
ZmlsZU5hbWUsIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHJlc3VsdCA9IHJ1blNjcmlwdChjb21waWxlZFNjcmlwdCk7CiAKICAgICBpZiAoIWV4Y2VwdGlv
bkNhdGNoZXIuQ2FuQ29udGludWUoKSkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2ODo6TG9jYWw8djg6
OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJ1blNjcmlwdCh2ODo6SGFuZGxl
PHY4OjpTY3JpcAogICAgIC8vIENvbXB1dGUgdGhlIHNvdXJjZSBzdHJpbmcgYW5kIHByZXZlbnQg
YWdhaW5zdCBpbmZpbml0ZSByZWN1cnNpb24uCiAgICAgaWYgKG1fcmVjdXJzaW9uID49IGtNYXhS
ZWN1cnNpb25EZXB0aCkgewogICAgICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gY29kZSA9IHY4
RXh0ZXJuYWxTdHJpbmcoInRocm93IFJhbmdlRXJyb3IoJ1JlY3Vyc2lvbiB0b28gZGVlcCcpIik7
Ci0gICAgICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZSwgIiIsIDApOwor
ICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGUsICIiLCBUZXh0UG9z
aXRpb24wOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKFY4UHJveHk6Omhh
bmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA1ODgyNGI5ZWVmNmY0OTE0MDg0Yzc3NzE2MWUyM2Y2
ZTMwYWJlMjgzLi5lNzBjM2QyODRhYmU1MmUzNWJhYzQ5ODA1ZTczYTRjZjQ3NGU5Yzk1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgK
QEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8
djguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0cmFja0V2ZW50KEV2ZW50Kik7CiAKICAg
ICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVudCBleGVjdXRpb24g
ZW52aXJvbm1lbnQuCi0gICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
c2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25TdGF0ZSopOworICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBT
dHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9u
MCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKik7CiAK
ICAgICAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgY29udGV4dC4KICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gdjg6OkxvY2FsPHY4
OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDdkYjBkOGQzNzM3MDliMmU5NzNiNjdlNzcy
M2U0ZmMzMTFmYmNhNTkuLmI1NmQzODM2ZDdlNmJiMWFjNWQyYzhjNWVkNjMwZjA3YzI3NmVmMjIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApA
QCAtNzUsNyArNzUsNyBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFs
dWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLAogICAgIH0KIAogICAgIFdv
cmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKLSAgICBTY3JpcHRWYWx1ZSByZXN1bHQg
PSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVybCgp
LnN0cmluZygpLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgpIC0gMSwgJnN0YXRlKTsKKyAgICBTY3Jp
cHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBz
b3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBXVEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKHNv
dXJjZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwgJnN0YXRlKTsKICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gc3RhdGUuZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUGVuZGluZ1Njcmlw
dC5jcHAgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAppbmRleCA0MmUyMjVhN2YzMmEx
YjBjZGMxYmMzNDUxYjY1NDk3YTQ2MTM1Njg5Li4xOGY2MDcxMWE0Y2QzMDIzMjliY2FhZDRkOThi
OGEyMGM3Y2UxMmZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAor
KysgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcApAQCAtNDAsNyArNDAsNyBAQCBQZW5k
aW5nU2NyaXB0Ojp+UGVuZGluZ1NjcmlwdCgpCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IFBlbmRpbmdT
Y3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKQogewogICAgIHNldENhY2hlZFNjcmlwdCgw
KTsKLSAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IDA7CisgICAgbV9zdGFydGluZ1Bvc2l0aW9u
ID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7CiAgICAgbV93YXRjaGluZ0Zv
ckxvYWQgPSBmYWxzZTsKICAgICByZXR1cm4gbV9lbGVtZW50LnJlbGVhc2UoKTsKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaCBiL1dlYkNvcmUvZG9tL1BlbmRpbmdT
Y3JpcHQuaAppbmRleCA0NGUxZTQ5Mjg2NzZkNzk2MDIyZGQyOTA1NDU3NjAxNWI3YTI2ZTQ0Li4w
ODM1MDdhOWI5MDkxNmJjZjI4NjUxZGY2MjllNWIyM2JiOTQyMmM4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKKysrIGIvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5o
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDMsMTQgKzQ0LDE0IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBQZW5kaW5n
U2NyaXB0IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBQZW5k
aW5nU2NyaXB0KCkKLSAgICAgICAgOiBtX3N0YXJ0aW5nTGluZU51bWJlcigwKQorICAgICAgICA6
IG1fc3RhcnRpbmdQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkK
ICAgICAgICAgLCBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKICAgICB7CiAgICAgfQogCiAgICAg
UGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JiBvdGhlcikKICAgICAgICAgOiBDYWNo
ZWRSZXNvdXJjZUNsaWVudChvdGhlcikKLSAgICAgICAgLCBtX3N0YXJ0aW5nTGluZU51bWJlcihv
dGhlci5tX3N0YXJ0aW5nTGluZU51bWJlcikKKyAgICAgICAgLCBtX3N0YXJ0aW5nUG9zaXRpb24o
b3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQogICAgICAgICAsIG1fd2F0Y2hpbmdGb3JMb2FkKG90
aGVyLm1fd2F0Y2hpbmdGb3JMb2FkKQogICAgICAgICAsIG1fZWxlbWVudChvdGhlci5tX2VsZW1l
bnQpCiAgICAgewpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICh0aGlzID09
ICZvdGhlcikKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgICAgICBtX3N0YXJ0aW5n
TGluZU51bWJlciA9IG90aGVyLm1fc3RhcnRpbmdMaW5lTnVtYmVyOworICAgICAgICBtX3N0YXJ0
aW5nUG9zaXRpb24gPSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247CiAgICAgICAgIG1fd2F0Y2hp
bmdGb3JMb2FkID0gb3RoZXIubV93YXRjaGluZ0ZvckxvYWQ7CiAgICAgICAgIG1fZWxlbWVudCA9
IG90aGVyLm1fZWxlbWVudDsKICAgICAgICAgc2V0Q2FjaGVkU2NyaXB0KG90aGVyLmNhY2hlZFNj
cmlwdCgpKTsKQEAgLTc0LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IE5vIHNl
dHRlciBtZWFucyB0aGlzIGlzIG5ldmVyIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuIDAuCiAg
ICAgLy8gVGhpcyBpcyBlaXRoZXIgdW5uZWNlc3Nhcnkgb3IgaW5jb3JyZWN0LgotICAgIGludCBz
dGFydGluZ0xpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5nTGluZU51bWJlcjsg
fQorICAgIFRleHRQb3NpdGlvbjEgc3RhcnRpbmdQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnRpbmdQb3NpdGlvbjsgfQogCiAgICAgYm9vbCB3YXRjaGluZ0ZvckxvYWQoKSBjb25zdCB7
IHJldHVybiBtX3dhdGNoaW5nRm9yTG9hZDsgfQogICAgIHZvaWQgc2V0V2F0Y2hpbmdGb3JMb2Fk
KGJvb2wgYikgeyBtX3dhdGNoaW5nRm9yTG9hZCA9IGI7IH0KQEAgLTg5LDcgKzkwLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwog
CiBwcml2YXRlOgotICAgIGludCBtX3N0YXJ0aW5nTGluZU51bWJlcjsgLy8gT25seSB1c2VkIGZv
ciBpbmxpbmUgc2NyaXB0IHRhZ3MuCisgICAgVGV4dFBvc2l0aW9uMSBtX3N0YXJ0aW5nUG9zaXRp
b247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgogICAgIGJvb2wgbV93YXRj
aGluZ0ZvckxvYWQ7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKICAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmggYi9XZWJDb3JlL2RvbS9TY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIuaAppbmRleCA4YjE2MzA0MTIxMDRlNGU0NWEwMTMyM2RkMjI1
NWU2NTY0ZTM0MDQ1Li5kOWJmODVjYWJmNDU1MzNjOTgxYmU2MGZjNWJhOTY5Nzc1ZTQyNDNjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAorKysgYi9X
ZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaApAQCAtMjcsMTAgKzI3LDEwIEBA
CiAjZGVmaW5lIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcl9oCiAKICNpbmNsdWRlICJEZWNvZGVk
RGF0YURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2VnbWVudGVkU3RyaW5nOwogY2xhc3Mg
WFNTQXVkaXRvcjsKIAogY2xhc3MgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyIDogcHVibGljIERl
Y29kZWREYXRhRG9jdW1lbnRQYXJzZXIgewpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBUaGVzZSBhcmUgdXNlZCB0byBleHBvc2UgdGhlIGN1cnJlbnQgbGluZS9jb2x1bW4gdG8g
dGhlIHNjcmlwdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0ID0gMDsKIAogICAgIFhTU0F1
ZGl0b3IqIHhzc0F1ZGl0b3IoKSBjb25zdCB7IHJldHVybiBtX3hzc0F1ZGl0b3I7IH0KICAgICB2
b2lkIHNldFhTU0F1ZGl0b3IoWFNTQXVkaXRvciogYXVkaXRvcikgeyBtX3hzc0F1ZGl0b3IgPSBh
dWRpdG9yOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oIGIv
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBlMDc3MGJhZGJhZmY3YmExMTAy
MGFkZGM3MTI0OWVmM2RlYzgyMGQ0Li40MGQ1YzA1ZDNhYjc1MWZmYzYzYjZiNWViNjI3NTg5NzUy
Y2ZiZTA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oCisrKyBi
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdNTEVycm9ySGFuZGxpbmcgdXNlcyB0aGVzZSBm
dW5jdGlvbnMuCiAgICAgICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9ybWVkKCkgY29uc3QgeyByZXR1
cm4gIW1fc2F3RXJyb3I7IH0KICAgICAgICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKKyAgICAgICAgVGV4
dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7CiAKQEAgLTEyOSw2ICsxMjksMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgYXBwZW5kRnJhZ21lbnRTb3VyY2Uo
Y29uc3QgU3RyaW5nJik7CiAKKyAgICAgICAgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0OworICAg
ICAgICAvLyBUaGUgbWV0aG9kIGlzIHVzZWQgaW4gWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNw
cCBvbmx5LAorICAgICAgICAvLyBJdCBpcyBuZWl0aGVyIHVzZWQgbm9yIGltcGxlbWVudGVkIGlu
IFhNTERvY3VtZW50UGFyc2VyUXQuY3BwLgorICAgICAgICBUZXh0UG9zaXRpb24xIHRleHRQb3Np
dGlvbk9uZUJhc2VkKCkgY29uc3Q7CisKICNpZiBVU0UoUVhNTFNUUkVBTSkKIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgcGFyc2UoKTsKQEAgLTIwOCw3ICsyMTMsNyBAQCBwdWJsaWM6CiAKICAgICAg
ICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX3BlbmRpbmdTY3JpcHQ7CiAg
ICAgICAgIFJlZlB0cjxFbGVtZW50PiBtX3NjcmlwdEVsZW1lbnQ7Ci0gICAgICAgIGludCBtX3Nj
cmlwdFN0YXJ0TGluZTsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBtX3NjcmlwdFN0YXJ0UG9zaXRp
b247CiAKICAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsKICAgICAgICAgQXRvbWljU3Ry
aW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwCmluZGV4IDViNWFjODlmYWIyZTY1MzU2NDMwMmUwYjYxM2NmMjMwYTQ2NGJhODku
LmRjZThmZWYxZTg3YjMyM2ExNWYxNzJhZDE1MDU1YTU4OTllMDk1MTAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIvV2ViQ29yZS9kb20v
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtNTYwLDcgKzU2MCw3IEBAIFhNTERvY3Vt
ZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmll
dyogZnJhbWVWaWV3KQogICAgICwgbV9sYXN0RXJyb3JMaW5lKDApCiAgICAgLCBtX2xhc3RFcnJv
ckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0
TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93
UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCiAgICAgLCBt
X3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQogewpAQCAtNTg3
LDcgKzU4Nyw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVu
dEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAgICAgLCBtX2xhc3RFcnJvckxp
bmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQo
MCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRp
b24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdG
cmFnbWVudCh0cnVlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1p
c3Npb24pCiB7CkBAIC04MTksNyArODE5LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3Rh
cnRFbGVtZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGEKIAog
ICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxl
bWVudC5nZXQoKSk7CiAgICAgaWYgKHNjcmlwdEVsZW1lbnQpCi0gICAgICAgIG1fc2NyaXB0U3Rh
cnRMaW5lID0gbGluZU51bWJlcigpOworICAgICAgICBtX3NjcmlwdFN0YXJ0UG9zaXRpb24gPSB0
ZXh0UG9zaXRpb25PbmVCYXNlZCgpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+ZGVwcmVjYXRlZFBh
cnNlckFkZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwogCkBAIC05MTAsNyArOTEwLDcgQEAgdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRT
b3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJs
KCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNj
cmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2Ny
aXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7
CiAKICAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCiAg
ICAgICAgIGlmIChpc0RldGFjaGVkKCkpCkBAIC0xMzc2LDE0ICsxMzc2LDM5IEBAIHZvaWQqIHht
bERvY1B0ckZvclN0cmluZyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIsIGNvbnN0IFN0cmluCiAKIGludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5z
IDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KICAgICByZXR1
cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+bGluZSA6IDE7CiB9CiAKIGludCBYTUxE
b2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogVGhl
IGltcGxlbWVudGF0aW9uIHByb2JhYmx5IHJldHVybnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qg
c2hvdWxkIHJldHVybiAwLWJhc2VkLgogICAgIHJldHVybiBjb250ZXh0KCkgPyBjb250ZXh0KCkt
PmlucHV0LT5jb2wgOiAxOwogfQogCitUZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0
ZXh0UG9zaXRpb24oKSBjb25zdAoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRo
aXMtPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBUZXh0UG9z
aXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKKyAgICAvLyBGSVhNRTogVGhlIGNvbnRleHQgcHJv
YmFibHkgY29udGFpbnMgMS1iYXNlZCBudW1iZXJzLCBidXQgd2UgdHJlYXQgdGhlbSBhcyAwLWJh
c2VkLAorICAgIC8vICAgICAgICB0byBiZSBjb25zaXN0ZW50IHdpdGggZml4bWUncyBpbiBsaW5l
TnVtYmVyKCkgYW5kIGNvbHVtbk51bWJlcgorICAgIC8vICAgICAgICBtZXRob2RzLgorICAgIHJl
dHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50
KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAgICAgICAgV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZy
b21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkpOworfQorCisvLyBUaGlzIG1ldGhv
ZCBoYXMgYSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLCBpbiBjb250cmFzdCB0byB0ZXh0UG9zaXRp
b24oKSBtZXRob2QuCisvLyBJdCBzaG91bGQgcmVwbGFjZSB0ZXh0UG9zaXRpb24oKS4KK1RleHRQ
b3NpdGlvbjEgWE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbk9uZUJhc2VkKCkgY29uc3QK
K3sKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlzLT5jb250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0
aW9uKCk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAgICAgICAgV1RGOjpPbmVCYXNl
ZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wpKTsKK30KKwogdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQogewogICAgIERvY3VtZW50UGFyc2Vy
OjpzdG9wUGFyc2luZygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXJRdC5jcHAgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAppbmRleCAwM2Iw
ODNlYzFjOTI1Y2NkNTFlNmIxZDIxYzliNTJlYTE2YmNlOWNlLi45MDFjYmMxOGZhZmRmYjc0YjQ1
ZjMzYWI4YzU3OWMyMzE2YjcxYjZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVu
dFBhcnNlclF0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApA
QCAtMTA1LDcgKzEwNSw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihE
b2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVWaWV3KQogICAgICwgbV9sYXN0RXJy
b3JMaW5lKDApCiAgICAgLCBtX2xhc3RFcnJvckNvbHVtbigwKQogICAgICwgbV9wZW5kaW5nU2Ny
aXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0TGluZSgwKQorICAgICwgbV9zY3JpcHRTdGFydFBv
c2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJz
aW5nRnJhZ21lbnQoZmFsc2UpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRT
Y3JpcHRpbmdBbGxvd2VkKQogewpAQCAtMTMyLDcgKzEzMiw3IEBAIFhNTERvY3VtZW50UGFyc2Vy
OjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCog
cGFyZW50CiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1u
KDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDAp
CisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBv
c2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9zY3JpcHRp
bmdQZXJtaXNzaW9uKHBlcm1pc3Npb24pCiB7CkBAIC0yMzQsNiArMjM0LDExIEBAIGludCBYTUxE
b2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHJlYW0u
Y29sdW1uTnVtYmVyKCk7CiB9CiAKK1RleHRQb3NpdGlvbjAgWE1MRG9jdW1lbnRQYXJzZXI6OnRl
eHRQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RGOjpaZXJv
QmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobGluZU51bWJlcigpKSwgV1RGOjpaZXJvQmFz
ZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29sdW1uTnVtYmVyKCkpKTsKK30KKwogdm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQogewogICAgIFNjcmlwdGFibGVEb2N1bWVu
dFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKQEAgLTUxOCw3ICs1MjMsNyBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpwYXJzZVN0YXJ0RWxlbWVudCgpCiAKICAgICBTY3JpcHRFbGVtZW50KiBzY3Jp
cHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwogICAgIGlmIChz
Y3JpcHRFbGVtZW50KQotICAgICAgICBtX3NjcmlwdFN0YXJ0TGluZSA9IGxpbmVOdW1iZXIoKTsK
KyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gV1RGOjp0b09uZUJhc2VkVGV4dFBvc2l0
aW9uKHRleHRQb3NpdGlvbigpKTsKIAogICAgIG1fY3VycmVudE5vZGUtPmRlcHJlY2F0ZWRQYXJz
ZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgpKTsKIApAQCAtNTk1LDcgKzYwMCw3IEBAIHZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCgpCiAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0
U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVy
bCgpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOworICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5z
Y3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNj
cmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikp
OwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBwb3BDdXJyZW50
Tm9kZSgpOwpAQCAtNzE2LDQgKzcyMSwzIEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNl
RHRkKCkKIAogfQogfQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAKaW5kZXggOTRjYzJhYTYyMzg2MmY1Y2YwNTgwNDc5MjA3MjY2M2YxOTIzYzg2Ny4uZDE2OTQx
N2E0YmU4MzkzMDkwMzBiNzM3NGI3NTg5ZGM3MTVjNjdjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMTkxLDEyICsxOTEsMTIgQEAgYm9vbCBIVE1M
RG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpCiB7CiAgICAg
QVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOwogCi0gICAgaW50IHNjcmlwdFN0YXJ0
TGluZSA9IDA7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWls
ZGVyLT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0TGluZSk7CisgICAgVGV4dFBvc2l0
aW9uMSBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0
aW9uKCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWlsZGVy
LT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIC8vIFdlIHdp
bGwgbm90IGhhdmUgYSBzY3JpcHRSdW5uZXIgd2hlbiBwYXJzaW5nIGEgRG9jdW1lbnRGcmFnbWVu
dC4KICAgICBpZiAoIW1fc2NyaXB0UnVubmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVudC5yZWxlYXNlKCksIHNj
cmlwdFN0YXJ0TGluZSk7CisgICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlw
dEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIH0KIAogdm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCkBAIC0z
OTYsOSArMzk2LDEzIEBAIGludCBIVE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25z
dAogICAgIHJldHVybiBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOwogfQogCi1pbnQgSFRNTERv
Y3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAorVGV4dFBvc2l0aW9uMCBIVE1MRG9j
dW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdG9rZW5p
emVyLT5jb2x1bW5OdW1iZXIoKTsKKyAgICBpbnQgbGluZVplcm9CYXNlZCA9IG1fdG9rZW5pemVy
LT5saW5lTnVtYmVyKCk7CisgICAgaW50IGNvbHVtbk9uZUJhc2VkID0gbV90b2tlbml6ZXItPmNv
bHVtbk51bWJlcigpOworCisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RGOjpaZXJvQmFzZWRO
dW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobGluZVplcm9CYXNlZCksCisgICAgICAgIFdURjo6T25l
QmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5PbmVCYXNlZCkuY29udmVydFRvWmVy
b0Jhc2VkKCkpOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2Ny
aXB0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRl
eCBkOTYyNWYxMjE4YjY3NGE0NmRhZTNlMWIwOGQ4YmI3ZTNhNTRlNzM1Li4wNTA1M2RmMmYxY2I0
NTc1MTFlYTc0NjgxZjQyYzcyMmIzZDZjOWEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERv
Y3VtZW50UGFyc2VyLmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgaXNFeGVjdXRpbmdTY3JpcHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNj
cmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVy
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgdmly
dHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgLy8gSFRNTFNj
cmlwdFJ1bm5lckhvc3QKICAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291
cmNlKik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIu
Y3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCA0ZjU0
ZjQyOTI4NzBhY2Q1Mzg1NGZjNDcxMDg3MGRkOWRmMTRmMmQxLi45NjRlNThhOWUwZjJmYjg5MmFi
NmU4MzkyYWU5ZWE1N2JkNGRmM2Y3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxTY3JpcHRSdW5uZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1
bm5lci5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgU2NyaXB0U291cmNlQ29kZSBIVE1MU2NyaXB0UnVu
bmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JgogICAgICAg
ICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwogICAgIH0K
ICAgICBlcnJvck9jY3VycmVkID0gZmFsc2U7Ci0gICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVj
dXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ0xpbmVOdW1iZXIoKSk7CisgICAgcmV0
dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9j
dW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ1Bv
c2l0aW9uKCkpOwogfQogCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGluZ1NjcmlwdFJl
YWR5KGNvbnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCkKQEAgLTE3MCwxMyArMTcwLDEzIEBAIHZv
aWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JiBw
ZW5kaW5nU2NyaXB0KQogCiAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXRjaCAxMC4yLjUuMTEg
IkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMgJ3NjcmlwdCciCiAvLyBTY3JpcHQgaGFuZGxp
bmcgbGl2ZXMgb3V0c2lkZSB0aGUgdHJlZSBidWlsZGVyIHRvIGtlZXAgdGhlIGVhY2ggY2xhc3Mg
c2ltcGxlLgotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVu
dD4gc2NyaXB0RWxlbWVudCwgaW50IHN0YXJ0TGluZSkKK2Jvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6
ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGNvbnN0IFRleHRQb3Np
dGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQp
OwogICAgIC8vIEZJWE1FOiBJZiBzY3JpcHRpbmcgaXMgZGlzYWJsZWQsIGFsd2F5cyBqdXN0IHJl
dHVybiB0cnVlOwogCiAgICAgLy8gVHJ5IHRvIGV4ZWN1dGUgdGhlIHNjcmlwdCBnaXZlbiB0byB1
cy4KLSAgICBydW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc3RhcnRMaW5lKTsKKyAgICBy
dW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAg
ICBpZiAoaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpKSB7CiAgICAgICAgIGlmIChtX3Njcmlw
dE5lc3RpbmdMZXZlbCkKQEAgLTI4OCw3ICsyODgsNyBAQCBib29sIEhUTUxTY3JpcHRSdW5uZXI6
OnJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQsIEVsZW1l
bgogCiAvLyBUaGlzIG1ldGhvZCBpcyBtZWFudCB0byBtYXRjaCB0aGUgSFRNTDUgZGVmaW5pdGlv
biBvZiAicnVubmluZyBhIHNjcmlwdCIKIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93
ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3NjcmlwdGluZy0xLmh0bWwjcnVubmluZy1h
LXNjcmlwdAotdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0
LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQordm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3Jp
cHQoRWxlbWVudCogc2NyaXB0LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0
aW9uKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NFUlQoIWhhdmVQYXJzaW5n
QmxvY2tpbmdTY3JpcHQoKSk7CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBIVE1MU2NyaXB0UnVu
bmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQog
ICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDA0NwogICAgICAgICAgICAgLy8gQVNTRVJUKGRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0
c0xvYWRlZCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKLSAg
ICAgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50
KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzdGFydGluZ0xp
bmVOdW1iZXIpOworICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlw
dC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVu
dCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdChzb3Vy
Y2VDb2RlKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmgKaW5kZXggYmUyMWRkMjQyMWIxZDQ0MjdiMDg0N2IwYjkxMWMxZmU5N2M2Zjc2NS4uMmRm
Mjk1ZjljMTM1OTRkZWNiNmVmMWYxMDBlM2NkOTVkMzc5OTQyYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlBlbmRp
bmdTY3JpcHQuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCkBAIC01Miw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRl
dGFjaCgpOwogCiAgICAgLy8gUHJvY2Vzc2VzIHRoZSBwYXNzZWQgaW4gc2NyaXB0IGFuZCBhbnkg
cGVuZGluZyBzY3JpcHRzIGlmIHBvc3NpYmxlLgotICAgIGJvb2wgZXhlY3V0ZShQYXNzUmVmUHRy
PEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgaW50IHNjcmlwdFN0YXJ0TGluZSk7CisgICAgYm9v
bCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25zdCBUZXh0
UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlw
dHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dh
aXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdG
b3JTdHlsZXNoZWV0czsgfQpAQCAtNzYsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVx
dWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQqKTsKICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2Ny
aXB0KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlw
dChFbGVtZW50KiwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgdm9pZCBydW5TY3JpcHQo
RWxlbWVudCosIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAg
ICAgLy8gSGVscGVycyBmb3IgZGVhbGluZyB3aXRoIEhUTUxTY3JpcHRSdW5uZXJIb3N0CiAgICAg
dm9pZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwCmluZGV4IGEyMjM2ZDU0NGUyMTNiZmNkNjA0ZmYxY2M5YTU2YzVmNDhh
NDVmNjEuLjc0YmI5YzkwMmRmYzg2M2NiNzJjYzU2ZTUxN2Q2ZGE3MDg4MDczYmIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTU2LDYgKzU2LDExIEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBpbnQgdW5pbml0aWFsaXplZExp
bmVOdW1iZXJWYWx1ZSA9IC0xOwogCitzdGF0aWMgVGV4dFBvc2l0aW9uMSB1bmluaXRpYWxpemVk
UG9zaXRpb25WYWx1ZTEoKQoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFz
ZWROdW1iZXI6OmZyb21PbmVCYXNlZEludCgtMSksIFdURjo6T25lQmFzZWROdW1iZXI6OmJhc2Uo
KSk7Cit9CisKIG5hbWVzcGFjZSB7CiAKIGlubGluZSBib29sIGlzSFRNTFNwYWNlT3JSZXBsYWNl
bWVudENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCkBAIC0zMzMsOCArMzM4LDggQEAgSFRNTFRy
ZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1M
RG9jdW1lbnQqIGRvY3VtZW4KICAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxN
b2RlKQogICAgICwgbV9zZWNvbmRhcnlJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwg
bV90b2tlbml6ZXIodG9rZW5pemVyKQotICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUo
dW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRT
dGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1fc2NyaXB0VG9Q
cm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKSkKKyAgICAs
IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjA6OmJlbG93UmFu
Z2VQb3NpdGlvbigpKQogICAgICwgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyh1c2VQcmVIVE1M
NVBhcnNlclF1aXJrcykKIHsKIH0KQEAgLTM1Miw4ICszNTcsOCBAQCBIVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3VtZW50RnJhZ21l
bnQqIGZyYQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAg
LCBtX3NlY29uZGFyeUluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX3Rva2VuaXpl
cih0b2tlbml6ZXIpCi0gICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1bmluaXRpYWxp
emVkTGluZU51bWJlclZhbHVlKQotICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSh1
bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFy
dFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpKQorICAgICwgbV9sYXN0U2Ny
aXB0RWxlbWVudFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMDo6YmVsb3dSYW5nZVBvc2l0aW9u
KCkpCiAgICAgLCBtX3VzZVByZUhUTUw1UGFyc2VyUXVpcmtzKHVzZVByZUhUTUw1UGFyc2VyUXVp
cmtzKQogewogICAgIGlmIChjb250ZXh0RWxlbWVudCkgewpAQCAtNDE1LDE1ICs0MjAsMTUgQEAg
SFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVudFBhcnNpbmdDb250ZXh0Ojp+RnJhZ21lbnRQYXJzaW5n
Q29udGV4dCgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0
YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5lKQorUGFzc1JlZlB0cjxFbGVt
ZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uMSYg
c2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAgICAvLyBVbnBhdXNlIG91cnNlbHZlcywgY2FsbGVy
cyBtYXkgcGF1c2UgdXMgYWdhaW4gd2hlbiBwcm9jZXNzaW5nIHRoZSBzY3JpcHQuCiAgICAgLy8g
VGhlIEhUTUw1IHNwZWMgaXMgd3JpdHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQg
aW5zaWRlIHRoZSB0cmVlCiAgICAgLy8gYnVpbGRlci4gIFdlIHBhdXNlIHRoZSBwYXJzZXIgdG8g
ZXhpdCB0aGUgdHJlZSBidWlsZGVyLCBhbmQgdGhlbiByZXN1bWUKICAgICAvLyBiZWZvcmUgcnVu
bmluZyBzY3JpcHRzLgogICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKLSAgICBzY3JpcHRTdGFydExp
bmUgPSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZTsKLSAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0
YXJ0TGluZSA9IHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWU7CisgICAgc2NyaXB0U3RhcnRQ
b3NpdGlvbiA9IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsKKyAgICBtX3NjcmlwdFRv
UHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSB1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKTsKICAg
ICByZXR1cm4gbV9zY3JpcHRUb1Byb2Nlc3MucmVsZWFzZSgpOwogfQogCkBAIC0yMjAxLDcgKzIy
MDYsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICBB
U1NFUlQobV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7CiAg
ICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwot
ICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUgPSBtX2xhc3RTY3JpcHRFbGVt
ZW50U3RhcnRMaW5lICsgMTsKKyAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3Np
dGlvbiA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbihtX2xhc3RTY3JpcHRFbGVtZW50U3Rh
cnRQb3NpdGlvbik7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwog
ICAgICAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYgbV9mcmFnbWVudENvbnRleHQu
c2NyaXB0aW5nUGVybWlzc2lvbigpID09IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCkKICAg
ICAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKQEAg
LTI3NTAsNyArMjc1NSwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgbV90cmVlLmluc2VydFNjcmlwdEVs
ZW1lbnQodG9rZW4pOwogICAgIG1fdG9rZW5pemVyLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpT
Y3JpcHREYXRhU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRp
b25Nb2RlOwotICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUgPSBtX3Rva2VuaXplci0+
bGluZU51bWJlcigpOworCisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbiA9IFRleHRQb3NpdGlv
bjAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV90b2tlbml6ZXItPmxp
bmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKCkpOworICAgIG1fbGFzdFNj
cmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uID0gcG9zaXRpb247CisKICAgICBzZXRJbnNlcnRpb25N
b2RlKFRleHRNb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKaW5k
ZXggZTYxZmU3MzQ2NmRhMTc4ZDMzMTFkMjc2MjBlNDZiODI4MWMxZTQ1NS4uYmIzNTk2ZGZlZTdm
Y2NlOTJlNzFmMmUxZmEwZTVmMTVlOTQ4YjE4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRTdGFjay5o
IgogI2luY2x1ZGUgIkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCIKICNpbmNsdWRlICJIVE1M
VG9rZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRNTFRva2VuJik7CiAKICAgICAvLyBN
dXN0IGJlIGNhbGxlZCB3aGVuIHBhcnNlciBpcyBwYXVzZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHBh
cnNlciBhZ2Fpbi4KLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nlc3Mo
aW50JiBzY3JpcHRTdGFydExpbmUpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlw
dFRvUHJvY2VzcyhUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIC8v
IERvbmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KICAgICB2b2lkIGZpbmlzaGVkKCk7CkBA
IC0yNDYsMTMgKzI0NywxMiBAQCBwcml2YXRlOgogICAgIEhUTUxUb2tlbml6ZXIqIG1fdG9rZW5p
emVyOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0VG9Qcm9jZXNzOyAvLyA8c2NyaXB0
PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUgcmVzdW1pbmcgdGhlIHBhcnNlci4K
LSAgICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7IC8vIFN0YXJ0aW5nIGxpbmUgbnVt
YmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KKyAgICBUZXh0UG9zaXRp
b24xIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsgLy8gU3RhcnRpbmcgbGluZSBudW1i
ZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVlZGluZyBwcm9jZXNzaW5nLgogCiAgICAgLy8gRklYTUU6
IFdlIHByb2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoaXMgbWVtYmVyLiAgT3JpZ2luYWxseSwgaXQg
d2FzCiAgICAgLy8gY3JlYXRlZCB0byBzZXJ2aWNlIHRoZSBsZWdhY3kgdHJlZSBidWlsZGVyLCBi
dXQgaXQgc2VlbXMgdG8gYmUgdXNlZCBmb3IKICAgICAvLyBzb21lIG90aGVyIHRoaW5ncyBub3cu
Ci0gICAgaW50IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmU7Ci0gICAgCisgICAgVGV4dFBv
c2l0aW9uMCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbjsKICAgICBib29sIG1fdXNl
UHJlSFRNTDVQYXJzZXJRdWlya3M7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1NDFiZDI2MTE1NjZh
MjU1NWJmNDRkNTIxNzIzMzU4YjNhMjU1YjQ3Li43YmQ1YzZiMTE0NGQ3NWQ0Mzk2OTc0ZDRkNjE5
ZGY4NzE1MzdlZDMzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMC0xOSAg
UGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUg
c2NyaXB0IGNvbHVtbiBwb3NpdGlvbiB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0
IGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDUyNzEKKworICAgICAgICBSZXBsYWNlcyBzY3JpcHQgbGluZSBudW1iZXIgd2l0aCBUZXh0UG9z
aXRpb24gc3RydWN0dXJlLgorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKToKKwog
MjAxMC0xMC0xOSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmlu
ZGV4IDlkYWYyNmYxZmY3ODY3OTAxYjAwNmU1MzEzZWJlODE0YWY1ZjM3YTEuLjQwOTFiNTI0Mzcx
OWIwMzQ2MjkwZDcwMTRiMDE5NzcwNmVhNmUxOTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5jcHAKQEAgLTc1Myw4ICs3NTMsOSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6YmluZFRvV2lu
ZG93T2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgTlBPYmplY3QqIG9iamVjdCkKIAogdm9p
ZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHQoY29uc3QgV2ViU2NyaXB0U291cmNlJiBzb3Vy
Y2UpCiB7CisgICAgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OmJh
c2UoKSk7CiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoCi0gICAgICAgIFNj
cmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHNvdXJjZS5zdGFydExpbmUp
KTsKKyAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9z
aXRpb24pKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVk
V29ybGQoCkBAIC03NjQsOCArNzY1LDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoCiAgICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+IHNvdXJjZXM7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU291cmNlczsgKytpKSB7CisgICAg
ICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJh
c2VkSW50KHNvdXJjZXNJbltpXS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpiYXNl
KCkpOwogICAgICAgICBzb3VyY2VzLmFwcGVuZChTY3JpcHRTb3VyY2VDb2RlKAotICAgICAgICAg
ICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHNvdXJjZXNJbltpXS5zdGFy
dExpbmUpKTsKKyAgICAgICAgICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJs
LCBwb3NpdGlvbikpOwogICAgIH0KIAogICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUlu
SXNvbGF0ZWRXb3JsZCh3b3JsZElkLCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CkBAIC04MTcs
OCArODE5LDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmNvbGxlY3RHYXJiYWdlKCkKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSgK
ICAgICBjb25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBUZXh0UG9zaXRpb24x
IHBvc2l0aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3Rh
cnRMaW5lKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSgpKTsKICAgICByZXR1cm4gbV9mcmFt
ZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoCi0gICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291
cmNlLmNvZGUsIHNvdXJjZS51cmwsIHNvdXJjZS5zdGFydExpbmUpKS52OFZhbHVlKCk7CisgICAg
ICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0aW9uKSku
djhWYWx1ZSgpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBWOCBjb250ZXh0IGZvciB0aGlzIGZyYW1l
LCBvciBhbiBlbXB0eSBoYW5kbGUgaWYgdGhlcmUgaXMgbm9uZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71655</attachid>
            <date>2010-10-23 15:02:38 -0700</date>
            <delta_ts>2010-11-10 05:12:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45271-20101024020235.patch</filename>
            <type>text/plain</type>
            <size>61013</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAyMmNkODU0YmNhZDE5MDE2Nzg1ZjI4ZWViNzU3NDNkMjViZmViMTdlLi41
NmY4NWM4YWE4YWVlNDRhZDg0NDJhMjE4NTdhNjE3MDZlNTNmMWUwIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMTAtMTAtMTkgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL3RleHQvVGV4dFBvc2l0aW9uLmg6
IEFkZGVkLgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OlRleHRQb3NpdGlvbik6CisgICAg
ICAgIChXVEY6OlRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6
VGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24pOgorICAgICAgICAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpaZXJvQmFzZWROdW1i
ZXI6Olplcm9CYXNlZE51bWJlcik6CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6emVy
b0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKToKKyAgICAg
ICAgKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiZWxvd0Jhc2UpOgorICAgICAgICAoV1RGOjpPbmVC
YXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1i
ZXI6Ok9uZUJhc2VkTnVtYmVyKToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6Om9uZUJh
c2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRBc1plcm9CYXNl
ZEludCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpjb252ZXJ0VG9aZXJvQmFzZWQp
OgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSk6CisgICAgICAgIChXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpiZWxvd0Jhc2UpOgorICAgICAgICAoV1RGOjp0b1plcm9CYXNlZFRleHRQ
b3NpdGlvbik6CisgICAgICAgIChXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRpb24pOgorICAgICAg
ICAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKToKKwogMjAxMC0xMC0y
MyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDM2OS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYzUw
N2Y1ZDk2YjJmNjNiZDJiNzJmZTI2ODdjMjI3MmNkOGUzN2YxYy4uZjc4MDZiNGU4OGU4ZTBmNWM1
NjBiYzUxNTZiMmEwYzY3MGE1NjE0NSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0KKysrIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTUxOCw2ICs1
MTgsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9TdHJpbmdJbXBsLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1w
bC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCBcCisJSmF2
YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1dURlN0cmluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmlu
Zy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5j
cHAgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggNjI1MmQwNzdjMGJjNWFhMjk3
ZWM4NjA4ZGJlYjcyMmQ0ODU0ZTEwYi4uZGViMzZmYmNiNjQ1MjYxMWJhNGMzZDkzMTcxN2UzM2Jh
NDZlNTEzMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQor
KysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC00NjEsNiArNDYxLDcg
QEAKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCcsCiAgICAgICAgICAgICAn
d3RmL3RleHQvU3RyaW5nSW1wbC5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJpbmdTdGF0
aWNzLmNwcCcsCisgICAgICAgICAgICAnd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgnLAogICAgICAg
ICAgICAgJ3d0Zi90ZXh0L1dURlN0cmluZy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi90ZXh0L1dU
RlN0cmluZy5oJywKICAgICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRvci5oJywKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGQxMzRhNzMxYjc1YjJjYzVhYTkyZGVjZGU0OGU5YTVmMjZkMGQwYjUuLmI0
MGQ3NGU3YTdkY2U4MzE0ZDg4NzAzOWMyNTU2MDY5Y2ZmYjUwOTQgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNTU1LDYgKzU1NSw3IEBACiAJCUUxRUU3OTNEMEQ2QzlCOTIwMEZFQTNCQSAvKiBUaHJlYWRp
bmdQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMUVFNzkzQzBENkM5QjkyMDBGRUEzQkEgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwICov
OyB9OwogCQlFMUVGNzlBQTBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVGNzlBODBDRTk3QkE2MDA4OEQ1
MDAgLyogVVRGOC5jcHAgKi87IH07CiAJCUU0OEUwRjJEMEY4MjE1MTcwMEE4Q0EzNyAvKiBGYXN0
QWxsb2NCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDhFMEYyQzBGODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzQkQzMUVEMTI2NzM1Nzcw
MDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEYzQkQzMUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTFC
NDQ3QTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFCNDQ3OTBFQ0NENzNCMDA0RjRERDEgLyog
U3RkTGliRXh0cmFzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCkBAIC0xMTQ0LDYgKzExNDUs
NyBAQAogCQlFMUVGNzlBODBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVVEY4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTFFRjc5QTkwQ0U5N0JBNjAwODhENTAwIC8qIFVURjguaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVVRGOC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDhFMEYyQzBGODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0QWxsb2NCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUYzQkQzMUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGV4dFBvc2l0aW9uLmg7IHBhdGggPSB0
ZXh0L1RleHRQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUJCMkJD
NTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjVDMjkwRTYwMjg0Rjk4RTAxODYzNUNBIC8q
IEphdmFTY3JpcHRDb3JlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHRDb3JlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8q
IGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpA
QCAtMTg2MCw2ICsxODYyLDcgQEAKIAkJCQk4NjhCRkEwNzExN0NFRkQxMDBCOTA4QjEgLyogU3Ry
aW5nSW1wbC5oICovLAogCQkJCTg2Qjk5QUUyMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdJbXBs
QmFzZS5oICovLAogCQkJCTg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNz
LmNwcCAqLywKKwkJCQlGM0JEMzFEMDEyNjczMDE4MDA2NTQ2N0YgLyogVGV4dFBvc2l0aW9uLmgg
Ki8sCiAJCQkJODY4QkZBMTUxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5jcHAgKi8sCiAJ
CQkJODY4QkZBMTYxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5oICovLAogCQkJKTsKQEAg
LTIzNDksNiArMjM1Miw3IEBACiAJCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9y
eVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVC
MSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzRjVDREMx
MjY5MjI5QjAwNDkxOTFFIC8qIE51bGxQdHIuaCBpbiBIZWFkZXJzICovLAorCQkJCUYzQkQzMUVE
MTI2NzM1NzcwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmggYi9KYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9UZXh0UG9zaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2RjNTk0OTBkZGFjYWIx
ZDdlYTk4OTFmZjc1MTUxZmZkNTYwYjZmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFRleHRQb3NpdGlvbl9oCisjZGVmaW5lIFRleHRQb3NpdGlvbl9oCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLyoKKyAqIFRl
eHQgUG9zaXRpb24KKyAqCisgKiBUZXh0UG9zaXRpb24gc3RydWN0dXJlIHNwZWNpZmllcyBjb29y
ZGluYXRlcyB3aXRoaW4gYW4gdGV4dCByZXNvdXJjZS4gSXQgaXMgdXNlZCBtb3N0bHkKKyAqIGZv
ciBzYXZpbmcgc2NyaXB0IHNvdXJjZSBwb3NpdGlvbi4KKyAqCisgKiBMYXRlciBUZXh0UG9zaXRp
b24wIGFuZCBUZXh0UG9zaXRpb24xIGFuZCBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUgbWVyZ2Vk
IHRvZ2V0aGVyIHF1aXRlIGVhc2lseS4KKyAqCisgKiAwLWJhc2VkIGFuZCAxLWJhc2VkCisgKgor
ICogTGluZSBhbmQgY29sdW1uIG51bWJlcnMgY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgemVyby1i
YXNlZCBvciAxLWJhc2VkLiBTaW5jZQorICogYm90aCBwcmFjdGljZXMgY29leGlzdCBpbiBXZWJL
aXQgc291cmNlIGJhc2UsICdpbnQnIHR5cGUgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGgKKyAqIGEg
ZGVkaWNhdGVkIHdyYXBwZXIgdHlwZXMsIHNvIHRoYXQgY29tcGlsZXIgaGVscGVkIHVzIHdpdGgg
dGhpcyBhbWJpZ3VpdHkuCisgKgorICogSGVyZSB3ZSBpbnRyb2R1Y2UgMiB0eXBlcyBvZiBudW1i
ZXJzOiBaZXJvQmFzZWROdW1iZXIgYW5kIE9uZUJhc2VkTnVtYmVyIGFuZAorICogMiBjb3JyZXNw
b25kaW5nIHR5cGVzIG9mIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUuIFdoaWxlIG9ubHkgb25lIHR5
cGUgb3VnaHQgdG8gYmUgZW5vdWdoLAorICogdGhpcyBpcyBkb25lIHRvIGtlZXAgdHJhbnNpdGlv
biB0byB0aGUgbmV3IHR5cGVzIGFzIHRyYW5zcGFyZW50IGFzIHBvc3NpYmxlOgorICogZS5nLiBp
biBhcmVhcyB3aGVyZSAwLWJhc2VkIGludGVnZXJzIGFyZSB1c2VkLCBUZXh0UG9zaXRpb24wIHNo
b3VsZCBiZSBpbnRyb2R1Y2VkLiBUaGlzCisgKiB3YXkgYWxsIGNoYW5nZXMgd2lsbCByZW1haW4g
dHJhY2thYmxlLgorICoKKyAqIExhdGVyIGJvdGggbnVtYmVyIHR5cGVzIGNhbiBiZSBtZXJnZWQg
aW4gb25lIHR5cGUgcXVpdGUgZWFzaWx5LgorICoKKyAqIEZvciB0eXBlIHNhZmV0eSBhbmQgZm9y
IHRoZSBmdXR1cmUgdHlwZSBtZXJnZSBpdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgb3BlcmF0aW9u
cyBpbiBBUEkKKyAqIHRoYXQgYWNjZXB0IG9yIHJldHVybiBpbnRlZ2VyIGhhdmUgYSBuYW1lIGV4
cGxpY2l0bHkgZGVmaW5pbmcgYmFzZSBvZiBpbnRlZ2VyLiBGb3IgdGhpcyByZWFzb24KKyAqIGlu
dC1yZWNlaXZpbmcgY29uc3RydWN0b3JzIGFyZSBoaWRkZW4gZnJvbSBBUEkuCisgKi8KKwordGVt
cGxhdGU8dHlwZW5hbWUgTlVNQkVSPgorY2xhc3MgVGV4dFBvc2l0aW9uIHsKK3B1YmxpYzoKKyAg
ICBUZXh0UG9zaXRpb24oTlVNQkVSIGxpbmUsIE5VTUJFUiBjb2x1bW4pCisgICAgICAgIDogbV9s
aW5lKGxpbmUpCisgICAgICAgICwgbV9jb2x1bW4oY29sdW1uKQorICAgIHsKKyAgICB9CisgICAg
VGV4dFBvc2l0aW9uKCkge30KKworICAgIC8vIEEgJ21pbmltdW0nIHZhbHVlIG9mIHBvc2l0aW9u
LCB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KKyAgICBzdGF0aWMgVGV4dFBvc2l0aW9uPE5VTUJF
Uj4gbWluaW11bVBvc2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPE5VTUJFUj4oTlVNQkVS
OjpiYXNlKCksIE5VTUJFUjo6YmFzZSgpKTsgfQorCisgICAgLy8gQSB2YWx1ZSB3aXRoIGxpbmUg
dmFsdWUgbGVzcyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxlIHBvc2l0aW9u
LgorICAgIHN0YXRpYyBUZXh0UG9zaXRpb248TlVNQkVSPiBiZWxvd1JhbmdlUG9zaXRpb24oKSB7
IHJldHVybiBUZXh0UG9zaXRpb248TlVNQkVSPihOVU1CRVI6OmJlbG93QmFzZSgpLCBOVU1CRVI6
OmJhc2UoKSk7IH0KKworICAgIE5VTUJFUiBtX2xpbmU7CisgICAgTlVNQkVSIG1fY29sdW1uOwor
fTsKKworY2xhc3MgT25lQmFzZWROdW1iZXI7CisKKy8vIEFuIGludCB3cmFwcGVyIHRoYXQgYWx3
YXlzIHJlbWluZHMgeW91IHRoYXQgdGhlIG51bWJlciBzaG91bGQgYmUgMC1iYXNlZAorY2xhc3Mg
WmVyb0Jhc2VkTnVtYmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGZy
b21aZXJvQmFzZWRJbnQoaW50IHplcm9CYXNlZEludCkgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVy
KHplcm9CYXNlZEludCk7IH0KKworICAgIFplcm9CYXNlZE51bWJlcigpIHt9CisKKyAgICBpbnQg
emVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgT25lQmFzZWRO
dW1iZXIgY29udmVydFRvT25lQmFzZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBaZXJvQmFzZWRO
dW1iZXIgYmFzZSgpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGJl
bG93QmFzZSgpIHsgcmV0dXJuIC0xOyB9CisKK3ByaXZhdGU6CisgICAgWmVyb0Jhc2VkTnVtYmVy
KGludCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKwor
Ly8gQW4gaW50IHdyYXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVy
IHNob3VsZCBiZSAxLWJhc2VkCitjbGFzcyBPbmVCYXNlZE51bWJlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIE9uZUJhc2VkTnVtYmVyIGZyb21PbmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsg
cmV0dXJuIE9uZUJhc2VkTnVtYmVyKG9uZUJhc2VkSW50KTsgfQorICAgIE9uZUJhc2VkTnVtYmVy
KCkge30KKworICAgIGludCBvbmVCYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
KyAgICBpbnQgY29udmVydEFzWmVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAt
IDE7IH0KKyAgICBaZXJvQmFzZWROdW1iZXIgY29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyBy
ZXR1cm4gWmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQor
CisgICAgc3RhdGljIE9uZUJhc2VkTnVtYmVyIGJhc2UoKSB7IHJldHVybiAxOyB9CisgICAgc3Rh
dGljIE9uZUJhc2VkTnVtYmVyIGJlbG93QmFzZSgpIHsgcmV0dXJuIDA7IH0KKworcHJpdmF0ZToK
KyAgICBPbmVCYXNlZE51bWJlcihpbnQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkge30KKyAgICBp
bnQgbV92YWx1ZTsKK307CisKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPFplcm9CYXNlZE51bWJlcj4g
VGV4dFBvc2l0aW9uMDsKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPE9uZUJhc2VkTnVtYmVyPiBUZXh0
UG9zaXRpb24xOworCitpbmxpbmUgVGV4dFBvc2l0aW9uMCB0b1plcm9CYXNlZFRleHRQb3NpdGlv
bihjb25zdCBUZXh0UG9zaXRpb24xJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0
aW9uMChwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvWmVyb0Jhc2VkKCksIHBvc2l0aW9uLm1fY29s
dW1uLmNvbnZlcnRUb1plcm9CYXNlZCgpKTsKK30KKworaW5saW5lIFRleHRQb3NpdGlvbjEgdG9P
bmVCYXNlZFRleHRQb3NpdGlvbihjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbikKK3sKKyAg
ICByZXR1cm4gVGV4dFBvc2l0aW9uMShwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvT25lQmFzZWQo
KSwgcG9zaXRpb24ubV9jb2x1bW4uY29udmVydFRvT25lQmFzZWQoKSk7Cit9CisKK2lubGluZSBP
bmVCYXNlZE51bWJlciBaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChtX3ZhbHVlICsg
MSk7Cit9CisKK30KKwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb24wOwordXNpbmcgV1RGOjpUZXh0
UG9zaXRpb24xOworCisjZW5kaWYgLy8gVGV4dFBvc2l0aW9uX2gKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oIGIvSmF2
YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmQ0ZjA5YjA2Mzc1ZjBkY2UzYzZmYTFlODc3NjZkZDQ4ZmQ4OTM1ZgotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi90ZXh0L1Rl
eHRQb3NpdGlvbi5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UZXh0
UG9zaXRpb24uaD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMGZjZTliMWUzZjdiMmI0NmJkOTI5YWUzZTQwMDA5MTFmMmJkMDczZC4uNDQ4
NDhlZDMyYzJiZmE4NGIzZTNmZjQ3YzU4MzM5ODc1NjE5NTJhOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAx
MC0xMC0xOSAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxk
IHByb3ZpZGUgc2NyaXB0IGNvbHVtbiBwb3NpdGlvbiB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBK
YXZhU2NyaXB0IGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDUyNzEKKworICAgICAgICBSZXBsYWNlcyBsaW5lIG51bWJlciB3aXRoIFRleHRQ
b3NpdGlvbiBzdHJ1Y3Qgc28gdGhhdCBzY3JpcHQgZW5naW5lCisgICAgICAgIGdldHMgc2NyaXB0
IHN0YXJ0aW5nIGxpbmUvY29sdW1uLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L3RleHQvVGV4dFBvc2l0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlw
dFNvdXJjZUNvZGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJQb3NpdGlvbik6CisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5o
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpzdGFydExpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6c3RhcnRQb3NpdGlvbik6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OExhenlFdmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4TGF6eUV2ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6
VjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbXBpbGVTY3JpcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQ
cm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAg
ICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpydW5TY3JpcHQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRv
bS9QZW5kaW5nU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnJl
bGVhc2VFbGVtZW50QW5kQ2xlYXIpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZW5kaW5nU2NyaXB0OjpzdGFydGluZ1Bvc2l0aW9uKToKKyAgICAgICAgKiBkb20vU2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyLmg6Cisg
ICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVu
dFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFy
c2VyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3Vt
ZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVs
ZW1lbnQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRU
cmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQ
b3NpdGlvbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRN
TFNjcmlwdFJ1bm5lci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyk6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmg6CisKIDIwMTAtMTAtMjMgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcv
Yi80ODE4MT4gQWRkIG1pc3NpbmcgaW5jbHVkZSBvZiBNYWNFcnJvcnMuaApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvdGV4dC9UZXh0UG9zaXRpb24uaCBiL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTYwMDk4NDZlYTA1MmRmYmZmMDZhNDA5ZjIxOTlhNzAyMmU4OTdkNAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKQEAg
LTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1RleHRQb3NpdGlvbl9oCisjZGVmaW5l
IFdlYkNvcmVfRldEX1RleHRQb3NpdGlvbl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGV4
dFBvc2l0aW9uLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0U291cmNlQ29kZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgK
aW5kZXggMzJkNjI5OGNkYmRhNzcyZGFhMTNlMTAzM2UzY2YwYWE0MGY1OTRiMi4uMDkyZWViOGYw
OGEzMjlhMzkxZDk4NzE2ZGZlZGQ5OTk2NTYwODhjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRTb3VyY2VDb2RlLmgKQEAgLTM1LDE1ICszNSwxNiBAQAogI2luY2x1ZGUgIlNjcmlwdFNvdXJj
ZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJj
ZUNvZGUgewogcHVibGljOgotICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2Ny
aXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VS
TCgpLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6
bWluaW11bVBvc2l0aW9uKCkpCiAgICAgICAgIDogbV9wcm92aWRlcihTdHJpbmdTb3VyY2VQcm92
aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLmlzTnVsbCgpID8gU3RyaW5nKCkgOiB1cmwuc3RyaW5n
KCkpKQotICAgICAgICAsIG1fY29kZShtX3Byb3ZpZGVyLCBzdGFydExpbmUpCisgICAgICAgICwg
bV9jb2RlKG1fcHJvdmlkZXIsIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpCiAg
ICAgICAgICwgbV91cmwodXJsKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVk
dWxlZEFjdGlvbi5jcHAKaW5kZXggZGNkMGJiMzM3NzE4MTMxODQyMGMxMDczYmUyNTFhOWU1ODRi
YTRiNy4uNzA4ZmJlNjdmZTk0ZDc3MjIxMmM4YmMzZDI3ZGUxOGJkNTEwMTJjYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jLCBp
bnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSkKICAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICwgbV9jb2RlKFN0cmluZygpLCBLVVJMKCksIDApCisgICAgLCBtX2NvZGUo
U3RyaW5nKCksIEtVUkwoKSwgVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7
CiAgICAgbV9mdW5jdGlvbiA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5j
KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNDkwNGE0
ZTY1ZmRlOWNiM2JmNDNiYmE1NGE1YjE4ZDJhZjc4MmQxMC4uYjlkMTA3NWQyNDM1MDBjMTI0OTYw
MDVhNWNlYzhmZmNlNmZmNjViZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwCkBAIC0yNjIsMjAgKzI2MiwxMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTaG91bAogICAg
IHJldHVybiBTY3JpcHRWYWx1ZShvYmplY3QpOwogfQogCi1pbnQgU2NyaXB0Q29udHJvbGxlcjo6
ZXZlbnRIYW5kbGVyTGluZU51bWJlcigpIGNvbnN0CitUZXh0UG9zaXRpb24wIFNjcmlwdENvbnRy
b2xsZXI6OmV2ZW50SGFuZGxlclBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBTY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIqIHBhcnNlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1
bWVudFBhcnNlcigpOwogICAgIGlmIChwYXJzZXIpCi0gICAgICAgIHJldHVybiBwYXJzZXItPmxp
bmVOdW1iZXIoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2
ZW50SGFuZGxlckNvbHVtbk51bWJlcigpIGNvbnN0Ci17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyKiBwYXJzZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIoKTsKLSAgICBpZiAocGFyc2VyKQotICAgICAgICByZXR1cm4gcGFyc2VyLT5jb2x1bW5O
dW1iZXIoKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHBhcnNlci0+dGV4dFBvc2l0
aW9uKCk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOwogfQog
CiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggNjNmMWMxN2RmNDU2NTYx
ZGMyYWMzMWE0YmQ0NjQzYjlmODNmMmQ4Mi4uZDA5M2YzOTkwOGE2NDRjZWQ2NzBlZWIwZDM4NTA2
ODUyZWVmYTBkYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE1
NSw4ICsxNTUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50
Kik7CiAKLSAgICBpbnQgZXZlbnRIYW5kbGVyTGluZU51bWJlcigpIGNvbnN0OwotICAgIGludCBl
dmVudEhhbmRsZXJDb2x1bW5OdW1iZXIoKSBjb25zdDsKKyAgICBUZXh0UG9zaXRpb24wIGV2ZW50
SGFuZGxlclBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNh
bGxiYWNrKGJvb2wgcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJD
YWxsYmFjayA9IHByb2Nlc3NpbmdUaW1lckNhbGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJl
bnRseSB3ZSBkb24ndCB1c2UgdGhlIHBhcmFtZXRlciB3b3JsZCBhdCBhbGwuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAppbmRleCA3MmRmNzlkZWQzZWQ0N2Nm
ZjFhMjdiNTk1M2EzNTk5NjNjNzdhNjMwLi5iNDZmYzVhNmQ1NjNiYzlkNmQ0ZDRlNmY2MzNhMTI5
Y2Y5OTEzNmUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlz
dGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5j
cHAKQEAgLTUwLDggKzUwLDggQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVh
dGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICBpZiAoYXR0
ci0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAx
OwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOworICAgIC8vIEZJWE1FOiBWZXJ5IHN0cmFuZ2U6
IHdlIGluaXRpYWxpemUgemVyby1iYXNlZCBudW1iZXIgd2l0aCAnMScuCisgICAgVGV4dFBvc2l0
aW9uMCBwb3NpdGlvbihXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCgxKSwg
V1RGOjpaZXJvQmFzZWROdW1iZXI6OmJhc2UoKSk7CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKIAog
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7CkBAIC02
NCwxMiArNjQsMTEgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICB9CiAKLSAgICAgICAgbGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXIt
PmV2ZW50SGFuZGxlckxpbmVOdW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gc2NyaXB0
Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyQ29sdW1uTnVtYmVyKCk7CisgICAgICAgIHBvc2l0aW9u
ID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKICAgICAgICAgc291
cmNlVVJMID0gbm9kZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJp
bmcoKSwgbm9kZS0+aXNTVkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7
CisgICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUo
KS5zdHJpbmcoKSwgbm9kZS0+aXNTVkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVS
TCwgcG9zaXRpb24sIFdvcmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKIH0KIAogUGFz
c1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KEZyYW1lKiBmcmFtZSwgQXR0cmlidXRlKiBhdHRyKQpAQCAtODEsMTAgKzgwLDYgQEAgUGFzc1Jl
ZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZy
YW1lKiBmcmFtZSwgQXR0cmkKICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAw
OwotICAgIFN0cmluZyBzb3VyY2VVUkw7Ci0KICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRD
b250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+
Y2FuRXhlY3V0ZVNjcmlwdHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTk0LDEwICs4OSw5IEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3Jl
YXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVu
dEhhbmRsZXJMaW5lTnVtYmVyKCk7Ci0gICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxl
ci0+ZXZlbnRIYW5kbGVyQ29sdW1uTnVtYmVyKCk7Ci0gICAgc291cmNlVVJMID0gZnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpLnN0cmluZygpOwotICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpLT5p
c1NWR0RvY3VtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgVGV4dFBv
c2l0aW9uMCBwb3NpdGlvbiA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlclBvc2l0aW9u
KCk7CisgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJp
bmcoKTsKKyAgICByZXR1cm4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2Fs
TmFtZSgpLnN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpLCBhdHRy
LT52YWx1ZSgpLCBzb3VyY2VVUkwsIHBvc2l0aW9uLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFp
bldvcmxkKSk7CiB9CiAKIFN0cmluZyBldmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQq
IGRvY3VtZW50LCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRTb3VyY2VDb2RlLmgKaW5kZXggZGJjOWQ1ZTZmYzYwMDdmY2ZkZDY2MDI0ZGIwNzgyNmM2NjI2
M2I1Yi4uMjQ3ODE1MWU2ZjU0ZmM3NTAzOGYwNDFkZWM5ODBkN2E3NTZkMmFkZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKQEAgLTM1LDE2ICszNSwxNyBAQAogI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAgIFNj
cmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtV
UkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJp
bmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0UG9zaXRpb24x
JiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAg
ICAgIDogbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCiAgICAg
ICAgICwgbV91cmwodXJsKQotICAgICAgICAsIG1fc3RhcnRMaW5lKHN0YXJ0TGluZSkKKyAgICAg
ICAgLCBtX3N0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbikKICAgICB7CiAgICAgfQogCkBAIC01
NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3NvdXJjZShjcy0+c2NyaXB0KCkpCiAg
ICAgICAgICwgbV9jYWNoZWRTY3JpcHQoY3MpCiAgICAgICAgICwgbV91cmwoUGFyc2VkVVJMU3Ry
aW5nLCBjcy0+dXJsKCkpCi0gICAgICAgICwgbV9zdGFydExpbmUoMSkKKyAgICAgICAgLCBtX3N0
YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgewogICAg
IH0KIApAQCAtNjMsMTMgKzY0LDE0IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRT
Y3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC5nZXQoKTsgfQogICAgIGNvbnN0
IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgaW50IHN0YXJ0TGluZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lOyB9CisgICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsgfQorICAgIGNv
bnN0IFRleHRQb3NpdGlvbjEmIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0
UG9zaXRpb247IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zb3VyY2U7CiAgICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKICAgICBLVVJMIG1f
dXJsOwotICAgIGludCBtX3N0YXJ0TGluZTsKKyAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRQb3Np
dGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDdmMTNjNWE4ZmIyN2QzM2JiZjFkMzQxMGEw
MTNlYmM3OTVkOTNkMjMuLjdmNDYzMzMwNjJkNmZlYjdiZTlmMTc5NjM1NmM2YjA1Y2IzY2I4Zjgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAtNDEs
MTQgKzQxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhMYXp5RXZlbnRMaXN0ZW5l
cjo6VjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBp
c1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUm
IHdvcmxkQ29udGV4dCkKK1Y4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIo
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5n
JiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3Np
dGlvbiwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCiAgICAgOiBWOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lcih0cnVlLCB3b3JsZENvbnRleHQpCiAgICAgLCBtX2Z1bmN0aW9u
TmFtZShmdW5jdGlvbk5hbWUpCiAgICAgLCBtX2lzU1ZHRXZlbnQoaXNTVkdFdmVudCkKICAgICAs
IG1fY29kZShjb2RlKQogICAgICwgbV9zb3VyY2VVUkwoc291cmNlVVJMKQotICAgICwgbV9saW5l
TnVtYmVyKGxpbmVOdW1iZXIpCi0gICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCisg
ICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogewogfQogCkBAIC0xMTQsNyArMTEzLDcgQEAgdm9p
ZCBWOExhenlFdmVudExpc3RlbmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKICAgICAvLyBJbnNlcnQgJ1xuJyBvdGhlcndpc2UgLy8tc3R5
bGUgY29tbWVudHMgY291bGQgYnJlYWsgdGhlIGhhbmRsZXIuCiAgICAgY29kZS5hcHBlbmQoICAi
XG59KS5jYWxsKHRoaXMsIGV2dCk7fX19fSkiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IGNvZGVFeHRlcm5hbFN0cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRl
cm5hbFN0cmluZywgbV9zb3VyY2VVUkwsIG1fbGluZU51bWJlcik7CisgICAgdjg6OkhhbmRsZTx2
ODo6U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0
cmluZywgbV9zb3VyY2VVUkwsIG1fcG9zaXRpb24pOwogICAgIGlmICghc2NyaXB0LklzRW1wdHko
KSkgewogICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHByb3h5LT5ydW5TY3Jp
cHQoc2NyaXB0LCBmYWxzZSk7CiAgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCmluZGV4IGYxNzRkMjNiZjEzMWIw
MTBlZTRmNTliYzQyNTI3ZWU4Njc0YTA2MDguLjA4NDY3ZmU1ZjdhYjk3MDE0ZDk0NTNhZjI2ZmEz
ZjE2NmNlZTYzYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRM
aXN0ZW5lci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5o
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsOSArNDYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgLy8gQSBWOExhenlFdmVudExpc3RlbmVyIGlzIGFsd2F5cyBhIEhUTUwgZXZlbnQgaGFu
ZGxlci4KICAgICBjbGFzcyBWOExhenlFdmVudExpc3RlbmVyIDogcHVibGljIFY4QWJzdHJhY3RF
dmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4
TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9v
bCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
LCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFu
ZGxlJiB3b3JsZENvbnRleHQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50
TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2
ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBjb25zdCBU
ZXh0UG9zaXRpb24wJiBwb3NpdGlvbiwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhMYXp5
RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGlzU1ZHRXZlbnQsIGNvZGUsIHNvdXJjZVVSTCwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCB3b3JsZENvbnRleHQpKTsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVjhMYXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGlzU1ZH
RXZlbnQsIGNvZGUsIHNvdXJjZVVSTCwgcG9zaXRpb24sIHdvcmxkQ29udGV4dCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzTGF6eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KQEAgLTU2LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZUxpc3RlbmVyT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBm
dW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBT
dHJpbmcgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3Qg
V29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpOworICAgICAgICBWOExhenlFdmVudExp
c3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0
IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9u
MCYgcG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KTsKIAog
ICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwg
RXZlbnQqKTsKIApAQCAtNzAsOCArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgbV9pc1NWR0V2ZW50OwogICAgICAgICBTdHJpbmcgbV9jb2RlOwogICAgICAgICBTdHJp
bmcgbV9zb3VyY2VVUkw7Ci0gICAgICAgIGludCBtX2xpbmVOdW1iZXI7Ci0gICAgICAgIGludCBt
X2NvbHVtbk51bWJlcjsKKyAgICAgICAgVGV4dFBvc2l0aW9uMCBtX3Bvc2l0aW9uOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCmluZGV4IDkw
YzJlZDgwYmZmNGZmYTVhOTRiMWIzN2Q5YjEyYjVkZDU5ZDcxYTAuLjkyYjgyMTYwYjA1NDk1NzI5
OWI5NTIzNTUxNzNjZjdjM2EzMjQ3NzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcApAQCAtMjM1
LDEyICsyMzUsMTMgQEAgVjhQcm94eTo6flY4UHJveHkoKQogICAgIHdpbmRvd1NoZWxsKCktPmRl
c3Ryb3lHbG9iYWwoKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21w
aWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgaW50IGJhc2VMaW5lLCB2ODo6U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKK3Y4OjpIYW5k
bGU8djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJp
bmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNj
cmlwdFN0YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHREYXRhKiBzY3JpcHREYXRhKQogewogICAgIGNv
bnN0IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1l
KTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG5hbWUgPSB2ODo6U3RyaW5nOjpOZXcoZmls
ZU5hbWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpJbnRl
Z2VyPiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhiYXNlTGluZSk7Ci0gICAgdjg6OlNjcmlwdE9y
aWdpbiBvcmlnaW4obmFtZSwgbGluZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gbGlu
ZSA9IHY4OjpJbnRlZ2VyOjpOZXcoc2NyaXB0U3RhcnRQb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2Vk
SW50KCkpOworICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGNvbHVtbiA9IHY4OjpJbnRlZ2Vy
OjpOZXcoc2NyaXB0U3RhcnRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKSk7CisgICAg
djg6OlNjcmlwdE9yaWdpbiBvcmlnaW4obmFtZSwgbGluZSwgY29sdW1uKTsKICAgICB2ODo6SGFu
ZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IHY4OjpTY3JpcHQ6OkNvbXBpbGUoY29kZSwgJm9yaWdp
biwgc2NyaXB0RGF0YSk7CiAgICAgcmV0dXJuIHNjcmlwdDsKIH0KQEAgLTM5Myw3ICszOTQsNyBA
QCB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOFByb3h5OjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3Vy
Y2VDb2RlJiBzb3VyY2UsIE5vZGUqIG5vZAogCiAgICAgICAgIC8vIE5PVEU6IEZvciBjb21wYXRp
YmlsaXR5IHdpdGggV2ViQ29yZSwgU2NyaXB0U291cmNlQ29kZSdzIGxpbmUgc3RhcnRzIGF0CiAg
ICAgICAgIC8vIDEsIHdoZXJlYXMgdjggc3RhcnRzIGF0IDAuCi0gICAgICAgIHY4OjpIYW5kbGU8
djg6OlNjcmlwdD4gc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCBzb3VyY2UudXJsKCksIHNv
dXJjZS5zdGFydExpbmUoKSAtIDEsIHNjcmlwdERhdGEuZ2V0KCkpOworICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgp
LCBXVEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKHNvdXJjZS5zdGFydFBvc2l0aW9uKCkpLCBz
Y3JpcHREYXRhLmdldCgpKTsKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgUGxhdGZv
cm1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoInY4LmNvbXBpbGUiLCBub2RlLCAiIik7CiAKQEAgLTQy
NSw3ICs0MjYsNyBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOFByb3h5OjpydW5TY3JpcHQodjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQsIGJvb2wgaXNJbgogICAgICAgICAvLyBGSVhNRTog
SWRlYWxseSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmUtdXNlIHRoZSBvcmlnaW4gb2YgdGhlCiAg
ICAgICAgIC8vIHNjcmlwdCBwYXNzZWQgdG8gdXMgYXMgdGhlIGFyZ3VtZW50IGluc3RlYWQgb2Yg
dXNpbmcgYW4gZW1wdHkgc3RyaW5nCiAgICAgICAgIC8vIGFuZCAwIGJhc2VMaW5lLgotICAgICAg
ICBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsICIiLCAwKTsKKyAgICAgICAgc2NyaXB0ID0g
Y29tcGlsZVNjcmlwdChjb2RlLCAiIiwgVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkp
OwogICAgIH0KIAogICAgIGlmIChoYW5kbGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
aAppbmRleCA4YTBkYTcyOTU2ODBkNTIzY2Y3NDBmMzg2ZjNjZWYxZTk5MTEwNWMzLi44MGQ0Njkx
YjQ4MDU0OGYzYWQ3ZGRmNzlkZTJiMzc5NzM0MTc5OGRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApA
QCAtMjc5LDcgKzI3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoZWNrTmV3TGVnYWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYp
OwogCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQo
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQg
YmFzZUxpbmUsIHY4OjpTY3JpcHREYXRhKiA9IDApOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6U2NyaXB0PiBjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwg
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQ
b3NpdGlvbiwgdjg6OlNjcmlwdERhdGEqID0gMCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGV4Y2Vw
dGlvbiBjb2RlIGlzIGRpZmZlcmVudCBmcm9tIHplcm8sIGEgRE9NIGV4Y2VwdGlvbiBpcwogICAg
ICAgICAvLyBzY2hlZHVsZSB0byBiZSB0aHJvd24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggMTZlMGI0MTAxZWZkYzM1
YWU3NDQxODE3YjA2ODdkYjZiNWE2NWEyNS4uY2VmYjJmYWE3MzkwODk0YjM1ZDY1YWQ1M2YyMWE4
ZmJjN2RkYTU2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5Ojpmb3JnZXRWOEV2ZW50T2JqZWN0KEV2ZW50KiBldmVudCkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVNjcmlwdFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IGludCBiYXNlTGluZSwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKiBzdGF0ZSkKK1Njcmlw
dFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5n
JiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNj
cmlwdFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7
CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAgU2NyaXB0VmFs
dWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNj
cmlwdCwgY29uc3QgU3QKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKIAogICAg
IHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBzY3JpcHRTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKHNj
cmlwdCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlZFNjcmlwdCA9IFY4UHJv
eHk6OmNvbXBpbGVTY3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwgYmFzZUxpbmUpOworICAg
IHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBWOFByb3h5Ojpjb21waWxl
U2NyaXB0KHNjcmlwdFN0cmluZywgZmlsZU5hbWUsIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IHJ1blNjcmlwdChjb21waWxlZFNjcmlwdCk7
CiAKICAgICBpZiAoIWV4Y2VwdGlvbkNhdGNoZXIuQ2FuQ29udGludWUoKSkKQEAgLTIyNyw3ICsy
MjcsNyBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OnJ1blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTY3JpcAogICAgIC8vIENvbXB1dGUgdGhlIHNvdXJj
ZSBzdHJpbmcgYW5kIHByZXZlbnQgYWdhaW5zdCBpbmZpbml0ZSByZWN1cnNpb24uCiAgICAgaWYg
KG1fcmVjdXJzaW9uID49IGtNYXhSZWN1cnNpb25EZXB0aCkgewogICAgICAgICB2ODo6TG9jYWw8
djg6OlN0cmluZz4gY29kZSA9IHY4RXh0ZXJuYWxTdHJpbmcoInRocm93IFJhbmdlRXJyb3IoJ1Jl
Y3Vyc2lvbiB0b28gZGVlcCcpIik7Ci0gICAgICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVT
Y3JpcHQoY29kZSwgIiIsIDApOworICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2Ny
aXB0KGNvZGUsICIiLCBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQog
CiAgICAgaWYgKFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA1ODgyNGI5ZWVm
NmY0OTE0MDg0Yzc3NzE2MWUyM2Y2ZTMwYWJlMjgzLi5lNzBjM2QyODRhYmU1MmUzNWJhYzQ5ODA1
ZTczYTRjZjQ3NGU5Yzk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIlNjcmlw
dFZhbHVlLmgiCiAjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRp
b24uaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC02Niw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0cmFj
a0V2ZW50KEV2ZW50Kik7CiAKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0
aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuCi0gICAgICAgIFNjcmlwdFZhbHVlIGV2
YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQg
YmFzZUxpbmUsIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSopOworICAgICAgICBTY3JpcHRW
YWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgV29ya2VyQ29udGV4
dEV4ZWN1dGlvblN0YXRlKik7CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRsZSBv
ZiB0aGUgY29udGV4dC4KICAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KCkg
eyByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7IH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDdkYjBk
OGQzNzM3MDliMmU5NzNiNjdlNzcyM2U0ZmMzMTFmYmNhNTkuLmI1NmQzODM2ZDdlNmJiMWFjNWQy
YzhjNWVkNjMwZjA3YzI3NmVmMjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJT
Y3JpcHRDb250cm9sbGVyLmNwcApAQCAtNzUsNyArNzUsNyBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLAogICAgIH0KIAogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKLSAg
ICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJj
ZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgpIC0g
MSwgJnN0YXRlKTsKKyAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShz
b3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBXVEY6OnRvWmVy
b0Jhc2VkVGV4dFBvc2l0aW9uKHNvdXJjZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwgJnN0YXRlKTsK
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAg
ICAgICAgICAgICAqZXhjZXB0aW9uID0gc3RhdGUuZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNw
cAppbmRleCA0MmUyMjVhN2YzMmExYjBjZGMxYmMzNDUxYjY1NDk3YTQ2MTM1Njg5Li4xOGY2MDcx
MWE0Y2QzMDIzMjliY2FhZDRkOThiOGEyMGM3Y2UxMmZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9QZW5kaW5nU2NyaXB0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcApA
QCAtNDAsNyArNDAsNyBAQCBQZW5kaW5nU2NyaXB0Ojp+UGVuZGluZ1NjcmlwdCgpCiBQYXNzUmVm
UHRyPEVsZW1lbnQ+IFBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKQogewog
ICAgIHNldENhY2hlZFNjcmlwdCgwKTsKLSAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IDA7Cisg
ICAgbV9zdGFydGluZ1Bvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9u
KCk7CiAgICAgbV93YXRjaGluZ0ZvckxvYWQgPSBmYWxzZTsKICAgICByZXR1cm4gbV9lbGVtZW50
LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaCBi
L1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCA0NGUxZTQ5Mjg2NzZkNzk2MDIyZGQy
OTA1NDU3NjAxNWI3YTI2ZTQ0Li4wODM1MDdhOWI5MDkxNmJjZjI4NjUxZGY2MjllNWIyM2JiOTQy
MmM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKKysrIGIvV2ViQ29y
ZS9kb20vUGVuZGluZ1NjcmlwdC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMTQgKzQ0LDE0IEBAIGNsYXNzIEVs
ZW1lbnQ7CiBjbGFzcyBQZW5kaW5nU2NyaXB0IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50
IHsKIHB1YmxpYzoKICAgICBQZW5kaW5nU2NyaXB0KCkKLSAgICAgICAgOiBtX3N0YXJ0aW5nTGlu
ZU51bWJlcigwKQorICAgICAgICA6IG1fc3RhcnRpbmdQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpi
ZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAgICAgLCBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkK
ICAgICB7CiAgICAgfQogCiAgICAgUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JiBv
dGhlcikKICAgICAgICAgOiBDYWNoZWRSZXNvdXJjZUNsaWVudChvdGhlcikKLSAgICAgICAgLCBt
X3N0YXJ0aW5nTGluZU51bWJlcihvdGhlci5tX3N0YXJ0aW5nTGluZU51bWJlcikKKyAgICAgICAg
LCBtX3N0YXJ0aW5nUG9zaXRpb24ob3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQogICAgICAgICAs
IG1fd2F0Y2hpbmdGb3JMb2FkKG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkKQogICAgICAgICAsIG1f
ZWxlbWVudChvdGhlci5tX2VsZW1lbnQpCiAgICAgewpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
IAotICAgICAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IG90aGVyLm1fc3RhcnRpbmdMaW5lTnVt
YmVyOworICAgICAgICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRp
b247CiAgICAgICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gb3RoZXIubV93YXRjaGluZ0ZvckxvYWQ7
CiAgICAgICAgIG1fZWxlbWVudCA9IG90aGVyLm1fZWxlbWVudDsKICAgICAgICAgc2V0Q2FjaGVk
U2NyaXB0KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKQEAgLTc0LDcgKzc1LDcgQEAgcHVibGljOgog
CiAgICAgLy8gRklYTUU6IE5vIHNldHRlciBtZWFucyB0aGlzIGlzIG5ldmVyIHNldCB0byBhbnl0
aGluZyBvdGhlciB0aGFuIDAuCiAgICAgLy8gVGhpcyBpcyBlaXRoZXIgdW5uZWNlc3Nhcnkgb3Ig
aW5jb3JyZWN0LgotICAgIGludCBzdGFydGluZ0xpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0aW5nTGluZU51bWJlcjsgfQorICAgIFRleHRQb3NpdGlvbjEgc3RhcnRpbmdQb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdQb3NpdGlvbjsgfQogCiAgICAgYm9vbCB3YXRj
aGluZ0ZvckxvYWQoKSBjb25zdCB7IHJldHVybiBtX3dhdGNoaW5nRm9yTG9hZDsgfQogICAgIHZv
aWQgc2V0V2F0Y2hpbmdGb3JMb2FkKGJvb2wgYikgeyBtX3dhdGNoaW5nRm9yTG9hZCA9IGI7IH0K
QEAgLTg5LDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hl
ZChDYWNoZWRSZXNvdXJjZSopOwogCiBwcml2YXRlOgotICAgIGludCBtX3N0YXJ0aW5nTGluZU51
bWJlcjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCisgICAgVGV4dFBvc2l0
aW9uMSBtX3N0YXJ0aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0
YWdzLgogICAgIGJvb2wgbV93YXRjaGluZ0ZvckxvYWQ7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1f
ZWxlbWVudDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVk
U2NyaXB0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
LmggYi9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAppbmRleCA4YjE2MzA0
MTIxMDRlNGU0NWEwMTMyM2RkMjI1NWU2NTY0ZTM0MDQ1Li5kOWJmODVjYWJmNDU1MzNjOTgxYmU2
MGZjNWJhOTY5Nzc1ZTQyNDNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIuaAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIu
aApAQCAtMjcsMTAgKzI3LDEwIEBACiAjZGVmaW5lIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcl9o
CiAKICNpbmNsdWRlICJEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2Vn
bWVudGVkU3RyaW5nOwogY2xhc3MgWFNTQXVkaXRvcjsKIAogY2xhc3MgU2NyaXB0YWJsZURvY3Vt
ZW50UGFyc2VyIDogcHVibGljIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIgewpAQCAtNDcsNyAr
NDcsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBhcmUgdXNlZCB0byBleHBvc2UgdGhlIGN1
cnJlbnQgbGluZS9jb2x1bW4gdG8gdGhlIHNjcmlwdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBp
bnQgbGluZU51bWJlcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNv
bnN0ID0gMDsKIAogICAgIFhTU0F1ZGl0b3IqIHhzc0F1ZGl0b3IoKSBjb25zdCB7IHJldHVybiBt
X3hzc0F1ZGl0b3I7IH0KICAgICB2b2lkIHNldFhTU0F1ZGl0b3IoWFNTQXVkaXRvciogYXVkaXRv
cikgeyBtX3hzc0F1ZGl0b3IgPSBhdWRpdG9yOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Y
TUxEb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaAppbmRl
eCBlMDc3MGJhZGJhZmY3YmExMTAyMGFkZGM3MTI0OWVmM2RlYzgyMGQ0Li5lM2QzY2MyYjEwN2Fk
ZDA5MDc5M2ZjNmU5ODdlMWEyMjRlODdiMjVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKQEAg
LTEwMiw3ICsxMDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdNTEVycm9y
SGFuZGxpbmcgdXNlcyB0aGVzZSBmdW5jdGlvbnMuCiAgICAgICAgIHZpcnR1YWwgYm9vbCB3ZWxs
Rm9ybWVkKCkgY29uc3QgeyByZXR1cm4gIW1fc2F3RXJyb3I7IH0KICAgICAgICAgdmlydHVhbCBp
bnQgbGluZU51bWJlcigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIo
KSBjb25zdDsKKyAgICAgICAgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdDsKIAog
ICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7CiAK
QEAgLTEyOSw2ICsxMjksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wg
YXBwZW5kRnJhZ21lbnRTb3VyY2UoY29uc3QgU3RyaW5nJik7CiAKKyAgICAgICAgaW50IGNvbHVt
bk51bWJlcigpIGNvbnN0OworCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludHJvZHVjZWQg
dG8gdGVtcG9yYXJ5IGxlZ2FsaXplIGV4aXN0aW5nIGxpbmUvY29sdW1uCisgICAgICAgIC8vIGNv
b3JkaW5hdGUgYnVnOiBpdCBpcyBiZWxpZXZlZCB0aGF0IG51bWJlcnMgdGhhdCBvcmlnaW5hbGx5
IHdlcmUgemVyby1iYXNlZAorICAgICAgICAvLyBldmVudHVhbGx5IGJlY29tZXMgb25lLWJhc2Vk
LgorICAgICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgYW5kIGdldCByaWQgb2YgdGhpcyBtZXRo
b2QuCisgICAgICAgIFRleHRQb3NpdGlvbjEgdGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdDsK
KwogI2lmIFVTRShRWE1MU1RSRUFNKQogcHJpdmF0ZToKICAgICAgICAgdm9pZCBwYXJzZSgpOwpA
QCAtMjA4LDcgKzIxNiw3IEBAIHB1YmxpYzoKIAogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRs
ZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IG1fc2NyaXB0RWxlbWVudDsKLSAgICAgICAgaW50IG1fc2NyaXB0U3RhcnRMaW5lOworICAgICAg
ICBUZXh0UG9zaXRpb24xIG1fc2NyaXB0U3RhcnRQb3NpdGlvbjsKIAogICAgICAgICBib29sIG1f
cGFyc2luZ0ZyYWdtZW50OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNl
VVJJOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNw
cCBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggNWI1YWM4
OWZhYjJlNjUzNTY0MzAyZTBiNjEzY2YyMzBhNDY0YmE4OS4uZGNlOGZlZjFlODdiMzIzYTE1ZjE3
MmFkMTUwNTVhNTg5OWUwOTUxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwCkBAIC01NjAsNyArNTYwLDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50
UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBt
X2xhc3RFcnJvckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3Bl
bmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3Njcmlw
dFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAg
LCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihG
cmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiB7CkBAIC01ODcsNyArNTg3LDcgQEAgWE1MRG9jdW1l
bnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBF
bGVtZW50KiBwYXJlbnQKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJy
b3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFy
dExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxv
d1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBt
X3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKIHsKQEAgLTgxOSw3ICs4
MTksNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxD
aGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYQogCiAgICAgU2NyaXB0RWxlbWVudCogc2Ny
aXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAo
c2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7
CisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbk9uZUJhc2VkKCk7
CiAKICAgICBtX2N1cnJlbnROb2RlLT5kZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVu
dC5nZXQoKSk7CiAKQEAgLTkxMCw3ICs5MTAsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpl
bmRFbGVtZW50TnMoKQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3Jp
cHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1l
KCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVu
dC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUp
KTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQo
U2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50
KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKIAogICAgICAgICAvLyBKYXZhU2Ny
aXB0IG1heSBoYXZlIGRldGFjaGVkIHRoZSBwYXJzZXIKICAgICAgICAgaWYgKGlzRGV0YWNoZWQo
KSkKQEAgLTEzNzYsMTQgKzEzNzYsMzkgQEAgdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgU3RyaW4KIAogaW50
IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTog
VGhlIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IHJldHVybnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRo
b2Qgc2hvdWxkIHJldHVybiAwLWJhc2VkLgogICAgIHJldHVybiBjb250ZXh0KCkgPyBjb250ZXh0
KCktPmlucHV0LT5saW5lIDogMTsKIH0KIAogaW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5O
dW1iZXIoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gcHJvYmFi
bHkgcmV0dXJucyAxLWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0dXJuIDAtYmFzZWQu
CiAgICAgcmV0dXJuIGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmNvbCA6IDE7CiB9CiAK
K1RleHRQb3NpdGlvbjAgWE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0Cit7
CisgICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0ID0gdGhpcy0+Y29udGV4dCgpOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlv
bigpOworICAgIC8vIEZJWE1FOiBUaGUgY29udGV4dCBwcm9iYWJseSBjb250YWlucyAxLWJhc2Vk
IG51bWJlcnMsIGJ1dCB3ZSB0cmVhdCB0aGVtIGFzIDAtYmFzZWQsCisgICAgLy8gICAgICAgIHRv
IGJlIGNvbnNpc3RlbnQgd2l0aCBmaXhtZSdzIGluIGxpbmVOdW1iZXIoKSBhbmQgY29sdW1uTnVt
YmVyCisgICAgLy8gICAgICAgIG1ldGhvZHMuCisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RG
OjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmxpbmUp
LAorICAgICAgICBXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb250ZXh0
LT5pbnB1dC0+Y29sKSk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGhhcyBhIGNvcnJlY3QgaW1wbGVt
ZW50YXRpb24sIGluIGNvbnRyYXN0IHRvIHRleHRQb3NpdGlvbigpIG1ldGhvZC4KKy8vIEl0IHNo
b3VsZCByZXBsYWNlIHRleHRQb3NpdGlvbigpLgorVGV4dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBh
cnNlcjo6dGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdAoreworICAgIHhtbFBhcnNlckN0eHRQ
dHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybiBUZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKTsKKyAgICByZXR1cm4gVGV4
dFBvc2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+
aW5wdXQtPmxpbmUpLAorICAgICAgICBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJ
bnQoY29udGV4dC0+aW5wdXQtPmNvbCkpOworfQorCiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpz
dG9wUGFyc2luZygpCiB7CiAgICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1dlYkNvcmUvZG9t
L1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmluZGV4IDAzYjA4M2VjMWM5MjVjY2Q1MWU2YjFkMjFj
OWI1MmVhMTZiY2U5Y2UuLmYxYWZlMzRjM2QxNTM4Mzc4NjgyYzExZmY0OWQxYjEzZGZmYWNkMDMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCisrKyBiL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgWE1M
RG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJh
bWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAgICAsIG1fbGFz
dEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0
U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6
YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKICAg
ICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiB7CkBA
IC0xMzIsNyArMTMyLDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERv
Y3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICAsIG1fbGFzdEVy
cm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1Nj
cmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQ
b3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFy
c2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24ocGVybWlzc2lv
bikKIHsKQEAgLTIzNCw2ICsyMzQsMTggQEAgaW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5O
dW1iZXIoKSBjb25zdAogICAgIHJldHVybiBtX3N0cmVhbS5jb2x1bW5OdW1iZXIoKTsKIH0KIAor
VGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9C
YXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNl
ZEludChjb2x1bW5OdW1iZXIoKSkpOworfQorCisvLyBUaGlzIG1ldGhvZCBpbmNvcnJlY3RseSBy
ZWludGVycHJldHMgemVyby1iYXNlIGxpbmVOdW1iZXIgbWV0aG9kIGFzIG9uZS1iYXNlZCBudW1i
ZXIuCisvLyBGSVhNRTogVGhpcyBlcnJvciBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5LiBXZSBz
aG91bGQgZml4IGl0IGV2ZW50dWFsbHkuIAorVGV4dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBhcnNl
cjo6dGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdAoreworICAgIHJldHVybiBUZXh0UG9zaXRp
b24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChsaW5lTnVtYmVyKCkpLCBX
VEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKCkpKTsKK30K
Kwogdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQogewogICAgIFNjcmlwdGFi
bGVEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKQEAgLTUxOCw3ICs1MzAsNyBAQCB2b2lk
IFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZVN0YXJ0RWxlbWVudCgpCiAKICAgICBTY3JpcHRFbGVt
ZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwog
ICAgIGlmIChzY3JpcHRFbGVtZW50KQotICAgICAgICBtX3NjcmlwdFN0YXJ0TGluZSA9IGxpbmVO
dW1iZXIoKTsKKyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uT25l
QmFzZWQoKTsKIAogICAgIG1fY3VycmVudE5vZGUtPmRlcHJlY2F0ZWRQYXJzZXJBZGRDaGlsZChu
ZXdFbGVtZW50LmdldCgpKTsKIApAQCAtNTk1LDcgKzYwNyw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlRW5kRWxlbWVudCgpCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
dmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShz
Y3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3Njcmlw
dFN0YXJ0TGluZSkpOworICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhl
Y3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQo
KSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikpOwogICAgIH0KICAg
ICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBwb3BDdXJyZW50Tm9kZSgpOwpAQCAt
NzE2LDQgKzcyOCwzIEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRHRkKCkKIAogfQog
fQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggOTRj
YzJhYTYyMzg2MmY1Y2YwNTgwNDc5MjA3MjY2M2YxOTIzYzg2Ny4uZDE2OTQxN2E0YmU4MzkzMDkw
MzBiNzM3NGI3NTg5ZGM3MTVjNjdjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcApAQCAtMTkxLDEyICsxOTEsMTIgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpCiB7CiAgICAgQVNTRVJUKG1fdHJl
ZUJ1aWxkZXItPmlzUGF1c2VkKCkpOwogCi0gICAgaW50IHNjcmlwdFN0YXJ0TGluZSA9IDA7Ci0g
ICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWlsZGVyLT50YWtlU2Ny
aXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0TGluZSk7CisgICAgVGV4dFBvc2l0aW9uMSBzY3JpcHRT
dGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7CisgICAg
UmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWlsZGVyLT50YWtlU2NyaXB0
VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIC8vIFdlIHdpbGwgbm90IGhhdmUg
YSBzY3JpcHRSdW5uZXIgd2hlbiBwYXJzaW5nIGEgRG9jdW1lbnRGcmFnbWVudC4KICAgICBpZiAo
IW1fc2NyaXB0UnVubmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9zY3Jp
cHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVudC5yZWxlYXNlKCksIHNjcmlwdFN0YXJ0TGlu
ZSk7CisgICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlwdEVsZW1lbnQucmVs
ZWFzZSgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCkBAIC0zOTYsOSArMzk2LDEz
IEBAIGludCBIVE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAogICAgIHJldHVy
biBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOwogfQogCi1pbnQgSFRNTERvY3VtZW50UGFyc2Vy
Ojpjb2x1bW5OdW1iZXIoKSBjb25zdAorVGV4dFBvc2l0aW9uMCBIVE1MRG9jdW1lbnRQYXJzZXI6
OnRleHRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdG9rZW5pemVyLT5jb2x1bW5O
dW1iZXIoKTsKKyAgICBpbnQgbGluZVplcm9CYXNlZCA9IG1fdG9rZW5pemVyLT5saW5lTnVtYmVy
KCk7CisgICAgaW50IGNvbHVtbk9uZUJhc2VkID0gbV90b2tlbml6ZXItPmNvbHVtbk51bWJlcigp
OworCisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21a
ZXJvQmFzZWRJbnQobGluZVplcm9CYXNlZCksCisgICAgICAgIFdURjo6T25lQmFzZWROdW1iZXI6
OmZyb21PbmVCYXNlZEludChjb2x1bW5PbmVCYXNlZCkuY29udmVydFRvWmVyb0Jhc2VkKCkpOwog
fQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBkOTYyNWYxMjE4
YjY3NGE0NmRhZTNlMWIwOGQ4YmI3ZTNhNTRlNzM1Li4wNTA1M2RmMmYxY2I0NTc1MTFlYTc0Njgx
ZjQyYzcyMmIzZDZjOWEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2Vy
LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNFeGVjdXRp
bmdTY3JpcHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5n
Rm9yU3R5bGVzaGVldHMoKTsKICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBUZXh0UG9z
aXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgLy8gSFRNTFNjcmlwdFJ1bm5lckhv
c3QKICAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKik7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCA3NWRiNjQ0YmVjZDQ0YzRj
N2FmNzQ3ZWUzZTU5ZDBiNGVhNDI3ZTM0Li42MWY2NzNhNmYxYTEzODgxOWY4NzQ4MzlkMjM3YTUz
ZDYyZmI3ZTkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAg
LTk5LDcgKzk5LDcgQEAgU2NyaXB0U291cmNlQ29kZSBIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VG
cm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JgogICAgICAgICByZXR1cm4gU2Ny
aXB0U291cmNlQ29kZShzY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwogICAgIH0KICAgICBlcnJvck9j
Y3VycmVkID0gZmFsc2U7Ci0gICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1l
bnQoKS0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1
bWVudCksIHNjcmlwdC5zdGFydGluZ0xpbmVOdW1iZXIoKSk7CisgICAgcmV0dXJuIFNjcmlwdFNv
dXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JT
Y3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ1Bvc2l0aW9uKCkpOwog
fQogCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGluZ1NjcmlwdFJlYWR5KGNvbnN0IFBl
bmRpbmdTY3JpcHQmIHNjcmlwdCkKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHZvaWQgSFRNTFNjcmlw
dFJ1bm5lcjo6c3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0
KQogCiAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXRjaCAxMC4yLjUuMTEgIkFuIGVuZCB0YWcg
d2hvc2UgdGFnIG5hbWUgaXMgJ3NjcmlwdCciCiAvLyBTY3JpcHQgaGFuZGxpbmcgbGl2ZXMgb3V0
c2lkZSB0aGUgdHJlZSBidWlsZGVyIHRvIGtlZXAgdGhlIGVhY2ggY2xhc3Mgc2ltcGxlLgotYm9v
bCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxl
bWVudCwgaW50IHN0YXJ0TGluZSkKK2Jvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZShQYXNz
UmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlw
dFN0YXJ0UG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQpOwogICAgIC8vIEZJ
WE1FOiBJZiBzY3JpcHRpbmcgaXMgZGlzYWJsZWQsIGFsd2F5cyBqdXN0IHJldHVybiB0cnVlOwog
CiAgICAgLy8gVHJ5IHRvIGV4ZWN1dGUgdGhlIHNjcmlwdCBnaXZlbiB0byB1cy4KLSAgICBydW5T
Y3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc3RhcnRMaW5lKTsKKyAgICBydW5TY3JpcHQoc2Ny
aXB0RWxlbWVudC5nZXQoKSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICBpZiAoaGF2ZVBh
cnNpbmdCbG9ja2luZ1NjcmlwdCgpKSB7CiAgICAgICAgIGlmIChtX3NjcmlwdE5lc3RpbmdMZXZl
bCkKQEAgLTI5MCw3ICsyOTAsNyBAQCBib29sIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5k
aW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQsIEVsZW1lbgogCiAvLyBUaGlz
IG1ldGhvZCBpcyBtZWFudCB0byBtYXRjaCB0aGUgSFRNTDUgZGVmaW5pdGlvbiBvZiAicnVubmlu
ZyBhIHNjcmlwdCIKIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvbXVsdGlwYWdlL3NjcmlwdGluZy0xLmh0bWwjcnVubmluZy1hLXNjcmlwdAotdm9p
ZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBpbnQgc3RhcnRp
bmdMaW5lTnVtYmVyKQordm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCog
c2NyaXB0LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewogICAg
IEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NFUlQoIWhhdmVQYXJzaW5nQmxvY2tpbmdTY3Jp
cHQoKSk7CkBAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3Jp
cHQoRWxlbWVudCogc2NyaXB0LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQogICAgICAgICAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA0NwogICAg
ICAgICAgICAgLy8gQVNTRVJUKGRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsK
ICAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKLSAgICAgICAgICAgIFNj
cmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCksIGRvY3VtZW50
VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzdGFydGluZ0xpbmVOdW1iZXIpOwor
ICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRl
bnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0
YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKaW5kZXgg
YmUyMWRkMjQyMWIxZDQ0MjdiMDg0N2IwYjkxMWMxZmU5N2M2Zjc2NS4uMmRmMjk1ZjljMTM1OTRk
ZWNiNmVmMWYxMDBlM2NkOTVkMzc5OTQyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlBlbmRpbmdTY3JpcHQuaCIK
ICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24u
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCkBAIC01Miw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogCiAg
ICAgLy8gUHJvY2Vzc2VzIHRoZSBwYXNzZWQgaW4gc2NyaXB0IGFuZCBhbnkgcGVuZGluZyBzY3Jp
cHRzIGlmIHBvc3NpYmxlLgotICAgIGJvb2wgZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNj
cmlwdFRvUHJvY2VzcywgaW50IHNjcmlwdFN0YXJ0TGluZSk7CisgICAgYm9vbCBleGVjdXRlKFBh
c3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25zdCBUZXh0UG9zaXRpb24xJiBz
Y3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9y
TG9hZChDYWNoZWRSZXNvdXJjZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHls
ZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0
czsgfQpAQCAtNzYsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdERlZmVycmVk
U2NyaXB0KEVsZW1lbnQqKTsKICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdT
Y3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50Kiwg
aW50IHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgdm9pZCBydW5TY3JpcHQoRWxlbWVudCosIGNv
bnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgLy8gSGVscGVy
cyBmb3IgZGVhbGluZyB3aXRoIEhUTUxTY3JpcHRSdW5uZXJIb3N0CiAgICAgdm9pZCB3YXRjaEZv
ckxvYWQoUGVuZGluZ1NjcmlwdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
Y3BwCmluZGV4IDMxMGZmNjAxMjEzYWEwMGExYzQwOWU0ZGE5NGRmMjkxODAyMGE4MTAuLjI2NGI2
NTRjNGQ0ZTA1NzYzYmQ3YjZmOTNhZWI1NjVhYjNlZmZiZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTU2LDYgKzU2LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBpbnQgdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1
ZSA9IC0xOwogCitzdGF0aWMgVGV4dFBvc2l0aW9uMSB1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1
ZTEoKQoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZy
b21PbmVCYXNlZEludCgtMSksIFdURjo6T25lQmFzZWROdW1iZXI6OmJhc2UoKSk7Cit9CisKIG5h
bWVzcGFjZSB7CiAKIGlubGluZSBib29sIGlzSFRNTFNwYWNlT3JSZXBsYWNlbWVudENoYXJhY3Rl
cihVQ2hhciBjaGFyYWN0ZXIpCkBAIC0zNDAsOCArMzQ1LDggQEAgSFRNTFRyZWVCdWlsZGVyOjpI
VE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRv
Y3VtZW4KICAgICAsIG1faW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fb3JpZ2lu
YWxJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVy
KQotICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1i
ZXJWYWx1ZSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXpl
ZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1
bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKSkKKyAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRT
dGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjA6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwg
bV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyh1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKICAgICAs
IG1faGFzUGVuZGluZ0ZvcmVpZ25JbnNlcnRpb25Nb2RlU3RlcHMoZmFsc2UpCiB7CkBAIC0zNTks
OCArMzY0LDggQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXpl
ciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmEKICAgICAsIG1faW5zZXJ0aW9uTW9k
ZShJbml0aWFsTW9kZSkKICAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2Rl
KQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQotICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NT
dGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1fbGFzdFNjcmlw
dEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1f
c2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEo
KSkKKyAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjA6
OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyh1
c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKICAgICAsIG1faGFzUGVuZGluZ0ZvcmVpZ25JbnNlcnRp
b25Nb2RlU3RlcHMoZmFsc2UpCiB7CkBAIC00MjMsMTUgKzQyOCwxNSBAQCBIVE1MVHJlZUJ1aWxk
ZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6On5GcmFnbWVudFBhcnNpbmdDb250ZXh0KCkKIHsK
IH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1By
b2Nlc3MoaW50JiBzY3JpcHRTdGFydExpbmUpCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVl
QnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBv
c2l0aW9uKQogewogICAgIC8vIFVucGF1c2Ugb3Vyc2VsdmVzLCBjYWxsZXJzIG1heSBwYXVzZSB1
cyBhZ2FpbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHNjcmlwdC4KICAgICAvLyBUaGUgSFRNTDUgc3Bl
YyBpcyB3cml0dGVuIGFzIHRob3VnaCBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbnNpZGUgdGhlIHRy
ZWUKICAgICAvLyBidWlsZGVyLiAgV2UgcGF1c2UgdGhlIHBhcnNlciB0byBleGl0IHRoZSB0cmVl
IGJ1aWxkZXIsIGFuZCB0aGVuIHJlc3VtZQogICAgIC8vIGJlZm9yZSBydW5uaW5nIHNjcmlwdHMu
CiAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwotICAgIHNjcmlwdFN0YXJ0TGluZSA9IG1fc2NyaXB0
VG9Qcm9jZXNzU3RhcnRMaW5lOwotICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lID0gdW5p
bml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZTsKKyAgICBzY3JpcHRTdGFydFBvc2l0aW9uID0gbV9z
Y3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOworICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQ
b3NpdGlvbiA9IHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpOwogICAgIHJldHVybiBtX3Nj
cmlwdFRvUHJvY2Vzcy5yZWxlYXNlKCk7CiB9CiAKQEAgLTIxOTAsNyArMjE5NSw3IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIEFTU0VSVChtX3RyZWUu
Y3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShzY3JpcHRUYWcpKTsKICAgICAgICAgICAgIG1f
c2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBt
X3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSA9IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUg
KyAxOworICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gV1RGOjp0
b09uZUJhc2VkVGV4dFBvc2l0aW9uKG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKTsK
ICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgICAgICBp
ZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSAmJiBtX2ZyYWdtZW50Q29udGV4dC5zY3JpcHRpbmdQZXJt
aXNzaW9uKCkgPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKQogICAgICAgICAgICAgICAg
IG1fc2NyaXB0VG9Qcm9jZXNzLT5yZW1vdmVBbGxDaGlsZHJlbigpOwpAQCAtMjc2OSw3ICsyNzc0
LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICBtX3RyZWUuaW5zZXJ0U2NyaXB0RWxlbWVudCh0b2tlbik7
CiAgICAgbV90b2tlbml6ZXItPnNldFN0YXRlKEhUTUxUb2tlbml6ZXI6OlNjcmlwdERhdGFTdGF0
ZSk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7Ci0gICAg
bV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSA9IG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCk7
CisKKyAgICBUZXh0UG9zaXRpb24wIHBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9C
YXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX3Rva2VuaXplci0+bGluZU51bWJlcigpKSwg
V1RGOjpaZXJvQmFzZWROdW1iZXI6OmJhc2UoKSk7CisgICAgbV9sYXN0U2NyaXB0RWxlbWVudFN0
YXJ0UG9zaXRpb24gPSBwb3NpdGlvbjsKKwogICAgIHNldEluc2VydGlvbk1vZGUoVGV4dE1vZGUp
OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5o
IGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCBjNmZjZGZkOThi
ZTM2YzI4YTYyY2RhMDRkMmUzMDA4ZDk4YmJjNzEzLi4wZTc1OTdjODNlNmQzZTc3NGFiNjhjNjc2
YmFjZDZiODhmMDlmZGZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudFN0YWNrLmgiCiAjaW5jbHVkZSAi
SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KQEAgLTcxLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY29uc3RydWN0VHJlZUZy
b21BdG9taWNUb2tlbihBdG9taWNIVE1MVG9rZW4mKTsKIAogICAgIC8vIE11c3QgYmUgY2FsbGVk
IHdoZW4gcGFyc2VyIGlzIHBhdXNlZCBiZWZvcmUgY2FsbGluZyB0aGUgcGFyc2VyIGFnYWluLgot
ICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhpbnQmIHNjcmlwdFN0
YXJ0TGluZSk7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKFRl
eHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgLy8gRG9uZSwgY2xvc2Ug
YW55IG9wZW4gdGFncywgZXRjLgogICAgIHZvaWQgZmluaXNoZWQoKTsKQEAgLTI0OCwxMiArMjQ5
LDEyIEBAIHByaXZhdGU6CiAgICAgSFRNTFRva2VuaXplciogbV90b2tlbml6ZXI7CiAKICAgICBS
ZWZQdHI8RWxlbWVudD4gbV9zY3JpcHRUb1Byb2Nlc3M7IC8vIDxzY3JpcHQ+IHRhZyB3aGljaCBu
ZWVkcyBwcm9jZXNzaW5nIGJlZm9yZSByZXN1bWluZyB0aGUgcGFyc2VyLgotICAgIGludCBtX3Nj
cmlwdFRvUHJvY2Vzc1N0YXJ0TGluZTsgLy8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNj
cmlwdCB0YWcgbmVlZGluZyBwcm9jZXNzaW5nLgorICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRU
b1Byb2Nlc3NTdGFydFBvc2l0aW9uOyAvLyBTdGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUgc2Ny
aXB0IHRhZyBuZWVkaW5nIHByb2Nlc3NpbmcuCiAKICAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkg
d2FudCB0byByZW1vdmUgdGhpcyBtZW1iZXIuICBPcmlnaW5hbGx5LCBpdCB3YXMKICAgICAvLyBj
cmVhdGVkIHRvIHNlcnZpY2UgdGhlIGxlZ2FjeSB0cmVlIGJ1aWxkZXIsIGJ1dCBpdCBzZWVtcyB0
byBiZSB1c2VkIGZvcgogICAgIC8vIHNvbWUgb3RoZXIgdGhpbmdzIG5vdy4KLSAgICBpbnQgbV9s
YXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZTsKKyAgICBUZXh0UG9zaXRpb24wIG1fbGFzdFNjcmlw
dEVsZW1lbnRTdGFydFBvc2l0aW9uOwogCiAgICAgYm9vbCBtX3VzZVByZUhUTUw1UGFyc2VyUXVp
cmtzOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBmMGZjZDU2NzhhYzlmMjIzODkwYjQ4OThlZjY4ZTM3M2M5
YzQwYjI3Li42MGZhZDlkZTRjYjJmYWRiODdlZjQzNWM5ZDA2MDgwYmU1MDQyMGY5IDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMC0xOSAgUGV0ZXIgUnliaW4gIDxwZXRlci5y
eWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2NyaXB0IGNvbHVtbiBwb3NpdGlv
biB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVuZ2luZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyNzEKKworICAgICAgICBSZXBs
YWNlcyBzY3JpcHQgbGluZSBudW1iZXIgd2l0aCBUZXh0UG9zaXRpb24gc3RydWN0dXJlLgorCisg
ICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhl
Y3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKToKKwogMjAxMC0xMC0yMiAgSmF5IENpdmVs
bGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQg
TGV2aW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggYjRkMjNjMGUyMTY1
ZDMyNmQ3ZTk2MGRkNGE0MGFjY2ViNWJmOGEzYS4uNTI4MDQ0MzNkZWI5ODI0NWZlNzkwMzM4Y2U5
MDQ5ODUxYTM5NmQ3ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtNzUz
LDggKzc1Myw5IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpiaW5kVG9XaW5kb3dPYmplY3QoY29uc3Qg
V2ViU3RyaW5nJiBuYW1lLCBOUE9iamVjdCogb2JqZWN0KQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6
ZXhlY3V0ZVNjcmlwdChjb25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBUZXh0
UG9zaXRpb24xIHBvc2l0aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChz
b3VyY2Uuc3RhcnRMaW5lKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSgpKTsKICAgICBtX2Zy
YW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZShz
b3VyY2UuY29kZSwgc291cmNlLnVybCwgc291cmNlLnN0YXJ0TGluZSkpOworICAgICAgICBTY3Jp
cHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikpOwogfQogCiB2
b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKQEAgLTc2NCw4
ICs3NjUsOSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCgKICAgICBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgVGV4dFBvc2l0aW9u
MSBwb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlc0lu
W2ldLnN0YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OmJhc2UoKSk7CiAgICAgICAgIHNv
dXJjZXMuYXBwZW5kKFNjcmlwdFNvdXJjZUNvZGUoCi0gICAgICAgICAgICBzb3VyY2VzSW5baV0u
Y29kZSwgc291cmNlc0luW2ldLnVybCwgc291cmNlc0luW2ldLnN0YXJ0TGluZSkpOworICAgICAg
ICAgICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9uKSk7CiAg
ICAgfQogCiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdv
cmxkSWQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKQEAgLTgxNyw4ICs4MTksOSBAQCB2b2lk
IFdlYkZyYW1lSW1wbDo6Y29sbGVjdEdhcmJhZ2UoKQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdl
YkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgIGNvbnN0IFdlYlNj
cmlwdFNvdXJjZSYgc291cmNlKQogeworICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpP
bmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUpLCBXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpiYXNlKCkpOwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhl
Y3V0ZVNjcmlwdCgKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNl
LnVybCwgc291cmNlLnN0YXJ0TGluZSkpLnY4VmFsdWUoKTsKKyAgICAgICAgU2NyaXB0U291cmNl
Q29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKS52OFZhbHVlKCk7CiB9CiAK
IC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9yIHRoaXMgZnJhbWUsIG9yIGFuIGVtcHR5IGhh
bmRsZSBpZiB0aGVyZSBpcyBub25lLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73489</attachid>
            <date>2010-11-10 05:12:45 -0800</date>
            <delta_ts>2010-11-10 06:47:23 -0800</delta_ts>
            <desc>Patch to land</desc>
            <filename>bug-45271-20101110161242.patch</filename>
            <type>text/plain</type>
            <size>60933</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAyMmJkZDQ4NmI3M2ZiOWQzMzMzMmRhNmVhNTM5NDRjNWJlMTU5NTAyLi4w
YjdlYzQ0NzIyMDNiODQ1ZTQ0MTBiZmRlMWZlNTk4YzU5ZWYzMTFiIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMTAtMTAtMTkgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhU
TUwgcGFyc2VyIHNob3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhU
TUwgZG9jdW1lbnQgdG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgQWRkcyBUZXh0UG9zaXRp
b24qIGNsYXNzZXMgLS0gYSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgbGluZS9jb2x1bW4vZ2VuZXJh
dGlvbgorICAgICAgICBsZXZlbCBjb29yZGluYXRlcyBpbnNpZGUgdGV4dCBkb2N1bWVudC4gQWRk
cyAqQmFzZWROdW1iZXIgY2xhc3NlcyAtLSB0eXBlc2FmZSBpbnQKKyAgICAgICAgd3JhcHBlcnMg
dGhhdCBlbXBoYXNpemUgd2hldGhlciBpbnQgbnVtYmVyIGlzIHVzZWQgYXMgemVyby1iYXNlZCBv
cgorICAgICAgICBvbmUtYmFzZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL3RleHQvVGV4dFBvc2l0aW9uLmg6
IEFkZGVkLgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OlRleHRQb3NpdGlvbik6CisgICAg
ICAgIChXVEY6OlRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKToKKyAgICAgICAgKFdURjo6
VGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24pOgorICAgICAgICAoV1RGOjpaZXJvQmFz
ZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpaZXJvQmFzZWROdW1i
ZXI6Olplcm9CYXNlZE51bWJlcik6CisgICAgICAgIChXVEY6Olplcm9CYXNlZE51bWJlcjo6emVy
b0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKToKKyAgICAg
ICAgKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiZWxvd0Jhc2UpOgorICAgICAgICAoV1RGOjpPbmVC
YXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1i
ZXI6Ok9uZUJhc2VkTnVtYmVyKToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6Om9uZUJh
c2VkSW50KToKKyAgICAgICAgKFdURjo6T25lQmFzZWROdW1iZXI6OmNvbnZlcnRBc1plcm9CYXNl
ZEludCk6CisgICAgICAgIChXVEY6Ok9uZUJhc2VkTnVtYmVyOjpjb252ZXJ0VG9aZXJvQmFzZWQp
OgorICAgICAgICAoV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSk6CisgICAgICAgIChXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpiZWxvd0Jhc2UpOgorICAgICAgICAoV1RGOjp0b1plcm9CYXNlZFRleHRQ
b3NpdGlvbik6CisgICAgICAgIChXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRpb24pOgorICAgICAg
ICAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKToKKwogMjAxMC0xMS0w
OSAgR2Fib3IgTG9raSAgPGxva2lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
YXZpbiBCYXJyYWNsb3VnaC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
LmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYzUwN2Y1ZDk2YjJmNjNi
ZDJiNzJmZTI2ODdjMjI3MmNkOGUzN2YxYy4uZjc4MDZiNGU4OGU4ZTBmNWM1NjBiYzUxNTZiMmEw
YzY3MGE1NjE0NSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysr
IGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTUxOCw2ICs1MTgsNyBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJ
bXBsLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oIFwKIAlKYXZh
U2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCBcCisJSmF2YVNjcmlwdENvcmUv
d3RmL3RleHQvVGV4dFBvc2l0aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0
cmluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIFwKIAlKYXZh
U2NyaXB0Q29yZS93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgXApkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggNjI1MmQwNzdjMGJjNWFhMjk3ZWM4NjA4ZGJlYjcy
MmQ0ODU0ZTEwYi4uZGViMzZmYmNiNjQ1MjYxMWJhNGMzZDkzMTcxN2UzM2JhNDZlNTEzMiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC00NjEsNiArNDYxLDcgQEAKICAgICAgICAg
ICAgICd3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCcsCiAgICAgICAgICAgICAnd3RmL3RleHQvU3Ry
aW5nSW1wbC5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCcsCisg
ICAgICAgICAgICAnd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgnLAogICAgICAgICAgICAgJ3d0Zi90
ZXh0L1dURlN0cmluZy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi90ZXh0L1dURlN0cmluZy5oJywK
ICAgICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRvci5oJywKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGQxMzRhNzMxYjc1YjJjYzVhYTkyZGVjZGU0OGU5YTVmMjZkMGQwYjUuLmI0MGQ3NGU3YTdkY2U4
MzE0ZDg4NzAzOWMyNTU2MDY5Y2ZmYjUwOTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTU1LDYgKzU1
NSw3IEBACiAJCUUxRUU3OTNEMEQ2QzlCOTIwMEZFQTNCQSAvKiBUaHJlYWRpbmdQdGhyZWFkcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVFNzkz
QzBENkM5QjkyMDBGRUEzQkEgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwICovOyB9OwogCQlFMUVG
NzlBQTBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVGNzlBODBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5j
cHAgKi87IH07CiAJCUU0OEUwRjJEMEY4MjE1MTcwMEE4Q0EzNyAvKiBGYXN0QWxsb2NCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhFMEYyQzBG
ODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzQkQzMUVEMTI2NzM1NzcwMDY1NDY3RiAvKiBU
ZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEYzQkQzMUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTFCNDQ3QTBFQ0NENzNC
MDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTFCNDQ3OTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIC8qIEVu
ZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCkBAIC0xMTQ0LDYgKzExNDUsNyBAQAogCQlFMUVG
NzlBODBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBVVEY4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFF
Rjc5QTkwQ0U5N0JBNjAwODhENTAwIC8qIFVURjguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVVRGOC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDhFMEYyQzBG
ODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGYXN0QWxsb2NCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUYzQkQzMUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gVGV4dFBvc2l0aW9uLmg7IHBhdGggPSB0ZXh0L1RleHRQb3Np
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUJCMkJDNTAzMEY3NzIxMDFG
Q0ZFMUQgLyogQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb21wbGV0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgfTsKIAkJRjVDMjkwRTYwMjg0Rjk4RTAxODYzNUNBIC8qIEphdmFTY3JpcHRD
b3JlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEphdmFTY3JpcHRDb3JlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgfTsKIAkJRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpAQCAtMTg2MCw2ICsx
ODYyLDcgQEAKIAkJCQk4NjhCRkEwNzExN0NFRkQxMDBCOTA4QjEgLyogU3RyaW5nSW1wbC5oICov
LAogCQkJCTg2Qjk5QUUyMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdJbXBsQmFzZS5oICovLAog
CQkJCTg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCAqLywKKwkJ
CQlGM0JEMzFEMDEyNjczMDE4MDA2NTQ2N0YgLyogVGV4dFBvc2l0aW9uLmggKi8sCiAJCQkJODY4
QkZBMTUxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5jcHAgKi8sCiAJCQkJODY4QkZBMTYx
MTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5oICovLAogCQkJKTsKQEAgLTIzNDksNiArMjM1
Miw3IEBACiAJCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RF
dmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzRjVDREMxMjY5MjI5QjAwNDkx
OTFFIC8qIE51bGxQdHIuaCBpbiBIZWFkZXJzICovLAorCQkJCUYzQkQzMUVEMTI2NzM1NzcwMDY1
NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvdGV4
dC9UZXh0UG9zaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2RjNTk0OTBkZGFjYWIxZDdlYTk4OTFmZjc1
MTUxZmZkNTYwYjZmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQv
VGV4dFBvc2l0aW9uLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFRleHRQb3NpdGlvbl9oCisjZGVmaW5lIFRleHRQb3NpdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLyoKKyAqIFRleHQgUG9zaXRpb24K
KyAqCisgKiBUZXh0UG9zaXRpb24gc3RydWN0dXJlIHNwZWNpZmllcyBjb29yZGluYXRlcyB3aXRo
aW4gYW4gdGV4dCByZXNvdXJjZS4gSXQgaXMgdXNlZCBtb3N0bHkKKyAqIGZvciBzYXZpbmcgc2Ny
aXB0IHNvdXJjZSBwb3NpdGlvbi4KKyAqCisgKiBMYXRlciBUZXh0UG9zaXRpb24wIGFuZCBUZXh0
UG9zaXRpb24xIGFuZCBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUgbWVyZ2VkIHRvZ2V0aGVyIHF1
aXRlIGVhc2lseS4KKyAqCisgKiAwLWJhc2VkIGFuZCAxLWJhc2VkCisgKgorICogTGluZSBhbmQg
Y29sdW1uIG51bWJlcnMgY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgemVyby1iYXNlZCBvciAxLWJh
c2VkLiBTaW5jZQorICogYm90aCBwcmFjdGljZXMgY29leGlzdCBpbiBXZWJLaXQgc291cmNlIGJh
c2UsICdpbnQnIHR5cGUgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGgKKyAqIGEgZGVkaWNhdGVkIHdy
YXBwZXIgdHlwZXMsIHNvIHRoYXQgY29tcGlsZXIgaGVscGVkIHVzIHdpdGggdGhpcyBhbWJpZ3Vp
dHkuCisgKgorICogSGVyZSB3ZSBpbnRyb2R1Y2UgMiB0eXBlcyBvZiBudW1iZXJzOiBaZXJvQmFz
ZWROdW1iZXIgYW5kIE9uZUJhc2VkTnVtYmVyIGFuZAorICogMiBjb3JyZXNwb25kaW5nIHR5cGVz
IG9mIFRleHRQb3NpdGlvbiBzdHJ1Y3R1cmUuIFdoaWxlIG9ubHkgb25lIHR5cGUgb3VnaHQgdG8g
YmUgZW5vdWdoLAorICogdGhpcyBpcyBkb25lIHRvIGtlZXAgdHJhbnNpdGlvbiB0byB0aGUgbmV3
IHR5cGVzIGFzIHRyYW5zcGFyZW50IGFzIHBvc3NpYmxlOgorICogZS5nLiBpbiBhcmVhcyB3aGVy
ZSAwLWJhc2VkIGludGVnZXJzIGFyZSB1c2VkLCBUZXh0UG9zaXRpb24wIHNob3VsZCBiZSBpbnRy
b2R1Y2VkLiBUaGlzCisgKiB3YXkgYWxsIGNoYW5nZXMgd2lsbCByZW1haW4gdHJhY2thYmxlLgor
ICoKKyAqIExhdGVyIGJvdGggbnVtYmVyIHR5cGVzIGNhbiBiZSBtZXJnZWQgaW4gb25lIHR5cGUg
cXVpdGUgZWFzaWx5LgorICoKKyAqIEZvciB0eXBlIHNhZmV0eSBhbmQgZm9yIHRoZSBmdXR1cmUg
dHlwZSBtZXJnZSBpdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgb3BlcmF0aW9ucyBpbiBBUEkKKyAq
IHRoYXQgYWNjZXB0IG9yIHJldHVybiBpbnRlZ2VyIGhhdmUgYSBuYW1lIGV4cGxpY2l0bHkgZGVm
aW5pbmcgYmFzZSBvZiBpbnRlZ2VyLiBGb3IgdGhpcyByZWFzb24KKyAqIGludC1yZWNlaXZpbmcg
Y29uc3RydWN0b3JzIGFyZSBoaWRkZW4gZnJvbSBBUEkuCisgKi8KKwordGVtcGxhdGU8dHlwZW5h
bWUgTlVNQkVSPgorY2xhc3MgVGV4dFBvc2l0aW9uIHsKK3B1YmxpYzoKKyAgICBUZXh0UG9zaXRp
b24oTlVNQkVSIGxpbmUsIE5VTUJFUiBjb2x1bW4pCisgICAgICAgIDogbV9saW5lKGxpbmUpCisg
ICAgICAgICwgbV9jb2x1bW4oY29sdW1uKQorICAgIHsKKyAgICB9CisgICAgVGV4dFBvc2l0aW9u
KCkge30KKworICAgIC8vIEEgJ21pbmltdW0nIHZhbHVlIG9mIHBvc2l0aW9uLCB1c2VkIGFzIGEg
ZGVmYXVsdCB2YWx1ZS4KKyAgICBzdGF0aWMgVGV4dFBvc2l0aW9uPE5VTUJFUj4gbWluaW11bVBv
c2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPE5VTUJFUj4oTlVNQkVSOjpiYXNlKCksIE5V
TUJFUjo6YmFzZSgpKTsgfQorCisgICAgLy8gQSB2YWx1ZSB3aXRoIGxpbmUgdmFsdWUgbGVzcyB0
aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxlIHBvc2l0aW9uLgorICAgIHN0YXRp
YyBUZXh0UG9zaXRpb248TlVNQkVSPiBiZWxvd1JhbmdlUG9zaXRpb24oKSB7IHJldHVybiBUZXh0
UG9zaXRpb248TlVNQkVSPihOVU1CRVI6OmJlbG93QmFzZSgpLCBOVU1CRVI6OmJhc2UoKSk7IH0K
KworICAgIE5VTUJFUiBtX2xpbmU7CisgICAgTlVNQkVSIG1fY29sdW1uOworfTsKKworY2xhc3Mg
T25lQmFzZWROdW1iZXI7CisKKy8vIEFuIGludCB3cmFwcGVyIHRoYXQgYWx3YXlzIHJlbWluZHMg
eW91IHRoYXQgdGhlIG51bWJlciBzaG91bGQgYmUgMC1iYXNlZAorY2xhc3MgWmVyb0Jhc2VkTnVt
YmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGZyb21aZXJvQmFzZWRJ
bnQoaW50IHplcm9CYXNlZEludCkgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVyKHplcm9CYXNlZElu
dCk7IH0KKworICAgIFplcm9CYXNlZE51bWJlcigpIHt9CisKKyAgICBpbnQgemVyb0Jhc2VkSW50
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgT25lQmFzZWROdW1iZXIgY29udmVy
dFRvT25lQmFzZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBaZXJvQmFzZWROdW1iZXIgYmFzZSgp
IHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGJlbG93QmFzZSgpIHsg
cmV0dXJuIC0xOyB9CisKK3ByaXZhdGU6CisgICAgWmVyb0Jhc2VkTnVtYmVyKGludCB2YWx1ZSkg
OiBtX3ZhbHVlKHZhbHVlKSB7fQorICAgIGludCBtX3ZhbHVlOworfTsKKworLy8gQW4gaW50IHdy
YXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAx
LWJhc2VkCitjbGFzcyBPbmVCYXNlZE51bWJlciB7CitwdWJsaWM6CisgICAgc3RhdGljIE9uZUJh
c2VkTnVtYmVyIGZyb21PbmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9uZUJh
c2VkTnVtYmVyKG9uZUJhc2VkSW50KTsgfQorICAgIE9uZUJhc2VkTnVtYmVyKCkge30KKworICAg
IGludCBvbmVCYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBpbnQgY29u
dmVydEFzWmVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KKyAgICBa
ZXJvQmFzZWROdW1iZXIgY29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVyb0Jh
c2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQorCisgICAgc3RhdGlj
IE9uZUJhc2VkTnVtYmVyIGJhc2UoKSB7IHJldHVybiAxOyB9CisgICAgc3RhdGljIE9uZUJhc2Vk
TnVtYmVyIGJlbG93QmFzZSgpIHsgcmV0dXJuIDA7IH0KKworcHJpdmF0ZToKKyAgICBPbmVCYXNl
ZE51bWJlcihpbnQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkge30KKyAgICBpbnQgbV92YWx1ZTsK
K307CisKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPFplcm9CYXNlZE51bWJlcj4gVGV4dFBvc2l0aW9u
MDsKK3R5cGVkZWYgVGV4dFBvc2l0aW9uPE9uZUJhc2VkTnVtYmVyPiBUZXh0UG9zaXRpb24xOwor
CitpbmxpbmUgVGV4dFBvc2l0aW9uMCB0b1plcm9CYXNlZFRleHRQb3NpdGlvbihjb25zdCBUZXh0
UG9zaXRpb24xJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChwb3NpdGlv
bi5tX2xpbmUuY29udmVydFRvWmVyb0Jhc2VkKCksIHBvc2l0aW9uLm1fY29sdW1uLmNvbnZlcnRU
b1plcm9CYXNlZCgpKTsKK30KKworaW5saW5lIFRleHRQb3NpdGlvbjEgdG9PbmVCYXNlZFRleHRQ
b3NpdGlvbihjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gVGV4
dFBvc2l0aW9uMShwb3NpdGlvbi5tX2xpbmUuY29udmVydFRvT25lQmFzZWQoKSwgcG9zaXRpb24u
bV9jb2x1bW4uY29udmVydFRvT25lQmFzZWQoKSk7Cit9CisKK2lubGluZSBPbmVCYXNlZE51bWJl
ciBaZXJvQmFzZWROdW1iZXI6OmNvbnZlcnRUb09uZUJhc2VkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChtX3ZhbHVlICsgMSk7Cit9CisKK30K
KwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb24wOwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb24xOwor
CisjZW5kaWYgLy8gVGV4dFBvc2l0aW9uX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0Zv
cndhcmRpbmdIZWFkZXJzL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oIGIvSmF2YVNjcmlwdEdsdWUv
Rm9yd2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ0
ZjA5YjA2Mzc1ZjBkY2UzYzZmYTFlODc3NjZkZDQ4ZmQ4OTM1ZgotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5o
CkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UZXh0UG9zaXRpb24uaD4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2YyN2E5YzNjOTMzNmJlZWRjZGM5OTMzOTFiOTZkMzRhZjM1Y2EwOS4uMjExNzRhODAxNmYzYjBk
ZGY3N2FjMGI3ZGQzYmQ0Zjk5NmYwNWQwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMC0xMC0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSFRNTCBwYXJzZXIgc2hvdWxkIHByb3ZpZGUgc2Ny
aXB0IGNvbHVtbiBwb3NpdGlvbiB3aXRoaW4gSFRNTCBkb2N1bWVudCB0byBKYXZhU2NyaXB0IGVu
Z2luZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUy
NzEKKworICAgICAgICBSZXBsYWNlcyBsaW5lIG51bWJlciB3aXRoIFRleHRQb3NpdGlvbiBzdHJ1
Y3Qgc28gdGhhdCBzY3JpcHQgZW5naW5lCisgICAgICAgIGdldHMgc2NyaXB0IHN0YXJ0aW5nIGxp
bmUvY29sdW1uLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBv
c2l0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlwdFNvdXJjZUNvZGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpldmVudEhhbmRsZXJQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlz
dGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpzdGFydExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0U291cmNlQ29kZTo6c3RhcnRQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExp
c3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2
ZW50TGlzdGVuZXI6OnByZXBhcmVMaXN0ZW5lck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6cnVuU2Ny
aXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgICogYmluZGlu
Z3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpydW5TY3JpcHQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2Ny
aXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50
QW5kQ2xlYXIpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdTY3JpcHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0
OjpzdGFydGluZ1Bvc2l0aW9uKToKKyAgICAgICAgKiBkb20vU2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyLmg6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogZG9t
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmNvbHVtbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4
dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9z
aXRpb25PbmVCYXNlZCk6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Ny
aXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmg6CisKIDIwMTAtMTEtMTAgIFNoaW5pY2hpcm8gSGFtYWppICA8
aGFtYWppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGRpbmcgYSBtYW51YWwgdGVzdCB3aGlj
aCBJIGZvcmdvdCB0byBhZGQgaW4gcjcxNjE4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy93dGYvdGV4dC9UZXh0UG9zaXRpb24uaCBiL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYwMDk4NDZlYTA1MmRm
YmZmMDZhNDA5ZjIxOTlhNzAyMmU4OTdkNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL3RleHQvVGV4dFBvc2l0aW9uLmgKQEAgLTAsMCArMSw0IEBACisj
aWZuZGVmIFdlYkNvcmVfRldEX1RleHRQb3NpdGlvbl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX1Rl
eHRQb3NpdGlvbl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGV4dFBvc2l0aW9uLmg+Cisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgKaW5kZXggMzJkNjI5OGNk
YmRhNzcyZGFhMTNlMTAzM2UzY2YwYWE0MGY1OTRiMi4uMDkyZWViOGYwOGEzMjlhMzkxZDk4NzE2
ZGZlZGQ5OTk2NTYwODhjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
b3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgK
QEAgLTM1LDE1ICszNSwxNiBAQAogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZVByb3ZpZGVyLmgiCiAj
aW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGlj
OgotICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwm
IHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShj
b25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0
UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9u
KCkpCiAgICAgICAgIDogbV9wcm92aWRlcihTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNv
dXJjZSwgdXJsLmlzTnVsbCgpID8gU3RyaW5nKCkgOiB1cmwuc3RyaW5nKCkpKQotICAgICAgICAs
IG1fY29kZShtX3Byb3ZpZGVyLCBzdGFydExpbmUpCisgICAgICAgICwgbV9jb2RlKG1fcHJvdmlk
ZXIsIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpCiAgICAgICAgICwgbV91cmwo
dXJsKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVk
dWxlZEFjdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAK
aW5kZXggZGNkMGJiMzM3NzE4MTMxODQyMGMxMDczYmUyNTFhOWU1ODRiYTRiNy4uNzA4ZmJlNjdm
ZTk0ZDc3MjIxMmM4YmMzZDI3ZGUxOGJkNTEwMTJjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2No
ZWR1bGVkQWN0aW9uLmNwcApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQsIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jLCBpbnQgYXJnYywgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwg
bV9jb2RlKFN0cmluZygpLCBLVVJMKCksIDApCisgICAgLCBtX2NvZGUoU3RyaW5nKCksIEtVUkwo
KSwgVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7CiAgICAgbV9mdW5jdGlv
biA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jKTsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggZmEzN2MzOGI3YzhkY2FjNTYxODMy
Y2ExZTc2NTA0YjkyMDQ3NzM2OC4uZDc0NmYxNWJmZGFjYjk4NTVmNzE0NGI2YmI2NDE5N2YzMjNh
NjEzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0yNjMs
MjAgKzI2MywxMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTaG91bAogICAgIHJldHVybiBTY3JpcHRW
YWx1ZShvYmplY3QpOwogfQogCi1pbnQgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyTGlu
ZU51bWJlcigpIGNvbnN0CitUZXh0UG9zaXRpb24wIFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFu
ZGxlclBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBh
cnNlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwog
ICAgIGlmIChwYXJzZXIpCi0gICAgICAgIHJldHVybiBwYXJzZXItPmxpbmVOdW1iZXIoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlckNvbHVt
bk51bWJlcigpIGNvbnN0Ci17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBwYXJzZXIg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKLSAgICBp
ZiAocGFyc2VyKQotICAgICAgICByZXR1cm4gcGFyc2VyLT5jb2x1bW5OdW1iZXIoKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHBhcnNlci0+dGV4dFBvc2l0aW9uKCk7CisgICAgcmV0
dXJuIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOwogfQogCiB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggNjNmMWMxN2RmNDU2NTYxZGMyYWMzMWE0YmQ0NjQz
YjlmODNmMmQ4Mi4uZDA5M2YzOTkwOGE2NDRjZWQ2NzBlZWIwZDM4NTA2ODUyZWVmYTBkYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE1NSw4ICsxNTUsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50Kik7CiAKLSAgICBpbnQg
ZXZlbnRIYW5kbGVyTGluZU51bWJlcigpIGNvbnN0OwotICAgIGludCBldmVudEhhbmRsZXJDb2x1
bW5OdW1iZXIoKSBjb25zdDsKKyAgICBUZXh0UG9zaXRpb24wIGV2ZW50SGFuZGxlclBvc2l0aW9u
KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGJvb2wgcHJv
Y2Vzc2luZ1RpbWVyQ2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayA9IHByb2Nl
c3NpbmdUaW1lckNhbGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCB1
c2UgdGhlIHBhcmFtZXRlciB3b3JsZCBhdCBhbGwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRFdmVudExpc3RlbmVyLmNwcAppbmRleCA3MmRmNzlkZWQzZWQ0N2NmZjFhMjdiNTk1M2EzNTk5
NjNjNzdhNjMwLi5iNDZmYzVhNmQ1NjNiYzlkNmQ0ZDRlNmY2MzNhMTI5Y2Y5OTEzNmUxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTUwLDggKzUw
LDggQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGxpbmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1
bW5OdW1iZXIgPSAwOworICAgIC8vIEZJWE1FOiBWZXJ5IHN0cmFuZ2U6IHdlIGluaXRpYWxpemUg
emVyby1iYXNlZCBudW1iZXIgd2l0aCAnMScuCisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlvbihX
VEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCgxKSwgV1RGOjpaZXJvQmFzZWRO
dW1iZXI6OmJhc2UoKSk7CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKIAogICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7CkBAIC02NCwxMiArNjQsMTEgQEAg
UGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CiAKLSAgICAgICAgbGluZU51bWJlciA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckxp
bmVOdW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZl
bnRIYW5kbGVyQ29sdW1uTnVtYmVyKCk7CisgICAgICAgIHBvc2l0aW9uID0gc2NyaXB0Q29udHJv
bGxlci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKICAgICAgICAgc291cmNlVVJMID0gbm9kZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4TGF6eUV2
ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgbm9kZS0+aXNT
VkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgcmV0dXJuIFY4
TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgbm9k
ZS0+aXNTVkdFbGVtZW50KCksIGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgcG9zaXRpb24sIFdv
cmxkQ29udGV4dEhhbmRsZShVc2VNYWluV29ybGQpKTsKIH0KIAogUGFzc1JlZlB0cjxWOExhenlF
dmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwg
QXR0cmlidXRlKiBhdHRyKQpAQCAtODEsMTAgKzgwLDYgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVu
dExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0
cmkKICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50
IGxpbmVOdW1iZXIgPSAxOwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBz
b3VyY2VVUkw7Ci0KICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJh
bWUtPnNjcmlwdCgpOwogICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+Y2FuRXhlY3V0ZVNjcmlw
dHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk0LDEwICs4
OSw5IEBAIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVt
YmVyKCk7Ci0gICAgY29sdW1uTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVy
Q29sdW1uTnVtYmVyKCk7Ci0gICAgc291cmNlVVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
LnN0cmluZygpOwotICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+
bG9jYWxOYW1lKCkuc3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCks
IGF0dHItPnZhbHVlKCksIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXb3Js
ZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CisgICAgVGV4dFBvc2l0aW9uMCBwb3NpdGlv
biA9IHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlclBvc2l0aW9uKCk7CisgICAgU3RyaW5n
IHNvdXJjZVVSTCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKKyAgICByZXR1
cm4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygp
LCBmcmFtZS0+ZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3Vy
Y2VVUkwsIHBvc2l0aW9uLCBXb3JsZENvbnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CiB9CiAK
IFN0cmluZyBldmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQqIGRvY3VtZW50LCBFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0U291cmNlQ29kZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgK
aW5kZXggZGJjOWQ1ZTZmYzYwMDdmY2ZkZDY2MDI0ZGIwNzgyNmM2NjI2M2I1Yi4uMjQ3ODE1MWU2
ZjU0ZmM3NTAzOGYwNDFkZWM5ODBkN2E3NTZkMmFkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRTb3VyY2VDb2RlLmgKQEAgLTM1LDE2ICszNSwxNyBAQAogI2luY2x1ZGUgIkNhY2hlZFNjcmlw
dC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFNjcmlwdFNvdXJjZUNvZGUgewogcHVibGljOgotICAgIFNjcmlwdFNvdXJjZUNvZGUo
Y29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0
TGluZSA9IDEpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29u
c3QgS1VSTCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9u
ID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgICAgIDogbV9zb3VyY2Uo
c291cmNlKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCiAgICAgICAgICwgbV91cmwodXJs
KQotICAgICAgICAsIG1fc3RhcnRMaW5lKHN0YXJ0TGluZSkKKyAgICAgICAgLCBtX3N0YXJ0UG9z
aXRpb24oc3RhcnRQb3NpdGlvbikKICAgICB7CiAgICAgfQogCkBAIC01NCw3ICs1NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgOiBtX3NvdXJjZShjcy0+c2NyaXB0KCkpCiAgICAgICAgICwgbV9jYWNo
ZWRTY3JpcHQoY3MpCiAgICAgICAgICwgbV91cmwoUGFyc2VkVVJMU3RyaW5nLCBjcy0+dXJsKCkp
Ci0gICAgICAgICwgbV9zdGFydExpbmUoMSkKKyAgICAgICAgLCBtX3N0YXJ0UG9zaXRpb24oVGV4
dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgewogICAgIH0KIApAQCAtNjMsMTMg
KzY0LDE0IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlOyB9CiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZFNjcmlwdC5nZXQoKTsgfQogICAgIGNvbnN0IEtVUkwmIHVybCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhcnRMaW5lOyB9CisgICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsgfQorICAgIGNvbnN0IFRleHRQb3NpdGlv
bjEmIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRpb247IH0KIAog
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9zb3VyY2U7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKICAgICBLVVJMIG1fdXJsOwotICAgIGludCBt
X3N0YXJ0TGluZTsKKyAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRQb3NpdGlvbjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhM
YXp5RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlz
dGVuZXIuY3BwCmluZGV4IDdmMTNjNWE4ZmIyN2QzM2JiZjFkMzQxMGEwMTNlYmM3OTVkOTNkMjMu
LjdmNDYzMzMwNjJkNmZlYjdiZTlmMTc5NjM1NmM2YjA1Y2IzY2I4ZjggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAtNDEsMTQgKzQxLDEzIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRM
aXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25z
dCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBp
bnQgY29sdW1uTnVtYmVyLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkK
K1Y4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBm
dW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBT
dHJpbmcgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbiwgY29uc3QgV29y
bGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCiAgICAgOiBWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lcih0cnVlLCB3b3JsZENvbnRleHQpCiAgICAgLCBtX2Z1bmN0aW9uTmFtZShmdW5jdGlvbk5h
bWUpCiAgICAgLCBtX2lzU1ZHRXZlbnQoaXNTVkdFdmVudCkKICAgICAsIG1fY29kZShjb2RlKQog
ICAgICwgbV9zb3VyY2VVUkwoc291cmNlVVJMKQotICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1i
ZXIpCi0gICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCisgICAgLCBtX3Bvc2l0aW9u
KHBvc2l0aW9uKQogewogfQogCkBAIC0xMTQsNyArMTEzLDcgQEAgdm9pZCBWOExhenlFdmVudExp
c3RlbmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKICAgICAvLyBJbnNlcnQgJ1xuJyBvdGhlcndpc2UgLy8tc3R5bGUgY29tbWVudHMgY291
bGQgYnJlYWsgdGhlIGhhbmRsZXIuCiAgICAgY29kZS5hcHBlbmQoICAiXG59KS5jYWxsKHRoaXMs
IGV2dCk7fX19fSkiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0
cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0
PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmluZywgbV9z
b3VyY2VVUkwsIG1fbGluZU51bWJlcik7CisgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3Jp
cHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmluZywgbV9zb3VyY2VV
UkwsIG1fcG9zaXRpb24pOwogICAgIGlmICghc2NyaXB0LklzRW1wdHkoKSkgewogICAgICAgICB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHByb3h5LT5ydW5TY3JpcHQoc2NyaXB0LCBmYWxz
ZSk7CiAgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhMYXp5RXZlbnRMaXN0ZW5lci5oCmluZGV4IGYxNzRkMjNiZjEzMWIwMTBlZTRmNTliYzQyNTI3
ZWU4Njc0YTA2MDguLjA4NDY3ZmU1ZjdhYjk3MDE0ZDk0NTNhZjI2ZmEzZjE2NmNlZTYzYjEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBv
c2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDUsOSArNDYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gQSBWOExh
enlFdmVudExpc3RlbmVyIGlzIGFsd2F5cyBhIEhUTUwgZXZlbnQgaGFuZGxlci4KICAgICBjbGFz
cyBWOExhenlFdmVudExpc3RlbmVyIDogcHVibGljIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVu
ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBj
b25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJl
ciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRl
eHQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJp
bmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBw
b3NpdGlvbiwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhMYXp5RXZlbnRMaXN0ZW5lcihm
dW5jdGlvbk5hbWUsIGlzU1ZHRXZlbnQsIGNvZGUsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCB3b3JsZENvbnRleHQpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVjhMYXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGlzU1ZHRXZlbnQsIGNvZGUsIHNv
dXJjZVVSTCwgcG9zaXRpb24sIHdvcmxkQ29udGV4dCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCBib29sIGlzTGF6eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTU2LDcgKzU3
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUxp
c3RlbmVyT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJv
b2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJM
LCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgV29ybGRDb250ZXh0SGFu
ZGxlJiB3b3JsZENvbnRleHQpOworICAgICAgICBWOExhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwg
Y29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24sIGNv
bnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KTsKIAogICAgICAgICB2aXJ0dWFs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqKTsKIApAQCAt
NzAsOCArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9pc1NWR0V2
ZW50OwogICAgICAgICBTdHJpbmcgbV9jb2RlOwogICAgICAgICBTdHJpbmcgbV9zb3VyY2VVUkw7
Ci0gICAgICAgIGludCBtX2xpbmVOdW1iZXI7Ci0gICAgICAgIGludCBtX2NvbHVtbk51bWJlcjsK
KyAgICAgICAgVGV4dFBvc2l0aW9uMCBtX3Bvc2l0aW9uOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCmluZGV4IGU3ZDZiZjZjY2Q3ZDg1YWUy
NjYzYTk2YmI2NDlkYmYxMTJhNjk4ZDEuLjdiNTk2YzhkYzVhYmE5OTU4ZTcyNTQyODliNTE4NzJh
MTAyZjM1ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcApAQCAtMjM2LDEyICsyMzYsMTMgQEAg
VjhQcm94eTo6flY4UHJveHkoKQogICAgIHdpbmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9iYWwoKTsK
IH0KIAotdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHY4OjpI
YW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VM
aW5lLCB2ODo6U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKK3Y4OjpIYW5kbGU8djg6OlNjcmlwdD4g
VjhQcm94eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRp
b24sIHY4OjpTY3JpcHREYXRhKiBzY3JpcHREYXRhKQogewogICAgIGNvbnN0IHVpbnQxNl90KiBm
aWxlTmFtZVN0cmluZyA9IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsKICAgICB2ODo6SGFu
ZGxlPHY4OjpTdHJpbmc+IG5hbWUgPSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5hbWVTdHJpbmcsIGZp
bGVOYW1lLmxlbmd0aCgpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBsaW5lID0gdjg6
OkludGVnZXI6Ok5ldyhiYXNlTGluZSk7Ci0gICAgdjg6OlNjcmlwdE9yaWdpbiBvcmlnaW4obmFt
ZSwgbGluZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gbGluZSA9IHY4OjpJbnRlZ2Vy
OjpOZXcoc2NyaXB0U3RhcnRQb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCkpOworICAgIHY4
OjpIYW5kbGU8djg6OkludGVnZXI+IGNvbHVtbiA9IHY4OjpJbnRlZ2VyOjpOZXcoc2NyaXB0U3Rh
cnRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKSk7CisgICAgdjg6OlNjcmlwdE9yaWdp
biBvcmlnaW4obmFtZSwgbGluZSwgY29sdW1uKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+
IHNjcmlwdCA9IHY4OjpTY3JpcHQ6OkNvbXBpbGUoY29kZSwgJm9yaWdpbiwgc2NyaXB0RGF0YSk7
CiAgICAgcmV0dXJuIHNjcmlwdDsKIH0KQEAgLTM5NCw3ICszOTUsNyBAQCB2ODo6TG9jYWw8djg6
OlZhbHVlPiBWOFByb3h5OjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2Us
IE5vZGUqIG5vZAogCiAgICAgICAgIC8vIE5PVEU6IEZvciBjb21wYXRpYmlsaXR5IHdpdGggV2Vi
Q29yZSwgU2NyaXB0U291cmNlQ29kZSdzIGxpbmUgc3RhcnRzIGF0CiAgICAgICAgIC8vIDEsIHdo
ZXJlYXMgdjggc3RhcnRzIGF0IDAuCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2Ny
aXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCBzb3VyY2UudXJsKCksIHNvdXJjZS5zdGFydExpbmUo
KSAtIDEsIHNjcmlwdERhdGEuZ2V0KCkpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+
IHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgpLCBXVEY6OnRvWmVyb0Jh
c2VkVGV4dFBvc2l0aW9uKHNvdXJjZS5zdGFydFBvc2l0aW9uKCkpLCBzY3JpcHREYXRhLmdldCgp
KTsKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnRyYWNl
RXZlbnRFbmQoInY4LmNvbXBpbGUiLCBub2RlLCAiIik7CiAKQEAgLTQyNiw3ICs0MjcsNyBAQCB2
ODo6TG9jYWw8djg6OlZhbHVlPiBWOFByb3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2Ny
aXB0PiBzY3JpcHQsIGJvb2wgaXNJbgogICAgICAgICAvLyBGSVhNRTogSWRlYWxseSwgd2Ugc2hv
dWxkIGJlIGFibGUgdG8gcmUtdXNlIHRoZSBvcmlnaW4gb2YgdGhlCiAgICAgICAgIC8vIHNjcmlw
dCBwYXNzZWQgdG8gdXMgYXMgdGhlIGFyZ3VtZW50IGluc3RlYWQgb2YgdXNpbmcgYW4gZW1wdHkg
c3RyaW5nCiAgICAgICAgIC8vIGFuZCAwIGJhc2VMaW5lLgotICAgICAgICBzY3JpcHQgPSBjb21w
aWxlU2NyaXB0KGNvZGUsICIiLCAwKTsKKyAgICAgICAgc2NyaXB0ID0gY29tcGlsZVNjcmlwdChj
b2RlLCAiIiwgVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkpOwogICAgIH0KIAogICAg
IGlmIChoYW5kbGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAppbmRleCA4YTBkYTcy
OTU2ODBkNTIzY2Y3NDBmMzg2ZjNjZWYxZTk5MTEwNWMzLi44MGQ0NjkxYjQ4MDU0OGYzYWQ3ZGRm
NzlkZTJiMzc5NzM0MTc5OGRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJv
eHkuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAtMjc5LDcgKzI3OSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGNoZWNrTmV3TGVnYWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogCi0gICAgICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6
U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIHY4OjpT
Y3JpcHREYXRhKiA9IDApOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBj
b21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgdjg6OlNj
cmlwdERhdGEqID0gMCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBjb2RlIGlzIGRp
ZmZlcmVudCBmcm9tIHplcm8sIGEgRE9NIGV4Y2VwdGlvbiBpcwogICAgICAgICAvLyBzY2hlZHVs
ZSB0byBiZSB0aHJvd24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggMTZlMGI0MTAxZWZkYzM1YWU3NDQxODE3YjA2ODdk
YjZiNWE2NWEyNS4uY2VmYjJmYWE3MzkwODk0YjM1ZDY1YWQ1M2YyMWE4ZmJjN2RkYTU2MSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
Ojpmb3JnZXRWOEV2ZW50T2JqZWN0KEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVNjcmlwdFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29u
c3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBiYXNlTGluZSwg
V29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlKiBzdGF0ZSkKK1NjcmlwdFZhbHVlIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRp
b24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAgU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3QK
ICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKIAogICAgIHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBzY3JpcHRTdHJpbmcgPSB2OEV4dGVybmFsU3RyaW5nKHNjcmlwdCk7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlZFNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3Jp
cHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwgYmFzZUxpbmUpOworICAgIHY4OjpIYW5kbGU8djg6
OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHNjcmlwdFN0
cmluZywgZmlsZU5hbWUsIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHJlc3VsdCA9IHJ1blNjcmlwdChjb21waWxlZFNjcmlwdCk7CiAKICAgICBpZiAoIWV4
Y2VwdGlvbkNhdGNoZXIuQ2FuQ29udGludWUoKSkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2ODo6TG9j
YWw8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJ1blNjcmlwdCh2ODo6
SGFuZGxlPHY4OjpTY3JpcAogICAgIC8vIENvbXB1dGUgdGhlIHNvdXJjZSBzdHJpbmcgYW5kIHBy
ZXZlbnQgYWdhaW5zdCBpbmZpbml0ZSByZWN1cnNpb24uCiAgICAgaWYgKG1fcmVjdXJzaW9uID49
IGtNYXhSZWN1cnNpb25EZXB0aCkgewogICAgICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gY29k
ZSA9IHY4RXh0ZXJuYWxTdHJpbmcoInRocm93IFJhbmdlRXJyb3IoJ1JlY3Vyc2lvbiB0b28gZGVl
cCcpIik7Ci0gICAgICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQoY29kZSwgIiIs
IDApOworICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGUsICIiLCBU
ZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKFY4UHJv
eHk6OmhhbmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA1ODgyNGI5ZWVmNmY0OTE0MDg0Yzc3NzE2
MWUyM2Y2ZTMwYWJlMjgzLi5lNzBjM2QyODRhYmU1MmUzNWJhYzQ5ODA1ZTczYTRjZjQ3NGU5Yzk1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02Niw3ICs2Nyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0cmFja0V2ZW50KEV2ZW50Kik7
CiAKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVudCBleGVj
dXRpb24gZW52aXJvbm1lbnQuCi0gICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0
cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIFdvcmtl
ckNvbnRleHRFeGVjdXRpb25TdGF0ZSopOworICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShj
b25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBv
c2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRl
Kik7CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgY29udGV4dC4K
ICAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDdkYjBkOGQzNzM3MDliMmU5NzNi
NjdlNzcyM2U0ZmMzMTFmYmNhNTkuLmI1NmQzODM2ZDdlNmJiMWFjNWQyYzhjNWVkNjMwZjA3YzI3
NmVmMjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJv
bGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVy
LmNwcApAQCAtNzUsNyArNzUsNyBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLAogICAgIH0KIAog
ICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKLSAgICBTY3JpcHRWYWx1ZSBy
ZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2Rl
LnVybCgpLnN0cmluZygpLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgpIC0gMSwgJnN0YXRlKTsKKyAg
ICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJj
ZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBXVEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0
aW9uKHNvdXJjZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwgJnN0YXRlKTsKICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhj
ZXB0aW9uID0gc3RhdGUuZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUGVuZGlu
Z1NjcmlwdC5jcHAgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAppbmRleCA0MmUyMjVh
N2YzMmExYjBjZGMxYmMzNDUxYjY1NDk3YTQ2MTM1Njg5Li4xOGY2MDcxMWE0Y2QzMDIzMjliY2Fh
ZDRkOThiOGEyMGM3Y2UxMmZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0
LmNwcAorKysgYi9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcApAQCAtNDAsNyArNDAsNyBA
QCBQZW5kaW5nU2NyaXB0Ojp+UGVuZGluZ1NjcmlwdCgpCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IFBl
bmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKQogewogICAgIHNldENhY2hlZFNj
cmlwdCgwKTsKLSAgICBtX3N0YXJ0aW5nTGluZU51bWJlciA9IDA7CisgICAgbV9zdGFydGluZ1Bv
c2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7CiAgICAgbV93YXRj
aGluZ0ZvckxvYWQgPSBmYWxzZTsKICAgICByZXR1cm4gbV9lbGVtZW50LnJlbGVhc2UoKTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaCBiL1dlYkNvcmUvZG9tL1Bl
bmRpbmdTY3JpcHQuaAppbmRleCA0NGUxZTQ5Mjg2NzZkNzk2MDIyZGQyOTA1NDU3NjAxNWI3YTI2
ZTQ0Li4wODM1MDdhOWI5MDkxNmJjZjI4NjUxZGY2MjllNWIyM2JiOTQyMmM4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKKysrIGIvV2ViQ29yZS9kb20vUGVuZGluZ1Nj
cmlwdC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDMsMTQgKzQ0LDE0IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBQ
ZW5kaW5nU2NyaXB0IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1YmxpYzoKICAg
ICBQZW5kaW5nU2NyaXB0KCkKLSAgICAgICAgOiBtX3N0YXJ0aW5nTGluZU51bWJlcigwKQorICAg
ICAgICA6IG1fc3RhcnRpbmdQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRp
b24oKSkKICAgICAgICAgLCBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKICAgICB7CiAgICAgfQog
CiAgICAgUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JiBvdGhlcikKICAgICAgICAg
OiBDYWNoZWRSZXNvdXJjZUNsaWVudChvdGhlcikKLSAgICAgICAgLCBtX3N0YXJ0aW5nTGluZU51
bWJlcihvdGhlci5tX3N0YXJ0aW5nTGluZU51bWJlcikKKyAgICAgICAgLCBtX3N0YXJ0aW5nUG9z
aXRpb24ob3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQogICAgICAgICAsIG1fd2F0Y2hpbmdGb3JM
b2FkKG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkKQogICAgICAgICAsIG1fZWxlbWVudChvdGhlci5t
X2VsZW1lbnQpCiAgICAgewpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICh0
aGlzID09ICZvdGhlcikKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgICAgICBtX3N0
YXJ0aW5nTGluZU51bWJlciA9IG90aGVyLm1fc3RhcnRpbmdMaW5lTnVtYmVyOworICAgICAgICBt
X3N0YXJ0aW5nUG9zaXRpb24gPSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247CiAgICAgICAgIG1f
d2F0Y2hpbmdGb3JMb2FkID0gb3RoZXIubV93YXRjaGluZ0ZvckxvYWQ7CiAgICAgICAgIG1fZWxl
bWVudCA9IG90aGVyLm1fZWxlbWVudDsKICAgICAgICAgc2V0Q2FjaGVkU2NyaXB0KG90aGVyLmNh
Y2hlZFNjcmlwdCgpKTsKQEAgLTc0LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6
IE5vIHNldHRlciBtZWFucyB0aGlzIGlzIG5ldmVyIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFu
IDAuCiAgICAgLy8gVGhpcyBpcyBlaXRoZXIgdW5uZWNlc3Nhcnkgb3IgaW5jb3JyZWN0LgotICAg
IGludCBzdGFydGluZ0xpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5nTGluZU51
bWJlcjsgfQorICAgIFRleHRQb3NpdGlvbjEgc3RhcnRpbmdQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhcnRpbmdQb3NpdGlvbjsgfQogCiAgICAgYm9vbCB3YXRjaGluZ0ZvckxvYWQoKSBj
b25zdCB7IHJldHVybiBtX3dhdGNoaW5nRm9yTG9hZDsgfQogICAgIHZvaWQgc2V0V2F0Y2hpbmdG
b3JMb2FkKGJvb2wgYikgeyBtX3dhdGNoaW5nRm9yTG9hZCA9IGI7IH0KQEAgLTg5LDcgKzkwLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJj
ZSopOwogCiBwcml2YXRlOgotICAgIGludCBtX3N0YXJ0aW5nTGluZU51bWJlcjsgLy8gT25seSB1
c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCisgICAgVGV4dFBvc2l0aW9uMSBtX3N0YXJ0aW5n
UG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgogICAgIGJvb2wg
bV93YXRjaGluZ0ZvckxvYWQ7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKICAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmggYi9XZWJDb3JlL2Rv
bS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAppbmRleCA4YjE2MzA0MTIxMDRlNGU0NWEwMTMy
M2RkMjI1NWU2NTY0ZTM0MDQ1Li5kOWJmODVjYWJmNDU1MzNjOTgxYmU2MGZjNWJhOTY5Nzc1ZTQy
NDNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAor
KysgYi9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaApAQCAtMjcsMTAgKzI3
LDEwIEBACiAjZGVmaW5lIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcl9oCiAKICNpbmNsdWRlICJE
ZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0
aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2VnbWVudGVkU3RyaW5nOwog
Y2xhc3MgWFNTQXVkaXRvcjsKIAogY2xhc3MgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyIDogcHVi
bGljIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIgewpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6
CiAKICAgICAvLyBUaGVzZSBhcmUgdXNlZCB0byBleHBvc2UgdGhlIGN1cnJlbnQgbGluZS9jb2x1
bW4gdG8gdGhlIHNjcmlwdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0ID0gMDsKIAogICAg
IFhTU0F1ZGl0b3IqIHhzc0F1ZGl0b3IoKSBjb25zdCB7IHJldHVybiBtX3hzc0F1ZGl0b3I7IH0K
ICAgICB2b2lkIHNldFhTU0F1ZGl0b3IoWFNTQXVkaXRvciogYXVkaXRvcikgeyBtX3hzc0F1ZGl0
b3IgPSBhdWRpdG9yOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNl
ci5oIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBlMDc3MGJhZGJhZmY3
YmExMTAyMGFkZGM3MTI0OWVmM2RlYzgyMGQ0Li5lM2QzY2MyYjEwN2FkZDA5MDc5M2ZjNmU5ODdl
MWEyMjRlODdiMjVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5o
CisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKQEAgLTEwMiw3ICsxMDIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdNTEVycm9ySGFuZGxpbmcgdXNlcyB0
aGVzZSBmdW5jdGlvbnMuCiAgICAgICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9ybWVkKCkgY29uc3Qg
eyByZXR1cm4gIW1fc2F3RXJyb3I7IH0KICAgICAgICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigp
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKKyAgICAg
ICAgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7CiAKQEAgLTEyOSw2ICsxMjks
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgYXBwZW5kRnJhZ21lbnRT
b3VyY2UoY29uc3QgU3RyaW5nJik7CiAKKyAgICAgICAgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0
OworCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludHJvZHVjZWQgdG8gdGVtcG9yYXJ5IGxl
Z2FsaXplIGV4aXN0aW5nIGxpbmUvY29sdW1uCisgICAgICAgIC8vIGNvb3JkaW5hdGUgYnVnOiBp
dCBpcyBiZWxpZXZlZCB0aGF0IG51bWJlcnMgdGhhdCBvcmlnaW5hbGx5IHdlcmUgemVyby1iYXNl
ZAorICAgICAgICAvLyBldmVudHVhbGx5IGJlY29tZXMgb25lLWJhc2VkLgorICAgICAgICAvLyBG
SVhNRTogSW52ZXN0aWdhdGUgYW5kIGdldCByaWQgb2YgdGhpcyBtZXRob2QuCisgICAgICAgIFRl
eHRQb3NpdGlvbjEgdGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdDsKKwogI2lmIFVTRShRWE1M
U1RSRUFNKQogcHJpdmF0ZToKICAgICAgICAgdm9pZCBwYXJzZSgpOwpAQCAtMjA4LDcgKzIxNiw3
IEBAIHB1YmxpYzoKIAogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+
IG1fcGVuZGluZ1NjcmlwdDsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVu
dDsKLSAgICAgICAgaW50IG1fc2NyaXB0U3RhcnRMaW5lOworICAgICAgICBUZXh0UG9zaXRpb24x
IG1fc2NyaXB0U3RhcnRQb3NpdGlvbjsKIAogICAgICAgICBib29sIG1fcGFyc2luZ0ZyYWdtZW50
OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1dlYkNvcmUvZG9t
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggNzdiMGFmNjZmMDA0MWNkOWU5ZGQz
ODJiOWEzMTU0OGFiYWNjODc5My4uZWY1ZjNlNDkyZDFlMGEyYzA0NTM1ODZiODY0NzJlYTYzYjhj
OTM5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNw
cAorKysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC01NjAs
NyArNTYwLDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50
KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2xhc3RFcnJvckxpbmUo
MCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDApCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkK
LSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24o
VGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFn
bWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGlu
Z0FsbG93ZWQpCiB7CkBAIC01ODcsNyArNTg3LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERv
Y3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQK
ICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAgICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAg
ICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAs
IG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24o
KSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1p
c3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKIHsKQEAgLTgxOSw3ICs4MTksNyBAQCB2b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5h
bWUsIGNvbnN0IHhtbENoYQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRv
U2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2NyaXB0RWxlbWVudCkK
LSAgICAgICAgbV9zY3JpcHRTdGFydExpbmUgPSBsaW5lTnVtYmVyKCk7CisgICAgICAgIG1fc2Ny
aXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbk9uZUJhc2VkKCk7CiAKICAgICBtX2N1cnJl
bnROb2RlLT5kZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAg
LTkxMCw3ICs5MTAsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQog
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5l
eGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVu
dCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAg
IG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3Nj
cmlwdFN0YXJ0UG9zaXRpb24pKTsKIAogICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRl
dGFjaGVkIHRoZSBwYXJzZXIKICAgICAgICAgaWYgKGlzRGV0YWNoZWQoKSkKQEAgLTEzNzYsMTQg
KzEzNzYsMzkgQEAgdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgU3RyaW4KIAogaW50IFhNTERvY3VtZW50UGFy
c2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0
aW9uIHByb2JhYmx5IHJldHVybnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVy
biAwLWJhc2VkLgogICAgIHJldHVybiBjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5saW5l
IDogMTsKIH0KIAogaW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAog
eworICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gcHJvYmFibHkgcmV0dXJucyAxLWJh
c2VkIGludCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0dXJuIDAtYmFzZWQuCiAgICAgcmV0dXJuIGNv
bnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmNvbCA6IDE7CiB9CiAKK1RleHRQb3NpdGlvbjAg
WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgeG1sUGFyc2Vy
Q3R4dFB0ciBjb250ZXh0ID0gdGhpcy0+Y29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpOworICAgIC8vIEZJ
WE1FOiBUaGUgY29udGV4dCBwcm9iYWJseSBjb250YWlucyAxLWJhc2VkIG51bWJlcnMsIGJ1dCB3
ZSB0cmVhdCB0aGVtIGFzIDAtYmFzZWQsCisgICAgLy8gICAgICAgIHRvIGJlIGNvbnNpc3RlbnQg
d2l0aCBmaXhtZSdzIGluIGxpbmVOdW1iZXIoKSBhbmQgY29sdW1uTnVtYmVyCisgICAgLy8gICAg
ICAgIG1ldGhvZHMuCisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoV1RGOjpaZXJvQmFzZWROdW1i
ZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmxpbmUpLAorICAgICAgICBXVEY6
Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb250ZXh0LT5pbnB1dC0+Y29sKSk7
Cit9CisKKy8vIFRoaXMgbWV0aG9kIGhhcyBhIGNvcnJlY3QgaW1wbGVtZW50YXRpb24sIGluIGNv
bnRyYXN0IHRvIHRleHRQb3NpdGlvbigpIG1ldGhvZC4KKy8vIEl0IHNob3VsZCByZXBsYWNlIHRl
eHRQb3NpdGlvbigpLgorVGV4dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0
aW9uT25lQmFzZWQoKSBjb25zdAoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRo
aXMtPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBUZXh0UG9z
aXRpb24xOjptaW5pbXVtUG9zaXRpb24oKTsKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMShXVEY6
Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmxpbmUpLAor
ICAgICAgICBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+aW5w
dXQtPmNvbCkpOworfQorCiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCiB7
CiAgICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFy
c2VyUXQuY3BwCmluZGV4IDk3NDc4NGM1MmJmZDZmMTllNDk5MmIzYmVjMDQ5NjNiNTI4NzMzYzcu
LjQ4Y2Y1ZGVjNTQ2NzA0NzlhODlmMmRjNmMwNGYxNDA4MzQ2NmE2ZGMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTERv
Y3VtZW50UGFyc2VyUXQuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6
OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcpCiAgICAgLCBtX2xhc3RFcnJvckxpbmUoMCkKICAgICAsIG1fbGFzdEVycm9yQ29sdW1uKDAp
CiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRMaW5lKDApCisg
ICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0
aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5n
UGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiB7CkBAIC0xMzIsNyArMTMyLDcg
QEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQq
IGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICAsIG1fbGFzdEVycm9yTGluZSgwKQogICAg
ICwgbV9sYXN0RXJyb3JDb2x1bW4oMCkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwg
bV9zY3JpcHRTdGFydExpbmUoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9z
aXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRy
dWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24ocGVybWlzc2lvbikKIHsKQEAgLTIzOCw2
ICsyMzgsMTggQEAgaW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAog
ICAgIHJldHVybiBtX3N0cmVhbS5jb2x1bW5OdW1iZXIoKTsKIH0KIAorVGV4dFBvc2l0aW9uMCBY
TUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4
dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5lTnVt
YmVyKCkpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb2x1bW5OdW1i
ZXIoKSkpOworfQorCisvLyBUaGlzIG1ldGhvZCBpbmNvcnJlY3RseSByZWludGVycHJldHMgemVy
by1iYXNlIGxpbmVOdW1iZXIgbWV0aG9kIGFzIG9uZS1iYXNlZCBudW1iZXIuCisvLyBGSVhNRTog
VGhpcyBlcnJvciBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5LiBXZSBzaG91bGQgZml4IGl0IGV2
ZW50dWFsbHkuIAorVGV4dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9u
T25lQmFzZWQoKSBjb25zdAoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFz
ZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Ok9uZUJhc2VkTnVt
YmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKCkpKTsKK30KKwogdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQogewogICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNl
cjo6c3RvcFBhcnNpbmcoKTsKQEAgLTUyMiw3ICs1MzQsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwYXJzZVN0YXJ0RWxlbWVudCgpCiAKICAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVt
ZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwogICAgIGlmIChzY3JpcHRF
bGVtZW50KQotICAgICAgICBtX3NjcmlwdFN0YXJ0TGluZSA9IGxpbmVOdW1iZXIoKTsKKyAgICAg
ICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uT25lQmFzZWQoKTsKIAogICAg
IG1fY3VycmVudE5vZGUtPmRlcHJlY2F0ZWRQYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgp
KTsKIApAQCAtNTk5LDcgKzYxMSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5k
RWxlbWVudCgpCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX3NjcmlwdEVs
ZW1lbnQgPSAwOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+
c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5z
Y3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOwor
ICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3Jp
cHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+
dXJsKCksIG1fc2NyaXB0U3RhcnRQb3NpdGlvbikpOwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdT
Y3JpcHQgPSBmYWxzZTsKICAgICBwb3BDdXJyZW50Tm9kZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDk0Y2MyYWE2MjM4NjJmNWNmMDU4MDQ3OTIw
NzI2NjNmMTkyM2M4NjcuLmQxNjk0MTdhNGJlODM5MzA5MDMwYjczNzRiNzU4OWRjNzE1YzY3YzQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTE5MSwx
MiArMTkxLDEyIEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2Vk
VHJlZUJ1aWxkZXIoKQogewogICAgIEFTU0VSVChtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKTsK
IAotICAgIGludCBzY3JpcHRTdGFydExpbmUgPSAwOwotICAgIFJlZlB0cjxFbGVtZW50PiBzY3Jp
cHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRvUHJvY2VzcyhzY3JpcHRTdGFy
dExpbmUpOworICAgIFRleHRQb3NpdGlvbjEgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFRleHRQb3Np
dGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpOworICAgIFJlZlB0cjxFbGVtZW50PiBzY3JpcHRF
bGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRvUHJvY2VzcyhzY3JpcHRTdGFydFBv
c2l0aW9uKTsKICAgICAvLyBXZSB3aWxsIG5vdCBoYXZlIGEgc2NyaXB0UnVubmVyIHdoZW4gcGFy
c2luZyBhIERvY3VtZW50RnJhZ21lbnQuCiAgICAgaWYgKCFtX3NjcmlwdFJ1bm5lcikKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlw
dEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydExpbmUpOworICAgIHJldHVybiBtX3Njcmlw
dFJ1bm5lci0+ZXhlY3V0ZShzY3JpcHRFbGVtZW50LnJlbGVhc2UoKSwgc2NyaXB0U3RhcnRQb3Np
dGlvbik7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNo
cm9ub3VzTW9kZSBtb2RlKQpAQCAtMzk2LDkgKzM5NiwxMyBAQCBpbnQgSFRNTERvY3VtZW50UGFy
c2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKICAgICByZXR1cm4gbV90b2tlbml6ZXItPmxpbmVOdW1i
ZXIoKTsKIH0KIAotaW50IEhUTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QK
K1RleHRQb3NpdGlvbjAgSFRNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAog
ewotICAgIHJldHVybiBtX3Rva2VuaXplci0+Y29sdW1uTnVtYmVyKCk7CisgICAgaW50IGxpbmVa
ZXJvQmFzZWQgPSBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOworICAgIGludCBjb2x1bW5PbmVC
YXNlZCA9IG1fdG9rZW5pemVyLT5jb2x1bW5OdW1iZXIoKTsKKworICAgIHJldHVybiBUZXh0UG9z
aXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxpbmVaZXJvQmFz
ZWQpLAorICAgICAgICBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1u
T25lQmFzZWQpLmNvbnZlcnRUb1plcm9CYXNlZCgpKTsKIH0KIAogYm9vbCBIVE1MRG9jdW1lbnRQ
YXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TERvY3VtZW50UGFyc2VyLmgKaW5kZXggZDk2MjVmMTIxOGI2NzRhNDZkYWUzZTFiMDhkOGJiN2Uz
YTU0ZTczNS4uMDUwNTNkZjJmMWNiNDU3NTExZWE3NDY4MWY0MmM3MjJiM2Q2YzlhMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCkBAIC05Miw3ICs5Miw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRXhlY3V0aW5nU2NyaXB0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCk7CiAgICAg
dmlydHVhbCBpbnQgbGluZU51bWJlcigpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNvbHVtbk51
bWJlcigpIGNvbnN0OworICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBj
b25zdDsKIAogICAgIC8vIEhUTUxTY3JpcHRSdW5uZXJIb3N0CiAgICAgdmlydHVhbCB2b2lkIHdh
dGNoRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5jcHAKaW5kZXggNzVkYjY0NGJlY2Q0NGM0YzdhZjc0N2VlM2U1OWQwYjRlYTQyN2Uz
NC4uNjFmNjczYTZmMWExMzg4MTlmODc0ODM5ZDIzN2E1M2Q2MmZiN2U5MCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFNjcmlwdFNv
dXJjZUNvZGUgSFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBlbmRpbmdTY3JpcHQoY29uc3Qg
UGVuZGluZ1NjcmlwdCYKICAgICAgICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmNh
Y2hlZFNjcmlwdCgpKTsKICAgICB9CiAgICAgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwotICAgIHJl
dHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50KCksIGRv
Y3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdM
aW5lTnVtYmVyKCkpOworICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50
KCktPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1l
bnQpLCBzY3JpcHQuc3RhcnRpbmdQb3NpdGlvbigpKTsKIH0KIAogYm9vbCBIVE1MU2NyaXB0UnVu
bmVyOjppc1BlbmRpbmdTY3JpcHRSZWFkeShjb25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCkBA
IC0xNzIsMTMgKzE3MiwxMyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnN0b3BXYXRjaGluZ0Zv
ckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIAogLy8gVGhpcyBmdW5jdGlvbiBz
aG91bGQgbWF0Y2ggMTAuMi41LjExICJBbiBlbmQgdGFnIHdob3NlIHRhZyBuYW1lIGlzICdzY3Jp
cHQnIgogLy8gU2NyaXB0IGhhbmRsaW5nIGxpdmVzIG91dHNpZGUgdGhlIHRyZWUgYnVpbGRlciB0
byBrZWVwIHRoZSBlYWNoIGNsYXNzIHNpbXBsZS4KLWJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhl
Y3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGludCBzdGFydExpbmUpCiti
b29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRF
bGVtZW50LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewogICAg
IEFTU0VSVChzY3JpcHRFbGVtZW50KTsKICAgICAvLyBGSVhNRTogSWYgc2NyaXB0aW5nIGlzIGRp
c2FibGVkLCBhbHdheXMganVzdCByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFRyeSB0byBleGVjdXRl
IHRoZSBzY3JpcHQgZ2l2ZW4gdG8gdXMuCi0gICAgcnVuU2NyaXB0KHNjcmlwdEVsZW1lbnQuZ2V0
KCksIHN0YXJ0TGluZSk7CisgICAgcnVuU2NyaXB0KHNjcmlwdEVsZW1lbnQuZ2V0KCksIHNjcmlw
dFN0YXJ0UG9zaXRpb24pOwogCiAgICAgaWYgKGhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSkg
ewogICAgICAgICBpZiAobV9zY3JpcHROZXN0aW5nTGV2ZWwpCkBAIC0yOTAsNyArMjkwLDcgQEAg
Ym9vbCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0
JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW4KIAogLy8gVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8gbWF0
Y2ggdGhlIEhUTUw1IGRlZmluaXRpb24gb2YgInJ1bm5pbmcgYSBzY3JpcHQiCiAvLyBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3Jp
cHRpbmctMS5odG1sI3J1bm5pbmctYS1zY3JpcHQKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVu
U2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcikKK3ZvaWQgSFRN
TFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0
aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAg
ICAgQVNTRVJUKCFoYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkpOwpAQCAtMzE3LDcgKzMxNyw3
IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgaW50
IHN0YXJ0aW5nTGluZU51bWJlcikKICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwNDcKICAgICAgICAgICAgIC8vIEFTU0VSVChkb2N1
bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXNF
eGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNv
ZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbiht
X2RvY3VtZW50KSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIFNjcmlwdFNvdXJj
ZUNvZGUgc291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2Ny
aXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICAgICAg
ICAgIGV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCBiL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCmluZGV4IGJlMjFkZDI0MjFiMWQ0NDI3YjA4NDdi
MGI5MTFjMWZlOTdjNmY3NjUuLjJkZjI5NWY5YzEzNTk0ZGVjYjZlZjFmMTAwZTNjZDk1ZDM3OTk0
MmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCisr
KyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpbmNsdWRlICJQZW5kaW5nU2NyaXB0LmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtNTIsNyArNTMsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKIAogICAgIC8vIFByb2Nlc3NlcyB0aGUgcGFz
c2VkIGluIHNjcmlwdCBhbmQgYW55IHBlbmRpbmcgc2NyaXB0cyBpZiBwb3NzaWJsZS4KLSAgICBi
b29sIGV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRUb1Byb2Nlc3MsIGludCBzY3Jp
cHRTdGFydExpbmUpOworICAgIGJvb2wgZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlw
dFRvUHJvY2VzcywgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAK
ICAgICBib29sIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKTsK
ICAgICBib29sIGhhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKSBjb25zdCB7IHJldHVy
biBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHM7IH0KQEAgLTc2LDcgKzc3LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHJlcXVlc3REZWZlcnJlZFNjcmlwdChFbGVtZW50Kik7CiAgICAg
Ym9vbCByZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiwgRWxlbWVudCopIGNvbnN0
OwogCi0gICAgdm9pZCBydW5TY3JpcHQoRWxlbWVudCosIGludCBzdGFydGluZ0xpbmVOdW1iZXIp
OworICAgIHZvaWQgcnVuU2NyaXB0KEVsZW1lbnQqLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzY3Jp
cHRTdGFydFBvc2l0aW9uKTsKIAogICAgIC8vIEhlbHBlcnMgZm9yIGRlYWxpbmcgd2l0aCBIVE1M
U2NyaXB0UnVubmVySG9zdAogICAgIHZvaWQgd2F0Y2hGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCA2MTM0NjA3YzAxMDNk
NTUyYjdlZGNiMmMwNGM5YWJlNmMxYmI5YmEyLi5jZDQ1OWMzNzM4ZTRiZmQ1M2ViY2I4Nzc0MzA0
Y2E3OGYwZGE4N2YyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBA
IC01Niw2ICs1NiwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgY29u
c3QgaW50IHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUgPSAtMTsKIAorc3RhdGljIFRleHRQ
b3NpdGlvbjEgdW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCkKK3sKKyAgICByZXR1cm4gVGV4
dFBvc2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoLTEpLCBXVEY6
Ok9uZUJhc2VkTnVtYmVyOjpiYXNlKCkpOworfQorCiBuYW1lc3BhY2UgewogCiBpbmxpbmUgYm9v
bCBpc0hUTUxTcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQpAQCAt
MzQwLDggKzM0NSw4IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tl
bml6ZXIqIHRva2VuaXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVuCiAgICAgLCBtX2luc2VydGlv
bk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFs
TW9kZSkKICAgICAsIG1fdG9rZW5pemVyKHRva2VuaXplcikKLSAgICAsIG1fc2NyaXB0VG9Qcm9j
ZXNzU3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCi0gICAgLCBtX2xhc3RT
Y3JpcHRFbGVtZW50U3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCisgICAg
LCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24odW5pbml0aWFsaXplZFBvc2l0aW9uVmFs
dWUxKCkpCisgICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRp
b24wOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWly
a3ModXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCiAgICAgLCBtX2hhc1BlbmRpbmdGb3JlaWduSW5z
ZXJ0aW9uTW9kZVN0ZXBzKGZhbHNlKQogewpAQCAtMzU5LDggKzM2NCw4IEBAIEhUTUxUcmVlQnVp
bGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgRG9jdW1lbnRG
cmFnbWVudCogZnJhCiAgICAgLCBtX2luc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBt
X29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fdG9rZW5pemVyKHRv
a2VuaXplcikKLSAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRM
aW5lTnVtYmVyVmFsdWUpCi0gICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lKHVuaW5p
dGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCisgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9z
aXRpb24odW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCkpCisgICAgLCBtX2xhc3RTY3JpcHRF
bGVtZW50U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24wOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkK
ICAgICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJRdWlya3Mp
CiAgICAgLCBtX2hhc1BlbmRpbmdGb3JlaWduSW5zZXJ0aW9uTW9kZVN0ZXBzKGZhbHNlKQogewpA
QCAtNDIzLDE1ICs0MjgsMTUgQEAgSFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVudFBhcnNpbmdDb250
ZXh0Ojp+RnJhZ21lbnRQYXJzaW5nQ29udGV4dCgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVu
dD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRM
aW5lKQorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1By
b2Nlc3MoVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAgICAvLyBVbnBh
dXNlIG91cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2UgdXMgYWdhaW4gd2hlbiBwcm9jZXNzaW5n
IHRoZSBzY3JpcHQuCiAgICAgLy8gVGhlIEhUTUw1IHNwZWMgaXMgd3JpdHRlbiBhcyB0aG91Z2gg
c2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVlCiAgICAgLy8gYnVpbGRlci4gIFdl
IHBhdXNlIHRoZSBwYXJzZXIgdG8gZXhpdCB0aGUgdHJlZSBidWlsZGVyLCBhbmQgdGhlbiByZXN1
bWUKICAgICAvLyBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgogICAgIG1faXNQYXVzZWQgPSBmYWxz
ZTsKLSAgICBzY3JpcHRTdGFydExpbmUgPSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZTsKLSAg
ICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSA9IHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFs
dWU7CisgICAgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3Np
dGlvbjsKKyAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSB1bmluaXRpYWxpemVk
UG9zaXRpb25WYWx1ZTEoKTsKICAgICByZXR1cm4gbV9zY3JpcHRUb1Byb2Nlc3MucmVsZWFzZSgp
OwogfQogCkBAIC0yMTkwLDcgKzIxOTUsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgbV9pc1BhdXNlZCA9
IHRydWU7CiAgICAgICAgICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1Rh
Z05hbWUoc2NyaXB0VGFnKSk7CiAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJl
ZS5jdXJyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExp
bmUgPSBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lICsgMTsKKyAgICAgICAgICAgIG1fc2Ny
aXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbiht
X2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbik7CiAgICAgICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkg
JiYgbV9mcmFnbWVudENvbnRleHQuc2NyaXB0aW5nUGVybWlzc2lvbigpID09IEZyYWdtZW50U2Ny
aXB0aW5nTm90QWxsb3dlZCkKICAgICAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVt
b3ZlQWxsQ2hpbGRyZW4oKTsKQEAgLTI3NzAsNyArMjc3NSwxMCBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAg
bV90cmVlLmluc2VydFNjcmlwdEVsZW1lbnQodG9rZW4pOwogICAgIG1fdG9rZW5pemVyLT5zZXRT
dGF0ZShIVE1MVG9rZW5pemVyOjpTY3JpcHREYXRhU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNl
cnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwotICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFy
dExpbmUgPSBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOworCisgICAgVGV4dFBvc2l0aW9uMCBw
b3NpdGlvbiA9IFRleHRQb3NpdGlvbjAoV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFz
ZWRJbnQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpi
YXNlKCkpOworICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uID0gcG9zaXRpb247
CisKICAgICBzZXRJbnNlcnRpb25Nb2RlKFRleHRNb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmgKaW5kZXggYzZmY2RmZDk4YmUzNmMyOGE2MmNkYTA0ZDJlMzAwOGQ5
OGJiYzcxMy4uMGU3NTk3YzgzZTZkM2U3NzRhYjY4YzY3NmJhY2Q2Yjg4ZjA5ZmRmYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnRTdGFjay5oIgogI2luY2x1ZGUgIkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3QuaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC03MSw3ICs3Miw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRN
TFRva2VuJik7CiAKICAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aGVuIHBhcnNlciBpcyBwYXVzZWQg
YmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+
IHRha2VTY3JpcHRUb1Byb2Nlc3MoaW50JiBzY3JpcHRTdGFydExpbmUpOworICAgIFBhc3NSZWZQ
dHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFy
dFBvc2l0aW9uKTsKIAogICAgIC8vIERvbmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KICAg
ICB2b2lkIGZpbmlzaGVkKCk7CkBAIC0yNDgsMTIgKzI0OSwxMiBAQCBwcml2YXRlOgogICAgIEhU
TUxUb2tlbml6ZXIqIG1fdG9rZW5pemVyOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0
VG9Qcm9jZXNzOyAvLyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUg
cmVzdW1pbmcgdGhlIHBhcnNlci4KLSAgICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7
IC8vIFN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vz
c2luZy4KKyAgICBUZXh0UG9zaXRpb24xIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsg
Ly8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVlZGluZyBwcm9jZXNz
aW5nLgogCiAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IHdhbnQgdG8gcmVtb3ZlIHRoaXMgbWVt
YmVyLiAgT3JpZ2luYWxseSwgaXQgd2FzCiAgICAgLy8gY3JlYXRlZCB0byBzZXJ2aWNlIHRoZSBs
ZWdhY3kgdHJlZSBidWlsZGVyLCBidXQgaXQgc2VlbXMgdG8gYmUgdXNlZCBmb3IKICAgICAvLyBz
b21lIG90aGVyIHRoaW5ncyBub3cuCi0gICAgaW50IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExp
bmU7CisgICAgVGV4dFBvc2l0aW9uMCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbjsK
IAogICAgIGJvb2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczsKIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NWYzMTU5OGYwZGVkM2NjNDRiY2YyMzIxMmM4NTlkYmNiMDQ4YjE2Yy4uMGFhYjQzYjkyZmViZTRm
MjRkYzUwZDdiNTUxZDIwYWI1MjBiODgyZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMTAtMTkgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhUTUwgcGFyc2VyIHNo
b3VsZCBwcm92aWRlIHNjcmlwdCBjb2x1bW4gcG9zaXRpb24gd2l0aGluIEhUTUwgZG9jdW1lbnQg
dG8gSmF2YVNjcmlwdCBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ1MjcxCisKKyAgICAgICAgUmVwbGFjZXMgc2NyaXB0IGxpbmUgbnVtYmVy
IHdpdGggVGV4dFBvc2l0aW9uIHN0cnVjdHVyZS4KKworICAgICAgICAqIHNyYy9XZWJGcmFtZUlt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29y
bGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRSZXR1
cm5WYWx1ZSk6CisKIDIwMTAtMTEtMDkgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuY3BwCmluZGV4IDQxYjgzMjFkNjcyNTEyNjZlZTQ1YmE0YzNjYmU3MzQ4MjU3
YzI0Y2MuLjdkYzE1MTU1MDczNTgzNGY2Yzc0YmNmNTQ5OTljNDcxMjAwYjQxMjAgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTc1Myw4ICs3NTMsOSBAQCB2b2lkIFdlYkZy
YW1lSW1wbDo6YmluZFRvV2luZG93T2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgTlBPYmpl
Y3QqIG9iamVjdCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHQoY29uc3QgV2Vi
U2NyaXB0U291cmNlJiBzb3VyY2UpCiB7CisgICAgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbihXVEY6
Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIFdURjo6
T25lQmFzZWROdW1iZXI6OmJhc2UoKSk7CiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVT
Y3JpcHQoCi0gICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmws
IHNvdXJjZS5zdGFydExpbmUpKTsKKyAgICAgICAgU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29k
ZSwgc291cmNlLnVybCwgcG9zaXRpb24pKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1
dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCkBAIC03NjQsOCArNzY1LDkgQEAgdm9pZCBXZWJGcmFt
ZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCiAgICAgVmVjdG9yPFNjcmlwdFNv
dXJjZUNvZGU+IHNvdXJjZXM7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU291
cmNlczsgKytpKSB7CisgICAgICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNl
ZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZXNJbltpXS5zdGFydExpbmUpLCBXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpiYXNlKCkpOwogICAgICAgICBzb3VyY2VzLmFwcGVuZChTY3JpcHRTb3Vy
Y2VDb2RlKAotICAgICAgICAgICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmws
IHNvdXJjZXNJbltpXS5zdGFydExpbmUpKTsKKyAgICAgICAgICAgIHNvdXJjZXNJbltpXS5jb2Rl
LCBzb3VyY2VzSW5baV0udXJsLCBwb3NpdGlvbikpOwogICAgIH0KIAogICAgIG1fZnJhbWUtPnNj
cmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElkLCBzb3VyY2VzLCBleHRlbnNp
b25Hcm91cCk7CkBAIC04MTcsOCArODE5LDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmNvbGxlY3RH
YXJiYWdlKCkKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3Jp
cHRBbmRSZXR1cm5WYWx1ZSgKICAgICBjb25zdCBXZWJTY3JpcHRTb3VyY2UmIHNvdXJjZSkKIHsK
KyAgICBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVC
YXNlZEludChzb3VyY2Uuc3RhcnRMaW5lKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSgpKTsK
ICAgICByZXR1cm4gbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoCi0gICAgICAgIFNj
cmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHNvdXJjZS5zdGFydExpbmUp
KS52OFZhbHVlKCk7CisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJj
ZS51cmwsIHBvc2l0aW9uKSkudjhWYWx1ZSgpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBWOCBjb250
ZXh0IGZvciB0aGlzIGZyYW1lLCBvciBhbiBlbXB0eSBoYW5kbGUgaWYgdGhlcmUgaXMgbm9uZS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>