<?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>62882</bug_id>
          
          <creation_ts>2011-06-17 10:55:57 -0700</creation_ts>
          <short_desc>WebVTT parser</short_desc>
          <delta_ts>2011-08-05 21:12:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>62893</dependson>
    
    <dependson>64132</dependson>
    
    <dependson>64921</dependson>
          <blocked>43668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anna Cavender">annacc</reporter>
          <assigned_to name="Anna Cavender">annacc</assigned_to>
          <cc>aaronlevbugs</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>imasaki</cc>
    
    <cc>jer.noble</cc>
    
    <cc>rniwa</cc>
    
    <cc>silviapfeiffer1</cc>
    
    <cc>vrk</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>422727</commentid>
    <comment_count>0</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-06-17 10:55:57 -0700</bug_when>
    <thetext>Implement a WebVTT parser for text track files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431563</commentid>
    <comment_count>1</comment_count>
      <attachid>99544</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-01 18:10:37 -0700</bug_when>
    <thetext>Created attachment 99544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431565</commentid>
    <comment_count>2</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-01 18:17:02 -0700</bug_when>
    <thetext>A few notes about this WebVTT parser:

There are aspects of the WebVTT parser spec that are not present in this patch:
* cue class span &lt;c&gt;&lt;/c&gt;
* cue voice span &lt;v&gt;&lt;/v&gt;
* cue timestamp (within the cue)
* detecting the BOM character at the front of a WebVTT file

Some of the html features of WebVTT we get for free in WebKit, specifically:
&lt;i&gt;&lt;/i&gt;
&lt;b&gt;&lt;/b&gt;
&lt;u&gt;&lt;/u&gt;
&lt;ruby&gt;&lt;/ruby&gt;

Thanks!
-Anna</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431582</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-07-01 22:16:31 -0700</bug_when>
    <thetext>cc&apos;d Eric Seidel because he and Adam wrote the HTML5 parser and I know squat about parsing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431583</commentid>
    <comment_count>4</comment_count>
      <attachid>99544</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-07-01 22:49:51 -0700</bug_when>
    <thetext>Comment on attachment 99544
Patch

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

&gt; Source/WebCore/platform/track/CueParser.cpp:72
&gt; +    return url.contains(&quot;.vtt&quot;);
&gt;  }

Won&apos;t this match &quot;.vtt&quot; *anywhere in the string? Is this type a MIME type of a file name? If the former, I think it would be good if this took a ContentType as MediaPlayer::supportsType does. If the former, the function name should make it clear that the parameter is a file name.

&gt; Source/WebCore/platform/track/CueParser.cpp:92
&gt; +        if (firstLine.contains(&quot;WEBVTT&quot;))
&gt; +            m_private = WebVTTParser::create(this);

Is it OK that this will match &quot;WEBVTT&quot; anywhere in the first line of the file? The parser fails if the first line is not &quot;WEBVTT&quot; or &quot;WEBVTT FILE&quot;, this should probably do the same.

&gt; Source/WebCore/platform/track/CueParser.cpp:93
&gt; +        m_client-&gt;trackLoadStarted();

Should trackLoadStarted() be called if the parser is not created?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:99
&gt; +        case TIMINGSANDSETTINGS:
&gt; +            // 2-4 - WebVTT cue timings, white space, and optional WebVTT cue settings.

You should have FIXMEs for the features not supported yet.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:163
&gt; +    // 6-9 - If the next three characters are not &quot;--&gt;&quot;, abort and return failure.
&gt; +    if (input.substring(position, 3) != &quot;--&gt;&quot;)
&gt; +        return false;
&gt; +    position += 3;
&gt; +    position = skipWhiteSpace(input, position);
&gt; +    // 10-11 - Collect a WebVTT timestamp. If that fails, then abort and return failure. Otherwise, let cue&apos;s text track cue end time be the collected time.

Nit here an elsewhere: I think it would be slightly easier to read if there was a blank line before each spec step/comment .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431591</commentid>
    <comment_count>5</comment_count>
      <attachid>99544</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-01 23:47:51 -0700</bug_when>
    <thetext>Comment on attachment 99544
Patch

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

Deifnitely need some sort of testing for this patch to be seriously considered. :)

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:10457
&gt; +		B10B740C13BE80BF00BC1C26 /* WebVTTParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebVTTParser.h; path = platform/track/WebVTTParser.h; sourceTree = SOURCE_ROOT; };
&gt; +		B10B740D13BE80BF00BC1C26 /* WebVTTParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebVTTParser.cpp; path = platform/track/WebVTTParser.cpp; sourceTree = SOURCE_ROOT; };

These should be group relative, not SOURCE_ROOT relative.

&gt; Source/WebCore/platform/track/CueParser.cpp:76
&gt; +    // This may handle other mime types as well one day.

I don&apos;t think the comment adds much.

&gt; Source/WebCore/platform/track/CueParser.cpp:88
&gt; +        String firstLine = content.substring(0, content.find(&quot;\n&quot;));

It&apos;s more efficient to just search for what you want instead of splitting the string on \n.  Is there a spec which covers this?

&gt; Source/WebCore/platform/track/CueParser.cpp:89
&gt; +        if (firstLine == emptyString())

firstLine.isEmpty()

&gt; Source/WebCore/platform/track/CueParser.cpp:90
&gt; +          firstLine = content.substring(0, content.find(&quot;\r&quot;));

indent is odd.  Also, why search for \r after having found an empty line with \n?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:42
&gt; +    : m_state(HEADER)

I don&apos;t think all-caps is normal style for enums.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:47
&gt; +    , m_currentContent(emptyString())
&gt; +    , m_currentSettings(emptyString())

You could just use &quot;&apos; here.  Is it important that these be &quot;&quot; instead of null strings?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:56
&gt; +    for (size_t i = 0; i &lt; m_cuelist.size(); ++i)
&gt; +        outputCues.append(m_cuelist[i]);

Doesn&apos;t vector have a copy method?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:62
&gt; +    // The following is based on WHATWG WebVTT 4.8.10.13.2 Syntax.

Thank you, that is helpful.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:63
&gt; +    String inputBytes = String::fromUTF8(data);

This is not the normal way we do text decoding.  Are you sure this is always utf8?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:65
&gt; +    splitByLineTerminators(inputBytes, lines);

Your parser does lots of string mallocs.  Which is OK, but not very efficient.   I&apos;m not sure how performance senstiave this code is, if at all.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:68
&gt; +    for (Vector&lt;String&gt;::iterator line = lines.begin(); line != lines.end(); line++) {
&gt; +        String currentLine = *line;

You could easily do this by searching for the next marker and keeping a start/end pointer and creating a string from that (or not even bothering creating a string).  Again, depends on what your constraits are.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:74
&gt; +            if (currentLine.stripWhiteSpace() != &quot;WEBVTT&quot; &amp;&amp; currentLine.stripWhiteSpace() != &quot;WEBVTT FILE&quot;)

Are you intentionally allowing leading spaces?  This code does...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431592</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-01 23:48:26 -0700</bug_when>
    <thetext>Darin is also particularly knowledgable about parsers, but then again he&apos;s particularly knowledgable about many things... :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433824</commentid>
    <comment_count>7</comment_count>
      <attachid>99544</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-07 17:56:52 -0700</bug_when>
    <thetext>Comment on attachment 99544
Patch

Thanks for the fast response on reviews!  Eric Seidel, what kind of testing would you like to see?  And would you be willing to talk with me separately about that?

Thanks!
-Anna

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

&gt;&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:10457
&gt;&gt; +		B10B740D13BE80BF00BC1C26 /* WebVTTParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebVTTParser.cpp; path = platform/track/WebVTTParser.cpp; sourceTree = SOURCE_ROOT; };
&gt; 
&gt; These should be group relative, not SOURCE_ROOT relative.

Done.

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:72
&gt;&gt;  }
&gt; 
&gt; Won&apos;t this match &quot;.vtt&quot; *anywhere in the string? Is this type a MIME type of a file name? If the former, I think it would be good if this took a ContentType as MediaPlayer::supportsType does. If the former, the function name should make it clear that the parameter is a file name.

I decided to take this out for now as it will primarily be used for &lt;source&gt; children of &lt;track&gt; tags, which we decided not to include yet.

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:76
&gt;&gt; +    // This may handle other mime types as well one day.
&gt; 
&gt; I don&apos;t think the comment adds much.

OK, it&apos;s gone.

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:88
&gt;&gt; +        String firstLine = content.substring(0, content.find(&quot;\n&quot;));
&gt; 
&gt; It&apos;s more efficient to just search for what you want instead of splitting the string on \n.  Is there a spec which covers this?

I agree.  I changed it to more closely follow the WHATWG WEBVTT text/vtt spec, even though I think it&apos;s still under consideration: http://www.whatwg.org/specs/web-apps/current-work/multipage/iana.html#text/vtt

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:89
&gt;&gt; +        if (firstLine == emptyString())
&gt; 
&gt; firstLine.isEmpty()

Gone.

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:90
&gt;&gt; +          firstLine = content.substring(0, content.find(&quot;\r&quot;));
&gt; 
&gt; indent is odd.  Also, why search for \r after having found an empty line with \n?

Gone.

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:92
&gt;&gt; +            m_private = WebVTTParser::create(this);
&gt; 
&gt; Is it OK that this will match &quot;WEBVTT&quot; anywhere in the first line of the file? The parser fails if the first line is not &quot;WEBVTT&quot; or &quot;WEBVTT FILE&quot;, this should probably do the same.

No, good call.  I&apos;ve changed it to follow spec (optional BOM character followed by &quot;WEBVTT&quot;).

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:93
&gt;&gt; +        m_client-&gt;trackLoadStarted();
&gt; 
&gt; Should trackLoadStarted() be called if the parser is not created?

Also no.  Changed to only call trackLoadStarted when parser is created.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:42
&gt;&gt; +    : m_state(HEADER)
&gt; 
&gt; I don&apos;t think all-caps is normal style for enums.

Gone.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:47
&gt;&gt; +    , m_currentSettings(emptyString())
&gt; 
&gt; You could just use &quot;&apos; here.  Is it important that these be &quot;&quot; instead of null strings?

Nope, not important.  I&apos;ve removed these initializers.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:56
&gt;&gt; +        outputCues.append(m_cuelist[i]);
&gt; 
&gt; Doesn&apos;t vector have a copy method?

Nice catch, thanks.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:63
&gt;&gt; +    String inputBytes = String::fromUTF8(data);
&gt; 
&gt; This is not the normal way we do text decoding.  Are you sure this is always utf8?

Yes, WebVTT files must always be UTF-8 (see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#webvtt-file).  I&apos;m happy to take suggestions though if this looks strange to you.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:65
&gt;&gt; +    splitByLineTerminators(inputBytes, lines);
&gt; 
&gt; Your parser does lots of string mallocs.  Which is OK, but not very efficient.   I&apos;m not sure how performance senstiave this code is, if at all.

I agree, I&apos;ve changed it to better match the spec, which I believe should be more efficient.  Performance isn&apos;t a big deal here as text tracks ought to be relatively small compared to the video/media they accompany, but we should do it right :).

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:68
&gt;&gt; +        String currentLine = *line;
&gt; 
&gt; You could easily do this by searching for the next marker and keeping a start/end pointer and creating a string from that (or not even bothering creating a string).  Again, depends on what your constraits are.

Yep, you&apos;re right.  Changed.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:74
&gt;&gt; +            if (currentLine.stripWhiteSpace() != &quot;WEBVTT&quot; &amp;&amp; currentLine.stripWhiteSpace() != &quot;WEBVTT FILE&quot;)
&gt; 
&gt; Are you intentionally allowing leading spaces?  This code does...

Gone.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:99
&gt;&gt; +            // 2-4 - WebVTT cue timings, white space, and optional WebVTT cue settings.
&gt; 
&gt; You should have FIXMEs for the features not supported yet.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:163
&gt;&gt; +    // 10-11 - Collect a WebVTT timestamp. If that fails, then abort and return failure. Otherwise, let cue&apos;s text track cue end time be the collected time.
&gt; 
&gt; Nit here an elsewhere: I think it would be slightly easier to read if there was a blank line before each spec step/comment .

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433825</commentid>
    <comment_count>8</comment_count>
      <attachid>100055</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-07 17:57:19 -0700</bug_when>
    <thetext>Created attachment 100055
Addressing comments and making more spec compliant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433828</commentid>
    <comment_count>9</comment_count>
      <attachid>100055</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-07 18:01:09 -0700</bug_when>
    <thetext>Comment on attachment 100055
Addressing comments and making more spec compliant.

The code is not excercised in any test.  Past experiance has taught me that if code isn&apos;t tested, it&apos;s broken.  So we just need some way to exercise this code.  Whether by using existing run-webkit-tests LayoutTests or the unit testing code available from WTF, or something new. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433846</commentid>
    <comment_count>10</comment_count>
      <attachid>100055</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-07-07 18:34:29 -0700</bug_when>
    <thetext>Comment on attachment 100055
Addressing comments and making more spec compliant.

Attachment 100055 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9001256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433905</commentid>
    <comment_count>11</comment_count>
      <attachid>100074</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-07 22:38:25 -0700</bug_when>
    <thetext>Created attachment 100074
Correcting some typos

Correcting some typos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433906</commentid>
    <comment_count>12</comment_count>
      <attachid>100074</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-07-07 22:41:59 -0700</bug_when>
    <thetext>Comment on attachment 100074
Correcting some typos

Attachment 100074 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8999417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434231</commentid>
    <comment_count>13</comment_count>
      <attachid>100074</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-07-08 12:25:02 -0700</bug_when>
    <thetext>Comment on attachment 100074
Correcting some typos

I agree with Eric, tests for this parser are absolutely essential! 

Even though none of the ports builds with VIDEO_TRACK, you obviously build with it on so you can run the tests yourself to make sure the parser behaves correctly, and to make sure you don&apos;t accidentally break it as you add more functionality. 


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

&gt; Source/WebCore/html/TextTrackCue.cpp:160
&gt; +            while (position &lt; input.length() &amp;&amp; input[position] != &apos; &apos; &amp;&amp; input[position] != &apos;\t&apos;)

Why break on a tab, the spec says &quot;Collect a sequence of characters that are not space characters&quot;?

&gt; Source/WebCore/html/TextTrackCue.cpp:165
&gt; +            if (equalIgnoringCase(writingDirection, &quot;vertical&quot;))
&gt; +                m_writingDirection = VerticalGrowingLeft;
&gt; +            if (equalIgnoringCase(writingDirection, &quot;vertical-lr&quot;))
&gt; +                m_writingDirection = VerticalGrowingRight;

The spec says the direction strings are case sensitive: &quot;If value is a case-sensitive match for the string &quot;vertical&quot;, then let cue&apos;s text track cue...&quot;

&gt; Source/WebCore/html/TextTrackCue.cpp:174
&gt; +            if (position &lt;= input.length() &amp;&amp; input[position] != &apos; &apos; &amp;&amp; input[position] != &apos;\t&apos;)
&gt; +                break;

Ditto about stopping on a tab. 

In the case where there is a non-space character immediately after an &apos;L&apos;, the spec says to skip everything *up to* the next space: &quot;Collect a sequence of characters that are not space characters and discard them&quot;. Just breaking out of the case will skip up to the first non-space. This is different from the other terminating conditions for this stage.

&gt; Source/WebCore/html/TextTrackCue.cpp:176
&gt; +            if (linePosition.substring(1, linePosition.length()-1).contains(&apos;-&apos;) || linePosition.substring(0, linePosition.length()-1).contains(&apos;%&apos;))
&gt; +                break;

Doesn&apos;t &quot;linePosition.substring(1, linePosition.length()-1&quot; return a new string identical to &quot;linePosition&quot;? Is it necessary to copy the string to look for a character?

&gt; Source/WebCore/html/TextTrackCue.cpp:177
&gt; +            if (linePosition[0] == &apos;-&apos; &amp;&amp; linePosition[linePosition.length()-1] == &apos;%&apos;)

Nit here and elsewhere: &quot;xxx-1&quot; should have a space before and after the minus sign.

&gt; Source/WebCore/html/TextTrackCue.cpp:187
&gt; +            if (linePosition[linePosition.length()-1] == &apos;%&apos;) {
&gt; +                number = linePosition.substring(0, linePosition.length()-1).toInt64();
&gt; +                if (number &lt; 0 || number &gt; 100)
&gt; +                    break;
&gt; +                m_snapToLines = false;
&gt; +            } else
&gt; +                number = linePosition.substring(0, linePosition.length()).toInt64();
&gt; +            m_linePosition = number;

1) Here again, it isn&apos;t necessary to create a substring from 0..length. 

2) You skipped step 3: &quot;If value does not contain at least one character in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then jump back to the step labeled settings&quot;.

3) I believe that toInt64() will convert everything up to the first non-digit character to a number so you can simplify this:

bool validNumber;
number = linePosition.substring(0, linePosition.length()).toInt64(&amp;validNumber);
if (!validNumber)
    break;
if (linePosition[linePosition.length()-1] == &apos;%&apos;) {
    if (number &lt; 0 || number &gt; 100)
        break;
    m_snapToLines = false;
}
m_linePosition = number;

&gt; Source/WebCore/html/TextTrackCue.cpp:198
&gt; +            if (input[position++] != &apos;%&apos;)
&gt; +                break;

If the character is not a &apos;%&apos; you should discard everything *up to* the next space.

&gt; Source/WebCore/html/TextTrackCue.cpp:200
&gt; +            if (position &lt; input.length() &amp;&amp; input[position] != &apos; &apos; &amp;&amp; input[position] != &apos;\t&apos;)
&gt; +                break;

Break on tab? In this case you should also skip everything  up to the next space.

&gt; Source/WebCore/html/TextTrackCue.cpp:213
&gt; +            while (position &lt; input.length() &amp;&amp; &apos;0&apos; &lt;= input[position] &amp;&amp; input[position] &lt;= &apos;9&apos;)
&gt; +                cueSize.append(input[position++]);

The &quot;Collect a sequence of characters that are in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)&quot; pattern is used often enough that it calls out for a function instead of repeating the code each time.

&gt; Source/WebCore/html/TextTrackCue.cpp:219
&gt; +            if (position &lt; input.length() &amp;&amp; input[position] != &apos; &apos; &amp;&amp; input[position] != &apos;\t&apos;)
&gt; +                break;

Break on tab? In this case you should also skip everything  up to the next space.

&gt; Source/WebCore/html/TextTrackCue.cpp:232
&gt; +            while (position &lt; input.length() &amp;&amp; input[position] != &apos; &apos; &amp;&amp; input[position] != &apos;\t&apos;)
&gt; +                cueAlignment.append(input[position++]);

Break on tab?

&gt; Source/WebCore/html/TextTrackCue.cpp:238
&gt; +            if (equalIgnoringCase(cueAlignment, &quot;start&quot;))
&gt; +                m_cueAlignment = Start;
&gt; +            if (equalIgnoringCase(cueAlignment, &quot;middle&quot;))
&gt; +                m_cueAlignment = Middle;
&gt; +            if (equalIgnoringCase(cueAlignment, &quot;end&quot;))
&gt; +                m_cueAlignment = End;

These comparisons should all be case sensitive.

&gt; Source/WebCore/html/TextTrackCue.cpp:244
&gt; +        while (position &lt; input.length() &amp;&amp; (input[position] == &apos; &apos; || input[position] == &apos;\t&apos;))
&gt; +            position++;

Break on tab?

&gt; Source/WebCore/html/TextTrackCue.h:84
&gt;      String m_settings;

Is it useful to retain the settings as a string in a non-debug build?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:65
&gt; +    // 5-8 - Collect the first line and check that it is &quot;WEBVTT&quot; (we also check for &quot;WEBVTT FILE&quot; for legacy reasons).
&gt; +    String line;
&gt; +    while (position &lt; input.length() &amp;&amp; input[position] != &apos;\r&apos; &amp;&amp; input[position] != &apos;\n&apos;)
&gt; +        line.append(input[position++]);

A question that the other Eric may know the answer to: does it make sense to use a SegmentedString in at least this outer processing loop because WebVTT files are line based?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:93
&gt; +Header:
&gt; +    // 13-18 - Allow a header (comment area) under the WEBVTT line.
&gt; +    line = &quot;&quot;;
&gt; +    while (position &lt; input.length() &amp;&amp; input[position] != &apos;\r&apos; &amp;&amp; input[position] != &apos;\n&apos;)
&gt; +        line.append(input[position++]);
&gt; +    position = skipLineTerminator(input, position);
&gt; +    if (!line.isEmpty())
&gt; +        goto Header;
&gt; +
&gt; +CueLoop:
&gt; +    // 19-29 - Allow any number of line terminators, then initialize new cue values.
&gt; +    while (position &lt; input.length() &amp;&amp; (input[position] == &apos;\r&apos; || input[position] == &apos;\n&apos;))
&gt; +        position++;
&gt; +    resetCueValues();
&gt; +

Instead of using inline code and jumping between labels, I think the code will be easier to follow (and debug later) if you are able to break it up into functions and structure it as a state machine. Something like:

enum ParserState {
        Initial,
        CueLoop,
        ... etc ...
    };

    ParserState state = Initial;

    while (position &lt; input.length()) {
        switch (state) {
        case Initial: {
            if (!requireFileIdentifier(input, position))
                return;
            skipHeader(input, position);
            state = CueLoop;
            break;
        }

        case CueLoop: {
            state = parseCue(input, position, line);
            break;
        }

... etc ...

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:173
&gt; +    if (input.substring(position, 3) != &quot;--&gt;&quot;)
&gt; +        return false;

You could use find() instead of allocating a new string.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:206
&gt; +    String digits1;
&gt; +    while (position &lt; input.length() &amp;&amp; &apos;0&apos; &lt;= input[position] &amp;&amp; input[position] &lt;= &apos;9&apos;)
&gt; +        digits1.append(input[position++]);
&gt; +    int value1 = digits1.toInt();

This should be able to use the same function you will create to parse numbers for parseSettings().

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:220
&gt; +    // 8-12 - Collect the next sequence of 0-9 after &apos;:&apos; (must be 2 chars).
&gt; +    if (position &gt;= input.length() || input[position++] != &apos;:&apos;)
&gt; +        return malformedTime;
&gt; +    if (position &gt;= input.length() || !(&apos;0&apos; &lt;= input[position] &amp;&amp; input[position] &lt;= &apos;9&apos;))
&gt; +        return malformedTime;
&gt; +    String digits2;
&gt; +    while (position &lt; input.length() &amp;&amp; &apos;0&apos; &lt;= input[position] &amp;&amp; input[position] &lt;= &apos;9&apos;)
&gt; +        digits2.append(input[position++]);
&gt; +    int value2 = digits2.toInt();

Here too.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:237
&gt; +        while (position &lt; input.length() &amp;&amp; &apos;0&apos; &lt;= input[position] &amp;&amp; input[position] &lt;= &apos;9&apos;)
&gt; +            digits3.append(input[position++]);
&gt; +        if (digits3.length() != 2)
&gt; +            return malformedTime;
&gt; +        value3 = digits3.toInt();

And here.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:256
&gt; +    // 14-19 - Collect next sequence of 0-9 after &apos;.&apos; (must be 3 chars).
&gt; +    if (position &gt;= input.length() || input[position++] != &apos;.&apos;)
&gt; +        return malformedTime;
&gt; +    if (position &gt;= input.length() || !(&apos;0&apos; &lt;= input[position] &amp;&amp; input[position] &lt;= &apos;9&apos;))
&gt; +        return malformedTime;
&gt; +    String digits4;
&gt; +    while (position &lt; input.length() &amp;&amp; &apos;0&apos; &lt;= input[position] &amp;&amp; input[position] &lt;= &apos;9&apos;)
&gt; +        digits4.append(input[position++]);
&gt; +    if (digits4.length() != 3)
&gt; +        return malformedTime;
&gt; +    int value4 = digits4.toInt();
&gt; +    if (value2 &gt; 59 || value3 &gt; 59)
&gt; +        return malformedTime;

And here.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:259
&gt; +    return value1 * secondsInHour + value2 * secondsInMinute + value3 + (double)value4 / 1000;

Parentheses around the terms would make this much easier to parse visually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434733</commentid>
    <comment_count>14</comment_count>
    <who name="Silvia Pfeiffer">silviapfeiffer1</who>
    <bug_when>2011-07-11 03:18:41 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 100074 [details])
&gt; &gt; Source/WebCore/html/TextTrackCue.cpp:160
&gt; &gt; +            while (position &lt; input.length() &amp;&amp; input[position] != &apos; &apos; &amp;&amp; input[position] != &apos;\t&apos;)
&gt; 
&gt; Why break on a tab, the spec says &quot;Collect a sequence of characters that are not space characters&quot;?

The &quot;space characters&quot; that the WebVTT spec refers to are defined here: http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#space-character and include U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), U+000A LINE FEED (LF), U+000C FORM FEED (FF), and U+000D CARRIAGE RETURN (CR). Since we have done away with the newlines before getting to the settings parsing, I think Anna&apos;s code is right.


&gt;
&gt; &gt; Source/WebCore/html/TextTrackCue.cpp:244
&gt; &gt; +        while (position &lt; input.length() &amp;&amp; (input[position] == &apos; &apos; || input[position] == &apos;\t&apos;))
&gt; &gt; +            position++;

I don&apos;t think this loop is in the spec. This loop removes more than one &quot;space&quot; separation character from between the individual settings. However, the spec does not contain that. Maybe it should?

What is missing, however, is the &quot;Otherwise&quot; part from the settings parsing: namely the bit that picks up on surplus characters from faulty settings and parses through to the next &quot;space&quot; character.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437216</commentid>
    <comment_count>15</comment_count>
      <attachid>100074</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-14 11:21:22 -0700</bug_when>
    <thetext>Comment on attachment 100074
Correcting some typos

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

&gt;&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:160
&gt;&gt;&gt; +            while (position &lt; input.length() &amp;&amp; input[position] != &apos; &apos; &amp;&amp; input[position] != &apos;\t&apos;)
&gt;&gt; 
&gt;&gt; Why break on a tab, the spec says &quot;Collect a sequence of characters that are not space characters&quot;?
&gt; 
&gt; The &quot;space characters&quot; that the WebVTT spec refers to are defined here: http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#space-character and include U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), U+000A LINE FEED (LF), U+000C FORM FEED (FF), and U+000D CARRIAGE RETURN (CR). Since we have done away with the newlines before getting to the settings parsing, I think Anna&apos;s code is right.

Yes, Silvia is right, but those tab characters are ugly.  I&apos;ve moved them into a separate function.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:165
&gt;&gt; +                m_writingDirection = VerticalGrowingRight;
&gt; 
&gt; The spec says the direction strings are case sensitive: &quot;If value is a case-sensitive match for the string &quot;vertical&quot;, then let cue&apos;s text track cue...&quot;

Done.  Thanks, I misread that.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:174
&gt;&gt; +                break;
&gt; 
&gt; Ditto about stopping on a tab. 
&gt; 
&gt; In the case where there is a non-space character immediately after an &apos;L&apos;, the spec says to skip everything *up to* the next space: &quot;Collect a sequence of characters that are not space characters and discard them&quot;. Just breaking out of the case will skip up to the first non-space. This is different from the other terminating conditions for this stage.

Done.  Ah, I see my mistake.  Should be corrected now, thanks!

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:176
&gt;&gt; +                break;
&gt; 
&gt; Doesn&apos;t &quot;linePosition.substring(1, linePosition.length()-1&quot; return a new string identical to &quot;linePosition&quot;? Is it necessary to copy the string to look for a character?

Well, we want to check that any character other than the first is not a &apos;-&apos; and that any character other than the last is not a &apos;%&apos;, so the strings really are substrings.  But, you&apos;re right, it&apos;s not necessary to copy; I changed it to use find() instead of contains().

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:177
&gt;&gt; +            if (linePosition[0] == &apos;-&apos; &amp;&amp; linePosition[linePosition.length()-1] == &apos;%&apos;)
&gt; 
&gt; Nit here and elsewhere: &quot;xxx-1&quot; should have a space before and after the minus sign.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:187
&gt;&gt; +            m_linePosition = number;
&gt; 
&gt; 1) Here again, it isn&apos;t necessary to create a substring from 0..length. 
&gt; 
&gt; 2) You skipped step 3: &quot;If value does not contain at least one character in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then jump back to the step labeled settings&quot;.
&gt; 
&gt; 3) I believe that toInt64() will convert everything up to the first non-digit character to a number so you can simplify this:
&gt; 
&gt; bool validNumber;
&gt; number = linePosition.substring(0, linePosition.length()).toInt64(&amp;validNumber);
&gt; if (!validNumber)
&gt;     break;
&gt; if (linePosition[linePosition.length()-1] == &apos;%&apos;) {
&gt;     if (number &lt; 0 || number &gt; 100)
&gt;         break;
&gt;     m_snapToLines = false;
&gt; }
&gt; m_linePosition = number;

Done. Nice! Thanks!

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:198
&gt;&gt; +                break;
&gt; 
&gt; If the character is not a &apos;%&apos; you should discard everything *up to* the next space.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:200
&gt;&gt; +                break;
&gt; 
&gt; Break on tab? In this case you should also skip everything  up to the next space.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:213
&gt;&gt; +                cueSize.append(input[position++]);
&gt; 
&gt; The &quot;Collect a sequence of characters that are in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)&quot; pattern is used often enough that it calls out for a function instead of repeating the code each time.

Done.  Though I am unsure if making this method static in TextTrackCue as I have done is the right approach...

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:219
&gt;&gt; +                break;
&gt; 
&gt; Break on tab? In this case you should also skip everything  up to the next space.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:232
&gt;&gt; +                cueAlignment.append(input[position++]);
&gt; 
&gt; Break on tab?

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:238
&gt;&gt; +                m_cueAlignment = End;
&gt; 
&gt; These comparisons should all be case sensitive.

Done.

&gt;&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:244
&gt;&gt;&gt; +            position++;
&gt;&gt; 
&gt;&gt; Break on tab?
&gt; 
&gt; I don&apos;t think this loop is in the spec. This loop removes more than one &quot;space&quot; separation character from between the individual settings. However, the spec does not contain that. Maybe it should?
&gt; 
&gt; What is missing, however, is the &quot;Otherwise&quot; part from the settings parsing: namely the bit that picks up on surplus characters from faulty settings and parses through to the next &quot;space&quot; character.

I decided to keep the loop.  Some sort of check is necessary, otherwise position will not advance properly.  And I do think the spec should be tolerant of more than one space character between settings.

Done re Otherwise.  Much better :).

&gt;&gt; Source/WebCore/html/TextTrackCue.h:84
&gt;&gt;      String m_settings;
&gt; 
&gt; Is it useful to retain the settings as a string in a non-debug build?

Done.  It&apos;s gone.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:65
&gt;&gt; +        line.append(input[position++]);
&gt; 
&gt; A question that the other Eric may know the answer to: does it make sense to use a SegmentedString in at least this outer processing loop because WebVTT files are line based?

I&apos;ve moved back to a state machine model, this time collecting on a line-by-line basis without doing all the string mallocs I had before.  I think this is a good compromise.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:93
&gt;&gt; +
&gt; 
&gt; Instead of using inline code and jumping between labels, I think the code will be easier to follow (and debug later) if you are able to break it up into functions and structure it as a state machine. Something like:
&gt; 
&gt; enum ParserState {
&gt;         Initial,
&gt;         CueLoop,
&gt;         ... etc ...
&gt;     };
&gt; 
&gt;     ParserState state = Initial;
&gt; 
&gt;     while (position &lt; input.length()) {
&gt;         switch (state) {
&gt;         case Initial: {
&gt;             if (!requireFileIdentifier(input, position))
&gt;                 return;
&gt;             skipHeader(input, position);
&gt;             state = CueLoop;
&gt;             break;
&gt;         }
&gt; 
&gt;         case CueLoop: {
&gt;             state = parseCue(input, position, line);
&gt;             break;
&gt;         }
&gt; 
&gt; ... etc ...

Ha!  I agree, that&apos;s more like how I had it before.  The new patch is updated.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:173
&gt;&gt; +        return false;
&gt; 
&gt; You could use find() instead of allocating a new string.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:206
&gt;&gt; +    int value1 = digits1.toInt();
&gt; 
&gt; This should be able to use the same function you will create to parse numbers for parseSettings().

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:220
&gt;&gt; +    int value2 = digits2.toInt();
&gt; 
&gt; Here too.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:237
&gt;&gt; +        value3 = digits3.toInt();
&gt; 
&gt; And here.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:256
&gt;&gt; +        return malformedTime;
&gt; 
&gt; And here.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:259
&gt;&gt; +    return value1 * secondsInHour + value2 * secondsInMinute + value3 + (double)value4 / 1000;
&gt; 
&gt; Parentheses around the terms would make this much easier to parse visually.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437218</commentid>
    <comment_count>16</comment_count>
      <attachid>100833</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-14 11:21:49 -0700</bug_when>
    <thetext>Created attachment 100833
addressing comments, tests coming soon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437221</commentid>
    <comment_count>17</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-14 11:29:39 -0700</bug_when>
    <thetext>Regarding tests for this parser, the test cases we have been using internally are here:
http://src.chromium.org/viewvc/chrome?view=rev&amp;revision=92193

Should we make these part of WebKit?  Automated tests would obviously be best, but there is not much to test yet at this stage (in terms of a working feature).  Suggestions/ideas welcome!

-Anna</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437967</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-07-15 13:57:26 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Regarding tests for this parser, the test cases we have been using internally are here:
&gt; http://src.chromium.org/viewvc/chrome?view=rev&amp;revision=92193
&gt; 
&gt; Should we make these part of WebKit?  Automated tests would obviously be best, but there is not much to test yet at this stage (in terms of a working feature).  Suggestions/ideas welcome!
&gt; 
The point is to add tests for every feature in the codebase. While you can&apos;t make tests for &lt;track&gt; yet because it isn&apos;t completely functional, you can add tests for the parser features you have implemented - parser correctness, handling malformed input, etc, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440960</commentid>
    <comment_count>19</comment_count>
      <attachid>100833</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-07-22 08:23:37 -0700</bug_when>
    <thetext>Comment on attachment 100833
addressing comments, tests coming soon

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

Marking r- for the slow WTF::String idioms.


&gt; Source/WebCore/html/TextTrackCue.cpp:73
&gt; +    String digits;
&gt; +    while (*position &lt; input.length() &amp;&amp; charIsANumber(input[*position]))
&gt; +        digits.append(input[(*position)++]);
&gt; +    return digits;

Darin&apos;s &quot;Slow idioms with WTF::String&quot; email (https://lists.webkit.org/pipermail/webkit-dev/2011-July/017587.html) flags more than one call to WTF::String::append as one of the &quot;inefficient ways to build a new string&quot;. He suggest that WTF::StringBuilder is a much more efficient way to build a string in a loop.

&gt; Source/WebCore/html/TextTrackCue.cpp:185
&gt; +            while (position &lt; input.length() &amp;&amp; !charIsASpaceCharacter(input[position]))
&gt; +                writingDirection.append(input[position++]);

Scanning past all non-space characters is done in several places. Can it be factored into a shared function?

&gt; Source/WebCore/html/TextTrackCue.cpp:196
&gt; +            while (position &lt; input.length() &amp;&amp; (input[position] == &apos;-&apos; || input[position] == &apos;%&apos; || charIsANumber(input[position])))
&gt; +                linePosition.append(input[position++]);

WTF::String::append

&gt; Source/WebCore/html/TextTrackCue.cpp:259
&gt; +            while (position &lt; input.length() &amp;&amp; !charIsASpaceCharacter(input[position]))
&gt; +                cueAlignment.append(input[position++]);

WTF::String::append

&gt; Source/WebCore/platform/track/CueParser.cpp:79
&gt; +    if (!m_private)
&gt; +        if (response.mimeType() == &quot;text/vtt&quot;)
&gt; +            m_private = WebVTTParser::create(this);
&gt;      m_client-&gt;trackLoadStarted();

Does it make sense to call trackLoadStarted for MIME types we don&apos;t support? Might be better to have a function that creates the parser and calls trackLoadStarted that you can call from here and ddiReceiveData.

&gt; Source/WebCore/platform/track/CueParser.cpp:89
&gt; +        if (WebVTTParser::requireFileIdentifier(data, len)) {
&gt; +            m_private = WebVTTParser::create(this);
&gt; +            m_client-&gt;trackLoadStarted();
&gt; +        }

This will result in trackLoadStarted being called twice if the files doesn&apos;t have the right MIME type.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:52
&gt; +    while (position &lt; input.length() &amp;&amp; input[position] != &apos;\r&apos; &amp;&amp; input[position] != &apos;\n&apos;)
&gt; +        line.append(input[position++]);

More WTF::String::append.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:84
&gt; +    String input = String::fromUTF8(data, length);
&gt; +    unsigned position = 0;
&gt; +
&gt; +    do {
&gt; +        String line = collectNextLine(input, &amp;position);

Creating a String of the entire data buffer and then creating another String for each line seems needlessly inefficient. Could collectNextLine take a pointer to the data, length, and offset and create a string for a line from that?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:90
&gt; +            if (!requireFileIdentifier(data, length))
&gt; +                return;

Creating a string from the entire buffer at the top of the function and then creating it again in requireFileIdentifier is not very efficient. Can you pass &quot;line&quot; to requireFileIdentifier?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:93
&gt; +            m_state = Header;
&gt; +        
&gt; +        case Header:

If you are falling through to the &apos;Header&apos; case on purpose, please add a comment.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:148
&gt; +    while (position &lt; input.length() &amp;&amp; !TextTrackCue::charIsASpaceCharacter(input[position]))
&gt; +        start.append(input[position++]);

WTF::String::append

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:164
&gt; +    while (position &lt; input.length() &amp;&amp; !TextTrackCue::charIsASpaceCharacter(input[position]))
&gt; +      end.append(input[position++]);

WTF::String::append

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:184
&gt; +    if (!m_currentContent.isEmpty())
&gt; +        m_currentContent += &quot;\n&quot;;
&gt; +    m_currentContent += line;

Darin&apos;s email notes that building a String with the += operator is as inefficient as WTF::String::append.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:279
&gt; +    String line = &quot;&quot;;
&gt; +    while (*position &lt; input.length() &amp;&amp; input[*position] != &apos;\r&apos; &amp;&amp; input[*position] != &apos;\n&apos;)
&gt; +        line.append(input[(*position)++]);
&gt; +    return line;

WTF::String::append</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443731</commentid>
    <comment_count>20</comment_count>
      <attachid>100833</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-28 17:24:14 -0700</bug_when>
    <thetext>Comment on attachment 100833
addressing comments, tests coming soon

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

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:73
&gt;&gt; +    return digits;
&gt; 
&gt; Darin&apos;s &quot;Slow idioms with WTF::String&quot; email (https://lists.webkit.org/pipermail/webkit-dev/2011-July/017587.html) flags more than one call to WTF::String::append as one of the &quot;inefficient ways to build a new string&quot;. He suggest that WTF::StringBuilder is a much more efficient way to build a string in a loop.

Thanks for the heads up!  I&apos;ve changed it.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:185
&gt;&gt; +                writingDirection.append(input[position++]);
&gt; 
&gt; Scanning past all non-space characters is done in several places. Can it be factored into a shared function?

Good call.  Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:196
&gt;&gt; +                linePosition.append(input[position++]);
&gt; 
&gt; WTF::String::append

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:259
&gt;&gt; +                cueAlignment.append(input[position++]);
&gt; 
&gt; WTF::String::append

Done.

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:79
&gt;&gt;      m_client-&gt;trackLoadStarted();
&gt; 
&gt; Does it make sense to call trackLoadStarted for MIME types we don&apos;t support? Might be better to have a function that creates the parser and calls trackLoadStarted that you can call from here and ddiReceiveData.

Done.

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:89
&gt;&gt; +        }
&gt; 
&gt; This will result in trackLoadStarted being called twice if the files doesn&apos;t have the right MIME type.

Done. The new createWebVTTParser method only calls trackLoadStarted when the parser is created and createWebVTTParser will only be called if we don&apos;t yet have a parser, so it should only be called once now.  Thanks and good catch.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:52
&gt;&gt; +        line.append(input[position++]);
&gt; 
&gt; More WTF::String::append.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:84
&gt;&gt; +        String line = collectNextLine(input, &amp;position);
&gt; 
&gt; Creating a String of the entire data buffer and then creating another String for each line seems needlessly inefficient. Could collectNextLine take a pointer to the data, length, and offset and create a string for a line from that?

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:90
&gt;&gt; +                return;
&gt; 
&gt; Creating a string from the entire buffer at the top of the function and then creating it again in requireFileIdentifier is not very efficient. Can you pass &quot;line&quot; to requireFileIdentifier?

Hmm.  I was trying to avoid creating a string in CueParser when it checks the file content.  I&apos;ve decide to instead create a string for the first line (not the entire buffer) in requireFileIdentifier.  Hope that&apos;s ok!

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:93
&gt;&gt; +        case Header:
&gt; 
&gt; If you are falling through to the &apos;Header&apos; case on purpose, please add a comment.

Whoops, no, that was a typo.  Good catch.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:148
&gt;&gt; +        start.append(input[position++]);
&gt; 
&gt; WTF::String::append

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:164
&gt;&gt; +      end.append(input[position++]);
&gt; 
&gt; WTF::String::append

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:184
&gt;&gt; +    m_currentContent += line;
&gt; 
&gt; Darin&apos;s email notes that building a String with the += operator is as inefficient as WTF::String::append.

Done.  Changed m_currentContent to a StringBuilder

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:279
&gt;&gt; +    return line;
&gt; 
&gt; WTF::String::append

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443733</commentid>
    <comment_count>21</comment_count>
      <attachid>102315</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-28 17:24:52 -0700</bug_when>
    <thetext>Created attachment 102315
addressing eric&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443752</commentid>
    <comment_count>22</comment_count>
      <attachid>102319</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-28 18:23:25 -0700</bug_when>
    <thetext>Created attachment 102319
updating to ToT so patch will apply</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444915</commentid>
    <comment_count>23</comment_count>
      <attachid>102319</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-01 15:11:57 -0700</bug_when>
    <thetext>Comment on attachment 102319
updating to ToT so patch will apply

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

First, I apologize that it took me to long to get this reviewed :-(

Second, while this is much closer than the last time around, there are enough minor issues that I am going to mark it r- for now.


&gt; Source/WebCore/html/TextTrackCue.cpp:67
&gt; +bool TextTrackCue::charIsANumber(char c)
&gt; +{
&gt; +    return &apos;0&apos; &lt;= c &amp;&amp; c &lt;= &apos;9&apos;;
&gt; +}

Is there any reason to not use WTF::isASCIIDigit instead of defining this here? If you think it is worth having a new function to emphasize that is follows the webVTT rules, maybe &quot;isWebVTTDigit&quot; and make it an inline?


&gt; Source/WebCore/html/TextTrackCue.cpp:69
&gt; +String TextTrackCue::collectNumberCharacters(const String&amp; input, unsigned* position)

Nit: While you are collecting number characters, you return a string and advance the position. Maybe &quot;collectWebVTTDigits&quot;, or &quot;parseWebVTTDigits&quot;?

Actually, you could put this and the other static parsing functions in this class into WebVTTParser so that &quot;WebVTT&quot; in the name isn&apos;t necessary and they are all in the same place.


&gt; Source/WebCore/html/TextTrackCue.cpp:80
&gt; +bool TextTrackCue::charIsASpaceCharacter(char c)
&gt; +{
&gt; +    // WebVTT space characters are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), U+000A LINE FEED (LF), U+000C FORM FEED (FF), and U+000D CARRIAGE RETURN (CR).
&gt; +    return c == &apos; &apos; || c == &apos;\t&apos; || c == &apos;\n&apos; || c == &apos;\f&apos; || c == &apos;\r&apos;;

Nit: I don&apos;t think &quot;char&quot; prefix is necessary, and you definitely don&apos;t need both the prefix and &quot;Character&quot; suffix. Maybe &quot;isWebVTTSpace&quot;? 

Also, this could be inline.

&gt; Source/WebCore/html/TextTrackCue.cpp:83
&gt; +String TextTrackCue::collectString(const String&amp; input, unsigned* position)

Nit: &quot;collectString&quot; is accurate but not especially descriptive. You collect up to the next space and advance the position, so maybe &quot;collectWebVTTWord&quot;, or &quot;parseWebVTTWord&quot;?

&gt; Source/WebCore/html/TextTrackCue.cpp:184
&gt; +        // 5-7 - If the character at position is not &apos;:&apos;, set setting to empty string.
&gt; +        if (input[position++] != &apos;:&apos;)
&gt; +            setting = &apos; &apos;;

Does the spec consider a space to be the same as an empty string?

&gt; Source/WebCore/html/TextTrackCue.cpp:191
&gt; +        switch (setting) {
&gt; +        case &apos;D&apos;:
&gt; +            {

Here and elsewhere, I think it would be helpful to quote (or summarize) at least some of the parsing text from the spec. In addition to making it easier for someone that comes along later to understand what the logic is supposed to to, I think it will make somewhat easier to spot parts that need to be changed later because of spec changes.

&gt; Source/WebCore/html/TextTrackCue.cpp:196
&gt; +            if (writingDirection == &quot;vertical&quot;)
&gt; +                m_writingDirection = VerticalGrowingLeft;
&gt; +            if (writingDirection == &quot;vertical-lr&quot;)
&gt; +                m_writingDirection = VerticalGrowingRight;

The string can&apos;t have both values, so an &quot;else&quot; here will make this slightly more efficient.

&gt; Source/WebCore/html/TextTrackCue.cpp:212
&gt; +            long number = linePosition.toInt64(&amp;validNumber);

Do you need this implicit cast from int64_t to long?

&gt; Source/WebCore/html/TextTrackCue.cpp:235
&gt; +            long number = textPosition.toInt64(&amp;validNumber);

Implicit cast?

&gt; Source/WebCore/html/TextTrackCue.cpp:255
&gt; +            long number = cueSize.toInt64(&amp;validNumber);

Implicit cast?

&gt; Source/WebCore/html/TextTrackCue.cpp:271
&gt; +            if (cueAlignment == &quot;start&quot;)
&gt; +                m_cueAlignment = Start;
&gt; +            if (cueAlignment == &quot;middle&quot;)
&gt; +                m_cueAlignment = Middle;
&gt; +            if (cueAlignment == &quot;end&quot;)
&gt; +                m_cueAlignment = End;

&quot;else if&quot; will make this code slightly more efficient.

&gt; Source/WebCore/html/TextTrackCue.cpp:279
&gt; +        continue;
&gt; +Otherwise:

Nit: a blank line after the &quot;continue&quot; will make this more readable IMO.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:41
&gt; +bool WebVTTParser::requireFileIdentifier(const char* data, int length)

I was confused about what this function did when I saw the name above, &quot;require&quot; as the first part of the name made me think it must enforce a requirement of some sort. Because the function checks to see if the byte stream has a required identifier, maybe &quot;hasRequiredFileIdentifier&quot;?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:72
&gt; +void WebVTTParser::parseBytes(const char* data, int length)

Here and elsewhere - why do you pass length around as a signed int but use unsigned inside of the functions?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:114
&gt; +            m_state = collectCueText(line);
&gt; +            if ((int)position &gt;= length - 1 &amp;&amp; m_state == CueText)
&gt; +                processCueText();

If &quot;length&quot; has to be signed (see above), you should use a static_cast rather than a C-style cast here.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:122
&gt; +    } while ((int)position &lt; length);

C-style cast.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:142
&gt; +    String start = TextTrackCue::collectString(line, &amp;position);
&gt; +    m_currentStartTime = collectTimeStamp(start);

It looks like you always put a word into a local string that is only used to pass to collectTimeStamp. Is there any reason to not have collectTimeStamp take line and position like your other parsing functions?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:175
&gt; +WebVTTParser::ParseState WebVTTParser::collectCueText(const String&amp; line)
&gt; +{
&gt; +    if (line.isEmpty()) {
&gt; +        processCueText();
&gt; +        return Id;
&gt; +    }
&gt; +    if (!m_currentContent.isEmpty())
&gt; +        m_currentContent.append(&quot;\n&quot;);
&gt; +    m_currentContent.append(line);
&gt; +    return CueText;
&gt; +}

I think the current factoring is confusing. Some of the logic for what makes a good cue is here and some is back in parseBytes. You sometimes call processCueText here, and sometimes call it in parseBytes. It might be clearer if you combined processCueText and collectCueText so all of the logic is in one place. Could this work?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:279
&gt; +void WebVTTParser::skipLineTerminator(const char* data, int length, unsigned* position)
&gt; +{
&gt; +    if ((int)*position &gt;= length)
&gt; +        return;
&gt; +    if (data[*position] == &apos;\r&apos;)
&gt; +        (*position)++;
&gt; +    if ((int)*position &gt;= length)
&gt; +        return;
&gt; +    if (data[*position] == &apos;\n&apos;)
&gt; +        (*position)++;
&gt; +}

Is there a reason that &quot;length&quot; needs to be signed? If so, the casts should no be C-style.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:289
&gt; +String WebVTTParser::collectNextLine(const char* data, int length, unsigned* position)
&gt; +{
&gt; +    unsigned oldPosition = *position;
&gt; +    while ((int)*position &lt; length &amp;&amp; data[*position] != &apos;\r&apos; &amp;&amp; data[*position] != &apos;\n&apos;)
&gt; +        (*position)++;
&gt; +    String line = String::fromUTF8(data + oldPosition, *position - oldPosition);
&gt; +    skipLineTerminator(data, length, position);
&gt; +    return line;
&gt; +}

Ditto.

&gt; Source/WebCore/platform/track/WebVTTParser.h:43
&gt; +static const int secondsInHour = 3600;
&gt; +static const int secondsInMinute = 60;

Minor nit: &quot;Per&quot; might be better than &quot;In&quot;, eg. &quot;secondsPerHour&quot; and &quot;secondsPerMinute&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445719</commentid>
    <comment_count>24</comment_count>
      <attachid>102319</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-02 22:09:10 -0700</bug_when>
    <thetext>Comment on attachment 102319
updating to ToT so patch will apply

Thanks for the review!

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

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:67
&gt;&gt; +}
&gt; 
&gt; Is there any reason to not use WTF::isASCIIDigit instead of defining this here? If you think it is worth having a new function to emphasize that is follows the webVTT rules, maybe &quot;isWebVTTDigit&quot; and make it an inline?

Done.  Didn&apos;t know isASCIIDigit existed, thanks!

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:69
&gt;&gt; +String TextTrackCue::collectNumberCharacters(const String&amp; input, unsigned* position)
&gt; 
&gt; Nit: While you are collecting number characters, you return a string and advance the position. Maybe &quot;collectWebVTTDigits&quot;, or &quot;parseWebVTTDigits&quot;?
&gt; 
&gt; Actually, you could put this and the other static parsing functions in this class into WebVTTParser so that &quot;WebVTT&quot; in the name isn&apos;t necessary and they are all in the same place.

Done and Done.  Renamed to collectDigits (to keep with spec language) and moved all of these static functions to WebVTTParser.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:80

&gt; 
&gt; Nit: I don&apos;t think &quot;char&quot; prefix is necessary, and you definitely don&apos;t need both the prefix and &quot;Character&quot; suffix. Maybe &quot;isWebVTTSpace&quot;? 
&gt; 
&gt; Also, this could be inline.

Done.  Good call about the name :).  Renamed to isASpace, moved in WebVTTParser, and inlined.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:83
&gt;&gt; +String TextTrackCue::collectString(const String&amp; input, unsigned* position)
&gt; 
&gt; Nit: &quot;collectString&quot; is accurate but not especially descriptive. You collect up to the next space and advance the position, so maybe &quot;collectWebVTTWord&quot;, or &quot;parseWebVTTWord&quot;?

Done.  Renamed to collectWord and moved to WebVTTParser

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:184
&gt;&gt; +            setting = &apos; &apos;;
&gt; 
&gt; Does the spec consider a space to be the same as an empty string?

Done.  Oops, these are not equivalent, changed to &apos;\0&apos;

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:191
&gt;&gt; +            {
&gt; 
&gt; Here and elsewhere, I think it would be helpful to quote (or summarize) at least some of the parsing text from the spec. In addition to making it easier for someone that comes along later to understand what the logic is supposed to to, I think it will make somewhat easier to spot parts that need to be changed later because of spec changes.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:196
&gt;&gt; +                m_writingDirection = VerticalGrowingRight;
&gt; 
&gt; The string can&apos;t have both values, so an &quot;else&quot; here will make this slightly more efficient.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:212
&gt;&gt; +            long number = linePosition.toInt64(&amp;validNumber);
&gt; 
&gt; Do you need this implicit cast from int64_t to long?

I (probably mistakenly) thought toInt64 would be more accurate when cast to a long than toInt.  You prefer toInt?  WTFString doesn&apos;t have a toLong :).  I&apos;ve changed to toInt here and elsewhere.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:235
&gt;&gt; +            long number = textPosition.toInt64(&amp;validNumber);
&gt; 
&gt; Implicit cast?

Done.  Changed to toInt, hope that&apos;s ok

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:255
&gt;&gt; +            long number = cueSize.toInt64(&amp;validNumber);
&gt; 
&gt; Implicit cast?

Done.  Changed to toInt, hope that&apos;s ok

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:271
&gt;&gt; +                m_cueAlignment = End;
&gt; 
&gt; &quot;else if&quot; will make this code slightly more efficient.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:279
&gt;&gt; +Otherwise:
&gt; 
&gt; Nit: a blank line after the &quot;continue&quot; will make this more readable IMO.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:41
&gt;&gt; +bool WebVTTParser::requireFileIdentifier(const char* data, int length)
&gt; 
&gt; I was confused about what this function did when I saw the name above, &quot;require&quot; as the first part of the name made me think it must enforce a requirement of some sort. Because the function checks to see if the byte stream has a required identifier, maybe &quot;hasRequiredFileIdentifier&quot;?

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:72
&gt;&gt; +void WebVTTParser::parseBytes(const char* data, int length)
&gt; 
&gt; Here and elsewhere - why do you pass length around as a signed int but use unsigned inside of the functions?

Hmm.  unsigned is easier to use inside the functions for comparison with length().  int is left over from CueParser::didReceiveData(const char*, int) which is from ThreadableLoaderClient.  I suppose I should be consistent.  WebVTTParser will now consistently use unsigned.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:114
&gt;&gt; +                processCueText();
&gt; 
&gt; If &quot;length&quot; has to be signed (see above), you should use a static_cast rather than a C-style cast here.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:122
&gt;&gt; +    } while ((int)position &lt; length);
&gt; 
&gt; C-style cast.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:142
&gt;&gt; +    m_currentStartTime = collectTimeStamp(start);
&gt; 
&gt; It looks like you always put a word into a local string that is only used to pass to collectTimeStamp. Is there any reason to not have collectTimeStamp take line and position like your other parsing functions?

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:175
&gt;&gt; +}
&gt; 
&gt; I think the current factoring is confusing. Some of the logic for what makes a good cue is here and some is back in parseBytes. You sometimes call processCueText here, and sometimes call it in parseBytes. It might be clearer if you combined processCueText and collectCueText so all of the logic is in one place. Could this work?

I went ahead and moved all of the logic into collectCueText, but left processCueText as a separate method.  Later when we actually process the cue text properly (patch coming soon!), that function will be much larger.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:279
&gt;&gt; +}
&gt; 
&gt; Is there a reason that &quot;length&quot; needs to be signed? If so, the casts should no be C-style.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:289
&gt;&gt; +}
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.h:43
&gt;&gt; +static const int secondsInMinute = 60;
&gt; 
&gt; Minor nit: &quot;Per&quot; might be better than &quot;In&quot;, eg. &quot;secondsPerHour&quot; and &quot;secondsPerMinute&quot;

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445720</commentid>
    <comment_count>25</comment_count>
      <attachid>102739</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-02 22:09:52 -0700</bug_when>
    <thetext>Created attachment 102739
addressing eric&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447400</commentid>
    <comment_count>26</comment_count>
      <attachid>102739</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-05 14:01:09 -0700</bug_when>
    <thetext>Comment on attachment 102739
addressing eric&apos;s comments

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

This is *really* close, and I would r+ it despite the nit-picky comments, but the long-int issue really is a problem so I am marking this r-.



&gt; Source/WebCore/html/TextTrackCue.cpp:157
&gt; +        // 5-7 - If the character at position is not &apos;:&apos;, set setting to empty string.
&gt; +        if (input[position++] != &apos;:&apos;)
&gt; +            setting = &apos;\0&apos;;

Nit: I find a blank line before a comment can make it easier to read. Please consider adding some white space here and elsewhere the next time you edit this file.

&gt; Source/WebCore/html/TextTrackCue.cpp:180
&gt; +            String linePosition = linePositionBuilder.toString();
&gt; +            if (position &lt; input.length() &amp;&amp; !WebVTTParser::isASpace(input[position]))
&gt; +                goto Otherwise;

Nit: You should switch the order of these because &quot;linePosition&quot; is not used if the test fails.

&gt; Source/WebCore/html/TextTrackCue.cpp:181
&gt; +            // 3-5 - If there is not at least one digit character, a &apos;-&apos; occurs anywhere other than the front, or a &apos;%&apos; occurs anywhere other than the end, then ignore this setting and keep looking.

Nit: this line is too long to read without scrolling in an editor that isn&apos;t set to wrap lines. Please break the line into smaller chunks the next time you edit this file.

&gt; Source/WebCore/html/TextTrackCue.cpp:189
&gt; +            long number = linePosition.toInt(&amp;validNumber);

String::toInt return an &quot;int&quot;, not a &quot;long&quot;. long and int not the some in some compiler/processor configurations.

&gt; Source/WebCore/html/TextTrackCue.cpp:191
&gt; +            if (!validNumber)
&gt; +                break;

I assume &quot;validNumber&quot; won&apos;t be false if the string has a trailing &apos;%&apos;?

&gt; Source/WebCore/html/TextTrackCue.cpp:205
&gt; +            // 1-2 - Collect characterss that are digits.

Nit: typo - characterss

&gt; Source/WebCore/html/TextTrackCue.cpp:214
&gt; +            // 4-6 - Ensure no other chars in this setting and setting is not empty.
&gt; +            if (position &lt; input.length() &amp;&amp; !WebVTTParser::isASpace(input[position]))
&gt; +                goto Otherwise;

Won&apos;t this allow characters at the end of a line after a space?

&gt; Source/WebCore/html/TextTrackCue.cpp:219
&gt; +            long number = textPosition.toInt(&amp;validNumber);

long != int

&gt; Source/WebCore/html/TextTrackCue.cpp:239
&gt; +            // 4-6 - Ensure no other chars in this setting and setting is not empty.
&gt; +            if (position &lt; input.length() &amp;&amp; !WebVTTParser::isASpace(input[position]))
&gt; +                goto Otherwise;

Ditto.

&gt; Source/WebCore/html/TextTrackCue.cpp:244
&gt; +            long number = cueSize.toInt(&amp;validNumber);

long != int

&gt; Source/WebCore/platform/track/CueParser.cpp:80
&gt;  void CueParser::didReceiveData(const char* data, int len)

Nit: no need to abbreviate &quot;len&quot;.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:55
&gt; +    if (line.length() &gt; 6 &amp;&amp; (line.substring(0, 6) != &quot;WEBVTT&quot; || (line[6] != &apos; &apos; &amp;&amp; line[6] != &apos;\t&apos;)))

It would be good to have some parentheses here to make the precedence of the comparisons explicit.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:251
&gt; +        if (*position &gt;= line.length() || line[*position] != &apos;:&apos;)
&gt; +            return malformedTime;
&gt; +        (*position)++;

Just above, you increment &quot;position&quot; in the test for &apos;:&apos; 

  if (*position &gt;= line.length() || line[(*position)++] != &apos;:&apos;)
      return malformedTime;

But here you don&apos;t increment it until after the check. Is it a problem that you increment past the invalid character above before returning? If not, why not do the same thing here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447461</commentid>
    <comment_count>27</comment_count>
      <attachid>102739</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-05 16:13:32 -0700</bug_when>
    <thetext>Comment on attachment 102739
addressing eric&apos;s comments

Thanks Eric!  Another patch is on the way.

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

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:157
&gt;&gt; +            setting = &apos;\0&apos;;
&gt; 
&gt; Nit: I find a blank line before a comment can make it easier to read. Please consider adding some white space here and elsewhere the next time you edit this file.

Done.  Sorry about that.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:180
&gt;&gt; +                goto Otherwise;
&gt; 
&gt; Nit: You should switch the order of these because &quot;linePosition&quot; is not used if the test fails.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:181
&gt;&gt; +            // 3-5 - If there is not at least one digit character, a &apos;-&apos; occurs anywhere other than the front, or a &apos;%&apos; occurs anywhere other than the end, then ignore this setting and keep looking.
&gt; 
&gt; Nit: this line is too long to read without scrolling in an editor that isn&apos;t set to wrap lines. Please break the line into smaller chunks the next time you edit this file.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:189
&gt;&gt; +            long number = linePosition.toInt(&amp;validNumber);
&gt; 
&gt; String::toInt return an &quot;int&quot;, not a &quot;long&quot;. long and int not the some in some compiler/processor configurations.

Done.  Changed member variables to be ints rather than longs.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:191
&gt;&gt; +                break;
&gt; 
&gt; I assume &quot;validNumber&quot; won&apos;t be false if the string has a trailing &apos;%&apos;?

True.  Added a comment for clarity.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:205
&gt;&gt; +            // 1-2 - Collect characterss that are digits.
&gt; 
&gt; Nit: typo - characterss

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:214
&gt;&gt; +                goto Otherwise;
&gt; 
&gt; Won&apos;t this allow characters at the end of a line after a space?

No, this ensures that there is no garbage directly after the % (i.e. a space is required after each setting).  If something other than a space is found, Otherwise will eat it up and ignore the setting.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:219
&gt;&gt; +            long number = textPosition.toInt(&amp;validNumber);
&gt; 
&gt; long != int

Done.

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:239
&gt;&gt; +                goto Otherwise;
&gt; 
&gt; Ditto.

Same thing here.  No garbage allowed after the setting (a space is required).

&gt;&gt; Source/WebCore/html/TextTrackCue.cpp:244
&gt;&gt; +            long number = cueSize.toInt(&amp;validNumber);
&gt; 
&gt; long != int

Done.

&gt;&gt; Source/WebCore/platform/track/CueParser.cpp:80
&gt;&gt;  void CueParser::didReceiveData(const char* data, int len)
&gt; 
&gt; Nit: no need to abbreviate &quot;len&quot;.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:55
&gt;&gt; +    if (line.length() &gt; 6 &amp;&amp; (line.substring(0, 6) != &quot;WEBVTT&quot; || (line[6] != &apos; &apos; &amp;&amp; line[6] != &apos;\t&apos;)))
&gt; 
&gt; It would be good to have some parentheses here to make the precedence of the comparisons explicit.

I already have parentheses for each binary operation and wasn&apos;t sure where to add more, so instead I added the spec language in a comment and separated into two lines.  Hope that&apos;s more clear!

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:251
&gt;&gt; +        (*position)++;
&gt; 
&gt; Just above, you increment &quot;position&quot; in the test for &apos;:&apos; 
&gt; 
&gt;   if (*position &gt;= line.length() || line[(*position)++] != &apos;:&apos;)
&gt;       return malformedTime;
&gt; 
&gt; But here you don&apos;t increment it until after the check. Is it a problem that you increment past the invalid character above before returning? If not, why not do the same thing here?

Done.  Good call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447463</commentid>
    <comment_count>28</comment_count>
      <attachid>103129</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-05 16:14:24 -0700</bug_when>
    <thetext>Created attachment 103129
some nits and int to long casting removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447505</commentid>
    <comment_count>29</comment_count>
      <attachid>103135</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-05 17:39:27 -0700</bug_when>
    <thetext>Created attachment 103135
fixing some typos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447513</commentid>
    <comment_count>30</comment_count>
      <attachid>103135</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-05 17:47:00 -0700</bug_when>
    <thetext>Comment on attachment 103135
fixing some typos

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447525</commentid>
    <comment_count>31</comment_count>
      <attachid>103136</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-05 18:31:39 -0700</bug_when>
    <thetext>Created attachment 103136
updating to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447539</commentid>
    <comment_count>32</comment_count>
      <attachid>103136</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-05 19:01:06 -0700</bug_when>
    <thetext>Comment on attachment 103136
updating to ToT

Clearing flags on attachment: 103136

Committed r92538: &lt;http://trac.webkit.org/changeset/92538&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447541</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-05 19:01:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447557</commentid>
    <comment_count>34</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-08-05 19:54:44 -0700</bug_when>
    <thetext>This change broke the Mac build.  All of the track-related files appear to have been added to the incorrect place in the Xcode project so it’s not even obvious how to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447562</commentid>
    <comment_count>35</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-05 20:07:37 -0700</bug_when>
    <thetext>This patch broke Mac builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447563</commentid>
    <comment_count>36</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-08-05 20:09:46 -0700</bug_when>
    <thetext>Whomever added all of these track-related files to the Xcode project made a complete mess of it. Some were added inside the “svg&quot; group, others inside the “testing” group.  Neither of those correspond to where the code lives.

I’ve attempted to fix the build and clean up this mess in r92542.  I’d very much appreciate it if slightly more care could be taken in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447565</commentid>
    <comment_count>37</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-05 21:12:58 -0700</bug_when>
    <thetext>Thanks so much mrowe!  And sorry for the inconvenience, I&apos;m not sure how they got so botched.  I appreciate your help.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99544</attachid>
            <date>2011-07-01 18:10:37 -0700</date>
            <delta_ts>2011-07-07 17:57:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62882-20110701181036.patch</filename>
            <type>text/plain</type>
            <size>25628</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTAyODQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTA3ODM1
ZGQ3MGJjZjAwOThhYjMwOTUyNmI5ZWNjNGQxYjkyMzMwZi4uOWM3NGM5YjdjNDFkNmJkNmNiZmM5
MmFjZWY3MDcxYTgxMGIwNmJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTIsNiArMTk5
Miw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTM1NWFiOWJkZmJhZjdkMGI1NTRl
M2Q1MzY2OWU3MWQ1MGEzY2RmOS4uYTVmOTE5NmY3ZmQ3ZGI5NWExMGRhNDMzNmYyZGI2M2Q4ODU4
ZTVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTA3LTAxICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgZmVhdHVyZSBpcyBoaWRkZW4gYmVo
aW5kIFZJREVPX1RSQUNLIGZlYXR1cmUKKyAgICAgICAgZGVmaW5lLCB3aGljaCBpcyB0dXJuZWQg
b2ZmLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGh0bWwvVGV4dFRyYWNrQ3VlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJz
ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oOiBBZGRlZC4KKwogMjAxMS0wNy0wMSAgTmF0ZSBDaGFw
aW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEVuc3VyZSBXb3JrZXJTY3JpcHRM
b2FkZXI6Om5vdGlmeUZpbmlzaGVkKCkgZG9lc24ndCByZS1lbnRlci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDBhYzVhNWE3YzBhZjAwMTA2MWRmM2E4NmFhMWY1ZWFkNTZmN2Iy
NzQuLjZiYmFjZjg1MzczMjRlZDI5MTcwYjM4NmNmMjZhNWI4ZTIzYWY0MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjg0MCw2ICsyODQwLDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90cmFjay9XZWJWVFRQYXJzZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVHJlZVNo
YXJlZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxTdHJpbmcuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVVJRC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGQ4MTdhMGFj
YThjMzNlNmYzYTE0MzUzZTJiNTcyODMyOWQ4OGI0Y2IuLjIxZjFkYjFjNTNlYTJkYjczYmVkYWJj
YTcwMjdlNDNlYWM1MDc5ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUwNjcsNiArNTA2Nyw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlclByaXZhdGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2Vi
VlRUUGFyc2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2Vy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vd2luL0JTdHJpbmcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0Jp
dG1hcEluZm8uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNmYxZGRhOWM0M2Q2MTdlZGMzYWVmN2Ez
MDIyZDdkNzViNDQyNGQ5OC4uNzQwY2JlNjBlZmEwNjE3ZmEwZTRhNThjYTg5YTBiYTI0MjkwODAx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIxMDMsNiArMjEwMyw3IEBAIEhFQURFUlMgKz0gXAogICAg
IHBsYXRmb3JtL1RpbWVyLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oIFwKICAg
ICBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggXAorICAgIHBsYXRmb3JtL3RyYWNr
L1dlYlZUVFBhcnNlci5oIFwKICAgICBwbGF0Zm9ybS9XaWRnZXQuaCBcCiAgICAgcGxhdGZvcm0v
UGxhdGZvcm1TdHJhdGVnaWVzLmggXAogICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNmJjNWMxYzVlNzlmOTgwOGE0ZTg3Njk3YTE2YWE2NGQ3MjMwOWU2NC4uMjEzMzkxNDVj
NTEyOTllYWYxNTliZTliMmEzZGJmNGRmNjRhYTQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAxMiw2ICs0MDEyLDggQEAK
IAkJQUJEREZFNzkwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCRERGRTczMEE1QzZFNkYw
MEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5jcHAgKi87IH07CiAJCUFCRERGRTdBMEE1QzZFNzAw
MEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUJEREZFNzQwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVM
aXN0LmggKi87IH07CiAJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRERGMUFE
NTEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovOyB9OworCQlCMTBCNzQwRTEz
QkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNzQwQzEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRU
UGFyc2VyLmggKi87IH07CisJCUIxMEI3NDBGMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEw
Qjc0MEQxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgKi87IH07CiAJCUIxMkQy
MzNFMTM1NjAyODIwMDJBMjhENCAvKiBFeGNsdXNpdmVUcmFja0xpc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEyRDIzMzUxMzU2MDI4MjAwMkEy
OEQ0IC8qIEV4Y2x1c2l2ZVRyYWNrTGlzdC5jcHAgKi87IH07CiAJCUIxMkQyMzNGMTM1NjAyODIw
MDJBMjhENCAvKiBFeGNsdXNpdmVUcmFja0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMkQyMzM2MTM1NjAyODIwMDJBMjhENCAvKiBFeGNsdXNp
dmVUcmFja0xpc3QuaCAqLzsgfTsKIAkJQjEyRDIzNDExMzU2MDI4MjAwMkEyOEQ0IC8qIE11bHRp
cGxlVHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIxMkQyMzM4MTM1NjAyODIwMDJBMjhENCAvKiBNdWx0aXBsZVRyYWNrTGlzdC5jcHAg
Ki87IH07CkBAIC0xMDQ1MSw2ICsxMDQ1Myw4IEBACiAJCUFCRERGRTc0MEE1QzZFNzAwMEEzRTEx
RCAvKiBSZW5kZXJNZW51TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyTWVudUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFBRDQx
MjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1BhdGguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQjc0MEMxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWVFRQYXJzZXIuaDsg
cGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CisJCUIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViVlRUUGFyc2VyLmNwcDsg
cGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VS
Q0VfUk9PVDsgfTsKIAkJQjEyRDIzMzUxMzU2MDI4MjAwMkEyOEQ0IC8qIEV4Y2x1c2l2ZVRyYWNr
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpdmVU
cmFja0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMTJEMjMzNjEzNTYw
MjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4Y2x1c2l2ZVRyYWNrTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMTJEMjMzNzEzNTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tMaXN0Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFeGNsdXNpdmVUcmFja0xpc3QuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4NjIsNiArMTc4NjYsOCBAQAogCQkJCUIyRTRFQzk1
MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAqLywKIAkJCQlCMkU0RUM5NjBEMDBD
MjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmlkbCAqLywKIAkJCQlCMjhDNkEyNjBEMDBDNDQ4
MDAzMzRBQTQgLyogeGxpbmthdHRycy5pbiAqLywKKwkJCQlCMTBCNzQwQzEzQkU4MEJGMDBCQzFD
MjYgLyogV2ViVlRUUGFyc2VyLmggKi8sCisJCQkJQjEwQjc0MEQxM0JFODBCRjAwQkMxQzI2IC8q
IFdlYlZUVFBhcnNlci5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IHN2ZzsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzA4OCw2ICsyMzA5NCw3IEBACiAJCQkJMDg2Mzk1MTYxM0I1
RkU1NzAwQkIzNDREIC8qIFNWR0FuaW1hdGVkUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDMx
QTJGOUMxM0I2RjJCMDAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1QUJCNzg3MTNCOTA0QkMwMEYxOTdFMyAvKiBMaW5lQnJl
YWtJdGVyYXRvclBvb2xJQ1UuaCBpbiBIZWFkZXJzICovLAorCQkJCUIxMEI3NDBFMTNCRTgwQkYw
MEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjU4NTUsNiArMjU4
NjIsNyBAQAogCQkJCTQzMUEzMDIxMTNCODlEQ0MwMDc3OTFFNCAvKiBTVkdBbmltYXRlZFByZXNl
cnZlQXNwZWN0UmF0aW8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDMxQTMwODgxM0I4Rjk3ODAw
Nzc5MUU0IC8qIFNWR0FuaW1hdGVkQm9vbGVhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0M0Y2
RkQ5NjEzQkNEMEIxMDAyMjQwNTIgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUIxMEI3NDBGMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKaW5kZXggM2I3YTg5
M2MyY2YwMzllMmU5OTFlMDk2ZjVmNmY0NTQ5ZTdhMGUyNS4uMDU3MTVjNzdiNWMyMjcyNjY5NjYy
YzVkYWI0YjY4NjAxZTViMzdkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcApA
QCAtODAsOCArODAsNyBAQCBib29sIFRleHRUcmFja0N1ZTo6cGF1c2VPbkV4aXQoKSBjb25zdAog
CiBTdHJpbmcgVGV4dFRyYWNrQ3VlOjpnZXRDdWVBc1NvdXJjZSgpCiB7Ci0gICAgLy8gRklYTUUo
NjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJu
IG1fY29udGVudDsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBUZXh0VHJhY2tD
dWU6OmdldEN1ZUFzSFRNTCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
cmFjay9DdWVQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFy
c2VyLmNwcAppbmRleCAzYjM1M2U3YzhjMzVkZWYyMzU0ODdmYjliNzYyYTI5YWQ0MDc1YTE2Li5l
ZWE5NDQxMzAzZjZmZmUwNjkzY2M0NGI1MDY3MjYwN2IwZWU5MWUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlICJDdWVQYXJzZXIuaCIKIAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY3LDE4ICs2OCwzMiBAQCB2b2lkIEN1ZVBhcnNlcjo6
bG9hZChjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Q3VlUGFycwogYm9vbCBDdWVQYXJzZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkK
IHsKICAgICAvLyBGSVhNRSg2Mjg5Myk6IGNoZWNrIGFnYWluc3QgYSBsaXN0IG9mIHN1cHBvcnRl
ZCB0eXBlcwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdXJsLmNvbnRhaW5zKCIudnR0
Iik7CiB9CiAKLXZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9u
ZyAvKmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIEN1ZVBhcnNl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogQ3Jl
YXRlIG1fcHJpdmF0ZSBiYXNlZCBvbiBNSU1FIHR5cGUuCisgICAgLy8gVGhpcyBtYXkgaGFuZGxl
IG90aGVyIG1pbWUgdHlwZXMgYXMgd2VsbCBvbmUgZGF5LgorICAgIGlmICghbV9wcml2YXRlKQor
ICAgICAgICBpZiAocmVzcG9uc2UubWltZVR5cGUoKSA9PSAidGV4dC92dHQiKQorICAgICAgICAg
ICAgbV9wcml2YXRlID0gV2ViVlRUUGFyc2VyOjpjcmVhdGUodGhpcyk7CiAgICAgbV9jbGllbnQt
PnRyYWNrTG9hZFN0YXJ0ZWQoKTsKIH0KIAogdm9pZCBDdWVQYXJzZXI6OmRpZFJlY2VpdmVEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7Ci0gICAgLy8gRklYTUUoNjI4OTMpOiBTZW5k
IGRhdGEgYWxvbmcgdG8gbV9wcml2YXRlIHBhcnNlciB0byBiZSBwYXJzZWQuCisgICAgLy8gSWYg
bWltZSB0eXBlIGZyb20gcmVzcG9uc2Ugd2FzIG5vdCBpbmZvcm1hdGl2ZSwgc25pZmYgZm9yIGZp
cnN0IGxpbmUgb2YgZmlsZS4KKyAgICBpZiAoIW1fcHJpdmF0ZSkgeworICAgICAgICBTdHJpbmcg
Y29udGVudChkYXRhKTsKKyAgICAgICAgU3RyaW5nIGZpcnN0TGluZSA9IGNvbnRlbnQuc3Vic3Ry
aW5nKDAsIGNvbnRlbnQuZmluZCgiXG4iKSk7CisgICAgICAgIGlmIChmaXJzdExpbmUgPT0gZW1w
dHlTdHJpbmcoKSkKKyAgICAgICAgICBmaXJzdExpbmUgPSBjb250ZW50LnN1YnN0cmluZygwLCBj
b250ZW50LmZpbmQoIlxyIikpOworICAgICAgICBpZiAoZmlyc3RMaW5lLmNvbnRhaW5zKCJXRUJW
VFQiKSkKKyAgICAgICAgICAgIG1fcHJpdmF0ZSA9IFdlYlZUVFBhcnNlcjo6Y3JlYXRlKHRoaXMp
OworICAgICAgICBtX2NsaWVudC0+dHJhY2tMb2FkU3RhcnRlZCgpOworICAgIH0KKyAgICBpZiAo
bV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnBhcnNlQnl0ZXMoZGF0YSwgbGVuKTsKIH0K
IAogdm9pZCBDdWVQYXJzZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZykKQEAgLTk2
LDYgKzExMSwxMSBAQCB2b2lkIEN1ZVBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiA+JikKICAgICAvLyBGSVhNRSg2Mjg5Myk6IEltcGxlbWVudC4KIH0K
IAordm9pZCBDdWVQYXJzZXI6Om5ld0N1ZXNQYXJzZWQoKQoreworICAgIG1fY2xpZW50LT5uZXdD
dWVzUGFyc2VkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCmluZGV4IDc0NGNjMzIyNzhjNWY0
Y2Y5ZTRmODJjYTdjNTNhYjE3YmQ4OWQ4Y2YuLjczNjExM2E0Mjk2NzExYzhlMmFhZGE2YTRhY2I1
NzU2MjQxYjNiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5o
CkBAIC0zMyw5ICszMyw5IEBACiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLSNpbmNsdWRl
ICJDdWVQYXJzZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIu
aCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUzLDcgKzUzLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCB0cmFja0xvYWRDb21wbGV0ZWQoKSA9IDA7CiB9OwogCi1jbGFz
cyBDdWVQYXJzZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitjbGFzcyBDdWVQ
YXJzZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgQ3VlUGFyc2VyUHJpdmF0ZUNs
aWVudCB7CiBwdWJsaWM6CiAgICAgQ3VlUGFyc2VyKCk7CiAgICAgdmlydHVhbCB+Q3VlUGFyc2Vy
KCk7CkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzVHlwZShjb25z
dCBTdHJpbmcmKTsKIAogICAgIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrQ3VlPiA+Jik7CisgICAgdm9pZCBuZXdDdWVzUGFyc2VkKCk7CiAKIHByaXZhdGU6CiAg
ICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FlMWJmZTI1ZjE1
NWIyM2E1NWFjMjE3N2VmMDYyMTU0MTczNzI3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKQEAgLTAsMCArMSwyNjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVk
ZSAiV2ViVlRUUGFyc2VyLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJWVFRQYXJzZXI6OldlYlZUVFBhcnNlcihDdWVQYXJz
ZXJQcml2YXRlQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3N0YXRlKEhFQURFUikKKyAgICAsIG1f
Y3VycmVudElkKGVtcHR5U3RyaW5nKCkpCisgICAgLCBtX2N1cnJlbnRTdGFydFRpbWUoMCkKKyAg
ICAsIG1fY3VycmVudEVuZFRpbWUoMCkKKyAgICAsIG1fY3VycmVudENvbnRlbnQoZW1wdHlTdHJp
bmcoKSkKKyAgICAsIG1fY3VycmVudFNldHRpbmdzKGVtcHR5U3RyaW5nKCkpCisgICAgLCBtX2N1
cnJlbnRQYXVzZU9uRXhpdChmYWxzZSkKK3sKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKK30KKwor
dm9pZCBXZWJWVFRQYXJzZXI6OmZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UGFzc1JlZlB0cjxUZXh0
VHJhY2tDdWU+ID4mIG91dHB1dEN1ZXMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2N1ZWxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIG91dHB1dEN1ZXMuYXBwZW5kKG1fY3VlbGlz
dFtpXSk7CisgICAgbV9jdWVsaXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpw
YXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgLy8gVGhlIGZv
bGxvd2luZyBpcyBiYXNlZCBvbiBXSEFUV0cgV2ViVlRUIDQuOC4xMC4xMy4yIFN5bnRheC4KKyAg
ICBTdHJpbmcgaW5wdXRCeXRlcyA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YSk7CisgICAgVmVjdG9y
PFN0cmluZz4gbGluZXM7CisgICAgc3BsaXRCeUxpbmVUZXJtaW5hdG9ycyhpbnB1dEJ5dGVzLCBs
aW5lcyk7CisKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBsaW5lID0gbGluZXMu
YmVnaW4oKTsgbGluZSAhPSBsaW5lcy5lbmQoKTsgbGluZSsrKSB7CisgICAgICAgIFN0cmluZyBj
dXJyZW50TGluZSA9ICpsaW5lOworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAg
Ly8gQSBXZWJWVFQgZmlsZSBib2R5IGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50
cyAuLi4KKyAgICAgICAgY2FzZSBIRUFERVI6CisgICAgICAgICAgICAvLyAxIC0gQW4gb3B0aW9u
YWwgVStGRUZGIEJZVEUgT1JERVIgTUFSSyAoQk9NKSBjaGFyYWN0ZXIuIChza2lwcGVkKQorICAg
ICAgICAgICAgLy8gMi0zIC0gVGhlIHN0cmluZyAiV0VCVlRUIiBhbmQgb3B0aW9uYWxseSBhIHNw
YWNlLCB0YWIgb3IgYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgaWYgKGN1
cnJlbnRMaW5lLnN0cmlwV2hpdGVTcGFjZSgpICE9ICJXRUJWVFQiICYmIGN1cnJlbnRMaW5lLnN0
cmlwV2hpdGVTcGFjZSgpICE9ICJXRUJWVFQgRklMRSIpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgLy8gNCAtIFR3byBvciBtb3JlIFdlYlZUVCBsaW5lIHRlcm1pbmF0b3Jz
LiAodGhpcyBlbnN1cmVzIGF0IGxlYXN0IHR3bykKKyAgICAgICAgICAgIGN1cnJlbnRMaW5lID0g
KigrK2xpbmUpOworICAgICAgICAgICAgaWYgKCFjdXJyZW50TGluZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9zdGF0ZSA9IElEOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSUQ6CisgICAgICAgICAgICAvLyA1IC0gV2ViVlRUIGN1
ZXMgbWF5IGJlIHNlcGFyYXRlZCBieSB0d28gb3IgbW9yZSBsaW5lIHRlcm1pbmF0b3JzLgorICAg
ICAgICAgICAgaWYgKCFjdXJyZW50TGluZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBBIFdlYlZUVCBjdWUgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzIC4uLgor
ICAgICAgICAgICAgICAgIGlmICghY3VycmVudExpbmUuY29udGFpbnMoIi0tPiIpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIDEgLSBPcHRpb25hbGx5LCBhIFdlYlZUVCBjdWUgaWRlbnRpZmll
ciAoYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgbm90IGNvbnRhaW5pbmcgdGhlIHN1YnN0cmlu
ZyAiLS0+Ii4KKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50SWQgPSBjdXJyZW50TGluZTsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFRJTUlOR1NBTkRTRVRUSU5HUzsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGVjdFRpbWlu
Z3NBbmRTZXR0aW5ncyhjdXJyZW50TGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlID0gQ09OVEVOVDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzZXRDdWVWYWx1ZXMoKTsKKyAgICAgICAgICAgICAgICB9ICAgCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUSU1JTkdTQU5EU0VUVElO
R1M6CisgICAgICAgICAgICAvLyAyLTQgLSBXZWJWVFQgY3VlIHRpbWluZ3MsIHdoaXRlIHNwYWNl
LCBhbmQgb3B0aW9uYWwgV2ViVlRUIGN1ZSBzZXR0aW5ncy4KKyAgICAgICAgICAgIGlmICghY3Vy
cmVudExpbmUuaXNFbXB0eSgpICYmIGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MoY3VycmVudExp
bmUpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDT05URU5UOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENPTlRFTlQ6CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRMaW5lLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRDb250ZW50ICs9IGN1cnJlbnRMaW5lICsgIlxu
IjsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lLmlzRW1wdHkoKSB8fCAobGluZSsxKSA9
PSBsaW5lcy5lbmQoKSkgeworICAgICAgICAgICAgICAgIC8vIDUgLSBUaGUgV2ViVlRUIGN1ZSB0
ZXh0LgorICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRTdGFydFRpbWUgIT0gbWFsZm9ybWVk
VGltZSAmJiBtX2N1cnJlbnRFbmRUaW1lICE9IG1hbGZvcm1lZFRpbWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpjcmVhdGUo
bV9jdXJyZW50SWQsIG1fY3VycmVudFN0YXJ0VGltZSwgbV9jdXJyZW50RW5kVGltZSwgbV9jdXJy
ZW50Q29udGVudCwgbV9jdXJyZW50U2V0dGluZ3MsIG1fY3VycmVudFBhdXNlT25FeGl0KTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9jdWVsaXN0LmFwcGVuZChjdWUpOworICAgICAgICAgICAgICAg
ICAgICBtX2NsaWVudC0+bmV3Q3Vlc1BhcnNlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXNldEN1ZVZhbHVlcygpOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJ
RDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFdlYlZUVFBhcnNlcjo6c3BsaXRCeUxpbmVUZXJtaW5hdG9ycyhjb25zdCBTdHJp
bmcmIHNvdXJjZSwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkKK3sKKyAgICAvLyA0LjguMTAuMTMu
MiBBIFdlYlZUVCBsaW5lIHRlcm1pbmF0b3IgY29uc2lzdHMgb2Ygb25lIG9mIHRoZSBmb2xsb3dp
bmc6CisgICAgLy8gQSBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIFUrMDAwQSBMSU5FIEZFRUQgKENS
TEYpIGNoYXJhY3RlciBwYWlyLgorICAgIGlmIChzb3VyY2UuZmluZCgiXHJcbiIpICE9IG5vdEZv
dW5kKSB7CisgICAgICAgIHNvdXJjZS5zcGxpdCgiXHJcbiIsIHRydWUsIHJlc3VsdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gQSBzaW5nbGUgVSswMDBBIExJTkUgRkVFRCAoTEYp
IGNoYXJhY3Rlci4KKyAgICBpZiAoc291cmNlLmZpbmQoIlxuIikgIT0gbm90Rm91bmQpIHsKKyAg
ICAgICAgc291cmNlLnNwbGl0KCJcbiIsIHRydWUsIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgLy8gQSBzaW5nbGUgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJh
Y3Rlci4KKyAgICBpZiAoc291cmNlLmZpbmQoIlxyIikgIT0gbm90Rm91bmQpCisgICAgICAgIHNv
dXJjZS5zcGxpdCgiXHIiLCB0cnVlLCByZXN1bHQpOworfQorCitib29sIFdlYlZUVFBhcnNlcjo6
Y29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIC8v
IDQuOC4xMC4xMy4zIENvbGxlY3QgV2ViVlRUIGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy4KKyAg
ICAvLyAxLTMgLSBMZXQgaW5wdXQgYmUgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQgYW5kIHBvc2l0
aW9uIGJlIGEgcG9pbnRlciBpbnRvIGlucHV0CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwor
ICAgIHBvc2l0aW9uID0gc2tpcFdoaXRlU3BhY2UoaW5wdXQsIHBvc2l0aW9uKTsKKyAgICAvLyA0
LTUgLSBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9y
dCBhbmQgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3Vl
IHN0YXJ0IHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIFN0cmluZyBzdGFydDsKKyAg
ICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gIT0g
JyAnICYmIGlucHV0W3Bvc2l0aW9uXSAhPSAnXHQnKSB7CisgICAgICAgIHN0YXJ0LmFwcGVuZChp
bnB1dFtwb3NpdGlvbl0pOworICAgICAgICBwb3NpdGlvbisrOworICAgIH0KKyAgICBtX2N1cnJl
bnRTdGFydFRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKHN0YXJ0KTsKKyAgICBpZiAobV9jdXJyZW50
U3RhcnRUaW1lID09IG1hbGZvcm1lZFRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBw
b3NpdGlvbiA9IHNraXBXaGl0ZVNwYWNlKGlucHV0LCBwb3NpdGlvbik7CisgICAgLy8gNi05IC0g
SWYgdGhlIG5leHQgdGhyZWUgY2hhcmFjdGVycyBhcmUgbm90ICItLT4iLCBhYm9ydCBhbmQgcmV0
dXJuIGZhaWx1cmUuCisgICAgaWYgKGlucHV0LnN1YnN0cmluZyhwb3NpdGlvbiwgMykgIT0gIi0t
PiIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwb3NpdGlvbiArPSAzOworICAgIHBvc2l0
aW9uID0gc2tpcFdoaXRlU3BhY2UoaW5wdXQsIHBvc2l0aW9uKTsKKyAgICAvLyAxMC0xMSAtIENv
bGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGFib3J0IGFuZCBy
ZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBsZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUgZW5kIHRp
bWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIFN0cmluZyBlbmQ7CisgICAgd2hpbGUgKHBv
c2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICcgJyAmJiBpbnB1
dFtwb3NpdGlvbl0gIT0gJ1x0JykgeworICAgICAgZW5kLmFwcGVuZChpbnB1dFtwb3NpdGlvbl0p
OworICAgICAgcG9zaXRpb24rKzsKKyAgICB9CisgICAgbV9jdXJyZW50RW5kVGltZSA9IGNvbGxl
Y3RUaW1lU3RhbXAoZW5kKTsKKyAgICBpZiAobV9jdXJyZW50RW5kVGltZSA9PSBtYWxmb3JtZWRU
aW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9zaXRpb24gPSBza2lwV2hpdGVTcGFj
ZShpbnB1dCwgcG9zaXRpb24pOworCisgICAgLy8gMTIgLSBQYXJzZSB0aGUgV2ViVlRUIHNldHRp
bmdzIGZvciB0aGUgY3VlIChjb25kdWN0ZWQgaW4gVGV4dFRyYWNrQ3VlKS4KKyAgICBtX2N1cnJl
bnRTZXR0aW5ncyA9IGlucHV0LnN1YnN0cmluZyhwb3NpdGlvbiwgaW5wdXQubGVuZ3RoKCktMSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2RvdWJsZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1l
U3RhbXAoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0
IGEgV2ViVlRUIHRpbXN0YW1wLgorICAgIC8vIDEtNCAtIEluaXRpYWwgY2hlY2tzLgorICAgIHVu
c2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBlbnVtIE1vZGUgeyBtaW51dGVzLCBob3VycyB9Owor
ICAgIE1vZGUgbW9kZSA9IG1pbnV0ZXM7CisgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0
aCgpIHx8ICEoJzAnIDw9IGlucHV0W3Bvc2l0aW9uXSAmJiBpbnB1dFtwb3NpdGlvbl0gPD0gJzkn
KSkKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgLy8gNS02IC0gQ29sbGVjdCBh
IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgMC05LgorICAgIFN0cmluZyBkaWdpdHMx
OworICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmICcwJyA8PSBpbnB1dFtw
b3NpdGlvbl0gJiYgaW5wdXRbcG9zaXRpb25dIDw9ICc5JykKKyAgICAgICAgZGlnaXRzMS5hcHBl
bmQoaW5wdXRbcG9zaXRpb24rK10pOworICAgIGludCB2YWx1ZTEgPSBkaWdpdHMxLnRvSW50KCk7
CisgICAgLy8gNyAtIElmIG5vdCAyIGNoYXJhY3RlcnMgb3IgdmFsdWUgaXMgZ3JlYXRlciB0aGFu
IDU5LCBpbnRlcnByZXRlciBhcyBob3Vycy4KKyAgICBpZiAoZGlnaXRzMS5sZW5ndGgoKSAhPSAy
IHx8IHZhbHVlMSA+IDU5KQorICAgICAgICBtb2RlID0gaG91cnM7CisgICAgLy8gOC0xMiAtIENv
bGxlY3QgdGhlIG5leHQgc2VxdWVuY2Ugb2YgMC05IGFmdGVyICc6JyAobXVzdCBiZSAyIGNoYXJz
KS4KKyAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgaW5wdXRbcG9zaXRpb24r
K10gIT0gJzonKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAocG9zaXRp
b24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgISgnMCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0
W3Bvc2l0aW9uXSA8PSAnOScpKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBT
dHJpbmcgZGlnaXRzMjsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAn
MCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAg
IGRpZ2l0czIuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICBpbnQgdmFsdWUyID0gZGln
aXRzMi50b0ludCgpOworICAgIGlmIChkaWdpdHMyLmxlbmd0aCgpICE9IDIpCisgICAgICAgIHJl
dHVybiBtYWxmb3JtZWRUaW1lOworICAgIC8vIDEzIC0gRGV0ZWN0IHdoZXRoZXIgdGhpcyB0aW1l
c3RhbXAgaW5jbHVkZXMgaG91cnMuCisgICAgaW50IHZhbHVlMzsKKyAgICBpZiAobW9kZSA9PSBo
b3VycyB8fCAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gPT0g
JzonKSkgeworICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgaW5wdXRb
cG9zaXRpb25dICE9ICc6JykKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAg
ICAgICBwb3NpdGlvbisrOworICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkg
fHwgISgnMCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpKQor
ICAgICAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgICAgIFN0cmluZyBkaWdpdHMz
OworICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAnMCcgPD0gaW5w
dXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAgICAgICBkaWdp
dHMzLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgICAgIGlmIChkaWdpdHMzLmxlbmd0
aCgpICE9IDIpCisgICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICAgICAgdmFs
dWUzID0gZGlnaXRzMy50b0ludCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlMyA9IHZh
bHVlMjsKKyAgICAgICAgdmFsdWUyID0gdmFsdWUxOworICAgICAgICB2YWx1ZTEgPSAwOworICAg
IH0KKyAgICAvLyAxNC0xOSAtIENvbGxlY3QgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJy4n
IChtdXN0IGJlIDMgY2hhcnMpLgorICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgoKSB8
fCBpbnB1dFtwb3NpdGlvbisrXSAhPSAnLicpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1l
OworICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgoKSB8fCAhKCcwJyA8PSBpbnB1dFtw
b3NpdGlvbl0gJiYgaW5wdXRbcG9zaXRpb25dIDw9ICc5JykpCisgICAgICAgIHJldHVybiBtYWxm
b3JtZWRUaW1lOworICAgIFN0cmluZyBkaWdpdHM0OworICAgIHdoaWxlIChwb3NpdGlvbiA8IGlu
cHV0Lmxlbmd0aCgpICYmICcwJyA8PSBpbnB1dFtwb3NpdGlvbl0gJiYgaW5wdXRbcG9zaXRpb25d
IDw9ICc5JykKKyAgICAgICAgZGlnaXRzNC5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworICAg
IGlmIChkaWdpdHM0Lmxlbmd0aCgpICE9IDMpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1l
OworICAgIGludCB2YWx1ZTQgPSBkaWdpdHM0LnRvSW50KCk7CisgICAgaWYgKHZhbHVlMiA+IDU5
IHx8IHZhbHVlMyA+IDU5KQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICAvLyAy
MC0yMSAtIENhbGN1bGF0ZSByZXN1bHQuCisgICAgcmV0dXJuIHZhbHVlMSAqIHNlY29uZHNJbkhv
dXIgKyB2YWx1ZTIgKiBzZWNvbmRzSW5NaW51dGUgKyB2YWx1ZTMgKyAoZG91YmxlKXZhbHVlNCAv
IDEwMDA7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpyZXNldEN1ZVZhbHVlcygpCit7CisgICAg
bV9jdXJyZW50SWQgPSBlbXB0eVN0cmluZygpOworICAgIG1fY3VycmVudFNldHRpbmdzID0gZW1w
dHlTdHJpbmcoKTsKKyAgICBtX2N1cnJlbnRTdGFydFRpbWUgPSAwOworICAgIG1fY3VycmVudEVu
ZFRpbWUgPSAwOworICAgIG1fY3VycmVudENvbnRlbnQgPSBlbXB0eVN0cmluZygpOworICAgIG1f
Y3VycmVudFBhdXNlT25FeGl0ID0gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIFdlYlZUVFBhcnNlcjo6
c2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQgcG9zaXRpb24pCit7
CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgKGlucHV0W3Bvc2l0aW9u
XSA9PSAnICcgfHwgaW5wdXRbcG9zaXRpb25dID09ICdcdCcpKQorICAgICAgICBwb3NpdGlvbisr
OworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA0OWU3YjBiOWNi
MGE5NjAzODgyZTQ0ZWYxZmE5OGEyYzg3NzY4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oCkBAIC0wLDAgKzEsODcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJWVFRQYXJzZXJfaAorI2RlZmluZSBXZWJWVFRQYXJzZXJfaAorCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiQ3VlUGFyc2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
IGludCBzZWNvbmRzSW5Ib3VyID0gMzYwMDsKK3N0YXRpYyBjb25zdCBpbnQgc2Vjb25kc0luTWlu
dXRlID0gNjA7CitzdGF0aWMgY29uc3QgZG91YmxlIG1hbGZvcm1lZFRpbWUgPSAtMTsKKworY2xh
c3MgV2ViVlRUUGFyc2VyIDogcHVibGljIEN1ZVBhcnNlclByaXZhdGVJbnRlcmZhY2UgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfldlYlZUVFBhcnNlcigpIHsgfQorCisgICAgZW51bSBQYXJzZVN0
YXRlIHsgSEVBREVSLCBJRCwgVElNSU5HU0FORFNFVFRJTkdTLCBDT05URU5UIH07CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxXZWJWVFRQYXJzZXI+IGNyZWF0ZShDdWVQYXJzZXJQcml2YXRlQ2xp
ZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYlZUVFBh
cnNlcihjbGllbnQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VCeXRlcyhjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKKworICAgIHZpcnR1YWwgdm9pZCBmZXRjaFBhcnNl
ZEN1ZXMoVmVjdG9yPFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CisKK3Byb3RlY3RlZDoK
KyAgICBXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCopOworCisgICAgUGFyc2VT
dGF0ZSBtX3N0YXRlOworCitwcml2YXRlOgorICAgIHZvaWQgc3BsaXRCeUxpbmVUZXJtaW5hdG9y
cyhjb25zdCBTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCk7CisgICAgYm9v
bCBjb2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYpOworICAgIGRvdWJsZSBj
b2xsZWN0VGltZVN0YW1wKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVzZXRDdWVWYWx1ZXMo
KTsKKyAgICB1bnNpZ25lZCBza2lwV2hpdGVTcGFjZShjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCk7
CisKKyAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CisgICAgZG91YmxlIG1fY3VycmVudFN0YXJ0VGlt
ZTsKKyAgICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsKKyAgICBTdHJpbmcgbV9jdXJyZW50Q29u
dGVudDsKKyAgICBTdHJpbmcgbV9jdXJyZW50U2V0dGluZ3M7CisgICAgYm9vbCBtX2N1cnJlbnRQ
YXVzZU9uRXhpdDsKKworICAgIEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIG1fY2xpZW50OworCisg
ICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4gbV9jdWVsaXN0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100055</attachid>
            <date>2011-07-07 17:57:19 -0700</date>
            <delta_ts>2011-07-07 22:38:19 -0700</delta_ts>
            <desc>Addressing comments and making more spec compliant.</desc>
            <filename>bug-62882-20110707175717.patch</filename>
            <type>text/plain</type>
            <size>33870</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjZmNzNm
M2QxMTc0ODNmMzgwMTRlODNlZGM1MDg2MGYxNzdiNDYxNC4uMDBhMTJlMGE2NWQ5M2ZkMGYyZmY1
MzM2YjVjNDA0ZTIyYjRmOTE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTQsNiArMTk5
NCw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg1ZThkNzZhZWQ5Y2IyMTdiMTVi
ZTY4OGVlY2MyNTk2NjdmYjBhYi4uOWRkMzg0ZWQ0NzViOTc3MjkyYzMzYmJhZjQ0MjZkY2M3NWU0
ZmE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTA3LTA3ICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURF
T19UUkFDSyBmZWF0dXJlCisgICAgICAgIGRlZmluZSwgd2hpY2ggaXMgdHVybmVkIG9mZi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0xv
YWRhYmxlVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKiBodG1sL0xvYWRhYmxlVGV4dFRyYWNrLmg6
CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAgICAqIGh0bWwvVGV4dFRy
YWNrQ3VlLmg6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFj
ay9DdWVQYXJzZXJQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFy
c2VyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmg6
IEFkZGVkLgorCiAyMDExLTA3LTA3ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBTd2l0Y2ggcmVtYWluaW5nIHBhaW50IGZ1bmN0aW9ucyB0byBuZXcgbGF5
b3V0IHR5cGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAwYWM1YTVhN2MwYWYw
MDEwNjFkZjNhODZhYTFmNWVhZDU2ZjdiMjc0Li42YmJhY2Y4NTM3MzI0ZWQyOTE3MGIzODZjZjI2
YTViOGUyM2FmNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI4NDAsNiAr
Mjg0MCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBh
cnNlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZh
dGUuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RyZWVTaGFyZWQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVVJMU3RyaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VVSUQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA5ZGE4MTUxYTM0Nzk4NTRkOTE1NjE0YjExMmI4MGE4ZDM0ODBmNjQw
Li42NGQxNWE5OTllOGVlYjRiMzcyMzcwMGUxOTNjZTg3MmI0OTAxODhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC01MDY3LDYgKzUwNjcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4v
QlN0cmluZy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CU3RyaW5nLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4
IDQ1NTA0YjEzZDdjNzk0ZmY2MTEzZmI5ZDRkYTNiYzQ1MTlhYzA1Y2YuLjM0OWQyMjFlODEzZjE2
MmE3MDRmZTM5NDBlYTZiY2Q3MTEyYWJjODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yMTAxLDYgKzIx
MDEsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9UaW1lci5oIFwKICAgICBwbGF0Zm9y
bS90cmFjay9DdWVQYXJzZXIuaCBcCiAgICAgcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0
ZS5oIFwKKyAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCBcCiAgICAgcGxhdGZvcm0v
V2lkZ2V0LmggXAogICAgIHBsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oIFwKICAgICBwbGF0
Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZiYzVjMWM1ZTc5Zjk4MDhhNGU4NzY5N2Ex
NmFhNjRkNzIzMDllNjQuLmNmZjMyMDZhYzdjZTU5Y2M2YzU1ZTljZDgzYmNlNjIxNDRkY2VkMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTQwMTIsNiArNDAxMiw4IEBACiAJCUFCRERGRTc5MEE1QzZFNzAwMEEzRTExRCAvKiBS
ZW5kZXJNZW51TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBQkRERkU3MzBBNUM2RTZGMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuY3BwICov
OyB9OwogCQlBQkRERkU3QTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCRERGRTc0MEE1QzZF
NzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oICovOyB9OwogCQlBRERGMUFENzEyNTdDRDlB
MDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1Bh
dGguaCAqLzsgfTsKKwkJQjEwQjc0MEUxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEwQjc0MEMx
M0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5oICovOyB9OworCQlCMTBCNzQwRjEzQkU4
MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQ
YXJzZXIuY3BwICovOyB9OwogCQlCMTJEMjMzRTEzNTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZl
VHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIxMkQyMzM1MTM1NjAyODIwMDJBMjhENCAvKiBFeGNsdXNpdmVUcmFja0xpc3QuY3BwICov
OyB9OwogCQlCMTJEMjMzRjEzNTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTJEMjMzNjEz
NTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tMaXN0LmggKi87IH07CiAJCUIxMkQyMzQx
MTM1NjAyODIwMDJBMjhENCAvKiBNdWx0aXBsZVRyYWNrTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTJEMjMzODEzNTYwMjgyMDAyQTI4RDQg
LyogTXVsdGlwbGVUcmFja0xpc3QuY3BwICovOyB9OwpAQCAtMTA0NTEsNiArMTA0NTMsOCBAQAog
CQlBQkRERkU3NDBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lbnVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUFEREYxQUQ0MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1BhdGgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERGMUFENTEyNTdDRDlBMDAwM0E3
NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJTVkdQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEI3NDBDMTNC
RTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViVlRUUGFyc2VyLmg7IHBhdGggPSBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQjc0MEQxM0JFODBCRjAwQkMx
QzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBXZWJWVFRQYXJzZXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjEyRDIzMzUxMzU2MDI4MjAwMkEy
OEQ0IC8qIEV4Y2x1c2l2ZVRyYWNrTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFeGNsdXNpdmVUcmFja0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMTJEMjMzNjEzNTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2l2ZVRyYWNrTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMTJEMjMzNzEzNTYwMjgyMDAyQTI4RDQgLyog
RXhjbHVzaXZlVHJhY2tMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFeGNsdXNpdmVU
cmFja0xpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4NjIsNiArMTc4
NjYsOCBAQAogCQkJCUIyRTRFQzk1MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAq
LywKIAkJCQlCMkU0RUM5NjBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmlkbCAqLywK
IAkJCQlCMjhDNkEyNjBEMDBDNDQ4MDAzMzRBQTQgLyogeGxpbmthdHRycy5pbiAqLywKKwkJCQlC
MTBCNzQwQzEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmggKi8sCisJCQkJQjEwQjc0
MEQxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgKi8sCiAJCQkpOwogCQkJcGF0
aCA9IHN2ZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzA4OCw2ICsyMzA5NCw3
IEBACiAJCQkJMDg2Mzk1MTYxM0I1RkU1NzAwQkIzNDREIC8qIFNWR0FuaW1hdGVkUGF0aC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDMxQTJGOUMxM0I2RjJCMDAwNzc5MUU0IC8qIFNWR0FuaW1hdGVk
TnVtYmVyT3B0aW9uYWxOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QUJCNzg3MTNCOTA0
QkMwMEYxOTdFMyAvKiBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaCBpbiBIZWFkZXJzICovLAor
CQkJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMjU4NTUsNiArMjU4NjIsNyBAQAogCQkJCTQzMUEzMDIxMTNCODlEQ0MwMDc3OTFF
NCAvKiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDMxQTMwODgxM0I4Rjk3ODAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkQm9vbGVhbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0M0Y2RkQ5NjEzQkNEMEIxMDAyMjQwNTIgLyogU1ZHQW5pbWF0ZWRJ
bnRlZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxMEI3NDBGMTNCRTgwQkYwMEJDMUMyNiAv
KiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFj
a0N1ZS5jcHAKaW5kZXggM2I3YTg5M2MyY2YwMzllMmU5OTFlMDk2ZjVmNmY0NTQ5ZTdhMGUyNS4u
YjAwZmI3ODE5ZjRmNGExMmMwY2YzMGY5ZjI5OWE2YjIwMTVkZjgxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dFRyYWNrQ3VlLmNwcApAQCAtNDEsNyArNDEsMTUgQEAgVGV4dFRyYWNrQ3VlOjpUZXh0
VHJhY2tDdWUoY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25z
dCBTdHIKICAgICAsIG1fY29udGVudChjb250ZW50KQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5n
cykKICAgICAsIG1fcGF1c2VPbkV4aXQocGF1c2VPbkV4aXQpCisgICAgLCBtX3dyaXRpbmdEaXJl
Y3Rpb24oSG9yaXpvbnRhbCkKKyAgICAsIG1fc25hcFRvTGluZXModHJ1ZSkKKyAgICAsIG1fbGlu
ZVBvc2l0aW9uKC0xKQorICAgICwgbV90ZXh0UG9zaXRpb24oNTApCisgICAgLCBtX2N1ZVNpemUo
MTAwKQorICAgICwgbV9jdWVBbGlnbm1lbnQoTUlERExFKQorICAgICwgbV9pc0FjdGl2ZShmYWxz
ZSkKIHsKKyAgICBwYXJzZVNldHRpbmdzKG1fc2V0dGluZ3MpOwogfQogCiBUZXh0VHJhY2tDdWU6
On5UZXh0VHJhY2tDdWUoKQpAQCAtNzgsMTAgKzg2LDM3IEBAIGJvb2wgVGV4dFRyYWNrQ3VlOjpw
YXVzZU9uRXhpdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGF1c2VPbkV4aXQ7CiB9CiAKK1N0cmlu
ZyBUZXh0VHJhY2tDdWU6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3dyaXRp
bmdEaXJlY3Rpb24pIHsKKyAgICBjYXNlIEhvcml6b250YWw6IAorICAgICAgICByZXR1cm4gImhv
cml6b250YWwiOworICAgIGNhc2UgVmVydGljYWxHcm93aW5nTGVmdDoKKyAgICAgICAgcmV0dXJu
ICJ2ZXJ0aWNhbCI7CisgICAgY2FzZSBWZXJ0aWNhbEdyb3dpbmdSaWdodDoKKyAgICAgICAgcmV0
dXJuICJ2ZXJ0aWNhbC1sciI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH0KK30KKworU3RyaW5nIFRleHRUcmFja0N1ZTo6YWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKG1fY3VlQWxpZ25tZW50KSB7CisgICAgY2FzZSBTdGFydDogCisgICAgICAgIHJldHVy
biAic3RhcnQiOworICAgIGNhc2UgTWlkZGxlOgorICAgICAgICByZXR1cm4gIm1pZGRsZSI7Cisg
ICAgY2FzZSBFbmQ6CisgICAgICAgIHJldHVybiAiZW5kIjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gIiI7CisgICAgfQorfQorCiBTdHJpbmcgVGV4dFRyYWNrQ3VlOjpnZXRDdWVBc1Nv
dXJjZSgpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fY29udGVudDsKIH0KIAogUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBUZXh0VHJhY2tDdWU6OmdldEN1ZUFzSFRNTCgpCkBAIC0xMDEsNiArMTM2
LDExNSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAg
bV9pc0FjdGl2ZSA9IGFjdGl2ZTsKIH0KIAordm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0dGlu
Z3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBQYXJzZSB0aGUg
V2ViVlRUIHNldHRpbmdzLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAo
cG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSkgeworICAgICAgICAvLyAxLTQgLSBJbml0aWFsIHNl
dHVwLgorICAgICAgICBjaGFyIHNldHRpbmcgPSBpbnB1dFtwb3NpdGlvbisrXTsKKyAgICAgICAg
aWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIC8vIDUtNyAtIElmIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gaXMgbm90ICc6Jywg
c2V0IHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nLgorICAgICAgICBpZiAoaW5wdXRbcG9zaXRpb24r
K10gIT0gJzonKQorICAgICAgICAgICAgc2V0dGluZyA9ICcgJzsKKyAgICAgICAgaWYgKHBvc2l0
aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8v
IDggLSBHYXRoZXIgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWUgb2Ygc2V0dGluZy4KKyAgICAgICAg
c3dpdGNoIChzZXR0aW5nKSB7CisgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgU3RyaW5nIHdyaXRpbmdEaXJlY3Rpb247CisgICAgICAgICAgICB3aGlsZSAocG9z
aXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJyAnICYmIGlucHV0
W3Bvc2l0aW9uXSAhPSAnXHQnKQorICAgICAgICAgICAgICAgIHdyaXRpbmdEaXJlY3Rpb24uYXBw
ZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZSh3cml0aW5nRGlyZWN0aW9uLCAidmVydGljYWwiKSkKKyAgICAgICAgICAgICAgICBtX3dyaXRp
bmdEaXJlY3Rpb24gPSBWZXJ0aWNhbEdyb3dpbmdMZWZ0OworICAgICAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHdyaXRpbmdEaXJlY3Rpb24sICJ2ZXJ0aWNhbC1sciIpKQorICAgICAgICAg
ICAgICAgIG1fd3JpdGluZ0RpcmVjdGlvbiA9IFZlcnRpY2FsR3Jvd2luZ1JpZ2h0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAg
ICAgeworICAgICAgICAgICAgU3RyaW5nIGxpbmVQb3NpdGlvbjsKKyAgICAgICAgICAgIHdoaWxl
IChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmIChpbnB1dFtwb3NpdGlvbl0gPT0gJy0nIHx8
IGlucHV0W3Bvc2l0aW9uXSA9PSAnJScgfHwgKCcwJyA8PSBpbnB1dFtwb3NpdGlvbl0gJiYgaW5w
dXRbcG9zaXRpb25dIDw9ICc5JykpKQorICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvbi5hcHBl
bmQoaW5wdXRbcG9zaXRpb24rK10pOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDw9IGlucHV0
Lmxlbmd0aCgpICYmIGlucHV0W3Bvc2l0aW9uXSAhPSAnICcgJiYgaW5wdXRbcG9zaXRpb25dICE9
ICdcdCcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobGluZVBvc2l0
aW9uLnN1YnN0cmluZygxLCBsaW5lUG9zaXRpb24ubGVuZ3RoKCktMSkuY29udGFpbnMoJy0nKSB8
fCBsaW5lUG9zaXRpb24uc3Vic3RyaW5nKDAsIGxpbmVQb3NpdGlvbi5sZW5ndGgoKS0xKS5jb250
YWlucygnJScpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGxpbmVQ
b3NpdGlvblswXSA9PSAnLScgJiYgbGluZVBvc2l0aW9uW2xpbmVQb3NpdGlvbi5sZW5ndGgoKS0x
XSA9PSAnJScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsb25nIG51bWJl
cjsKKyAgICAgICAgICAgIGlmIChsaW5lUG9zaXRpb25bbGluZVBvc2l0aW9uLmxlbmd0aCgpLTFd
ID09ICclJykgeworICAgICAgICAgICAgICAgIG51bWJlciA9IGxpbmVQb3NpdGlvbi5zdWJzdHJp
bmcoMCwgbGluZVBvc2l0aW9uLmxlbmd0aCgpLTEpLnRvSW50NjQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAobnVtYmVyIDwgMCB8fCBudW1iZXIgPiAxMDApCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIG1fc25hcFRvTGluZXMgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIG51bWJlciA9IGxpbmVQb3NpdGlvbi5zdWJzdHJpbmco
MCwgbGluZVBvc2l0aW9uLmxlbmd0aCgpKS50b0ludDY0KCk7CisgICAgICAgICAgICBtX2xpbmVQ
b3NpdGlvbiA9IG51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyB0ZXh0UG9z
aXRpb247CisgICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAn
MCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAg
ICAgICAgICAgdGV4dFBvc2l0aW9uLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgICAg
ICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBpZiAoaW5wdXRbcG9zaXRpb24rK10gIT0gJyUnKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3Ro
KCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICcgJyAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJ1x0JykK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICh0ZXh0UG9zaXRpb24uaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbG9uZyBudW1i
ZXIgPSB0ZXh0UG9zaXRpb24udG9JbnQ2NCgpOworICAgICAgICAgICAgaWYgKG51bWJlciA8IDAg
fHwgbnVtYmVyID4gMTAwKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1f
dGV4dFBvc2l0aW9uID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ1MnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGN1
ZVNpemU7CisgICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAn
MCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAg
ICAgICAgICAgY3VlU2l6ZS5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworICAgICAgICAgICAg
aWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uKytdICE9ICclJykKKyAgICAgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5w
dXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICcgJyAmJiBpbnB1dFtwb3NpdGlvbl0g
IT0gJ1x0JykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjdWVTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxvbmcg
bnVtYmVyID0gY3VlU2l6ZS50b0ludDY0KCk7CisgICAgICAgICAgICBpZiAobnVtYmVyIDwgMCB8
fCBudW1iZXIgPiAxMDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBt
X2N1ZVNpemUgPSBudW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnQSc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgY3VlQWxp
Z25tZW50OworICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYg
aW5wdXRbcG9zaXRpb25dICE9ICcgJyAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJ1x0JykKKyAgICAg
ICAgICAgICAgICBjdWVBbGlnbm1lbnQuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShjdWVBbGlnbm1lbnQsICJzdGFydCIpKQorICAg
ICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gVGV4dFRyYWNrQ3VlOjpTdGFydDsKKyAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShjdWVBbGlnbm1lbnQsICJtaWRkbGUiKSkKKyAg
ICAgICAgICAgICAgICBtX2N1ZUFsaWdubWVudCA9IFRleHRUcmFja0N1ZTo6TWlkZGxlOworICAg
ICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGN1ZUFsaWdubWVudCwgImVuZCIpKQorICAg
ICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gVGV4dFRyYWNrQ3VlOjpFbmQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyBEaXNjYXJk
IHJlbWFpbmluZyBzcGFjZSBjaGFyYWN0ZXJzLgorICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBp
bnB1dC5sZW5ndGgoKSAmJiAoaW5wdXRbcG9zaXRpb25dID09ICcgJyB8fCBpbnB1dFtwb3NpdGlv
bl0gPT0gJ1x0JykpCisgICAgICAgICAgICBwb3NpdGlvbisrOworICAgIH0KK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dFRyYWNrQ3VlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCmlu
ZGV4IGM5YzE1MzM1OTliZTRmMTFkN2M5YWIzMzU3ZTc1NWFlMTViMjZkYjguLjQwZjQ5ODFjNmQ3
MWRiMTY1ZGJlMGU5OWRiNmI4Yzk3Nzg0M2ExMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dFRyYWNrQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tD
dWUuaApAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHRUcmFja0N1ZShpZCwgc3RhcnQsIGVuZCwgY29udGVudCwgc2V0dGluZ3Ms
IHBhdXNlT25FeGl0KSk7CiAgICAgfQorICAgIAorICAgIGVudW0gRGlyZWN0aW9uIHsgSG9yaXpv
bnRhbCwgVmVydGljYWxHcm93aW5nTGVmdCwgVmVydGljYWxHcm93aW5nUmlnaHQgfTsKKyAgICBl
bnVtIEFsaWdubWVudCB7IFN0YXJ0LCBNaWRkbGUsIEVuZCB9OwogCiAgICAgdmlydHVhbCB+VGV4
dFRyYWNrQ3VlKCk7CiAKQEAgLTUzLDYgKzU2LDEzIEBAIHB1YmxpYzoKICAgICBkb3VibGUgc3Rh
cnRUaW1lKCkgY29uc3Q7CiAgICAgZG91YmxlIGVuZFRpbWUoKSBjb25zdDsKICAgICBib29sIHBh
dXNlT25FeGl0KCkgY29uc3Q7CisgICAgCisgICAgU3RyaW5nIGRpcmVjdGlvbigpIGNvbnN0Owor
ICAgIGJvb2wgc25hcFRvTGluZXMoKSBjb25zdCB7IHJldHVybiBtX3NuYXBUb0xpbmVzOyB9Cisg
ICAgbG9uZyBsaW5lUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xpbmVQb3NpdGlvbjsgfQor
ICAgIGxvbmcgdGV4dFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0UG9zaXRpb247IH0K
KyAgICBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2N1ZVNpemU7IH0KKyAgICBTdHJpbmcg
YWxpZ25tZW50KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgZ2V0Q3VlQXNTb3VyY2UoKTsKICAgICBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGdldEN1ZUFzSFRNTCgpOwpAQCAtNjMsNiArNzMs
OCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRleHRUcmFja0N1ZShjb25zdCBTdHJpbmcmIGlk
LCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3Qg
U3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhpdCk7CiAKKyAgICB2b2lkIHBhcnNlU2V0
dGluZ3MoY29uc3QgU3RyaW5nJik7CisgICAgCiAgICAgVGV4dFRyYWNrKiBtX3RyYWNrOwogICAg
IAogICAgIFN0cmluZyBtX2lkOwpAQCAtNzEsNiArODMsMTMgQEAgcHJpdmF0ZToKICAgICBTdHJp
bmcgbV9jb250ZW50OwogICAgIFN0cmluZyBtX3NldHRpbmdzOwogICAgIGJvb2wgbV9wYXVzZU9u
RXhpdDsKKyAgICBEaXJlY3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOworICAgIGJvb2wgbV9zbmFw
VG9MaW5lczsKKyAgICBsb25nIG1fbGluZVBvc2l0aW9uOworICAgIGxvbmcgbV90ZXh0UG9zaXRp
b247CisgICAgbG9uZyBtX2N1ZVNpemU7CisgICAgQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50Owor
CiAgICAgYm9vbCBtX2lzQWN0aXZlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5jcHAKaW5kZXggM2IzNTNlN2M4YzM1ZGVmMjM1NDg3ZmI5Yjc2MmEyOWFk
NDA3NWExNi4uZThlYzFlM2M0ZDJkYzdjNzcxYzRjMTAyZTNlMzI3Yjg0ZjA5MTM5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiQ3VlUGFyc2VyLmgiCiAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxv
YWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCwxNSArNzEsMzMgQEAgYm9vbCBD
dWVQYXJzZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9u
ZyAvKmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIEN1ZVBhcnNl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogQ3Jl
YXRlIG1fcHJpdmF0ZSBiYXNlZCBvbiBNSU1FIHR5cGUuCisgICAgaWYgKCFtX3ByaXZhdGUpCisg
ICAgICAgIGlmIChyZXNwb25zZS5taW1lVHlwZSgpID09ICJ0ZXh0L3Z0dCIpCisgICAgICAgICAg
ICBtX3ByaXZhdGUgPSBXZWJWVFRQYXJzZXI6OmNyZWF0ZSh0aGlzKTsKICAgICBtX2NsaWVudC0+
dHJhY2tMb2FkU3RhcnRlZCgpOwogfQogCiB2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZURhdGEo
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIHsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IFNlbmQg
ZGF0YSBhbG9uZyB0byBtX3ByaXZhdGUgcGFyc2VyIHRvIGJlIHBhcnNlZC4KKyAgICAvLyBJZiBt
aW1lIHR5cGUgZnJvbSByZXNwb25zZSB3YXMgbm90IGluZm9ybWF0aXZlLCBzbmlmZiBmb3IgdHlw
ZSBvZiBmaWxlLgorICAgIGlmICghbV9wcml2YXRlKSB7CisgICAgICAgIC8vIFdlYlZUVCBmaWxl
cyBtdXN0IGJlZ2luIHdpdGggLi4uCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKKyAgICAg
ICAgLy8gYW4gb3B0aW9uYWwgVVRGLTggQk9NLAorICAgICAgICBpZiAobGVuID49IDMgJiYgZGF0
YVswXSA9PSAnXHhFRicgJiYgZGF0YVsxXSA9PSAnXHhCQicgJiYgZGF0YVsyXSA9PSAnXHhCRicp
CisgICAgICAgICAgICBzdGFydCArPSAzOworICAgICAgICBzdGQ6OnN0cmluZyBzdHIoZGF0YSAr
IHN0YXJ0LCA2KTsKKyAgICAgICAgLy8gdGhlIEFTQ0lJIHN0cmluZyAiV0VCVlRUIgorICAgICAg
ICBpZiAoc3RyID09ICJXRUJWVFQiKSB7CisgICAgICAgICAgICBtX3ByaXZhdGUgPSBXZWJWVFRQ
YXJzZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT50cmFja0xvYWRTdGFy
dGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBt
X3ByaXZhdGUtPnBhcnNlQnl0ZXMoZGF0YSwgbGVuKTsKIH0KIAogdm9pZCBDdWVQYXJzZXI6OmRp
ZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZykKQEAgLTk2LDYgKzExNSwxMSBAQCB2b2lkIEN1
ZVBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikK
ICAgICAvLyBGSVhNRSg2Mjg5Myk6IEltcGxlbWVudC4KIH0KIAordm9pZCBDdWVQYXJzZXI6Om5l
d0N1ZXNQYXJzZWQoKQoreworICAgIG1fY2xpZW50LT5uZXdDdWVzUGFyc2VkKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5oCmluZGV4IDc0NGNjMzIyNzhjNWY0Y2Y5ZTRmODJjYTdjNTNhYjE3YmQ4
OWQ4Y2YuLmVjNDExZWQ3MDMwZGEyMTIzMDg5NjY0MzIwMWE4N2FlOTk3MzM3ZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCkBAIC0zMyw5ICszMyw5IEBACiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLSNpbmNsdWRlICJDdWVQYXJzZXJQcml2YXRlLmgi
CiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2Fk
ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0
cmFja0xvYWRDb21wbGV0ZWQoKSA9IDA7CiB9OwogCi1jbGFzcyBDdWVQYXJzZXIgOiBwdWJsaWMg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitjbGFzcyBDdWVQYXJzZXIgOiBwdWJsaWMgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCwgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCB7CiBwdWJsaWM6CiAgICAg
Q3VlUGFyc2VyKCk7CiAgICAgdmlydHVhbCB+Q3VlUGFyc2VyKCk7CkBAIC02NCw5ICs2NCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAg
dm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDdWVQYXJz
ZXJDbGllbnQqKTsKLSAgICBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAg
IHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7Cisg
ICAgdm9pZCBuZXdDdWVzUGFyc2VkKCk7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFRocmVhZGFi
bGVMb2FkZXI+IG1fbG9hZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2sv
Q3VlUGFyc2VyUHJpdmF0ZS5oCmluZGV4IGJjM2U0ZmJjMDk1MWJlMzRjYmYwMTA3MWVkMjg2OWE5
OWEyZjgzMGUuLmNlNjMzN2Q5MWU1MGUzYmIxZWQyZmI4YWIyZTQyYmNmZWUxNzEzZjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgKQEAg
LTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0
IGNoYXIqLCBpbnQpID0gMDsKIAogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2YgbGFzdCBw
YXJzZWQgY3VlcyB0byBjYWxsZXIuCi0gICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhW
ZWN0b3I8UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpID0gMDsKIAog
cHJvdGVjdGVkOgogICAgIEN1ZVBhcnNlclByaXZhdGVJbnRlcmZhY2UoKSB7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBh
MDkyNjkyZTA4MDFhMDY1MTE5ODhiOWU1ODY4ZjlhZmY2MDA3ZDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCkBAIC0wLDAg
KzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KworI2luY2x1ZGUgIldlYlZUVFBhcnNlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJz
ZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQoreworICAgIG1fY2xpZW50ID0gY2xp
ZW50OworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRwdXRDdWVzKQoreworICAgIG91dHB1dEN1ZXMgPSBtX2N1
ZWxpc3Q7CisgICAgbV9jdWVsaXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpw
YXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgLy8gNC44LjEw
LjEzLjMgV0hBVFdHIFdlYlZUVCBQYXJzZXIgYWxnb3JpdGhtLgorICAgIC8vIDEtNCAtIEluaXRp
YWwgc2V0dXAgYW5kIGlnbm9yZSBCT00gY2hhcmFjdGVyLgorICAgIFN0cmluZyBpbnB1dCA9IFN0
cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7
CisgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlOworICAgIGlmIChsZW5ndGggPj0gMyAmJiBk
YXRhWzBdID09ICdceEVGJyAmJiBkYXRhWzFdID09ICdceEJCJyAmJiBkYXRhWzJdID09ICdceEJG
JykKKyAgICAgICAgcG9zaXRpb24rKzsgCisKKyAgICAvLyA1LTggLSBDb2xsZWN0IHRoZSBmaXJz
dCBsaW5lIGFuZCBjaGVjayB0aGF0IGl0IGlzICJXRUJWVFQiICh3ZSBhbHNvIGNoZWNrIGZvciAi
V0VCVlRUIEZJTEUiIGZvciBsZWdhY3kgcmVhc29ucykuCisgICAgU3RyaW5nIGxpbmU7CisgICAg
d2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdc
cicgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdcbicpCisgICAgICAgIGxpbmUuYXBwZW5kKGlucHV0
W3Bvc2l0aW9uKytdKTsKKworICAgIGlmIChsaW5lLnN1YnN0cmluZygwLCA2KSAhPSAiV0VCVlRU
IikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChsaW5lLmxlbmd0aCgpID4gNiAmJiBsaW5lWzZd
ICE9ICcgJyAmJiBsaW5lWzZdICE9ICdcdCcpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobGlu
ZS5sZW5ndGgoKSA+IDcgJiYgbGluZS5zdWJzdHJpbmcoNiwgNSkgIT0gIiBGSUxFIikKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChsaW5lLmxlbmd0aCgpID4gMTEgJiYgbGluZVsxMV0gIT0gJyAn
ICYmIGxpbmVbMTFdICE9ICdcdCcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDktMTIgLSBF
bnN1cmUgb25lIGxpbmUgdGVybWluYXRvciBhZnRlciB0aGUgV0VCVlRUIGxpbmUuCisgICAgcG9z
aXRpb24gPSBza2lwTGluZVRlcm1pbmF0b3IoaW5wdXQsIHBvc2l0aW9uKTsKKworSGVhZGVyOgor
ICAgIC8vIDEzLTE4IC0gQWxsb3cgYSBoZWFkZXIgKGNvbW1lbnQgYXJlYSkgdW5kZXIgdGhlIFdF
QlZUVCBsaW5lLgorICAgIGxpbmUgPSAiIjsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5s
ZW5ndGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJ1xyJyAmJiBpbnB1dFtwb3NpdGlvbl0gIT0g
J1xuJykKKyAgICAgICAgbGluZS5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworICAgIHBvc2l0
aW9uID0gc2tpcExpbmVUZXJtaW5hdG9yKGlucHV0LCBwb3NpdGlvbik7CisgICAgaWYgKCFsaW5l
LmlzRW1wdHkoKSkKKyAgICAgICAgZ290byBIZWFkZXI7CisKK0N1ZUxvb3A6CisgICAgLy8gMTkt
MjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMsIHRoZW4gaW5pdGlhbGl6
ZSBuZXcgY3VlIHZhbHVlcy4KKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiAoaW5wdXRbcG9zaXRpb25dID09ICdccicgfHwgaW5wdXRbcG9zaXRpb25dID09ICdcbicpKQor
ICAgICAgICBwb3NpdGlvbisrOworICAgIHJlc2V0Q3VlVmFsdWVzKCk7CisKKyAgICAvLyAzMC0z
OSAtIENvbGxlY3QgdGhlIG5leHQgbGluZSBhbmQgY2hlY2sgaWYgaXQgY29udGFpbnMgYW4gb3B0
aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KKyAgICBsaW5lID0gIiI7CisgICAgd2hp
bGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdccicg
JiYgaW5wdXRbcG9zaXRpb25dICE9ICdcbicpCisgICAgICAgIGxpbmUuYXBwZW5kKGlucHV0W3Bv
c2l0aW9uKytdKTsKKyAgICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAobGluZS5jb250YWlucygiLS0+IikpCisgICAgICAgIGdvdG8gVGltaW5nczsKKyAgICBt
X2N1cnJlbnRJZCA9IGxpbmU7CisgICAgcG9zaXRpb24gPSBza2lwTGluZVRlcm1pbmF0b3IoaW5w
dXQsIHBvc2l0aW9uKTsKKyAgICBsaW5lID0gIiI7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5w
dXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdccicgJiYgaW5wdXRbcG9zaXRpb25d
ICE9ICdcbicpCisgICAgICAgIGxpbmUuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICBp
ZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAgIGdvdG8gQ3VlTG9vcDsKKworVGltaW5nczoKKyAg
ICAvLyA0MCAtIENvbGxlY3QgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzLgorICAgIGlmICghY29s
bGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhsaW5lKSkKKyAgICAgICAgZ290byBCYWRDdWU7CisKK0N1
ZVRleHQ6CisgICAgLy8gNDEtNTAgLSBDb2xsZWN0IHRoZSBjdWUgdGV4dCBjb250ZW50LgorICAg
IGlmIChwb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgoKSkKKyAgICAgICAgZ290byBDdWVUZXh0UHJv
Y2Vzc2luZzsKKyAgICBpZiAoaW5wdXRbcG9zaXRpb25dID09ICdccicpCisgICAgICAgIHBvc2l0
aW9uKys7CisgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICBnb3Rv
IEN1ZVRleHRQcm9jZXNzaW5nOworICAgIGlmIChpbnB1dFtwb3NpdGlvbl0gPT0gJ1xuJykKKyAg
ICAgICAgcG9zaXRpb24rKzsKKyAgICBsaW5lID0gIiI7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwg
aW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdccicgJiYgaW5wdXRbcG9zaXRp
b25dICE9ICdcbicpCisgICAgICAgIGxpbmUuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAg
ICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAgIGdvdG8gQ3VlVGV4dFByb2Nlc3Npbmc7Cisg
ICAgaWYgKCFtX2N1cnJlbnRDb250ZW50LmlzRW1wdHkoKSkKKyAgICAgICAgbV9jdXJyZW50Q29u
dGVudCArPSAiXG4iOworICAgIG1fY3VycmVudENvbnRlbnQgKz0gbGluZTsKKyAgICBnb3RvIEN1
ZVRleHQ7CisKK0N1ZVRleHRQcm9jZXNzaW5nOgorICAgIC8vIDUxIC0gRklYTUUoNjQxMzIpOiBp
bXBsZW1lbnQgcnVsZXMgZm9yIFdlYlZUVC1zcGVjaWZpYyBjdWUgdGV4dCBwYXJzaW5nIGFuZCBE
T00gY29uc3RydWN0aW9uLgorICAgIC8vIDUyLTUzIC0gQ3JlYXRlIGEgY3VlLCBhZGQgaXQgdG8g
dGhlIG91dHB1dCwgYW5kIGNvbnRpbnVlIHBhcnNpbmcgbW9yZSBjdWVzLgorICAgIGN1ZSA9IFRl
eHRUcmFja0N1ZTo6Y3JlYXRlKG1fY3VycmVudElkLCBtX2N1cnJlbnRTdGFydFRpbWUsIG1fY3Vy
cmVudEVuZFRpbWUsIG1fY3VycmVudENvbnRlbnQsIG1fY3VycmVudFNldHRpbmdzLCBmYWxzZSk7
CisgICAgbV9jdWVsaXN0LmFwcGVuZChjdWUpOworICAgIG1fY2xpZW50LT5uZXdDdWVzUGFyc2Vk
KCk7CisgICAgZ290byBDdWVMb29wOworCitCYWRDdWU6CisgICAgLy8gNTQtNjIgLSBEaXNjYXJk
IGN1ZSBhbmQgY29udGludWUgcGFyc2luZyBjdWVzIHVudGlsIGVuZCBvZiBmaWxlIGlzIHJlYWNo
ZWQuCisgICAgcG9zaXRpb24gPSBza2lwTGluZVRlcm1pbmF0b3IoaW5wdXQsIHBvc2l0aW9uKTsK
KyAgICBsaW5lID0gIiI7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYg
aW5wdXRbcG9zaXRpb25dICE9ICdccicgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdcbicpCisgICAg
ICAgIGxpbmUuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICBpZiAobGluZS5pc0VtcHR5
KCkpCisgICAgICAgIGdvdG8gQ3VlTG9vcDsKKyAgICBnb3RvIEJhZEN1ZTsKK30KKworYm9vbCBX
ZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1
dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IFdlYlZUVCBjdWUgdGltaW5ncyBhbmQg
c2V0dGluZ3MuCisgICAgLy8gMS0zIC0gTGV0IGlucHV0IGJlIHRoZSBzdHJpbmcgYmVpbmcgcGFy
c2VkIGFuZCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgaW50byBpbnB1dAorICAgIHVuc2lnbmVkIHBv
c2l0aW9uID0gMDsKKyAgICBwb3NpdGlvbiA9IHNraXBXaGl0ZVNwYWNlKGlucHV0LCBwb3NpdGlv
bik7CisKKyAgICAvLyA0LTUgLSBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4gSWYgdGhhdCBm
YWlscywgdGhlbiBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgbGV0IGN1ZSdz
IHRleHQgdHJhY2sgY3VlIHN0YXJ0IHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIFN0
cmluZyBzdGFydDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1
dFtwb3NpdGlvbl0gIT0gJyAnICYmIGlucHV0W3Bvc2l0aW9uXSAhPSAnXHQnKQorICAgICAgICBz
dGFydC5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworCisgICAgbV9jdXJyZW50U3RhcnRUaW1l
ID0gY29sbGVjdFRpbWVTdGFtcChzdGFydCk7CisgICAgaWYgKG1fY3VycmVudFN0YXJ0VGltZSA9
PSBtYWxmb3JtZWRUaW1lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBvc2l0aW9u
ID0gc2tpcFdoaXRlU3BhY2UoaW5wdXQsIHBvc2l0aW9uKTsKKworICAgIC8vIDYtOSAtIElmIHRo
ZSBuZXh0IHRocmVlIGNoYXJhY3RlcnMgYXJlIG5vdCAiLS0+IiwgYWJvcnQgYW5kIHJldHVybiBm
YWlsdXJlLgorICAgIGlmIChpbnB1dC5zdWJzdHJpbmcocG9zaXRpb24sIDMpICE9ICItLT4iKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9zaXRpb24gKz0gMzsKKyAgICBwb3NpdGlvbiA9
IHNraXBXaGl0ZVNwYWNlKGlucHV0LCBwb3NpdGlvbik7CisKKyAgICAvLyAxMC0xMSAtIENvbGxl
Y3QgYSBXZWJWVFQgdGltZXN0YW1wLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGFib3J0IGFuZCByZXR1
cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBsZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUgZW5kIHRpbWUg
YmUgdGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIFN0cmluZyBlbmQ7CisgICAgd2hpbGUgKHBvc2l0
aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICcgJyAmJiBpbnB1dFtw
b3NpdGlvbl0gIT0gJ1x0JykKKyAgICAgIGVuZC5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOwor
CisgICAgbV9jdXJyZW50RW5kVGltZSA9IGNvbGxlY3RUaW1lU3RhbXAoZW5kKTsKKyAgICBpZiAo
bV9jdXJyZW50RW5kVGltZSA9PSBtYWxmb3JtZWRUaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcG9zaXRpb24gPSBza2lwV2hpdGVTcGFjZShpbnB1dCwgcG9zaXRpb24pOworCisgICAg
Ly8gMTIgLSBQYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzIGZvciB0aGUgY3VlIChjb25kdWN0ZWQg
aW4gVGV4dFRyYWNrQ3VlKS4KKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGlucHV0LnN1YnN0cmlu
Zyhwb3NpdGlvbiwgaW5wdXQubGVuZ3RoKCktMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Rv
dWJsZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3RyaW5nJiBpbnB1dCkK
K3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IGEgV2ViVlRUIHRpbXN0YW1wLgorICAgIC8v
IDEtNCAtIEluaXRpYWwgY2hlY2tzLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBl
bnVtIE1vZGUgeyBtaW51dGVzLCBob3VycyB9OworICAgIE1vZGUgbW9kZSA9IG1pbnV0ZXM7Cisg
ICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpIHx8ICEoJzAnIDw9IGlucHV0W3Bvc2l0
aW9uXSAmJiBpbnB1dFtwb3NpdGlvbl0gPD0gJzknKSkKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1l
ZFRpbWU7CisKKyAgICAvLyA1LTYgLSBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0
aGF0IGFyZSAwLTkuCisgICAgU3RyaW5nIGRpZ2l0czE7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwg
aW5wdXQubGVuZ3RoKCkgJiYgJzAnIDw9IGlucHV0W3Bvc2l0aW9uXSAmJiBpbnB1dFtwb3NpdGlv
bl0gPD0gJzknKQorICAgICAgICBkaWdpdHMxLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7Cisg
ICAgaW50IHZhbHVlMSA9IGRpZ2l0czEudG9JbnQoKTsKKworICAgIC8vIDcgLSBJZiBub3QgMiBj
aGFyYWN0ZXJzIG9yIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiA1OSwgaW50ZXJwcmV0ZXIgYXMgaG91
cnMuCisgICAgaWYgKGRpZ2l0czEubGVuZ3RoKCkgIT0gMiB8fCB2YWx1ZTEgPiA1OSkKKyAgICAg
ICAgbW9kZSA9IGhvdXJzOworCisgICAgLy8gOC0xMiAtIENvbGxlY3QgdGhlIG5leHQgc2VxdWVu
Y2Ugb2YgMC05IGFmdGVyICc6JyAobXVzdCBiZSAyIGNoYXJzKS4KKyAgICBpZiAocG9zaXRpb24g
Pj0gaW5wdXQubGVuZ3RoKCkgfHwgaW5wdXRbcG9zaXRpb24rK10gIT0gJzonKQorICAgICAgICBy
ZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkg
fHwgISgnMCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpKQor
ICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBTdHJpbmcgZGlnaXRzMjsKKyAgICB3
aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAnMCcgPD0gaW5wdXRbcG9zaXRpb25d
ICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAgIGRpZ2l0czIuYXBwZW5kKGlucHV0
W3Bvc2l0aW9uKytdKTsKKyAgICBpbnQgdmFsdWUyID0gZGlnaXRzMi50b0ludCgpOworICAgIGlm
IChkaWdpdHMyLmxlbmd0aCgpICE9IDIpIAorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsK
KworICAgIC8vIDEzIC0gRGV0ZWN0IHdoZXRoZXIgdGhpcyB0aW1lc3RhbXAgaW5jbHVkZXMgaG91
cnMuCisgICAgaW50IHZhbHVlMzsKKyAgICBpZiAobW9kZSA9PSBob3VycyB8fCAocG9zaXRpb24g
PCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gPT0gJzonKSkgeworICAgICAgICBp
ZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgaW5wdXRbcG9zaXRpb25dICE9ICc6JykK
KyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICBwb3NpdGlvbisrOwor
ICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgISgnMCcgPD0gaW5wdXRb
cG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpKQorICAgICAgICAgICAgcmV0dXJu
IG1hbGZvcm1lZFRpbWU7CisgICAgICAgIFN0cmluZyBkaWdpdHMzOworICAgICAgICB3aGlsZSAo
cG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAnMCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlu
cHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAgICAgICBkaWdpdHMzLmFwcGVuZChpbnB1dFtw
b3NpdGlvbisrXSk7CisgICAgICAgIGlmIChkaWdpdHMzLmxlbmd0aCgpICE9IDIpCisgICAgICAg
ICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICAgICAgdmFsdWUzID0gZGlnaXRzMy50b0lu
dCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlMyA9IHZhbHVlMjsKKyAgICAgICAgdmFs
dWUyID0gdmFsdWUxOworICAgICAgICB2YWx1ZTEgPSAwOworICAgIH0KKworICAgIC8vIDE0LTE5
IC0gQ29sbGVjdCBuZXh0IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAnLicgKG11c3QgYmUgMyBjaGFy
cykuCisgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpIHx8IGlucHV0W3Bvc2l0aW9u
KytdICE9ICcuJykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYgKHBvc2l0
aW9uID49IGlucHV0Lmxlbmd0aCgpIHx8ICEoJzAnIDw9IGlucHV0W3Bvc2l0aW9uXSAmJiBpbnB1
dFtwb3NpdGlvbl0gPD0gJzknKSkKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAg
U3RyaW5nIGRpZ2l0czQ7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYg
JzAnIDw9IGlucHV0W3Bvc2l0aW9uXSAmJiBpbnB1dFtwb3NpdGlvbl0gPD0gJzknKQorICAgICAg
ICBkaWdpdHM0LmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgaWYgKGRpZ2l0czQubGVu
Z3RoKCkgIT0gMykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaW50IHZhbHVl
NCA9IGRpZ2l0czQudG9JbnQoKTsKKyAgICBpZiAodmFsdWUyID4gNTkgfHwgdmFsdWUzID4gNTkp
CisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworCisgICAgLy8gMjAtMjEgLSBDYWxjdWxh
dGUgcmVzdWx0LgorICAgIHJldHVybiB2YWx1ZTEgKiBzZWNvbmRzSW5Ib3VyICsgdmFsdWUyICog
c2Vjb25kc0luTWludXRlICsgdmFsdWUzICsgKGRvdWJsZSl2YWx1ZTQgLyAxMDAwOworfQorCit2
b2lkIFdlYlZUVFBhcnNlcjo6cmVzZXRDdWVWYWx1ZXMoKQoreworICAgIG1fY3VycmVudElkID0g
ZW1wdHlTdHJpbmcoKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGVtcHR5U3RyaW5nKCk7Cisg
ICAgbV9jdXJyZW50U3RhcnRUaW1lID0gMDsKKyAgICBtX2N1cnJlbnRFbmRUaW1lID0gMDsKKyAg
ICBtX2N1cnJlbnRDb250ZW50ID0gZW1wdHlTdHJpbmcoKTsKK30KKwordW5zaWduZWQgV2ViVlRU
UGFyc2VyOjpza2lwV2hpdGVTcGFjZShjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCBwb3Np
dGlvbikKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAoaW5wdXRb
cG9zaXRpb25dID09ICcgJyB8fCBpbnB1dFtwb3NpdGlvbl0gPT0gJ1x0JykpCisgICAgICAgIHBv
c2l0aW9uKys7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCit1bnNpZ25lZCBXZWJWVFRQYXJz
ZXI6OnNraXBMaW5lVGVybWluYXRvcihjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCBwb3Np
dGlvbikKK3sKKyAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgIHJl
dHVybiBwb3NpdGlvbjsKKyAgICBpZiAoaW5wdXRbcG9zaXRpb25dID09ICdccicpCisgICAgICAg
IHBvc2l0aW9uKys7CisgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gcG9zaXRpb247CisgICAgaWYgKGlucHV0W3Bvc2l0aW9uXSA9PSAnXG4nKQorICAg
ICAgICBwb3NpdGlvbisrOworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGFkYjc3OTI3NThmNzc5MTNjYmQ1ZTgxNzIzNzgyYWFjYTljYTBkZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oCkBAIC0w
LDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJWVFRQYXJzZXJfaAorI2RlZmluZSBXZWJWVFRQYXJzZXJf
aAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiQ3VlUGFyc2VyUHJpdmF0
ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0IGludCBzZWNvbmRzSW5Ib3VyID0gMzYwMDsKK3N0YXRpYyBjb25zdCBp
bnQgc2Vjb25kc0luTWludXRlID0gNjA7CitzdGF0aWMgY29uc3QgZG91YmxlIG1hbGZvcm1lZFRp
bWUgPSAtMTsKKworY2xhc3MgV2ViVlRUUGFyc2VyIDogcHVibGljIEN1ZVBhcnNlclByaXZhdGVJ
bnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlZUVFBhcnNlcigpIHsgfQorCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVlRUUGFyc2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0
ZUNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJW
VFRQYXJzZXIoY2xpZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBhcnNlQnl0ZXMo
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hQ
YXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CisKK3Byb3RlY3RlZDoK
KyAgICBXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCopOworCitwcml2YXRlOgor
ICAgIGJvb2wgY29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKKyAgICBk
b3VibGUgY29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlc2V0Q3Vl
VmFsdWVzKCk7CisgICAgdW5zaWduZWQgc2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQpOworICAgIHVuc2lnbmVkIHNraXBMaW5lVGVybWluYXRvcihjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCk7CisKKyAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CisgICAgZG91YmxlIG1fY3VycmVu
dFN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsKKyAgICBTdHJpbmcgbV9j
dXJyZW50Q29udGVudDsKKyAgICBTdHJpbmcgbV9jdXJyZW50U2V0dGluZ3M7CisKKyAgICBDdWVQ
YXJzZXJQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKworICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRy
YWNrQ3VlPiA+IG1fY3VlbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100074</attachid>
            <date>2011-07-07 22:38:25 -0700</date>
            <delta_ts>2011-07-14 11:21:44 -0700</delta_ts>
            <desc>Correcting some typos</desc>
            <filename>bug-62882-20110707223823.patch</filename>
            <type>text/plain</type>
            <size>33711</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjZmNzNm
M2QxMTc0ODNmMzgwMTRlODNlZGM1MDg2MGYxNzdiNDYxNC4uMDBhMTJlMGE2NWQ5M2ZkMGYyZmY1
MzM2YjVjNDA0ZTIyYjRmOTE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTQsNiArMTk5
NCw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg1ZThkNzZhZWQ5Y2IyMTdiMTVi
ZTY4OGVlY2MyNTk2NjdmYjBhYi4uOWRkMzg0ZWQ0NzViOTc3MjkyYzMzYmJhZjQ0MjZkY2M3NWU0
ZmE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTA3LTA3ICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURF
T19UUkFDSyBmZWF0dXJlCisgICAgICAgIGRlZmluZSwgd2hpY2ggaXMgdHVybmVkIG9mZi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0xv
YWRhYmxlVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKiBodG1sL0xvYWRhYmxlVGV4dFRyYWNrLmg6
CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAgICAqIGh0bWwvVGV4dFRy
YWNrQ3VlLmg6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFj
ay9DdWVQYXJzZXJQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFy
c2VyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmg6
IEFkZGVkLgorCiAyMDExLTA3LTA3ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBTd2l0Y2ggcmVtYWluaW5nIHBhaW50IGZ1bmN0aW9ucyB0byBuZXcgbGF5
b3V0IHR5cGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAwYWM1YTVhN2MwYWYw
MDEwNjFkZjNhODZhYTFmNWVhZDU2ZjdiMjc0Li42YmJhY2Y4NTM3MzI0ZWQyOTE3MGIzODZjZjI2
YTViOGUyM2FmNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI4NDAsNiAr
Mjg0MCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBh
cnNlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZh
dGUuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RyZWVTaGFyZWQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVVJMU3RyaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VVSUQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA5ZGE4MTUxYTM0Nzk4NTRkOTE1NjE0YjExMmI4MGE4ZDM0ODBmNjQw
Li42NGQxNWE5OTllOGVlYjRiMzcyMzcwMGUxOTNjZTg3MmI0OTAxODhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC01MDY3LDYgKzUwNjcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4v
QlN0cmluZy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CU3RyaW5nLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4
IDQ1NTA0YjEzZDdjNzk0ZmY2MTEzZmI5ZDRkYTNiYzQ1MTlhYzA1Y2YuLjM0OWQyMjFlODEzZjE2
MmE3MDRmZTM5NDBlYTZiY2Q3MTEyYWJjODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yMTAxLDYgKzIx
MDEsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9UaW1lci5oIFwKICAgICBwbGF0Zm9y
bS90cmFjay9DdWVQYXJzZXIuaCBcCiAgICAgcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0
ZS5oIFwKKyAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCBcCiAgICAgcGxhdGZvcm0v
V2lkZ2V0LmggXAogICAgIHBsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oIFwKICAgICBwbGF0
Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZiYzVjMWM1ZTc5Zjk4MDhhNGU4NzY5N2Ex
NmFhNjRkNzIzMDllNjQuLmNmZjMyMDZhYzdjZTU5Y2M2YzU1ZTljZDgzYmNlNjIxNDRkY2VkMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTQwMTIsNiArNDAxMiw4IEBACiAJCUFCRERGRTc5MEE1QzZFNzAwMEEzRTExRCAvKiBS
ZW5kZXJNZW51TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBQkRERkU3MzBBNUM2RTZGMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuY3BwICov
OyB9OwogCQlBQkRERkU3QTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCRERGRTc0MEE1QzZF
NzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oICovOyB9OwogCQlBRERGMUFENzEyNTdDRDlB
MDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1Bh
dGguaCAqLzsgfTsKKwkJQjEwQjc0MEUxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEwQjc0MEMx
M0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5oICovOyB9OworCQlCMTBCNzQwRjEzQkU4
MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQ
YXJzZXIuY3BwICovOyB9OwogCQlCMTJEMjMzRTEzNTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZl
VHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIxMkQyMzM1MTM1NjAyODIwMDJBMjhENCAvKiBFeGNsdXNpdmVUcmFja0xpc3QuY3BwICov
OyB9OwogCQlCMTJEMjMzRjEzNTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTJEMjMzNjEz
NTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tMaXN0LmggKi87IH07CiAJCUIxMkQyMzQx
MTM1NjAyODIwMDJBMjhENCAvKiBNdWx0aXBsZVRyYWNrTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTJEMjMzODEzNTYwMjgyMDAyQTI4RDQg
LyogTXVsdGlwbGVUcmFja0xpc3QuY3BwICovOyB9OwpAQCAtMTA0NTEsNiArMTA0NTMsOCBAQAog
CQlBQkRERkU3NDBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lbnVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUFEREYxQUQ0MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1BhdGgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERGMUFENTEyNTdDRDlBMDAwM0E3
NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJTVkdQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEI3NDBDMTNC
RTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViVlRUUGFyc2VyLmg7IHBhdGggPSBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQjc0MEQxM0JFODBCRjAwQkMx
QzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBXZWJWVFRQYXJzZXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjEyRDIzMzUxMzU2MDI4MjAwMkEy
OEQ0IC8qIEV4Y2x1c2l2ZVRyYWNrTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFeGNsdXNpdmVUcmFja0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMTJEMjMzNjEzNTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2l2ZVRyYWNrTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMTJEMjMzNzEzNTYwMjgyMDAyQTI4RDQgLyog
RXhjbHVzaXZlVHJhY2tMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFeGNsdXNpdmVU
cmFja0xpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4NjIsNiArMTc4
NjYsOCBAQAogCQkJCUIyRTRFQzk1MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAq
LywKIAkJCQlCMkU0RUM5NjBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmlkbCAqLywK
IAkJCQlCMjhDNkEyNjBEMDBDNDQ4MDAzMzRBQTQgLyogeGxpbmthdHRycy5pbiAqLywKKwkJCQlC
MTBCNzQwQzEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmggKi8sCisJCQkJQjEwQjc0
MEQxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgKi8sCiAJCQkpOwogCQkJcGF0
aCA9IHN2ZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzA4OCw2ICsyMzA5NCw3
IEBACiAJCQkJMDg2Mzk1MTYxM0I1RkU1NzAwQkIzNDREIC8qIFNWR0FuaW1hdGVkUGF0aC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDMxQTJGOUMxM0I2RjJCMDAwNzc5MUU0IC8qIFNWR0FuaW1hdGVk
TnVtYmVyT3B0aW9uYWxOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QUJCNzg3MTNCOTA0
QkMwMEYxOTdFMyAvKiBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaCBpbiBIZWFkZXJzICovLAor
CQkJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMjU4NTUsNiArMjU4NjIsNyBAQAogCQkJCTQzMUEzMDIxMTNCODlEQ0MwMDc3OTFF
NCAvKiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDMxQTMwODgxM0I4Rjk3ODAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkQm9vbGVhbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0M0Y2RkQ5NjEzQkNEMEIxMDAyMjQwNTIgLyogU1ZHQW5pbWF0ZWRJ
bnRlZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxMEI3NDBGMTNCRTgwQkYwMEJDMUMyNiAv
KiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFj
a0N1ZS5jcHAKaW5kZXggM2I3YTg5M2MyY2YwMzllMmU5OTFlMDk2ZjVmNmY0NTQ5ZTdhMGUyNS4u
NTQ1MmI5MjFmYzkzNzNkOTBhN2E3MWJjYmMwNGI1MzNjMTY4NDk3OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dFRyYWNrQ3VlLmNwcApAQCAtNDEsNyArNDEsMTUgQEAgVGV4dFRyYWNrQ3VlOjpUZXh0
VHJhY2tDdWUoY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25z
dCBTdHIKICAgICAsIG1fY29udGVudChjb250ZW50KQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5n
cykKICAgICAsIG1fcGF1c2VPbkV4aXQocGF1c2VPbkV4aXQpCisgICAgLCBtX3dyaXRpbmdEaXJl
Y3Rpb24oSG9yaXpvbnRhbCkKKyAgICAsIG1fc25hcFRvTGluZXModHJ1ZSkKKyAgICAsIG1fbGlu
ZVBvc2l0aW9uKC0xKQorICAgICwgbV90ZXh0UG9zaXRpb24oNTApCisgICAgLCBtX2N1ZVNpemUo
MTAwKQorICAgICwgbV9jdWVBbGlnbm1lbnQoTWlkZGxlKQorICAgICwgbV9pc0FjdGl2ZShmYWxz
ZSkKIHsKKyAgICBwYXJzZVNldHRpbmdzKG1fc2V0dGluZ3MpOwogfQogCiBUZXh0VHJhY2tDdWU6
On5UZXh0VHJhY2tDdWUoKQpAQCAtNzgsMTAgKzg2LDM3IEBAIGJvb2wgVGV4dFRyYWNrQ3VlOjpw
YXVzZU9uRXhpdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGF1c2VPbkV4aXQ7CiB9CiAKK1N0cmlu
ZyBUZXh0VHJhY2tDdWU6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3dyaXRp
bmdEaXJlY3Rpb24pIHsKKyAgICBjYXNlIEhvcml6b250YWw6IAorICAgICAgICByZXR1cm4gImhv
cml6b250YWwiOworICAgIGNhc2UgVmVydGljYWxHcm93aW5nTGVmdDoKKyAgICAgICAgcmV0dXJu
ICJ2ZXJ0aWNhbCI7CisgICAgY2FzZSBWZXJ0aWNhbEdyb3dpbmdSaWdodDoKKyAgICAgICAgcmV0
dXJuICJ2ZXJ0aWNhbC1sciI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH0KK30KKworU3RyaW5nIFRleHRUcmFja0N1ZTo6YWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKG1fY3VlQWxpZ25tZW50KSB7CisgICAgY2FzZSBTdGFydDogCisgICAgICAgIHJldHVy
biAic3RhcnQiOworICAgIGNhc2UgTWlkZGxlOgorICAgICAgICByZXR1cm4gIm1pZGRsZSI7Cisg
ICAgY2FzZSBFbmQ6CisgICAgICAgIHJldHVybiAiZW5kIjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gIiI7CisgICAgfQorfQorCiBTdHJpbmcgVGV4dFRyYWNrQ3VlOjpnZXRDdWVBc1Nv
dXJjZSgpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fY29udGVudDsKIH0KIAogUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBUZXh0VHJhY2tDdWU6OmdldEN1ZUFzSFRNTCgpCkBAIC0xMDEsNiArMTM2
LDExNSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAg
bV9pc0FjdGl2ZSA9IGFjdGl2ZTsKIH0KIAordm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0dGlu
Z3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBQYXJzZSB0aGUg
V2ViVlRUIHNldHRpbmdzLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAo
cG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSkgeworICAgICAgICAvLyAxLTQgLSBJbml0aWFsIHNl
dHVwLgorICAgICAgICBjaGFyIHNldHRpbmcgPSBpbnB1dFtwb3NpdGlvbisrXTsKKyAgICAgICAg
aWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIC8vIDUtNyAtIElmIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gaXMgbm90ICc6Jywg
c2V0IHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nLgorICAgICAgICBpZiAoaW5wdXRbcG9zaXRpb24r
K10gIT0gJzonKQorICAgICAgICAgICAgc2V0dGluZyA9ICcgJzsKKyAgICAgICAgaWYgKHBvc2l0
aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8v
IDggLSBHYXRoZXIgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWUgb2Ygc2V0dGluZy4KKyAgICAgICAg
c3dpdGNoIChzZXR0aW5nKSB7CisgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgU3RyaW5nIHdyaXRpbmdEaXJlY3Rpb247CisgICAgICAgICAgICB3aGlsZSAocG9z
aXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJyAnICYmIGlucHV0
W3Bvc2l0aW9uXSAhPSAnXHQnKQorICAgICAgICAgICAgICAgIHdyaXRpbmdEaXJlY3Rpb24uYXBw
ZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZSh3cml0aW5nRGlyZWN0aW9uLCAidmVydGljYWwiKSkKKyAgICAgICAgICAgICAgICBtX3dyaXRp
bmdEaXJlY3Rpb24gPSBWZXJ0aWNhbEdyb3dpbmdMZWZ0OworICAgICAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHdyaXRpbmdEaXJlY3Rpb24sICJ2ZXJ0aWNhbC1sciIpKQorICAgICAgICAg
ICAgICAgIG1fd3JpdGluZ0RpcmVjdGlvbiA9IFZlcnRpY2FsR3Jvd2luZ1JpZ2h0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAg
ICAgeworICAgICAgICAgICAgU3RyaW5nIGxpbmVQb3NpdGlvbjsKKyAgICAgICAgICAgIHdoaWxl
IChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmIChpbnB1dFtwb3NpdGlvbl0gPT0gJy0nIHx8
IGlucHV0W3Bvc2l0aW9uXSA9PSAnJScgfHwgKCcwJyA8PSBpbnB1dFtwb3NpdGlvbl0gJiYgaW5w
dXRbcG9zaXRpb25dIDw9ICc5JykpKQorICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvbi5hcHBl
bmQoaW5wdXRbcG9zaXRpb24rK10pOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDw9IGlucHV0
Lmxlbmd0aCgpICYmIGlucHV0W3Bvc2l0aW9uXSAhPSAnICcgJiYgaW5wdXRbcG9zaXRpb25dICE9
ICdcdCcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobGluZVBvc2l0
aW9uLnN1YnN0cmluZygxLCBsaW5lUG9zaXRpb24ubGVuZ3RoKCktMSkuY29udGFpbnMoJy0nKSB8
fCBsaW5lUG9zaXRpb24uc3Vic3RyaW5nKDAsIGxpbmVQb3NpdGlvbi5sZW5ndGgoKS0xKS5jb250
YWlucygnJScpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGxpbmVQ
b3NpdGlvblswXSA9PSAnLScgJiYgbGluZVBvc2l0aW9uW2xpbmVQb3NpdGlvbi5sZW5ndGgoKS0x
XSA9PSAnJScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsb25nIG51bWJl
cjsKKyAgICAgICAgICAgIGlmIChsaW5lUG9zaXRpb25bbGluZVBvc2l0aW9uLmxlbmd0aCgpLTFd
ID09ICclJykgeworICAgICAgICAgICAgICAgIG51bWJlciA9IGxpbmVQb3NpdGlvbi5zdWJzdHJp
bmcoMCwgbGluZVBvc2l0aW9uLmxlbmd0aCgpLTEpLnRvSW50NjQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAobnVtYmVyIDwgMCB8fCBudW1iZXIgPiAxMDApCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIG1fc25hcFRvTGluZXMgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIG51bWJlciA9IGxpbmVQb3NpdGlvbi5zdWJzdHJpbmco
MCwgbGluZVBvc2l0aW9uLmxlbmd0aCgpKS50b0ludDY0KCk7CisgICAgICAgICAgICBtX2xpbmVQ
b3NpdGlvbiA9IG51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyB0ZXh0UG9z
aXRpb247CisgICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAn
MCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAg
ICAgICAgICAgdGV4dFBvc2l0aW9uLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgICAg
ICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBpZiAoaW5wdXRbcG9zaXRpb24rK10gIT0gJyUnKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3Ro
KCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICcgJyAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJ1x0JykK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICh0ZXh0UG9zaXRpb24uaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbG9uZyBudW1i
ZXIgPSB0ZXh0UG9zaXRpb24udG9JbnQ2NCgpOworICAgICAgICAgICAgaWYgKG51bWJlciA8IDAg
fHwgbnVtYmVyID4gMTAwKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1f
dGV4dFBvc2l0aW9uID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ1MnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGN1
ZVNpemU7CisgICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAn
MCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAg
ICAgICAgICAgY3VlU2l6ZS5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworICAgICAgICAgICAg
aWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uKytdICE9ICclJykKKyAgICAgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5w
dXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICcgJyAmJiBpbnB1dFtwb3NpdGlvbl0g
IT0gJ1x0JykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjdWVTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxvbmcg
bnVtYmVyID0gY3VlU2l6ZS50b0ludDY0KCk7CisgICAgICAgICAgICBpZiAobnVtYmVyIDwgMCB8
fCBudW1iZXIgPiAxMDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBt
X2N1ZVNpemUgPSBudW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnQSc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgY3VlQWxp
Z25tZW50OworICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYg
aW5wdXRbcG9zaXRpb25dICE9ICcgJyAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJ1x0JykKKyAgICAg
ICAgICAgICAgICBjdWVBbGlnbm1lbnQuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShjdWVBbGlnbm1lbnQsICJzdGFydCIpKQorICAg
ICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gU3RhcnQ7CisgICAgICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoY3VlQWxpZ25tZW50LCAibWlkZGxlIikpCisgICAgICAgICAgICAgICAg
bV9jdWVBbGlnbm1lbnQgPSBNaWRkbGU7CisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoY3VlQWxpZ25tZW50LCAiZW5kIikpCisgICAgICAgICAgICAgICAgbV9jdWVBbGlnbm1lbnQg
PSBFbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAvLyBEaXNjYXJkIHJlbWFpbmluZyBzcGFjZSBjaGFyYWN0ZXJzLgorICAgICAgICB3aGls
ZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAoaW5wdXRbcG9zaXRpb25dID09ICcgJyB8
fCBpbnB1dFtwb3NpdGlvbl0gPT0gJ1x0JykpCisgICAgICAgICAgICBwb3NpdGlvbisrOworICAg
IH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1Rl
eHRUcmFja0N1ZS5oCmluZGV4IGM5YzE1MzM1OTliZTRmMTFkN2M5YWIzMzU3ZTc1NWFlMTViMjZk
YjguLjQwZjQ5ODFjNmQ3MWRiMTY1ZGJlMGU5OWRiNmI4Yzk3Nzg0M2ExMGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0VHJhY2tDdWUuaApAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1ZShpZCwgc3RhcnQsIGVuZCwgY29u
dGVudCwgc2V0dGluZ3MsIHBhdXNlT25FeGl0KSk7CiAgICAgfQorICAgIAorICAgIGVudW0gRGly
ZWN0aW9uIHsgSG9yaXpvbnRhbCwgVmVydGljYWxHcm93aW5nTGVmdCwgVmVydGljYWxHcm93aW5n
UmlnaHQgfTsKKyAgICBlbnVtIEFsaWdubWVudCB7IFN0YXJ0LCBNaWRkbGUsIEVuZCB9OwogCiAg
ICAgdmlydHVhbCB+VGV4dFRyYWNrQ3VlKCk7CiAKQEAgLTUzLDYgKzU2LDEzIEBAIHB1YmxpYzoK
ICAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3Q7CiAgICAgZG91YmxlIGVuZFRpbWUoKSBjb25z
dDsKICAgICBib29sIHBhdXNlT25FeGl0KCkgY29uc3Q7CisgICAgCisgICAgU3RyaW5nIGRpcmVj
dGlvbigpIGNvbnN0OworICAgIGJvb2wgc25hcFRvTGluZXMoKSBjb25zdCB7IHJldHVybiBtX3Nu
YXBUb0xpbmVzOyB9CisgICAgbG9uZyBsaW5lUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xp
bmVQb3NpdGlvbjsgfQorICAgIGxvbmcgdGV4dFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0UG9zaXRpb247IH0KKyAgICBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2N1ZVNpemU7
IH0KKyAgICBTdHJpbmcgYWxpZ25tZW50KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgZ2V0Q3VlQXNT
b3VyY2UoKTsKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGdldEN1ZUFzSFRNTCgp
OwpAQCAtNjMsNiArNzMsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRleHRUcmFja0N1ZShj
b25zdCBTdHJpbmcmIGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYg
Y29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhpdCk7CiAKKyAg
ICB2b2lkIHBhcnNlU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CisgICAgCiAgICAgVGV4dFRyYWNr
KiBtX3RyYWNrOwogICAgIAogICAgIFN0cmluZyBtX2lkOwpAQCAtNzEsNiArODMsMTMgQEAgcHJp
dmF0ZToKICAgICBTdHJpbmcgbV9jb250ZW50OwogICAgIFN0cmluZyBtX3NldHRpbmdzOwogICAg
IGJvb2wgbV9wYXVzZU9uRXhpdDsKKyAgICBEaXJlY3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOwor
ICAgIGJvb2wgbV9zbmFwVG9MaW5lczsKKyAgICBsb25nIG1fbGluZVBvc2l0aW9uOworICAgIGxv
bmcgbV90ZXh0UG9zaXRpb247CisgICAgbG9uZyBtX2N1ZVNpemU7CisgICAgQWxpZ25tZW50IG1f
Y3VlQWxpZ25tZW50OworCiAgICAgYm9vbCBtX2lzQWN0aXZlOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKaW5kZXggM2IzNTNlN2M4YzM1ZGVmMjM1
NDg3ZmI5Yjc2MmEyOWFkNDA3NWExNi4uZThlYzFlM2M0ZDJkYzdjNzcxYzRjMTAyZTNlMzI3Yjg0
ZjA5MTM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFy
c2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3Bw
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ3VlUGFyc2VyLmgiCiAKICNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVk
ZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCwxNSAr
NzEsMzMgQEAgYm9vbCBDdWVQYXJzZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9u
c2UodW5zaWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
Cit2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVu
dGlmaWVyKi8sIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIC8vIEZJ
WE1FKDYyODkzKTogQ3JlYXRlIG1fcHJpdmF0ZSBiYXNlZCBvbiBNSU1FIHR5cGUuCisgICAgaWYg
KCFtX3ByaXZhdGUpCisgICAgICAgIGlmIChyZXNwb25zZS5taW1lVHlwZSgpID09ICJ0ZXh0L3Z0
dCIpCisgICAgICAgICAgICBtX3ByaXZhdGUgPSBXZWJWVFRQYXJzZXI6OmNyZWF0ZSh0aGlzKTsK
ICAgICBtX2NsaWVudC0+dHJhY2tMb2FkU3RhcnRlZCgpOwogfQogCiB2b2lkIEN1ZVBhcnNlcjo6
ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIHsKLSAgICAvLyBGSVhN
RSg2Mjg5Myk6IFNlbmQgZGF0YSBhbG9uZyB0byBtX3ByaXZhdGUgcGFyc2VyIHRvIGJlIHBhcnNl
ZC4KKyAgICAvLyBJZiBtaW1lIHR5cGUgZnJvbSByZXNwb25zZSB3YXMgbm90IGluZm9ybWF0aXZl
LCBzbmlmZiBmb3IgdHlwZSBvZiBmaWxlLgorICAgIGlmICghbV9wcml2YXRlKSB7CisgICAgICAg
IC8vIFdlYlZUVCBmaWxlcyBtdXN0IGJlZ2luIHdpdGggLi4uCisgICAgICAgIHVuc2lnbmVkIHN0
YXJ0ID0gMDsKKyAgICAgICAgLy8gYW4gb3B0aW9uYWwgVVRGLTggQk9NLAorICAgICAgICBpZiAo
bGVuID49IDMgJiYgZGF0YVswXSA9PSAnXHhFRicgJiYgZGF0YVsxXSA9PSAnXHhCQicgJiYgZGF0
YVsyXSA9PSAnXHhCRicpCisgICAgICAgICAgICBzdGFydCArPSAzOworICAgICAgICBzdGQ6OnN0
cmluZyBzdHIoZGF0YSArIHN0YXJ0LCA2KTsKKyAgICAgICAgLy8gdGhlIEFTQ0lJIHN0cmluZyAi
V0VCVlRUIgorICAgICAgICBpZiAoc3RyID09ICJXRUJWVFQiKSB7CisgICAgICAgICAgICBtX3By
aXZhdGUgPSBXZWJWVFRQYXJzZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIG1fY2xpZW50
LT50cmFja0xvYWRTdGFydGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9wcml2
YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnBhcnNlQnl0ZXMoZGF0YSwgbGVuKTsKIH0KIAogdm9p
ZCBDdWVQYXJzZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZykKQEAgLTk2LDYgKzEx
NSwxMSBAQCB2b2lkIEN1ZVBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrQ3VlPiA+JikKICAgICAvLyBGSVhNRSg2Mjg5Myk6IEltcGxlbWVudC4KIH0KIAordm9p
ZCBDdWVQYXJzZXI6Om5ld0N1ZXNQYXJzZWQoKQoreworICAgIG1fY2xpZW50LT5uZXdDdWVzUGFy
c2VkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCmluZGV4IDc0NGNjMzIyNzhjNWY0Y2Y5ZTRm
ODJjYTdjNTNhYjE3YmQ4OWQ4Y2YuLjczNjExM2E0Mjk2NzExYzhlMmFhZGE2YTRhY2I1NzU2MjQx
YjNiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCkBAIC0z
Myw5ICszMyw5IEBACiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLSNpbmNsdWRlICJDdWVQ
YXJzZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUg
IlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCB0cmFja0xvYWRDb21wbGV0ZWQoKSA9IDA7CiB9OwogCi1jbGFzcyBDdWVQ
YXJzZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitjbGFzcyBDdWVQYXJzZXIg
OiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCB7
CiBwdWJsaWM6CiAgICAgQ3VlUGFyc2VyKCk7CiAgICAgdmlydHVhbCB+Q3VlUGFyc2VyKCk7CkBA
IC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJp
bmcmKTsKIAogICAgIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNr
Q3VlPiA+Jik7CisgICAgdm9pZCBuZXdDdWVzUGFyc2VkKCk7CiAKIHByaXZhdGU6CiAgICAgUmVm
UHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oCmluZGV4IGJjM2U0ZmJjMDk1MWJlMzRjYmYw
MTA3MWVkMjg2OWE5OWEyZjgzMGUuLmNlNjMzN2Q5MWU1MGUzYmIxZWQyZmI4YWIyZTQyYmNmZWUx
NzEzZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNl
clByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQ
cml2YXRlLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZUJ5dGVzKGNvbnN0IGNoYXIqLCBpbnQpID0gMDsKIAogICAgIC8vIFRyYW5zZmVycyBvd25lcnNo
aXAgb2YgbGFzdCBwYXJzZWQgY3VlcyB0byBjYWxsZXIuCi0gICAgdmlydHVhbCB2b2lkIGZldGNo
UGFyc2VkQ3VlcyhWZWN0b3I8UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4g
PiYpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIEN1ZVBhcnNlclByaXZhdGVJbnRlcmZhY2UoKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBhMDkyNjkyZTA4MDFhMDY1MTE5ODhiOWU1ODY4ZjlhZmY2MDA3ZDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKworI2luY2x1ZGUgIldlYlZUVFBhcnNlci5oIgorCisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViVlRUUGFyc2Vy
OjpXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQoreworICAgIG1f
Y2xpZW50ID0gY2xpZW50OworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVz
KFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRwdXRDdWVzKQoreworICAgIG91dHB1
dEN1ZXMgPSBtX2N1ZWxpc3Q7CisgICAgbV9jdWVsaXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgV2Vi
VlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7Cisg
ICAgLy8gNC44LjEwLjEzLjMgV0hBVFdHIFdlYlZUVCBQYXJzZXIgYWxnb3JpdGhtLgorICAgIC8v
IDEtNCAtIEluaXRpYWwgc2V0dXAgYW5kIGlnbm9yZSBCT00gY2hhcmFjdGVyLgorICAgIFN0cmlu
ZyBpbnB1dCA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBw
b3NpdGlvbiA9IDA7CisgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlOworICAgIGlmIChsZW5n
dGggPj0gMyAmJiBkYXRhWzBdID09ICdceEVGJyAmJiBkYXRhWzFdID09ICdceEJCJyAmJiBkYXRh
WzJdID09ICdceEJGJykKKyAgICAgICAgcG9zaXRpb24rKzsgCisKKyAgICAvLyA1LTggLSBDb2xs
ZWN0IHRoZSBmaXJzdCBsaW5lIGFuZCBjaGVjayB0aGF0IGl0IGlzICJXRUJWVFQiICh3ZSBhbHNv
IGNoZWNrIGZvciAiV0VCVlRUIEZJTEUiIGZvciBsZWdhY3kgcmVhc29ucykuCisgICAgU3RyaW5n
IGxpbmU7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9z
aXRpb25dICE9ICdccicgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdcbicpCisgICAgICAgIGxpbmUu
YXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKworICAgIGlmIChsaW5lLnN1YnN0cmluZygwLCA2
KSAhPSAiV0VCVlRUIikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChsaW5lLmxlbmd0aCgpID4g
NiAmJiBsaW5lWzZdICE9ICcgJyAmJiBsaW5lWzZdICE9ICdcdCcpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAobGluZS5sZW5ndGgoKSA+IDcgJiYgbGluZS5zdWJzdHJpbmcoNiwgNSkgIT0gIiBG
SUxFIikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChsaW5lLmxlbmd0aCgpID4gMTEgJiYgbGlu
ZVsxMV0gIT0gJyAnICYmIGxpbmVbMTFdICE9ICdcdCcpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIDktMTIgLSBFbnN1cmUgb25lIGxpbmUgdGVybWluYXRvciBhZnRlciB0aGUgV0VCVlRUIGxp
bmUuCisgICAgcG9zaXRpb24gPSBza2lwTGluZVRlcm1pbmF0b3IoaW5wdXQsIHBvc2l0aW9uKTsK
KworSGVhZGVyOgorICAgIC8vIDEzLTE4IC0gQWxsb3cgYSBoZWFkZXIgKGNvbW1lbnQgYXJlYSkg
dW5kZXIgdGhlIFdFQlZUVCBsaW5lLgorICAgIGxpbmUgPSAiIjsKKyAgICB3aGlsZSAocG9zaXRp
b24gPCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJ1xyJyAmJiBpbnB1dFtw
b3NpdGlvbl0gIT0gJ1xuJykKKyAgICAgICAgbGluZS5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10p
OworICAgIHBvc2l0aW9uID0gc2tpcExpbmVUZXJtaW5hdG9yKGlucHV0LCBwb3NpdGlvbik7Cisg
ICAgaWYgKCFsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAgZ290byBIZWFkZXI7CisKK0N1ZUxvb3A6
CisgICAgLy8gMTktMjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMsIHRo
ZW4gaW5pdGlhbGl6ZSBuZXcgY3VlIHZhbHVlcy4KKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1
dC5sZW5ndGgoKSAmJiAoaW5wdXRbcG9zaXRpb25dID09ICdccicgfHwgaW5wdXRbcG9zaXRpb25d
ID09ICdcbicpKQorICAgICAgICBwb3NpdGlvbisrOworICAgIHJlc2V0Q3VlVmFsdWVzKCk7CisK
KyAgICAvLyAzMC0zOSAtIENvbGxlY3QgdGhlIG5leHQgbGluZSBhbmQgY2hlY2sgaWYgaXQgY29u
dGFpbnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KKyAgICBsaW5lID0g
IiI7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRp
b25dICE9ICdccicgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdcbicpCisgICAgICAgIGxpbmUuYXBw
ZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAobGluZS5jb250YWlucygiLS0+IikpCisgICAgICAgIGdvdG8gVGlt
aW5nczsKKyAgICBtX2N1cnJlbnRJZCA9IGxpbmU7CisgICAgcG9zaXRpb24gPSBza2lwTGluZVRl
cm1pbmF0b3IoaW5wdXQsIHBvc2l0aW9uKTsKKyAgICBsaW5lID0gIiI7CisgICAgd2hpbGUgKHBv
c2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdccicgJiYgaW5w
dXRbcG9zaXRpb25dICE9ICdcbicpCisgICAgICAgIGxpbmUuYXBwZW5kKGlucHV0W3Bvc2l0aW9u
KytdKTsKKyAgICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAgIGdvdG8gQ3VlTG9vcDsKKwor
VGltaW5nczoKKyAgICAvLyA0MCAtIENvbGxlY3QgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzLgor
ICAgIGlmICghY29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhsaW5lKSkKKyAgICAgICAgZ290byBC
YWRDdWU7CisKK0N1ZVRleHQ6CisgICAgLy8gNDEtNTAgLSBDb2xsZWN0IHRoZSBjdWUgdGV4dCBj
b250ZW50LgorICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgoKSkKKyAgICAgICAgZ290
byBDdWVUZXh0UHJvY2Vzc2luZzsKKyAgICBpZiAoaW5wdXRbcG9zaXRpb25dID09ICdccicpCisg
ICAgICAgIHBvc2l0aW9uKys7CisgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQor
ICAgICAgICBnb3RvIEN1ZVRleHRQcm9jZXNzaW5nOworICAgIGlmIChpbnB1dFtwb3NpdGlvbl0g
PT0gJ1xuJykKKyAgICAgICAgcG9zaXRpb24rKzsKKyAgICBsaW5lID0gIiI7CisgICAgd2hpbGUg
KHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdccicgJiYg
aW5wdXRbcG9zaXRpb25dICE9ICdcbicpCisgICAgICAgIGxpbmUuYXBwZW5kKGlucHV0W3Bvc2l0
aW9uKytdKTsKKyAgICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAgIGdvdG8gQ3VlVGV4dFBy
b2Nlc3Npbmc7CisgICAgaWYgKCFtX2N1cnJlbnRDb250ZW50LmlzRW1wdHkoKSkKKyAgICAgICAg
bV9jdXJyZW50Q29udGVudCArPSAiXG4iOworICAgIG1fY3VycmVudENvbnRlbnQgKz0gbGluZTsK
KyAgICBnb3RvIEN1ZVRleHQ7CisKK0N1ZVRleHRQcm9jZXNzaW5nOgorICAgIC8vIDUxIC0gRklY
TUUoNjQxMzIpOiBpbXBsZW1lbnQgcnVsZXMgZm9yIFdlYlZUVC1zcGVjaWZpYyBjdWUgdGV4dCBw
YXJzaW5nIGFuZCBET00gY29uc3RydWN0aW9uLgorICAgIC8vIDUyLTUzIC0gQ3JlYXRlIGEgY3Vl
LCBhZGQgaXQgdG8gdGhlIG91dHB1dCwgYW5kIGNvbnRpbnVlIHBhcnNpbmcgbW9yZSBjdWVzLgor
ICAgIGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKG1fY3VycmVudElkLCBtX2N1cnJlbnRTdGFy
dFRpbWUsIG1fY3VycmVudEVuZFRpbWUsIG1fY3VycmVudENvbnRlbnQsIG1fY3VycmVudFNldHRp
bmdzLCBmYWxzZSk7CisgICAgbV9jdWVsaXN0LmFwcGVuZChjdWUpOworICAgIG1fY2xpZW50LT5u
ZXdDdWVzUGFyc2VkKCk7CisgICAgZ290byBDdWVMb29wOworCitCYWRDdWU6CisgICAgLy8gNTQt
NjIgLSBEaXNjYXJkIGN1ZSBhbmQgY29udGludWUgcGFyc2luZyBjdWVzIHVudGlsIGVuZCBvZiBm
aWxlIGlzIHJlYWNoZWQuCisgICAgcG9zaXRpb24gPSBza2lwTGluZVRlcm1pbmF0b3IoaW5wdXQs
IHBvc2l0aW9uKTsKKyAgICBsaW5lID0gIiI7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQu
bGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICdccicgJiYgaW5wdXRbcG9zaXRpb25dICE9
ICdcbicpCisgICAgICAgIGxpbmUuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICBpZiAo
bGluZS5pc0VtcHR5KCkpCisgICAgICAgIGdvdG8gQ3VlTG9vcDsKKyAgICBnb3RvIEJhZEN1ZTsK
K30KKworYm9vbCBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MoY29uc3Qg
U3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IFdlYlZUVCBjdWUg
dGltaW5ncyBhbmQgc2V0dGluZ3MuCisgICAgLy8gMS0zIC0gTGV0IGlucHV0IGJlIHRoZSBzdHJp
bmcgYmVpbmcgcGFyc2VkIGFuZCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgaW50byBpbnB1dAorICAg
IHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBwb3NpdGlvbiA9IHNraXBXaGl0ZVNwYWNlKGlu
cHV0LCBwb3NpdGlvbik7CisKKyAgICAvLyA0LTUgLSBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFt
cC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lz
ZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIHN0YXJ0IHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0
aW1lLgorICAgIFN0cmluZyBzdGFydDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5n
dGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJyAnICYmIGlucHV0W3Bvc2l0aW9uXSAhPSAnXHQn
KQorICAgICAgICBzdGFydC5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworCisgICAgbV9jdXJy
ZW50U3RhcnRUaW1lID0gY29sbGVjdFRpbWVTdGFtcChzdGFydCk7CisgICAgaWYgKG1fY3VycmVu
dFN0YXJ0VGltZSA9PSBtYWxmb3JtZWRUaW1lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHBvc2l0aW9uID0gc2tpcFdoaXRlU3BhY2UoaW5wdXQsIHBvc2l0aW9uKTsKKworICAgIC8v
IDYtOSAtIElmIHRoZSBuZXh0IHRocmVlIGNoYXJhY3RlcnMgYXJlIG5vdCAiLS0+IiwgYWJvcnQg
YW5kIHJldHVybiBmYWlsdXJlLgorICAgIGlmIChpbnB1dC5zdWJzdHJpbmcocG9zaXRpb24sIDMp
ICE9ICItLT4iKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9zaXRpb24gKz0gMzsKKyAg
ICBwb3NpdGlvbiA9IHNraXBXaGl0ZVNwYWNlKGlucHV0LCBwb3NpdGlvbik7CisKKyAgICAvLyAx
MC0xMSAtIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGFi
b3J0IGFuZCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBsZXQgY3VlJ3MgdGV4dCB0cmFjayBj
dWUgZW5kIHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIFN0cmluZyBlbmQ7CisgICAg
d2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRpb25dICE9ICcg
JyAmJiBpbnB1dFtwb3NpdGlvbl0gIT0gJ1x0JykKKyAgICAgIGVuZC5hcHBlbmQoaW5wdXRbcG9z
aXRpb24rK10pOworCisgICAgbV9jdXJyZW50RW5kVGltZSA9IGNvbGxlY3RUaW1lU3RhbXAoZW5k
KTsKKyAgICBpZiAobV9jdXJyZW50RW5kVGltZSA9PSBtYWxmb3JtZWRUaW1lKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcG9zaXRpb24gPSBza2lwV2hpdGVTcGFjZShpbnB1dCwgcG9zaXRp
b24pOworCisgICAgLy8gMTIgLSBQYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzIGZvciB0aGUgY3Vl
IChjb25kdWN0ZWQgaW4gVGV4dFRyYWNrQ3VlKS4KKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGlu
cHV0LnN1YnN0cmluZyhwb3NpdGlvbiwgaW5wdXQubGVuZ3RoKCktMSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2RvdWJsZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3Ry
aW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IGEgV2ViVlRUIHRpbXN0
YW1wLgorICAgIC8vIDEtNCAtIEluaXRpYWwgY2hlY2tzLgorICAgIHVuc2lnbmVkIHBvc2l0aW9u
ID0gMDsKKyAgICBlbnVtIE1vZGUgeyBtaW51dGVzLCBob3VycyB9OworICAgIE1vZGUgbW9kZSA9
IG1pbnV0ZXM7CisgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpIHx8ICEoJzAnIDw9
IGlucHV0W3Bvc2l0aW9uXSAmJiBpbnB1dFtwb3NpdGlvbl0gPD0gJzknKSkKKyAgICAgICAgcmV0
dXJuIG1hbGZvcm1lZFRpbWU7CisKKyAgICAvLyA1LTYgLSBDb2xsZWN0IGEgc2VxdWVuY2Ugb2Yg
Y2hhcmFjdGVycyB0aGF0IGFyZSAwLTkuCisgICAgU3RyaW5nIGRpZ2l0czE7CisgICAgd2hpbGUg
KHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgJzAnIDw9IGlucHV0W3Bvc2l0aW9uXSAmJiBp
bnB1dFtwb3NpdGlvbl0gPD0gJzknKQorICAgICAgICBkaWdpdHMxLmFwcGVuZChpbnB1dFtwb3Np
dGlvbisrXSk7CisgICAgaW50IHZhbHVlMSA9IGRpZ2l0czEudG9JbnQoKTsKKworICAgIC8vIDcg
LSBJZiBub3QgMiBjaGFyYWN0ZXJzIG9yIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiA1OSwgaW50ZXJw
cmV0ZXIgYXMgaG91cnMuCisgICAgaWYgKGRpZ2l0czEubGVuZ3RoKCkgIT0gMiB8fCB2YWx1ZTEg
PiA1OSkKKyAgICAgICAgbW9kZSA9IGhvdXJzOworCisgICAgLy8gOC0xMiAtIENvbGxlY3QgdGhl
IG5leHQgc2VxdWVuY2Ugb2YgMC05IGFmdGVyICc6JyAobXVzdCBiZSAyIGNoYXJzKS4KKyAgICBp
ZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgaW5wdXRbcG9zaXRpb24rK10gIT0gJzon
KQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAocG9zaXRpb24gPj0gaW5w
dXQubGVuZ3RoKCkgfHwgISgnMCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9u
XSA8PSAnOScpKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBTdHJpbmcgZGln
aXRzMjsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAnMCcgPD0gaW5w
dXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAgIGRpZ2l0czIu
YXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKKyAgICBpbnQgdmFsdWUyID0gZGlnaXRzMi50b0lu
dCgpOworICAgIGlmIChkaWdpdHMyLmxlbmd0aCgpICE9IDIpIAorICAgICAgICByZXR1cm4gbWFs
Zm9ybWVkVGltZTsKKworICAgIC8vIDEzIC0gRGV0ZWN0IHdoZXRoZXIgdGhpcyB0aW1lc3RhbXAg
aW5jbHVkZXMgaG91cnMuCisgICAgaW50IHZhbHVlMzsKKyAgICBpZiAobW9kZSA9PSBob3VycyB8
fCAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtwb3NpdGlvbl0gPT0gJzonKSkg
eworICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgaW5wdXRbcG9zaXRp
b25dICE9ICc6JykKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICBw
b3NpdGlvbisrOworICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgISgn
MCcgPD0gaW5wdXRbcG9zaXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpKQorICAgICAg
ICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgICAgIFN0cmluZyBkaWdpdHMzOworICAg
ICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAnMCcgPD0gaW5wdXRbcG9z
aXRpb25dICYmIGlucHV0W3Bvc2l0aW9uXSA8PSAnOScpCisgICAgICAgICAgICBkaWdpdHMzLmFw
cGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgICAgIGlmIChkaWdpdHMzLmxlbmd0aCgpICE9
IDIpCisgICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICAgICAgdmFsdWUzID0g
ZGlnaXRzMy50b0ludCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlMyA9IHZhbHVlMjsK
KyAgICAgICAgdmFsdWUyID0gdmFsdWUxOworICAgICAgICB2YWx1ZTEgPSAwOworICAgIH0KKwor
ICAgIC8vIDE0LTE5IC0gQ29sbGVjdCBuZXh0IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAnLicgKG11
c3QgYmUgMyBjaGFycykuCisgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpIHx8IGlu
cHV0W3Bvc2l0aW9uKytdICE9ICcuJykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Cisg
ICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpIHx8ICEoJzAnIDw9IGlucHV0W3Bvc2l0
aW9uXSAmJiBpbnB1dFtwb3NpdGlvbl0gPD0gJzknKSkKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1l
ZFRpbWU7CisgICAgU3RyaW5nIGRpZ2l0czQ7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQu
bGVuZ3RoKCkgJiYgJzAnIDw9IGlucHV0W3Bvc2l0aW9uXSAmJiBpbnB1dFtwb3NpdGlvbl0gPD0g
JzknKQorICAgICAgICBkaWdpdHM0LmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgaWYg
KGRpZ2l0czQubGVuZ3RoKCkgIT0gMykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Cisg
ICAgaW50IHZhbHVlNCA9IGRpZ2l0czQudG9JbnQoKTsKKyAgICBpZiAodmFsdWUyID4gNTkgfHwg
dmFsdWUzID4gNTkpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworCisgICAgLy8gMjAt
MjEgLSBDYWxjdWxhdGUgcmVzdWx0LgorICAgIHJldHVybiB2YWx1ZTEgKiBzZWNvbmRzSW5Ib3Vy
ICsgdmFsdWUyICogc2Vjb25kc0luTWludXRlICsgdmFsdWUzICsgKGRvdWJsZSl2YWx1ZTQgLyAx
MDAwOworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6cmVzZXRDdWVWYWx1ZXMoKQoreworICAgIG1f
Y3VycmVudElkID0gZW1wdHlTdHJpbmcoKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGVtcHR5
U3RyaW5nKCk7CisgICAgbV9jdXJyZW50U3RhcnRUaW1lID0gMDsKKyAgICBtX2N1cnJlbnRFbmRU
aW1lID0gMDsKKyAgICBtX2N1cnJlbnRDb250ZW50ID0gZW1wdHlTdHJpbmcoKTsKK30KKwordW5z
aWduZWQgV2ViVlRUUGFyc2VyOjpza2lwV2hpdGVTcGFjZShjb25zdCBTdHJpbmcmIGlucHV0LCB1
bnNpZ25lZCBwb3NpdGlvbikKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgo
KSAmJiAoaW5wdXRbcG9zaXRpb25dID09ICcgJyB8fCBpbnB1dFtwb3NpdGlvbl0gPT0gJ1x0Jykp
CisgICAgICAgIHBvc2l0aW9uKys7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCit1bnNpZ25l
ZCBXZWJWVFRQYXJzZXI6OnNraXBMaW5lVGVybWluYXRvcihjb25zdCBTdHJpbmcmIGlucHV0LCB1
bnNpZ25lZCBwb3NpdGlvbikKK3sKKyAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICBpZiAoaW5wdXRbcG9zaXRpb25dID09ICdc
cicpCisgICAgICAgIHBvc2l0aW9uKys7CisgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gcG9zaXRpb247CisgICAgaWYgKGlucHV0W3Bvc2l0aW9uXSA9
PSAnXG4nKQorICAgICAgICBwb3NpdGlvbisrOworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dl
YlZUVFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGFkYjc3OTI3NThmNzc5MTNjYmQ1ZTgxNzIzNzgyYWFjYTljYTBkZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBh
cnNlci5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWVFRQYXJzZXJfaAorI2RlZmluZSBX
ZWJWVFRQYXJzZXJfaAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiQ3Vl
UGFyc2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGludCBzZWNvbmRzSW5Ib3VyID0gMzYwMDsKK3N0
YXRpYyBjb25zdCBpbnQgc2Vjb25kc0luTWludXRlID0gNjA7CitzdGF0aWMgY29uc3QgZG91Ymxl
IG1hbGZvcm1lZFRpbWUgPSAtMTsKKworY2xhc3MgV2ViVlRUUGFyc2VyIDogcHVibGljIEN1ZVBh
cnNlclByaXZhdGVJbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlZUVFBhcnNl
cigpIHsgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVlRUUGFyc2VyPiBjcmVhdGUoQ3Vl
UGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBXZWJWVFRQYXJzZXIoY2xpZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHBhcnNlQnl0ZXMoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CisK
K3Byb3RlY3RlZDoKKyAgICBXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCopOwor
Citwcml2YXRlOgorICAgIGJvb2wgY29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25zdCBTdHJp
bmcmKTsKKyAgICBkb3VibGUgY29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIHJlc2V0Q3VlVmFsdWVzKCk7CisgICAgdW5zaWduZWQgc2tpcFdoaXRlU3BhY2UoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQpOworICAgIHVuc2lnbmVkIHNraXBMaW5lVGVybWluYXRvcihjb25z
dCBTdHJpbmcmLCB1bnNpZ25lZCk7CisKKyAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CisgICAgZG91
YmxlIG1fY3VycmVudFN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsKKyAg
ICBTdHJpbmcgbV9jdXJyZW50Q29udGVudDsKKyAgICBTdHJpbmcgbV9jdXJyZW50U2V0dGluZ3M7
CisKKyAgICBDdWVQYXJzZXJQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKworICAgIFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrQ3VlPiA+IG1fY3VlbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100833</attachid>
            <date>2011-07-14 11:21:49 -0700</date>
            <delta_ts>2011-07-28 17:24:46 -0700</delta_ts>
            <desc>addressing comments, tests coming soon</desc>
            <filename>bug-62882-20110714112148.patch</filename>
            <type>text/plain</type>
            <size>41046</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA5NjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYmIzOGJl
MmQwZmM2NzI2MjA5ZWM2ZGUyMGQ4ZDkxNzA5NDY4MWU2NS4uYzlhMTE5ZjViMDkwYTJmY2Q3NjMw
N2E0OTI1MTQ4MmNjZmU5MDlmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTcsNiArMTk5
Nyw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNiYmExYmZmMTZmYzNlYWY1N2Qy
ZTI2NDQ1YWZiMDcyNGJlNTYyNS4uYTljYmEzODA3OWFkNzZjZWVkZmJjMzQ2ODIyMDU1NzQ4N2Nl
Y2VjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA3LTEzICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURF
T19UUkFDSyBmZWF0dXJlCisgICAgICAgIGRlZmluZSwgd2hpY2ggaXMgdHVybmVkIG9mZi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL1Rl
eHRUcmFja0N1ZS5jcHA6CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNr
L0N1ZVBhcnNlci5oOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaDogQWRkZWQuCisgCiAyMDExLTA3
LTEzICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1NS
ZWdpb25zXSBQYXJzZSAtd2Via2l0LWNvbnRlbnQtb3JkZXIgcHJvcGVydHkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCmluZGV4IDVkMWYwMGNjY2M4MDM5NmI0YzRiZjJiZDY5ZGIyZmU1NGFj
MDE0OWMuLjBjMGQ3MGUxNzEzZjYxNjk1ZGQyZDZiZTlhNTNmY2RiMzhkN2EzZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjg0Nyw2ICsyODQ3LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVHJl
ZVNoYXJlZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxTdHJpbmcuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVVJRC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU2NDA3
MjMxZWE3OWYzZGNhMjQwOTdiOGNhYjY1ZGJlNTUxMmZiZWQuLjg0YTdlNGVkOTFhYjdkZjRmMjJk
OTQwOWFiYzFmZmU2MmE0NTM4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUwNDYsNiArNTA0Niw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2sv
V2ViVlRUUGFyc2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUUGFy
c2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vd2luL0JTdHJpbmcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2lu
L0JpdG1hcEluZm8uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggOGE5OGEyZjViZTlkNmJiZTI3ZGM2
MjhmNTA0NDBlOTZkZTkzNjdmYi4uYTJhZWQwZjYxOGVkZmJlYWFhZGU2ZGUyYzJmMzE3YTI2ZTM1
ZmQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIxMDUsNiArMjEwNSw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL1RpbWVyLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oIFwK
ICAgICBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggXAorICAgIHBsYXRmb3JtL3Ry
YWNrL1dlYlZUVFBhcnNlci5oIFwKICAgICBwbGF0Zm9ybS9XaWRnZXQuaCBcCiAgICAgcGxhdGZv
cm0vUGxhdGZvcm1TdHJhdGVnaWVzLmggXAogICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3Mu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNTE3Yjg5MTgwY2Q3YWJlM2M0M2E4ZWU1NWM0MDRlMDRhMTlkYWM3My4uMzZiODc4
YzEyODlmZmVmYWM3ZDAyNmU2NjZjMWJiNzNkOGE1MDAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAwOSw2ICs0MDA5LDgg
QEAKIAkJQUJEREZFNzkwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCRERGRTczMEE1QzZF
NkYwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5jcHAgKi87IH07CiAJCUFCRERGRTdBMEE1QzZF
NzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUJEREZFNzQwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1l
bnVMaXN0LmggKi87IH07CiAJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQ
YXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRERG
MUFENTEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovOyB9OworCQlCMTBCNzQw
RTEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNzQwQzEzQkU4MEJGMDBCQzFDMjYgLyogV2Vi
VlRUUGFyc2VyLmggKi87IH07CisJCUIxMEI3NDBGMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjEwQjc0MEQxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgKi87IH07CiAJCUIx
MkQyMzNFMTM1NjAyODIwMDJBMjhENCAvKiBFeGNsdXNpdmVUcmFja0xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEyRDIzMzUxMzU2MDI4MjAw
MkEyOEQ0IC8qIEV4Y2x1c2l2ZVRyYWNrTGlzdC5jcHAgKi87IH07CiAJCUIxMkQyMzNGMTM1NjAy
ODIwMDJBMjhENCAvKiBFeGNsdXNpdmVUcmFja0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMkQyMzM2MTM1NjAyODIwMDJBMjhENCAvKiBFeGNs
dXNpdmVUcmFja0xpc3QuaCAqLzsgfTsKIAkJQjEyRDIzNDExMzU2MDI4MjAwMkEyOEQ0IC8qIE11
bHRpcGxlVHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIxMkQyMzM4MTM1NjAyODIwMDJBMjhENCAvKiBNdWx0aXBsZVRyYWNrTGlzdC5j
cHAgKi87IH07CkBAIC0xMDQ0NSw2ICsxMDQ0Nyw4IEBACiAJCUFCRERGRTc0MEE1QzZFNzAwMEEz
RTExRCAvKiBSZW5kZXJNZW51TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyTWVudUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFB
RDQxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1BhdGguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQjc0MEMxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZU
VFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWVFRQYXJzZXIu
aDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCMTBCNzQwRDEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlZUVFBhcnNlci5jcHA7
IHBhdGggPSBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMTJEMjMzNTEzNTYwMjgyMDAyQTI4RDQgLyogRXhjbHVzaXZlVHJhY2tM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2l2ZVRy
YWNrTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxMkQyMzM2MTM1NjAy
ODIwMDJBMjhENCAvKiBFeGNsdXNpdmVUcmFja0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXhjbHVzaXZlVHJhY2tMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIxMkQyMzM3MTM1NjAyODIwMDJBMjhENCAvKiBFeGNsdXNpdmVUcmFja0xpc3QuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEV4Y2x1c2l2ZVRyYWNrTGlzdC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzg0OCw2ICsxNzg1Miw4IEBACiAJCQkJQjJFNEVDOTUw
RDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5oICovLAogCQkJCUIyRTRFQzk2MEQwMEMy
MkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaWRsICovLAogCQkJCUIyOEM2QTI2MEQwMEM0NDgw
MDMzNEFBNCAvKiB4bGlua2F0dHJzLmluICovLAorCQkJCUIxMEI3NDBDMTNCRTgwQkYwMEJDMUMy
NiAvKiBXZWJWVFRQYXJzZXIuaCAqLywKKwkJCQlCMTBCNzQwRDEzQkU4MEJGMDBCQzFDMjYgLyog
V2ViVlRUUGFyc2VyLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc3ZnOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMDc2LDYgKzIzMDgyLDE2IEBACiAJCQkJRTFCRTUxMkUwQ0Y2
QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3
RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQjFBRDRFNUQxM0ExMkEwQjAwODQ2QjI3IC8qIEN1ZUluZGV4LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMUFENEU1RjEzQTEyQTBCMDA4NDZCMjcgLyogTG9hZGFibGVUZXh0VHJhY2suaCBpbiBI
ZWFkZXJzICovLAorCQkJCUIxQUQ0RTYzMTNBMTJBMEIwMDg0NkIyNyAvKiBNdXRhYmxlVGV4dFRy
YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2NzEzQTEyQTBCMDA4NDZCMjcgLyogVGV4
dFRyYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2OTEzQTEyQTBCMDA4NDZCMjcgLyog
VGV4dFRyYWNrQ3VlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2QjEzQTEyQTBCMDA4NDZC
MjcgLyogVGV4dFRyYWNrQ3VlTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFBRDRFNzQxM0Ex
MkE0NjAwODQ2QjI3IC8qIEN1ZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFBRDRFN0Mx
M0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFBRDRF
N0QxM0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMjU4NDMsNiArMjU4NTksMTUgQEAKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5
NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJG
MEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENTM3
MzUyMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MUFENEU1QzEzQTEyQTBCMDA4NDZCMjcgLyogQ3VlSW5kZXguY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQjFBRDRFNUUxM0ExMkEwQjAwODQ2QjI3IC8qIExvYWRhYmxlVGV4dFRyYWNrLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUIxQUQ0RTYyMTNBMTJBMEIwMDg0NkIyNyAvKiBNdXRhYmxlVGV4dFRy
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTY2MTNBMTJBMEIwMDg0NkIyNyAvKiBU
ZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNjgxM0ExMkEwQjAwODQ2QjI3
IC8qIFRleHRUcmFja0N1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2QTEzQTEyQTBC
MDA4NDZCMjcgLyogVGV4dFRyYWNrQ3VlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFE
NEU3MzEzQTEyQTQ2MDA4NDZCMjcgLyogQ3VlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUIxQUQ0RTdCMTNBMTJBNzIwMDg0NkIyNyAvKiBDdWVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQjEwQjc0MEYxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcAppbmRleCAzYjdhODkzYzJj
ZjAzOWUyZTk5MWUwOTZmNWY2ZjQ1NDllN2EwZTI1Li4wYTYzY2Y3N2EyMWQyZGQ1MmY1YzNkNDZl
NjgxYTgwMzAyNTQ4N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFj
a0N1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCkBAIC0y
LDIzICsyLDI4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwpAQCAtMzksMTUgKzQ0LDQxIEBAIFRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKGNv
bnN0IFN0cmluZyYgaWQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyCiAgICAg
LCBtX3N0YXJ0VGltZShzdGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAgLCBtX2NvbnRl
bnQoY29udGVudCkKLSAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3BhdXNlT25F
eGl0KHBhdXNlT25FeGl0KQorICAgICwgbV93cml0aW5nRGlyZWN0aW9uKEhvcml6b250YWwpCisg
ICAgLCBtX3NuYXBUb0xpbmVzKHRydWUpCisgICAgLCBtX2xpbmVQb3NpdGlvbigtMSkKKyAgICAs
IG1fdGV4dFBvc2l0aW9uKDUwKQorICAgICwgbV9jdWVTaXplKDEwMCkKKyAgICAsIG1fY3VlQWxp
Z25tZW50KE1pZGRsZSkKKyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiB7CisgICAgcGFyc2VTZXR0
aW5ncyhzZXR0aW5ncyk7CiB9CiAKIFRleHRUcmFja0N1ZTo6flRleHRUcmFja0N1ZSgpCiB7CiB9
CiAKK2Jvb2wgVGV4dFRyYWNrQ3VlOjpjaGFySXNBTnVtYmVyKGNoYXIgYykKK3sKKyAgICByZXR1
cm4gJzAnIDw9IGMgJiYgYyA8PSAnOSc7Cit9CisKK1N0cmluZyBUZXh0VHJhY2tDdWU6OmNvbGxl
Y3ROdW1iZXJDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlv
bikKK3sKKyAgICBTdHJpbmcgZGlnaXRzOworICAgIHdoaWxlICgqcG9zaXRpb24gPCBpbnB1dC5s
ZW5ndGgoKSAmJiBjaGFySXNBTnVtYmVyKGlucHV0Wypwb3NpdGlvbl0pKQorICAgICAgICBkaWdp
dHMuYXBwZW5kKGlucHV0WygqcG9zaXRpb24pKytdKTsKKyAgICByZXR1cm4gZGlnaXRzOworfQor
Citib29sIFRleHRUcmFja0N1ZTo6Y2hhcklzQVNwYWNlQ2hhcmFjdGVyKGNoYXIgYykKK3sKKyAg
ICAvLyBXZWJWVFQgc3BhY2UgY2hhcmFjdGVycyBhcmUgVSswMDIwIFNQQUNFLCBVKzAwMDkgQ0hB
UkFDVEVSIFRBQlVMQVRJT04gKHRhYiksIFUrMDAwQSBMSU5FIEZFRUQgKExGKSwgVSswMDBDIEZP
Uk0gRkVFRCAoRkYpLCBhbmQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpLgorICAgIHJldHVy
biBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xmJyB8fCBjID09
ICdccic7Cit9CisKIFRleHRUcmFjayogVGV4dFRyYWNrQ3VlOjp0cmFjaygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fdHJhY2s7CkBAIC03OCwxMCArMTA5LDM3IEBAIGJvb2wgVGV4dFRyYWNrQ3Vl
OjpwYXVzZU9uRXhpdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGF1c2VPbkV4aXQ7CiB9CiAKK1N0
cmluZyBUZXh0VHJhY2tDdWU6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3dy
aXRpbmdEaXJlY3Rpb24pIHsKKyAgICBjYXNlIEhvcml6b250YWw6IAorICAgICAgICByZXR1cm4g
Imhvcml6b250YWwiOworICAgIGNhc2UgVmVydGljYWxHcm93aW5nTGVmdDoKKyAgICAgICAgcmV0
dXJuICJ2ZXJ0aWNhbCI7CisgICAgY2FzZSBWZXJ0aWNhbEdyb3dpbmdSaWdodDoKKyAgICAgICAg
cmV0dXJuICJ2ZXJ0aWNhbC1sciI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIiOwor
ICAgIH0KK30KKworU3RyaW5nIFRleHRUcmFja0N1ZTo6YWxpZ25tZW50KCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fY3VlQWxpZ25tZW50KSB7CisgICAgY2FzZSBTdGFydDogCisgICAgICAgIHJl
dHVybiAic3RhcnQiOworICAgIGNhc2UgTWlkZGxlOgorICAgICAgICByZXR1cm4gIm1pZGRsZSI7
CisgICAgY2FzZSBFbmQ6CisgICAgICAgIHJldHVybiAiZW5kIjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCiBTdHJpbmcgVGV4dFRyYWNrQ3VlOjpnZXRDdWVB
c1NvdXJjZSgpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fY29udGVudDsKIH0KIAogUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBUZXh0VHJhY2tDdWU6OmdldEN1ZUFzSFRNTCgpCkBAIC0xMDEsNiAr
MTU5LDEyMyBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpdmUpCiAg
ICAgbV9pc0FjdGl2ZSA9IGFjdGl2ZTsKIH0KIAordm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0
dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBQYXJzZSB0
aGUgV2ViVlRUIHNldHRpbmdzLgorICAgIC8vIDEgLSBJbml0aWFsIHNldHVwLgorICAgIHVuc2ln
bmVkIHBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSkg
eworICAgICAgICAvLyAyLTQgU2V0dGluZ3MgLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIHJlcHJl
c2VudGluZyBhIHNldHRpbmdzLgorICAgICAgICBjaGFyIHNldHRpbmcgPSBpbnB1dFtwb3NpdGlv
bisrXTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIC8vIDUtNyAtIElmIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRp
b24gaXMgbm90ICc6Jywgc2V0IHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nLgorICAgICAgICBpZiAo
aW5wdXRbcG9zaXRpb24rK10gIT0gJzonKQorICAgICAgICAgICAgc2V0dGluZyA9ICcgJzsKKyAg
ICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIC8vIDggLSBHYXRoZXIgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWUgb2Ygc2V0
dGluZy4KKyAgICAgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAgICAgIGNhc2UgJ0QnOgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIHdyaXRpbmdEaXJlY3Rpb247CisgICAgICAg
ICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAhY2hhcklzQVNwYWNlQ2hh
cmFjdGVyKGlucHV0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlv
bi5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJl
Y3Rpb24gPT0gInZlcnRpY2FsIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24g
PSBWZXJ0aWNhbEdyb3dpbmdMZWZ0OworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJlY3Rpb24g
PT0gInZlcnRpY2FsLWxyIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24gPSBW
ZXJ0aWNhbEdyb3dpbmdSaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBsaW5l
UG9zaXRpb247CisgICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiAoaW5wdXRbcG9zaXRpb25dID09ICctJyB8fCBpbnB1dFtwb3NpdGlvbl0gPT0gJyUnIHx8IGNo
YXJJc0FOdW1iZXIoaW5wdXRbcG9zaXRpb25dKSkpCisgICAgICAgICAgICAgICAgbGluZVBvc2l0
aW9uLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgICAgICAgICBpZiAocG9zaXRpb24g
PCBpbnB1dC5sZW5ndGgoKSAmJiAhY2hhcklzQVNwYWNlQ2hhcmFjdGVyKGlucHV0W3Bvc2l0aW9u
XSkpCisgICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAgICAgICAgICBpZiAobGlu
ZVBvc2l0aW9uLmZpbmQoJy0nLCAxKSAhPSBub3RGb3VuZCB8fCBsaW5lUG9zaXRpb24ucmV2ZXJz
ZUZpbmQoIiUiLCBsaW5lUG9zaXRpb24ubGVuZ3RoKCkgLSAyKSAhPSBub3RGb3VuZCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChsaW5lUG9zaXRpb25bMF0gPT0gJy0n
ICYmIGxpbmVQb3NpdGlvbltsaW5lUG9zaXRpb24ubGVuZ3RoKCkgLSAxXSA9PSAnJScpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHZhbGlkTnVtYmVyOworICAgICAg
ICAgICAgbG9uZyBudW1iZXIgPSBsaW5lUG9zaXRpb24udG9JbnQ2NCgmdmFsaWROdW1iZXIpOwor
ICAgICAgICAgICAgaWYgKCF2YWxpZE51bWJlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChsaW5lUG9zaXRpb25bbGluZVBvc2l0aW9uLmxlbmd0aCgpIC0gMV0gPT0g
JyUnKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVyID4gMTAwKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBtX3NuYXBUb0xpbmVz
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2xpbmVQb3NpdGlvbiA9IG51
bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdU
JzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyB0ZXh0UG9zaXRpb24gPSBjb2xs
ZWN0TnVtYmVyQ2hhcmFjdGVycyhpbnB1dCwgJnBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChw
b3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChpbnB1dFtwb3NpdGlvbisrXSAhPSAnJScpCisgICAgICAgICAgICAgICAgZ290
byBPdGhlcndpc2U7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiAhY2hhcklzQVNwYWNlQ2hhcmFjdGVyKGlucHV0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICAg
ICAgZ290byBPdGhlcndpc2U7CisgICAgICAgICAgICBpZiAodGV4dFBvc2l0aW9uLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGJvb2wgdmFsaWROdW1iZXI7
CisgICAgICAgICAgICBsb25nIG51bWJlciA9IHRleHRQb3NpdGlvbi50b0ludDY0KCZ2YWxpZE51
bWJlcik7CisgICAgICAgICAgICBpZiAoIXZhbGlkTnVtYmVyKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVyID4gMTAwKQorICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1fdGV4dFBvc2l0aW9uID0gbnVtYmVyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1MnOgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGN1ZVNpemUgPSBjb2xsZWN0TnVtYmVyQ2hhcmFj
dGVycyhpbnB1dCwgJnBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1
dC5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChpbnB1
dFtwb3NpdGlvbisrXSAhPSAnJScpCisgICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7ICAg
ICAgCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAhY2hhcklz
QVNwYWNlQ2hhcmFjdGVyKGlucHV0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICAgICAgZ290byBP
dGhlcndpc2U7CisgICAgICAgICAgICBpZiAoY3VlU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHZhbGlkTnVtYmVyOworICAgICAgICAgICAg
bG9uZyBudW1iZXIgPSBjdWVTaXplLnRvSW50NjQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAg
IGlmICghdmFsaWROdW1iZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAobnVtYmVyIDwgMCB8fCBudW1iZXIgPiAxMDApCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBtX2N1ZVNpemUgPSBudW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAnQSc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICBT
dHJpbmcgY3VlQWxpZ25tZW50OworICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQu
bGVuZ3RoKCkgJiYgIWNoYXJJc0FTcGFjZUNoYXJhY3RlcihpbnB1dFtwb3NpdGlvbl0pKQorICAg
ICAgICAgICAgICAgIGN1ZUFsaWdubWVudC5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworICAg
ICAgICAgICAgaWYgKGN1ZUFsaWdubWVudCA9PSAic3RhcnQiKQorICAgICAgICAgICAgICAgIG1f
Y3VlQWxpZ25tZW50ID0gU3RhcnQ7CisgICAgICAgICAgICBpZiAoY3VlQWxpZ25tZW50ID09ICJt
aWRkbGUiKQorICAgICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gTWlkZGxlOworICAgICAg
ICAgICAgaWYgKGN1ZUFsaWdubWVudCA9PSAiZW5kIikKKyAgICAgICAgICAgICAgICBtX2N1ZUFs
aWdubWVudCA9IEVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmIGNoYXJJc0FT
cGFjZUNoYXJhY3RlcihpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAgICAgcG9zaXRpb24rKzsK
KyAgICAgICAgY29udGludWU7CitPdGhlcndpc2U6CisgICAgICAgIC8vIENvbGxlY3QgYSBzZXF1
ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBzcGFjZSBjaGFyYWN0ZXJzIGFuZCBkaXNj
YXJkIHRoZW0uCisgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmICFj
aGFySXNBU3BhY2VDaGFyYWN0ZXIoaW5wdXRbcG9zaXRpb25dKSkKKyAgICAgICAgICAgIHBvc2l0
aW9uKys7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmgKaW5kZXggYzljMTUzMzU5OWJlNGYxMWQ3YzlhYjMzNTdl
NzU1YWUxNWIyNmRiOC4uODZhMjcxNGY4MmY0MmQ0NDkyY2ZjY2MyYTEwNzRlMmFhMTY1ZDQ3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCkBAIC0xLDI0ICsxLDI5IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwpAQCAtNDMsNiAr
NDgsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
VHJhY2tDdWUoaWQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQsIHNldHRpbmdzLCBwYXVzZU9uRXhpdCkp
OwogICAgIH0KKyAgICBzdGF0aWMgYm9vbCBjaGFySXNBTnVtYmVyKGNoYXIpOworICAgIHN0YXRp
YyBTdHJpbmcgY29sbGVjdE51bWJlckNoYXJhY3RlcnMoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQq
KTsKKyAgICBzdGF0aWMgYm9vbCBjaGFySXNBU3BhY2VDaGFyYWN0ZXIoY2hhcik7CisgICAgCisg
ICAgZW51bSBEaXJlY3Rpb24geyBIb3Jpem9udGFsLCBWZXJ0aWNhbEdyb3dpbmdMZWZ0LCBWZXJ0
aWNhbEdyb3dpbmdSaWdodCB9OworICAgIGVudW0gQWxpZ25tZW50IHsgU3RhcnQsIE1pZGRsZSwg
RW5kIH07CiAKICAgICB2aXJ0dWFsIH5UZXh0VHJhY2tDdWUoKTsKIApAQCAtNTMsNiArNjQsMTMg
QEAgcHVibGljOgogICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdDsKICAgICBkb3VibGUgZW5k
VGltZSgpIGNvbnN0OwogICAgIGJvb2wgcGF1c2VPbkV4aXQoKSBjb25zdDsKKyAgICAKKyAgICBT
dHJpbmcgZGlyZWN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBzbmFwVG9MaW5lcygpIGNvbnN0IHsg
cmV0dXJuIG1fc25hcFRvTGluZXM7IH0KKyAgICBsb25nIGxpbmVQb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZVBvc2l0aW9uOyB9CisgICAgbG9uZyB0ZXh0UG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3RleHRQb3NpdGlvbjsgfQorICAgIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VlU2l6ZTsgfQorICAgIFN0cmluZyBhbGlnbm1lbnQoKSBjb25zdDsKIAogICAgIFN0cmlu
ZyBnZXRDdWVBc1NvdXJjZSgpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZ2V0
Q3VlQXNIVE1MKCk7CkBAIC02MywxNCArODEsMjIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBU
ZXh0VHJhY2tDdWUoY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VP
bkV4aXQpOwogCisgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYpOworICAgIAog
ICAgIFRleHRUcmFjayogbV90cmFjazsKICAgICAKICAgICBTdHJpbmcgbV9pZDsKICAgICBkb3Vi
bGUgbV9zdGFydFRpbWU7CiAgICAgZG91YmxlIG1fZW5kVGltZTsKICAgICBTdHJpbmcgbV9jb250
ZW50OwotICAgIFN0cmluZyBtX3NldHRpbmdzOwogICAgIGJvb2wgbV9wYXVzZU9uRXhpdDsKKyAg
ICBEaXJlY3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOworICAgIGJvb2wgbV9zbmFwVG9MaW5lczsK
KyAgICBsb25nIG1fbGluZVBvc2l0aW9uOworICAgIGxvbmcgbV90ZXh0UG9zaXRpb247CisgICAg
bG9uZyBtX2N1ZVNpemU7CisgICAgQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50OworCiAgICAgYm9v
bCBtX2lzQWN0aXZlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBh
cnNlci5jcHAKaW5kZXggM2IzNTNlN2M4YzM1ZGVmMjM1NDg3ZmI5Yjc2MmEyOWFkNDA3NWExNi4u
MzAzYjNkODVjYTAwZDdiYjk5MTRkOWQ3YzY0NTllMmM3MDhmYTI1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiQ3VlUGFyc2VyLmgiCiAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCwxNSArNzEsMjYgQEAgYm9vbCBDdWVQYXJzZXI6
OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyAvKmlkZW50
aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogQ3JlYXRlIG1fcHJp
dmF0ZSBiYXNlZCBvbiBNSU1FIHR5cGUuCisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIGlm
IChyZXNwb25zZS5taW1lVHlwZSgpID09ICJ0ZXh0L3Z0dCIpCisgICAgICAgICAgICBtX3ByaXZh
dGUgPSBXZWJWVFRQYXJzZXI6OmNyZWF0ZSh0aGlzKTsKICAgICBtX2NsaWVudC0+dHJhY2tMb2Fk
U3RhcnRlZCgpOwogfQogCiB2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbikKIHsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IFNlbmQgZGF0YSBhbG9u
ZyB0byBtX3ByaXZhdGUgcGFyc2VyIHRvIGJlIHBhcnNlZC4KKyAgICAvLyBJZiBtaW1lIHR5cGUg
ZnJvbSByZXNwb25zZSB3YXMgbm90IGluZm9ybWF0aXZlLCBzbmlmZiBmb3IgdHlwZSBvZiBmaWxl
LgorICAgIGlmICghbV9wcml2YXRlKSB7CisgICAgICAgIGlmIChXZWJWVFRQYXJzZXI6OnJlcXVp
cmVGaWxlSWRlbnRpZmllcihkYXRhLCBsZW4pKSB7CisgICAgICAgICAgICBtX3ByaXZhdGUgPSBX
ZWJWVFRQYXJzZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT50cmFja0xv
YWRTdGFydGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9wcml2YXRlKQorICAg
ICAgICBtX3ByaXZhdGUtPnBhcnNlQnl0ZXMoZGF0YSwgbGVuKTsKIH0KIAogdm9pZCBDdWVQYXJz
ZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZykKQEAgLTk2LDYgKzEwOCwxMSBAQCB2
b2lkIEN1ZVBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3Vl
PiA+JikKICAgICAvLyBGSVhNRSg2Mjg5Myk6IEltcGxlbWVudC4KIH0KIAordm9pZCBDdWVQYXJz
ZXI6Om5ld0N1ZXNQYXJzZWQoKQoreworICAgIG1fY2xpZW50LT5uZXdDdWVzUGFyc2VkKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL0N1ZVBhcnNlci5oCmluZGV4IDc0NGNjMzIyNzhjNWY0Y2Y5ZTRmODJjYTdjNTNh
YjE3YmQ4OWQ4Y2YuLjczNjExM2E0Mjk2NzExYzhlMmFhZGE2YTRhY2I1NzU2MjQxYjNiYWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCkBAIC0zMyw5ICszMyw5
IEBACiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLSNpbmNsdWRlICJDdWVQYXJzZXJQcml2
YXRlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIlRocmVhZGFi
bGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCB0cmFja0xvYWRDb21wbGV0ZWQoKSA9IDA7CiB9OwogCi1jbGFzcyBDdWVQYXJzZXIgOiBw
dWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitjbGFzcyBDdWVQYXJzZXIgOiBwdWJsaWMg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCwgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCB7CiBwdWJsaWM6
CiAgICAgQ3VlUGFyc2VyKCk7CiAgICAgdmlydHVhbCB+Q3VlUGFyc2VyKCk7CkBAIC02Nyw2ICs2
Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsKIAog
ICAgIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7
CisgICAgdm9pZCBuZXdDdWVzUGFyc2VkKCk7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFRocmVh
ZGFibGVMb2FkZXI+IG1fbG9hZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJh
Y2svQ3VlUGFyc2VyUHJpdmF0ZS5oCmluZGV4IGJjM2U0ZmJjMDk1MWJlMzRjYmYwMTA3MWVkMjg2
OWE5OWEyZjgzMGUuLmNlNjMzN2Q5MWU1MGUzYmIxZWQyZmI4YWIyZTQyYmNmZWUxNzEzZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgK
QEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5dGVzKGNv
bnN0IGNoYXIqLCBpbnQpID0gMDsKIAogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2YgbGFz
dCBwYXJzZWQgY3VlcyB0byBjYWxsZXIuCi0gICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3Vl
cyhWZWN0b3I8UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpID0gMDsK
IAogcHJvdGVjdGVkOgogICAgIEN1ZVBhcnNlclByaXZhdGVJbnRlcmZhY2UoKSB7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI2MjA3OTM5MTVlMjNlODRlZTk1YTkwZmNkOTdkYTdmZWRjNDkxODUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCkBAIC0w
LDAgKzEsMzA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKworI2luY2x1ZGUgIldlYlZUVFBhcnNlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBXZWJWVFRQYXJzZXI6OnJl
cXVpcmVGaWxlSWRlbnRpZmllcihjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAg
IC8vIEEgV2ViVlRUIGZpbGUgaWRlbnRpZmllciBjb25zaXN0cyBvZiBhbiBvcHRpb25hbCBCT00g
Y2hhcmFjdGVyLAorICAgIC8vIHRoZSBzdHJpbmcgIldFQlZUVCIgZm9sbG93ZWQgYnkgYW4gb3B0
aW9uYWwgc3BhY2Ugb3IgdGFiIGNoYXJhY3RlciwKKyAgICAvLyBhbmQgYW55IG51bWJlciBvZiBj
aGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBsaW5lIHRlcm1pbmF0b3JzIC4uLgorICAgIFN0cmluZyBp
bnB1dCA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBwb3Np
dGlvbiA9IDA7CisgICAgaWYgKGlucHV0WzBdID09IDB4RkVGRikKKyAgICAgICAgcG9zaXRpb24r
KzsKKyAgICBTdHJpbmcgbGluZSA9ICIiOworICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxl
bmd0aCgpICYmIGlucHV0W3Bvc2l0aW9uXSAhPSAnXHInICYmIGlucHV0W3Bvc2l0aW9uXSAhPSAn
XG4nKQorICAgICAgICBsaW5lLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgICAgIAor
ICAgIGlmIChsaW5lLmxlbmd0aCgpIDwgNikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChsaW5lLmxlbmd0aCgpID09IDYgJiYgbGluZSAhPSAiV0VCVlRUIikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChsaW5lLmxlbmd0aCgpID4gNiAmJiAobGluZS5zdWJzdHJpbmcoMCwg
NikgIT0gIldFQlZUVCIgfHwgKGxpbmVbNl0gIT0gJyAnICYmIGxpbmVbNl0gIT0gJ1x0JykpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV2ViVlRUUGFy
c2VyOjpXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQorICAgIDog
bV9zdGF0ZShJbml0aWFsKQoreworICAgIG1fY2xpZW50ID0gY2xpZW50OworfQorCit2b2lkIFdl
YlZUVFBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+
JiBvdXRwdXRDdWVzKQoreworICAgIG91dHB1dEN1ZXMgPSBtX2N1ZWxpc3Q7CisgICAgbV9jdWVs
aXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgLy8gNC44LjEwLjEzLjMgV0hBVFdHIFdlYlZU
VCBQYXJzZXIgYWxnb3JpdGhtLgorICAgIC8vIDEtMyAtIEluaXRpYWwgc2V0dXAuCisgICAgU3Ry
aW5nIGlucHV0ID0gU3RyaW5nOjpmcm9tVVRGOChkYXRhLCBsZW5ndGgpOworICAgIHVuc2lnbmVk
IHBvc2l0aW9uID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBjb2xsZWN0
TmV4dExpbmUoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKKyAgICAgICAgY2FzZSBJbml0aWFsOgorICAgICAgICAgICAgLy8gNC0xMiAtIENv
bGxlY3QgdGhlIGZpcnN0IGxpbmUgYW5kIGNoZWNrIGZvciAiV0VCVlRUIi4KKyAgICAgICAgICAg
IGlmICghcmVxdWlyZUZpbGVJZGVudGlmaWVyKGRhdGEsIGxlbmd0aCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgbV9zdGF0ZSA9IEhlYWRlcjsKKyAgICAgICAgCisgICAg
ICAgIGNhc2UgSGVhZGVyOgorICAgICAgICAgICAgLy8gMTMtMTggLSBBbGxvdyBhIGhlYWRlciAo
Y29tbWVudCBhcmVhKSB1bmRlciB0aGUgV0VCVlRUIGxpbmUuCisgICAgICAgICAgICBpZiAobGlu
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IElkOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIElkOgorICAgICAgICAgICAgLy8gMTktMjkg
LSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMsIHRoZW4gaW5pdGlhbGl6ZSBu
ZXcgY3VlIHZhbHVlcy4KKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlc2V0Q3VlVmFsdWVzKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIDMwLTM5IC0gQ2hlY2sgaWYgdGhpcyBsaW5lIGNvbnRhaW5zIGFu
IG9wdGlvbmFsIGlkZW50aWZpZXIgb3IgdGltaW5nIGRhdGEuCisgICAgICAgICAgICBtX3N0YXRl
ID0gY29sbGVjdEN1ZUlkKGxpbmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
ICAgICBjYXNlIFRpbWluZ3NBbmRTZXR0aW5nczoKKyAgICAgICAgICAgIC8vIDQwIC0gQ29sbGVj
dCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3MuCisgICAgICAgICAgICBtX3N0YXRlID0gY29sbGVj
dFRpbWluZ3NBbmRTZXR0aW5ncyhsaW5lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICAgICAgY2FzZSBDdWVUZXh0OgorICAgICAgICAgICAgLy8gNDEtNTMgLSBDb2xsZWN0IHRo
ZSBjdWUgdGV4dCwgY3JlYXRlIGEgY3VlLCBhbmQgYWRkIGl0IHRvIHRoZSBvdXRwdXQuCisgICAg
ICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZVRleHQobGluZSk7CisgICAgICAgICAgICBpZiAo
cG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgLSAxKQorICAgICAgICAgICAgICAgIHByb2Nlc3ND
dWVUZXh0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJhZEN1ZToKKyAg
ICAgICAgICAgIC8vIDU0LTYyIC0gQ29sbGVjdCBhbmQgZGlzY2FyZCB0aGUgcmVtYWluaW5nIGN1
ZS4KKyAgICAgICAgICAgIG1fc3RhdGUgPSBpZ25vcmVCYWRDdWUobGluZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwb3NpdGlvbiA9IHNraXBMaW5lVGVybWluYXRv
cihpbnB1dCwgcG9zaXRpb24pOworICAgIH0gd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3Ro
KCkpOworfQorCitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0
Q3VlSWQoY29uc3QgU3RyaW5nJiBsaW5lKQoreworICAgIGlmIChsaW5lLmNvbnRhaW5zKCItLT4i
KSkKKyAgICAgICAgcmV0dXJuIGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MobGluZSk7CisgICAg
bV9jdXJyZW50SWQgPSBsaW5lOworICAgIHJldHVybiBUaW1pbmdzQW5kU2V0dGluZ3M7Cit9CisK
K1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1pbmdzQW5k
U2V0dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xs
ZWN0IFdlYlZUVCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3MuCisgICAgLy8gMS0zIC0gTGV0IGlu
cHV0IGJlIHRoZSBzdHJpbmcgYmVpbmcgcGFyc2VkIGFuZCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIg
aW50byBpbnB1dAorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBwb3NpdGlvbiA9IHNr
aXBXaGl0ZVNwYWNlKGlucHV0LCBwb3NpdGlvbik7CisKKyAgICAvLyA0LTUgLSBDb2xsZWN0IGEg
V2ViVlRUIHRpbWVzdGFtcC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQgcmV0dXJuIGZh
aWx1cmUuIE90aGVyd2lzZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIHN0YXJ0IHRpbWUgYmUg
dGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIFN0cmluZyBzdGFydDsKKyAgICB3aGlsZSAocG9zaXRp
b24gPCBpbnB1dC5sZW5ndGgoKSAmJiAhVGV4dFRyYWNrQ3VlOjpjaGFySXNBU3BhY2VDaGFyYWN0
ZXIoaW5wdXRbcG9zaXRpb25dKSkKKyAgICAgICAgc3RhcnQuYXBwZW5kKGlucHV0W3Bvc2l0aW9u
KytdKTsKKworICAgIG1fY3VycmVudFN0YXJ0VGltZSA9IGNvbGxlY3RUaW1lU3RhbXAoc3RhcnQp
OworICAgIGlmIChtX2N1cnJlbnRTdGFydFRpbWUgPT0gbWFsZm9ybWVkVGltZSkKKyAgICAgICAg
cmV0dXJuIEJhZEN1ZTsKKyAgICBwb3NpdGlvbiA9IHNraXBXaGl0ZVNwYWNlKGlucHV0LCBwb3Np
dGlvbik7CisKKyAgICAvLyA2LTkgLSBJZiB0aGUgbmV4dCB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBu
b3QgIi0tPiIsIGFib3J0IGFuZCByZXR1cm4gZmFpbHVyZS4KKyAgICBpZiAoaW5wdXQuZmluZCgi
LS0+IiwgcG9zaXRpb24pID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gQmFkQ3VlOworICAg
IHBvc2l0aW9uICs9IDM7CisgICAgcG9zaXRpb24gPSBza2lwV2hpdGVTcGFjZShpbnB1dCwgcG9z
aXRpb24pOworCisgICAgLy8gMTAtMTEgLSBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4gSWYg
dGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgbGV0
IGN1ZSdzIHRleHQgdHJhY2sgY3VlIGVuZCB0aW1lIGJlIHRoZSBjb2xsZWN0ZWQgdGltZS4KKyAg
ICBTdHJpbmcgZW5kOworICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmICFU
ZXh0VHJhY2tDdWU6OmNoYXJJc0FTcGFjZUNoYXJhY3RlcihpbnB1dFtwb3NpdGlvbl0pKQorICAg
ICAgZW5kLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisKKyAgICBtX2N1cnJlbnRFbmRUaW1l
ID0gY29sbGVjdFRpbWVTdGFtcChlbmQpOworICAgIGlmIChtX2N1cnJlbnRFbmRUaW1lID09IG1h
bGZvcm1lZFRpbWUpCisgICAgICAgIHJldHVybiBCYWRDdWU7CisgICAgcG9zaXRpb24gPSBza2lw
V2hpdGVTcGFjZShpbnB1dCwgcG9zaXRpb24pOworCisgICAgLy8gMTIgLSBQYXJzZSB0aGUgV2Vi
VlRUIHNldHRpbmdzIGZvciB0aGUgY3VlIChjb25kdWN0ZWQgaW4gVGV4dFRyYWNrQ3VlKS4KKyAg
ICBtX2N1cnJlbnRTZXR0aW5ncyA9IGlucHV0LnN1YnN0cmluZyhwb3NpdGlvbiwgaW5wdXQubGVu
Z3RoKCktMSk7CisgICAgcmV0dXJuIEN1ZVRleHQ7Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VT
dGF0ZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RDdWVUZXh0KGNvbnN0IFN0cmluZyYgbGluZSkKK3sK
KyAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcHJvY2Vzc0N1ZVRleHQoKTsKKyAg
ICAgICAgcmV0dXJuIElkOworICAgIH0KKyAgICBpZiAoIW1fY3VycmVudENvbnRlbnQuaXNFbXB0
eSgpKQorICAgICAgICBtX2N1cnJlbnRDb250ZW50ICs9ICJcbiI7CisgICAgbV9jdXJyZW50Q29u
dGVudCArPSBsaW5lOworICAgIHJldHVybiBDdWVUZXh0OworfQorCitXZWJWVFRQYXJzZXI6OlBh
cnNlU3RhdGUgV2ViVlRUUGFyc2VyOjppZ25vcmVCYWRDdWUoY29uc3QgU3RyaW5nJiBsaW5lKQor
eworICAgIGlmICghbGluZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBCYWRDdWU7CisgICAg
cmV0dXJuIElkOworfQorCitkb3VibGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKGNv
bnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgLy8gNC44LjEwLjEzLjMgQ29sbGVjdCBhIFdlYlZU
VCB0aW1lc3RhbXAuCisgICAgLy8gMS00IC0gSW5pdGlhbCBjaGVja3MuCisgICAgdW5zaWduZWQg
cG9zaXRpb24gPSAwOworICAgIGVudW0gTW9kZSB7IG1pbnV0ZXMsIGhvdXJzIH07CisgICAgTW9k
ZSBtb2RlID0gbWludXRlczsKKyAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwg
IVRleHRUcmFja0N1ZTo6Y2hhcklzQU51bWJlcihpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICBy
ZXR1cm4gbWFsZm9ybWVkVGltZTsKKworICAgIC8vIDUtNiAtIENvbGxlY3QgYSBzZXF1ZW5jZSBv
ZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIDAtOS4KKyAgICBTdHJpbmcgZGlnaXRzMSA9IFRleHRUcmFj
a0N1ZTo6Y29sbGVjdE51bWJlckNoYXJhY3RlcnMoaW5wdXQsICZwb3NpdGlvbik7CisgICAgaW50
IHZhbHVlMSA9IGRpZ2l0czEudG9JbnQoKTsKKworICAgIC8vIDcgLSBJZiBub3QgMiBjaGFyYWN0
ZXJzIG9yIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiA1OSwgaW50ZXJwcmV0ZXIgYXMgaG91cnMuCisg
ICAgaWYgKGRpZ2l0czEubGVuZ3RoKCkgIT0gMiB8fCB2YWx1ZTEgPiA1OSkKKyAgICAgICAgbW9k
ZSA9IGhvdXJzOworCisgICAgLy8gOC0xMiAtIENvbGxlY3QgdGhlIG5leHQgc2VxdWVuY2Ugb2Yg
MC05IGFmdGVyICc6JyAobXVzdCBiZSAyIGNoYXJzKS4KKyAgICBpZiAocG9zaXRpb24gPj0gaW5w
dXQubGVuZ3RoKCkgfHwgaW5wdXRbcG9zaXRpb24rK10gIT0gJzonKQorICAgICAgICByZXR1cm4g
bWFsZm9ybWVkVGltZTsKKyAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkgfHwgIVRl
eHRUcmFja0N1ZTo6Y2hhcklzQU51bWJlcihpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICByZXR1
cm4gbWFsZm9ybWVkVGltZTsKKyAgICBTdHJpbmcgZGlnaXRzMiA9IFRleHRUcmFja0N1ZTo6Y29s
bGVjdE51bWJlckNoYXJhY3RlcnMoaW5wdXQsICZwb3NpdGlvbik7CisgICAgaW50IHZhbHVlMiA9
IGRpZ2l0czIudG9JbnQoKTsKKyAgICBpZiAoZGlnaXRzMi5sZW5ndGgoKSAhPSAyKSAKKyAgICAg
ICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisKKyAgICAvLyAxMyAtIERldGVjdCB3aGV0aGVyIHRo
aXMgdGltZXN0YW1wIGluY2x1ZGVzIGhvdXJzLgorICAgIGludCB2YWx1ZTM7CisgICAgaWYgKG1v
ZGUgPT0gaG91cnMgfHwgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgaW5wdXRbcG9zaXRp
b25dID09ICc6JykpIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpIHx8
IGlucHV0W3Bvc2l0aW9uXSAhPSAnOicpCisgICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGlt
ZTsKKyAgICAgICAgcG9zaXRpb24rKzsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxl
bmd0aCgpIHx8ICFUZXh0VHJhY2tDdWU6OmNoYXJJc0FOdW1iZXIoaW5wdXRbcG9zaXRpb25dKSkK
KyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICBTdHJpbmcgZGlnaXRz
MyA9IFRleHRUcmFja0N1ZTo6Y29sbGVjdE51bWJlckNoYXJhY3RlcnMoaW5wdXQsICZwb3NpdGlv
bik7CisgICAgICAgIGlmIChkaWdpdHMzLmxlbmd0aCgpICE9IDIpCisgICAgICAgICAgICByZXR1
cm4gbWFsZm9ybWVkVGltZTsKKyAgICAgICAgdmFsdWUzID0gZGlnaXRzMy50b0ludCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHZhbHVlMyA9IHZhbHVlMjsKKyAgICAgICAgdmFsdWUyID0gdmFs
dWUxOworICAgICAgICB2YWx1ZTEgPSAwOworICAgIH0KKworICAgIC8vIDE0LTE5IC0gQ29sbGVj
dCBuZXh0IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAnLicgKG11c3QgYmUgMyBjaGFycykuCisgICAg
aWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpIHx8IGlucHV0W3Bvc2l0aW9uKytdICE9ICcu
JykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYgKHBvc2l0aW9uID49IGlu
cHV0Lmxlbmd0aCgpIHx8ICFUZXh0VHJhY2tDdWU6OmNoYXJJc0FOdW1iZXIoaW5wdXRbcG9zaXRp
b25dKSkKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgU3RyaW5nIGRpZ2l0czQg
PSBUZXh0VHJhY2tDdWU6OmNvbGxlY3ROdW1iZXJDaGFyYWN0ZXJzKGlucHV0LCAmcG9zaXRpb24p
OworICAgIGlmIChkaWdpdHM0Lmxlbmd0aCgpICE9IDMpCisgICAgICAgIHJldHVybiBtYWxmb3Jt
ZWRUaW1lOworICAgIGludCB2YWx1ZTQgPSBkaWdpdHM0LnRvSW50KCk7CisgICAgaWYgKHZhbHVl
MiA+IDU5IHx8IHZhbHVlMyA+IDU5KQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKwor
ICAgIC8vIDIwLTIxIC0gQ2FsY3VsYXRlIHJlc3VsdC4KKyAgICByZXR1cm4gKHZhbHVlMSAqIHNl
Y29uZHNJbkhvdXIpICsgKHZhbHVlMiAqIHNlY29uZHNJbk1pbnV0ZSkgKyB2YWx1ZTMgKyAoKGRv
dWJsZSl2YWx1ZTQgLyAxMDAwKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnByb2Nlc3NDdWVU
ZXh0KCkKK3sKKyAgICAvLyA1MSAtIEZJWE1FKDY0MTMyKTogaW1wbGVtZW50IHJ1bGVzIGZvciBX
ZWJWVFQtc3BlY2lmaWMgY3VlIHRleHQgcGFyc2luZyBhbmQgRE9NIGNvbnN0cnVjdGlvbi4KKyAg
ICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0VHJhY2tDdWU6OmNyZWF0ZShtX2N1cnJl
bnRJZCwgbV9jdXJyZW50U3RhcnRUaW1lLCBtX2N1cnJlbnRFbmRUaW1lLCBtX2N1cnJlbnRDb250
ZW50LCBtX2N1cnJlbnRTZXR0aW5ncywgZmFsc2UpOworICAgIG1fY3VlbGlzdC5hcHBlbmQoY3Vl
KTsKKyAgICBtX2NsaWVudC0+bmV3Q3Vlc1BhcnNlZCgpOworfQorCit2b2lkIFdlYlZUVFBhcnNl
cjo6cmVzZXRDdWVWYWx1ZXMoKQoreworICAgIG1fY3VycmVudElkID0gZW1wdHlTdHJpbmcoKTsK
KyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGVtcHR5U3RyaW5nKCk7CisgICAgbV9jdXJyZW50U3Rh
cnRUaW1lID0gMDsKKyAgICBtX2N1cnJlbnRFbmRUaW1lID0gMDsKKyAgICBtX2N1cnJlbnRDb250
ZW50ID0gZW1wdHlTdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29sbGVjdE5l
eHRMaW5lKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICBT
dHJpbmcgbGluZSA9ICIiOworICAgIHdoaWxlICgqcG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiBpbnB1dFsqcG9zaXRpb25dICE9ICdccicgJiYgaW5wdXRbKnBvc2l0aW9uXSAhPSAnXG4nKQor
ICAgICAgICBsaW5lLmFwcGVuZChpbnB1dFsoKnBvc2l0aW9uKSsrXSk7CisgICAgcmV0dXJuIGxp
bmU7Cit9CisKK3Vuc2lnbmVkIFdlYlZUVFBhcnNlcjo6c2tpcFdoaXRlU3BhY2UoY29uc3QgU3Ry
aW5nJiBpbnB1dCwgdW5zaWduZWQgcG9zaXRpb24pCit7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwg
aW5wdXQubGVuZ3RoKCkgJiYgVGV4dFRyYWNrQ3VlOjpjaGFySXNBU3BhY2VDaGFyYWN0ZXIoaW5w
dXRbcG9zaXRpb25dKSkKKyAgICAgICAgcG9zaXRpb24rKzsKKyAgICByZXR1cm4gcG9zaXRpb247
Cit9CisKK3Vuc2lnbmVkIFdlYlZUVFBhcnNlcjo6c2tpcExpbmVUZXJtaW5hdG9yKGNvbnN0IFN0
cmluZyYgaW5wdXQsIHVuc2lnbmVkIHBvc2l0aW9uKQoreworICAgIGlmIChwb3NpdGlvbiA+PSBp
bnB1dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIGlmIChpbnB1dFtw
b3NpdGlvbl0gPT0gJ1xyJykKKyAgICAgICAgcG9zaXRpb24rKzsKKyAgICBpZiAocG9zaXRpb24g
Pj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICBpZiAoaW5w
dXRbcG9zaXRpb25dID09ICdcbicpCisgICAgICAgIHBvc2l0aW9uKys7CisgICAgcmV0dXJuIHBv
c2l0aW9uOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFj
ay9XZWJWVFRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTEyZjcwNTBkZmRkYjY4OTg0YTk0NmRlMjBm
M2NjNGExMGU4NGZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svV2ViVlRUUGFyc2VyLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZUVFBhcnNl
cl9oCisjZGVmaW5lIFdlYlZUVFBhcnNlcl9oCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisK
KyNpbmNsdWRlICJDdWVQYXJzZXJQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgaW50IHNlY29uZHNJbkhv
dXIgPSAzNjAwOworc3RhdGljIGNvbnN0IGludCBzZWNvbmRzSW5NaW51dGUgPSA2MDsKK3N0YXRp
YyBjb25zdCBkb3VibGUgbWFsZm9ybWVkVGltZSA9IC0xOworCitjbGFzcyBXZWJWVFRQYXJzZXIg
OiBwdWJsaWMgQ3VlUGFyc2VyUHJpdmF0ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+V2ViVlRUUGFyc2VyKCkgeyB9CisgICAgCisgICAgZW51bSBQYXJzZVN0YXRlIHsgSW5pdGlh
bCwgSGVhZGVyLCBJZCwgVGltaW5nc0FuZFNldHRpbmdzLCBDdWVUZXh0LCBCYWRDdWUgfTsKKwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlZUVFBhcnNlcj4gY3JlYXRlKEN1ZVBhcnNlclByaXZh
dGVDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2Vi
VlRUUGFyc2VyKGNsaWVudCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCByZXF1aXJl
RmlsZUlkZW50aWZpZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+
ID4mKTsKKworcHJvdGVjdGVkOgorICAgIFdlYlZUVFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xp
ZW50Kik7CisgICAgCisgICAgUGFyc2VTdGF0ZSBtX3N0YXRlOworCitwcml2YXRlOgorICAgIFBh
cnNlU3RhdGUgY29sbGVjdEN1ZUlkKGNvbnN0IFN0cmluZyYpOworICAgIFBhcnNlU3RhdGUgY29s
bGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKKyAgICBQYXJzZVN0YXRlIGNv
bGxlY3RDdWVUZXh0KGNvbnN0IFN0cmluZyYpOworICAgIFBhcnNlU3RhdGUgaWdub3JlQmFkQ3Vl
KGNvbnN0IFN0cmluZyYpOworCisgICAgZG91YmxlIGNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3Ry
aW5nJik7CisgICAgdm9pZCBwcm9jZXNzQ3VlVGV4dCgpOworICAgIHZvaWQgcmVzZXRDdWVWYWx1
ZXMoKTsKKyAgICBTdHJpbmcgY29sbGVjdE5leHRMaW5lKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
Kik7CisgICAgdW5zaWduZWQgc2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQp
OworICAgIHVuc2lnbmVkIHNraXBMaW5lVGVybWluYXRvcihjb25zdCBTdHJpbmcmLCB1bnNpZ25l
ZCk7CisKKyAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CisgICAgZG91YmxlIG1fY3VycmVudFN0YXJ0
VGltZTsKKyAgICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsKKyAgICBTdHJpbmcgbV9jdXJyZW50
Q29udGVudDsKKyAgICBTdHJpbmcgbV9jdXJyZW50U2V0dGluZ3M7CisKKyAgICBDdWVQYXJzZXJQ
cml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKworICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3Vl
PiA+IG1fY3VlbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102315</attachid>
            <date>2011-07-28 17:24:52 -0700</date>
            <delta_ts>2011-07-28 18:23:20 -0700</delta_ts>
            <desc>addressing eric&apos;s comments</desc>
            <filename>bug-62882-20110728172450.patch</filename>
            <type>text/plain</type>
            <size>41288</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5NTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODcxOWRj
M2FlN2FkMzhkYmU4ZjI2MzZiM2I1YzJlMTcyMGM0ODRlOC4uMWEyY2M3MDYxNGIyZjI3Y2E4OTg4
MjM4ZTM2ZmEzN2YwYTg0YmE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTMsNiArMTk5
Myw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM3ZjQzMTlmMDU1N2RjYjdiMmMz
OTkwNjNlOGJkNzZmMzhjZmExMS4uODhmOThhMDhjN2I1ZThmYzJhN2U3NDE5YzdlMzY2ZDA0Mjhh
ZTgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA3LTI4ICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURF
T19UUkFDSyBmZWF0dXJlCisgICAgICAgIGRlZmluZSwgd2hpY2ggaXMgdHVybmVkIG9mZi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL1Rl
eHRUcmFja0N1ZS5jcHA6CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNr
L0N1ZVBhcnNlci5oOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaDogQWRkZWQuCisKIDIwMTEtMDct
MjggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMyMwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggMzAyNTdmMmViODYwNjI5ZjBiMzUyNTE4YThmZjhjNjVlNmY0NDk2Ny4u
OWIyY2IxNTIyNjIxMWZhYWY2MTgwY2Y2NTRlMWNiOTRlMTVkZWEzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0yODQzLDYgKzI4NDMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL1dlYlZUVFBhcnNlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVk
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFN0cmluZy5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9VVUlELmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNDBmN2U1MzU5YTk2
MDFkZGM5M2FlNjQ1ZWY1ODNhNjlkMjE4OWI1Mi4uZGUzODQxYzNkZTcwNTM2YjBkMTI2NTJmYzdl
NTUyYTc1ZGI3NmViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDQyOCw2ICs0NDI4LDggQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2sv
Q3VlUGFyc2VyUHJpdmF0ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQ
YXJzZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0JTdHJpbmcuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS93aW4vQlN0cmluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQml0bWFw
SW5mby5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBiNGZiMDhiNDMxMmMzMjEzMDRkNzdkYzY0NzVk
MzgyYzg1ZmNlODY0Li40NzQwODhjMmVjM2YyNmIwODgxODYwN2NhNDlhZGEyMDdjZWZiNjExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtMjEwOSw2ICsyMTA5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxh
dGZvcm0vVGltZXIuaCBcCiAgICAgcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmggXAogICAgIHBs
YXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaCBcCisgICAgcGxhdGZvcm0vdHJhY2svV2Vi
VlRUUGFyc2VyLmggXAogICAgIHBsYXRmb3JtL1dpZGdldC5oIFwKICAgICBwbGF0Zm9ybS9QbGF0
Zm9ybVN0cmF0ZWdpZXMuaCBcCiAgICAgcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA4NjcwZTVhNGUwNjBiZGM5NDg0NjZjNmMyNzk0ZThjYThiMGU1ZjdmLi40OGZhZjc0ODFmNDE5
NDBiMjIyNjM4YzNkMjVjNTE5MzBhNmZlMTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MDY1LDYgKzQwNjUsOCBAQAogCQlB
QkRERkU3OTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUJEREZFNzMwQTVDNkU2RjAwQTNF
MTFEIC8qIFJlbmRlck1lbnVMaXN0LmNwcCAqLzsgfTsKIAkJQUJEREZFN0EwQTVDNkU3MDAwQTNF
MTFEIC8qIFJlbmRlck1lbnVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBQkRERkU3NDBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3Qu
aCAqLzsgfTsKIAkJQURERjFBRDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEREYxQUQ1MTI1
N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmggKi87IH07CisJCUIxMEI3NDBFMTNCRTgw
QkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI3NDBDMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJz
ZXIuaCAqLzsgfTsKKwkJQjEwQjc0MEYxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNzQw
RDEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmNwcCAqLzsgfTsKIAkJQjE0MzUzRDUx
MzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQzNTNEMTEzOEVBOEVEMDBENTMyNzYgLyog
TWVkaWFTdHJlYW1MaXN0LmNwcCAqLzsgfTsKIAkJQjE0MzUzRDYxMzhFQThFRDAwRDUzMjc2IC8q
IE1lZGlhU3RyZWFtTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjE0MzUzRDIxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICov
OyB9OwogCQlCMTQzNTNGODEzOEVBOTVCMDBENTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUzRjYx
MzhFQTk1QjAwRDUzMjc2IC8qIEpTTWVkaWFTdHJlYW1MaXN0LmNwcCAqLzsgfTsKQEAgLTEwNTU4
LDYgKzEwNTYwLDggQEAKIAkJQUJEREZFNzQwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNZW51TGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERGMUFENDEyNTdDRDlBMDAwM0E3NTkg
LyogUmVuZGVyU1ZHUGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJTVkdQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFB
RDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCMTBCNzQwQzEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZUVFBhcnNlci5oOyBwYXRoID0gcGxhdGZvcm0v
dHJhY2svV2ViVlRUUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEI3
NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViVlRUUGFyc2VyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL3Ry
YWNrL1dlYlZUVFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1
M0QxMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjE0MzUzRDIxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFt
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjE0MzUzRDMxMzhFQThFRDAwRDUzMjc2
IC8qIE1lZGlhU3RyZWFtTGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFTdHJl
YW1MaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTg5LDYgKzE3OTkz
LDggQEAKIAkJCQlCMkU0RUM5NTBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmggKi8s
CiAJCQkJQjJFNEVDOTYwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5pZGwgKi8sCiAJ
CQkJQjI4QzZBMjYwRDAwQzQ0ODAwMzM0QUE0IC8qIHhsaW5rYXR0cnMuaW4gKi8sCisJCQkJQjEw
Qjc0MEMxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5oICovLAorCQkJCUIxMEI3NDBE
MTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuY3BwICovLAogCQkJKTsKIAkJCXBhdGgg
PSBzdmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMyNTgsNiArMjMyNjQsMTYg
QEAKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFBRDRFNUQxM0ExMkEwQjAwODQ2QjI3IC8qIEN1ZUlu
ZGV4LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU1RjEzQTEyQTBCMDA4NDZCMjcgLyogTG9h
ZGFibGVUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTYzMTNBMTJBMEIwMDg0
NkIyNyAvKiBNdXRhYmxlVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2NzEz
QTEyQTBCMDA4NDZCMjcgLyogVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2
OTEzQTEyQTBCMDA4NDZCMjcgLyogVGV4dFRyYWNrQ3VlLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
MUFENEU2QjEzQTEyQTBCMDA4NDZCMjcgLyogVGV4dFRyYWNrQ3VlTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQjFBRDRFNzQxM0ExMkE0NjAwODQ2QjI3IC8qIEN1ZUxvYWRlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQjFBRDRFN0MxM0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQjFBRDRFN0QxM0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlclByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJW
VFRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjYwNDUsNiArMjYwNjEsMTUgQEAKIAkJCQk5
NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTA4Q0NBNTAxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNUMxM0ExMkEwQjAwODQ2QjI3IC8qIEN1ZUluZGV4
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTVFMTNBMTJBMEIwMDg0NkIyNyAvKiBMb2Fk
YWJsZVRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2MjEzQTEyQTBCMDA4
NDZCMjcgLyogTXV0YWJsZVRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2
NjEzQTEyQTBCMDA4NDZCMjcgLyogVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIx
QUQ0RTY4MTNBMTJBMEIwMDg0NkIyNyAvKiBUZXh0VHJhY2tDdWUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQjFBRDRFNkExM0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFja0N1ZUxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNzMxM0ExMkE0NjAwODQ2QjI3IC8qIEN1ZUxvYWRlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU3QjEzQTEyQTcyMDA4NDZCMjcgLyogQ3VlUGFy
c2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxMEI3NDBGMTNCRTgwQkYwMEJDMUMyNiAvKiBX
ZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1
ZS5jcHAKaW5kZXggM2I3YTg5M2MyY2YwMzllMmU5OTFlMDk2ZjVmNmY0NTQ5ZTdhMGUyNS4uNWYw
OTExZjlhY2Y2NDE0NDc3ZWVlMzI2YjZhZDJmNDFjYzJkZGRhZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dFRyYWNrQ3VlLmNwcApAQCAtMiwyMyArMiwyOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KQEAgLTMxLDYgKzM2LDcgQEAKIAogI2luY2x1
ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJUZXh0VHJhY2suaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzksMTUgKzQ1LDQ5IEBAIFRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKGNvbnN0IFN0cmluZyYg
aWQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyCiAgICAgLCBtX3N0YXJ0VGlt
ZShzdGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAgLCBtX2NvbnRlbnQoY29udGVudCkK
LSAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3BhdXNlT25FeGl0KHBhdXNlT25F
eGl0KQorICAgICwgbV93cml0aW5nRGlyZWN0aW9uKEhvcml6b250YWwpCisgICAgLCBtX3NuYXBU
b0xpbmVzKHRydWUpCisgICAgLCBtX2xpbmVQb3NpdGlvbigtMSkKKyAgICAsIG1fdGV4dFBvc2l0
aW9uKDUwKQorICAgICwgbV9jdWVTaXplKDEwMCkKKyAgICAsIG1fY3VlQWxpZ25tZW50KE1pZGRs
ZSkKKyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiB7CisgICAgcGFyc2VTZXR0aW5ncyhzZXR0aW5n
cyk7CiB9CiAKIFRleHRUcmFja0N1ZTo6flRleHRUcmFja0N1ZSgpCiB7CiB9CiAKK2Jvb2wgVGV4
dFRyYWNrQ3VlOjpjaGFySXNBTnVtYmVyKGNoYXIgYykKK3sKKyAgICByZXR1cm4gJzAnIDw9IGMg
JiYgYyA8PSAnOSc7Cit9CisKK1N0cmluZyBUZXh0VHJhY2tDdWU6OmNvbGxlY3ROdW1iZXJDaGFy
YWN0ZXJzKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICBT
dHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAgICB3aGlsZSAoKnBvc2l0aW9uIDwgaW5wdXQubGVuZ3Ro
KCkgJiYgY2hhcklzQU51bWJlcihpbnB1dFsqcG9zaXRpb25dKSkKKyAgICAgICAgZGlnaXRzLmFw
cGVuZChpbnB1dFsoKnBvc2l0aW9uKSsrXSk7CisgICAgcmV0dXJuIGRpZ2l0cy50b1N0cmluZygp
OworfQorCitib29sIFRleHRUcmFja0N1ZTo6Y2hhcklzQVNwYWNlQ2hhcmFjdGVyKGNoYXIgYykK
K3sKKyAgICAvLyBXZWJWVFQgc3BhY2UgY2hhcmFjdGVycyBhcmUgVSswMDIwIFNQQUNFLCBVKzAw
MDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKHRhYiksIFUrMDAwQSBMSU5FIEZFRUQgKExGKSwgVSsw
MDBDIEZPUk0gRkVFRCAoRkYpLCBhbmQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpLgorICAg
IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xmJyB8
fCBjID09ICdccic7Cit9CisKK1N0cmluZyBUZXh0VHJhY2tDdWU6OmNvbGxlY3RTdHJpbmcoY29u
c3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nOworICAgIHdoaWxlICgqcG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAhY2hh
cklzQVNwYWNlQ2hhcmFjdGVyKGlucHV0Wypwb3NpdGlvbl0pKQorICAgICAgICBzdHJpbmcuYXBw
ZW5kKGlucHV0WygqcG9zaXRpb24pKytdKTsKKyAgICByZXR1cm4gc3RyaW5nLnRvU3RyaW5nKCk7
Cit9CisKIFRleHRUcmFjayogVGV4dFRyYWNrQ3VlOjp0cmFjaygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fdHJhY2s7CkBAIC03OCwxMCArMTE4LDM3IEBAIGJvb2wgVGV4dFRyYWNrQ3VlOjpwYXVz
ZU9uRXhpdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGF1c2VPbkV4aXQ7CiB9CiAKK1N0cmluZyBU
ZXh0VHJhY2tDdWU6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3dyaXRpbmdE
aXJlY3Rpb24pIHsKKyAgICBjYXNlIEhvcml6b250YWw6IAorICAgICAgICByZXR1cm4gImhvcml6
b250YWwiOworICAgIGNhc2UgVmVydGljYWxHcm93aW5nTGVmdDoKKyAgICAgICAgcmV0dXJuICJ2
ZXJ0aWNhbCI7CisgICAgY2FzZSBWZXJ0aWNhbEdyb3dpbmdSaWdodDoKKyAgICAgICAgcmV0dXJu
ICJ2ZXJ0aWNhbC1sciI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0K
K30KKworU3RyaW5nIFRleHRUcmFja0N1ZTo6YWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKG1fY3VlQWxpZ25tZW50KSB7CisgICAgY2FzZSBTdGFydDogCisgICAgICAgIHJldHVybiAi
c3RhcnQiOworICAgIGNhc2UgTWlkZGxlOgorICAgICAgICByZXR1cm4gIm1pZGRsZSI7CisgICAg
Y2FzZSBFbmQ6CisgICAgICAgIHJldHVybiAiZW5kIjsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gIiI7CisgICAgfQorfQorCiBTdHJpbmcgVGV4dFRyYWNrQ3VlOjpnZXRDdWVBc1NvdXJj
ZSgpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fY29udGVudDsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBUZXh0VHJhY2tDdWU6OmdldEN1ZUFzSFRNTCgpCkBAIC0xMDEsNiArMTY4LDEy
MCBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgbV9p
c0FjdGl2ZSA9IGFjdGl2ZTsKIH0KIAordm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0dGluZ3Mo
Y29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBQYXJzZSB0aGUgV2Vi
VlRUIHNldHRpbmdzLgorICAgIC8vIDEgLSBJbml0aWFsIHNldHVwLgorICAgIHVuc2lnbmVkIHBv
c2l0aW9uID0gMDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSkgeworICAg
ICAgICAvLyAyLTQgU2V0dGluZ3MgLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIHJlcHJlc2VudGlu
ZyBhIHNldHRpbmdzLgorICAgICAgICBjaGFyIHNldHRpbmcgPSBpbnB1dFtwb3NpdGlvbisrXTsK
KyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIC8vIDUtNyAtIElmIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gaXMg
bm90ICc6Jywgc2V0IHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nLgorICAgICAgICBpZiAoaW5wdXRb
cG9zaXRpb24rK10gIT0gJzonKQorICAgICAgICAgICAgc2V0dGluZyA9ICcgJzsKKyAgICAgICAg
aWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIC8vIDggLSBHYXRoZXIgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWUgb2Ygc2V0dGluZy4K
KyAgICAgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAg
ICAgeworICAgICAgICAgICAgU3RyaW5nIHdyaXRpbmdEaXJlY3Rpb24gPSBjb2xsZWN0U3RyaW5n
KGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJlY3Rpb24gPT0g
InZlcnRpY2FsIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24gPSBWZXJ0aWNh
bEdyb3dpbmdMZWZ0OworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJlY3Rpb24gPT0gInZlcnRp
Y2FsLWxyIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24gPSBWZXJ0aWNhbEdy
b3dpbmdSaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICdMJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgbGluZVBv
c2l0aW9uQnVpbGRlcjsKKyAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0
aCgpICYmIChpbnB1dFtwb3NpdGlvbl0gPT0gJy0nIHx8IGlucHV0W3Bvc2l0aW9uXSA9PSAnJScg
fHwgY2hhcklzQU51bWJlcihpbnB1dFtwb3NpdGlvbl0pKSkKKyAgICAgICAgICAgICAgICBsaW5l
UG9zaXRpb25CdWlsZGVyLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgICAgICAgICBT
dHJpbmcgbGluZVBvc2l0aW9uID0gbGluZVBvc2l0aW9uQnVpbGRlci50b1N0cmluZygpOworICAg
ICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgIWNoYXJJc0FTcGFjZUNo
YXJhY3RlcihpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNl
OworICAgICAgICAgICAgaWYgKGxpbmVQb3NpdGlvbi5maW5kKCctJywgMSkgIT0gbm90Rm91bmQg
fHwgbGluZVBvc2l0aW9uLnJldmVyc2VGaW5kKCIlIiwgbGluZVBvc2l0aW9uLmxlbmd0aCgpIC0g
MikgIT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
bGluZVBvc2l0aW9uWzBdID09ICctJyAmJiBsaW5lUG9zaXRpb25bbGluZVBvc2l0aW9uLmxlbmd0
aCgpIC0gMV0gPT0gJyUnKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYm9v
bCB2YWxpZE51bWJlcjsKKyAgICAgICAgICAgIGxvbmcgbnVtYmVyID0gbGluZVBvc2l0aW9uLnRv
SW50NjQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICghdmFsaWROdW1iZXIpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobGluZVBvc2l0aW9uW2xpbmVQb3Np
dGlvbi5sZW5ndGgoKSAtIDFdID09ICclJykgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXIg
PCAwIHx8IG51bWJlciA+IDEwMCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgbV9zbmFwVG9MaW5lcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9saW5lUG9zaXRpb24gPSBudW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnVCc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICBTdHJp
bmcgdGV4dFBvc2l0aW9uID0gY29sbGVjdE51bWJlckNoYXJhY3RlcnMoaW5wdXQsICZwb3NpdGlv
bik7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaW5wdXRbcG9zaXRpb24rK10gIT0gJyUn
KQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgaWYgKHBvc2l0
aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgIWNoYXJJc0FTcGFjZUNoYXJhY3RlcihpbnB1dFtwb3Np
dGlvbl0pKQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgaWYg
KHRleHRQb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBib29sIHZhbGlkTnVtYmVyOworICAgICAgICAgICAgbG9uZyBudW1iZXIgPSB0ZXh0UG9z
aXRpb24udG9JbnQ2NCgmdmFsaWROdW1iZXIpOworICAgICAgICAgICAgaWYgKCF2YWxpZE51bWJl
cikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChudW1iZXIgPCAwIHx8
IG51bWJlciA+IDEwMCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX3RleHRQ
b3NpdGlvbiA9IG51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBjdWVTaXpl
ID0gY29sbGVjdE51bWJlckNoYXJhY3RlcnMoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAgICAg
ICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoaW5wdXRbcG9zaXRpb24rK10gIT0gJyUnKQorICAgICAgICAgICAg
ICAgIGdvdG8gT3RoZXJ3aXNlOyAgICAgIAorICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5w
dXQubGVuZ3RoKCkgJiYgIWNoYXJJc0FTcGFjZUNoYXJhY3RlcihpbnB1dFtwb3NpdGlvbl0pKQor
ICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgaWYgKGN1ZVNpemUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYm9vbCB2YWxp
ZE51bWJlcjsKKyAgICAgICAgICAgIGxvbmcgbnVtYmVyID0gY3VlU2l6ZS50b0ludDY0KCZ2YWxp
ZE51bWJlcik7CisgICAgICAgICAgICBpZiAoIXZhbGlkTnVtYmVyKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVyID4gMTAwKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9jdWVTaXplID0gbnVtYmVyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0EnOgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGN1ZUFsaWdubWVudCA9IGNvbGxlY3RTdHJpbmco
aW5wdXQsICZwb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoY3VlQWxpZ25tZW50ID09ICJzdGFy
dCIpCisgICAgICAgICAgICAgICAgbV9jdWVBbGlnbm1lbnQgPSBTdGFydDsKKyAgICAgICAgICAg
IGlmIChjdWVBbGlnbm1lbnQgPT0gIm1pZGRsZSIpCisgICAgICAgICAgICAgICAgbV9jdWVBbGln
bm1lbnQgPSBNaWRkbGU7CisgICAgICAgICAgICBpZiAoY3VlQWxpZ25tZW50ID09ICJlbmQiKQor
ICAgICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gRW5kOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gRGlzY2FyZCBhbnkgcmVtYWlu
aW5nIHNwYWNlIGNoYXJhY3RlcnMgYmV0d2VlbiBvciBhZnRlciBzZXR0aW5ncy4KKyAgICAgICAg
d2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgY2hhcklzQVNwYWNlQ2hhcmFjdGVy
KGlucHV0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICBwb3NpdGlvbisrOworICAgICAgICBjb250
aW51ZTsKK090aGVyd2lzZToKKyAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJh
Y3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMgYW5kIGRpc2NhcmQgdGhlbS4KKyAg
ICAgICAgY29sbGVjdFN0cmluZyhpbnB1dCwgJnBvc2l0aW9uKTsKKyAgICB9Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1RleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaApp
bmRleCBjOWMxNTMzNTk5YmU0ZjExZDdjOWFiMzM1N2U3NTVhZTE1YjI2ZGI4Li4xNzZhOGY5N2Ez
OTYyYTVjYTFmZjY2Y2E5MjJmNTY3ZDdiZGFlYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNr
Q3VlLmgKQEAgLTEsMjQgKzEsMjkgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCkBAIC00Myw2ICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1ZShpZCwgc3RhcnQsIGVuZCwg
Y29udGVudCwgc2V0dGluZ3MsIHBhdXNlT25FeGl0KSk7CiAgICAgfQorICAgIHN0YXRpYyBib29s
IGNoYXJJc0FOdW1iZXIoY2hhcik7CisgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0TnVtYmVyQ2hh
cmFjdGVycyhjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOworICAgIHN0YXRpYyBib29sIGNoYXJJ
c0FTcGFjZUNoYXJhY3RlcihjaGFyKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RTdHJpbmco
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKKyAgICAKKyAgICBlbnVtIERpcmVjdGlvbiB7IEhv
cml6b250YWwsIFZlcnRpY2FsR3Jvd2luZ0xlZnQsIFZlcnRpY2FsR3Jvd2luZ1JpZ2h0IH07Cisg
ICAgZW51bSBBbGlnbm1lbnQgeyBTdGFydCwgTWlkZGxlLCBFbmQgfTsKIAogICAgIHZpcnR1YWwg
flRleHRUcmFja0N1ZSgpOwogCkBAIC01Myw2ICs2NSwxMyBAQCBwdWJsaWM6CiAgICAgZG91Ymxl
IHN0YXJ0VGltZSgpIGNvbnN0OwogICAgIGRvdWJsZSBlbmRUaW1lKCkgY29uc3Q7CiAgICAgYm9v
bCBwYXVzZU9uRXhpdCgpIGNvbnN0OworICAgIAorICAgIFN0cmluZyBkaXJlY3Rpb24oKSBjb25z
dDsKKyAgICBib29sIHNuYXBUb0xpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwVG9MaW5lczsg
fQorICAgIGxvbmcgbGluZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9saW5lUG9zaXRpb247
IH0KKyAgICBsb25nIHRleHRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFBvc2l0aW9u
OyB9CisgICAgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jdWVTaXplOyB9CisgICAgU3Ry
aW5nIGFsaWdubWVudCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGdldEN1ZUFzU291cmNlKCk7CiAg
ICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBnZXRDdWVBc0hUTUwoKTsKQEAgLTYzLDE0
ICs4MiwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRleHRUcmFja0N1ZShjb25zdCBTdHJp
bmcmIGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCwg
Y29uc3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhpdCk7CiAKKyAgICB2b2lkIHBh
cnNlU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CisgICAgCiAgICAgVGV4dFRyYWNrKiBtX3RyYWNr
OwogICAgIAogICAgIFN0cmluZyBtX2lkOwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKICAgICBk
b3VibGUgbV9lbmRUaW1lOwogICAgIFN0cmluZyBtX2NvbnRlbnQ7Ci0gICAgU3RyaW5nIG1fc2V0
dGluZ3M7CiAgICAgYm9vbCBtX3BhdXNlT25FeGl0OworICAgIERpcmVjdGlvbiBtX3dyaXRpbmdE
aXJlY3Rpb247CisgICAgYm9vbCBtX3NuYXBUb0xpbmVzOworICAgIGxvbmcgbV9saW5lUG9zaXRp
b247CisgICAgbG9uZyBtX3RleHRQb3NpdGlvbjsKKyAgICBsb25nIG1fY3VlU2l6ZTsKKyAgICBB
bGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisKICAgICBib29sIG1faXNBY3RpdmU7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAppbmRleCAzYjM1M2U3
YzhjMzVkZWYyMzU0ODdmYjliNzYyYTI5YWQ0MDc1YTE2Li4xNDE5ZmQ5MGYxOGE1OGIzMmNiYmYw
ZWRiOTA5YTUzYWViODNhODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
cmFjay9DdWVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDdWVQYXJzZXIuaCIKIAog
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTcwLDE1ICs3MSwyMCBAQCBib29sIEN1ZVBhcnNlcjo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0
cmluZyYgdXJsKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDdWVQYXJzZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJikKK3ZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQg
bG9uZyAvKmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7
Ci0gICAgLy8gRklYTUUoNjI4OTMpOiBDcmVhdGUgbV9wcml2YXRlIGJhc2VkIG9uIE1JTUUgdHlw
ZS4KLSAgICBtX2NsaWVudC0+dHJhY2tMb2FkU3RhcnRlZCgpOworICAgIGlmIChyZXNwb25zZS5t
aW1lVHlwZSgpID09ICJ0ZXh0L3Z0dCIpCisgICAgICAgIGNyZWF0ZVdlYlZUVFBhcnNlcigpOwog
fQogCiB2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbikKIHsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IFNlbmQgZGF0YSBhbG9uZyB0byBtX3ByaXZh
dGUgcGFyc2VyIHRvIGJlIHBhcnNlZC4KKyAgICAvLyBJZiBtaW1lIHR5cGUgZnJvbSBkaWRSZWNl
aXZlUmVzcG9uc2Ugd2FzIG5vdCBpbmZvcm1hdGl2ZSwgc25pZmYgZmlsZSBjb250ZW50LgorICAg
IGlmICghbV9wcml2YXRlICYmIFdlYlZUVFBhcnNlcjo6cmVxdWlyZUZpbGVJZGVudGlmaWVyKGRh
dGEsIGxlbikpCisgICAgICAgIGNyZWF0ZVdlYlZUVFBhcnNlcigpOworCisgICAgaWYgKG1fcHJp
dmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5wYXJzZUJ5dGVzKGRhdGEsIGxlbik7CiB9CiAKIHZv
aWQgQ3VlUGFyc2VyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpCkBAIC05Niw2ICsx
MDIsMTkgQEAgdm9pZCBDdWVQYXJzZXI6OmZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRl
eHRUcmFja0N1ZT4gPiYpCiAgICAgLy8gRklYTUUoNjI4OTMpOiBJbXBsZW1lbnQuCiB9CiAKK3Zv
aWQgQ3VlUGFyc2VyOjpuZXdDdWVzUGFyc2VkKCkKK3sKKyAgICBtX2NsaWVudC0+bmV3Q3Vlc1Bh
cnNlZCgpOworfQorCit2b2lkIEN1ZVBhcnNlcjo6Y3JlYXRlV2ViVlRUUGFyc2VyKCkKK3sKKyAg
ICBpZiAoIW1fcHJpdmF0ZSkgeworICAgICAgICBtX3ByaXZhdGUgPSBXZWJWVFRQYXJzZXI6OmNy
ZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9jbGllbnQtPnRyYWNrTG9hZFN0YXJ0ZWQoKTsKKyAgICB9
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCmluZGV4IDc0NGNjMzIyNzhjNWY0Y2Y5ZTRmODJjYTdj
NTNhYjE3YmQ4OWQ4Y2YuLjdjNmM2MzE3NGU1NzgzNjk2MDZlZGEyNWY0OGFkNTQ5OGQwODVmMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCkBAIC0zMyw5ICsz
Myw5IEBACiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLSNpbmNsdWRlICJDdWVQYXJzZXJQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIlRocmVh
ZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCB0cmFja0xvYWRDb21wbGV0ZWQoKSA9IDA7CiB9OwogCi1jbGFzcyBDdWVQYXJzZXIg
OiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitjbGFzcyBDdWVQYXJzZXIgOiBwdWJs
aWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCB7CiBwdWJs
aWM6CiAgICAgQ3VlUGFyc2VyKCk7CiAgICAgdmlydHVhbCB+Q3VlUGFyc2VyKCk7CkBAIC02Nyw4
ICs2NywxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJik7
CiAKICAgICB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4g
PiYpOworICAgIHZvaWQgbmV3Q3Vlc1BhcnNlZCgpOwogCiBwcml2YXRlOgorICAgIHZvaWQgY3Jl
YXRlV2ViVlRUUGFyc2VyKCk7CisgCiAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9h
ZGVyOwogICAgIE93blB0cjxDdWVQYXJzZXJQcml2YXRlSW50ZXJmYWNlPiBtX3ByaXZhdGU7CiAg
ICAgQ3VlUGFyc2VyQ2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaAppbmRleCBiYzNlNGZiYzA5NTFiZTM0Y2JmMDEw
NzFlZDI4NjlhOTlhMmY4MzBlLi5jZTYzMzdkOTFlNTBlM2JiMWVkMmZiOGFiMmU0MmJjZmVlMTcx
M2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJp
dmF0ZS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VC
eXRlcyhjb25zdCBjaGFyKiwgaW50KSA9IDA7CiAKICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlw
IG9mIGxhc3QgcGFyc2VkIGN1ZXMgdG8gY2FsbGVyLgotICAgIHZpcnR1YWwgdm9pZCBmZXRjaFBh
cnNlZEN1ZXMoVmVjdG9yPFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4m
KSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICBDdWVQYXJzZXJQcml2YXRlSW50ZXJmYWNlKCkgeyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43ZmVlMzkwMWM4ZDUyOGIwNTFiOWU2ZTdhYzc3YmQwYjlmMzM4NDk0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNw
cApAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgV2ViVlRUUGFy
c2VyOjpyZXF1aXJlRmlsZUlkZW50aWZpZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
K3sKKyAgICAvLyBBIFdlYlZUVCBmaWxlIGlkZW50aWZpZXIgY29uc2lzdHMgb2YgYW4gb3B0aW9u
YWwgQk9NIGNoYXJhY3RlciwKKyAgICAvLyB0aGUgc3RyaW5nICJXRUJWVFQiIGZvbGxvd2VkIGJ5
IGFuIG9wdGlvbmFsIHNwYWNlIG9yIHRhYiBjaGFyYWN0ZXIsCisgICAgLy8gYW5kIGFueSBudW1i
ZXIgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgbGluZSB0ZXJtaW5hdG9ycyAuLi4KKyAgICB1
bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisgICAgaWYgKGxlbmd0aCA+PSAzICYmIGRhdGFbMF0gPT0g
J1x4RUYnICYmIGRhdGFbMV0gPT0gJ1x4QkInICYmIGRhdGFbMl0gPT0gJ1x4QkYnKQorICAgICAg
ICBwb3NpdGlvbiArPSAzOworICAgIFN0cmluZyBsaW5lID0gY29sbGVjdE5leHRMaW5lKGRhdGEs
IGxlbmd0aCwgJnBvc2l0aW9uKTsKKyAgICAgICAgCisgICAgaWYgKGxpbmUubGVuZ3RoKCkgPCA2
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxpbmUubGVuZ3RoKCkgPT0gNiAmJiBs
aW5lICE9ICJXRUJWVFQiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxpbmUubGVu
Z3RoKCkgPiA2ICYmIChsaW5lLnN1YnN0cmluZygwLCA2KSAhPSAiV0VCVlRUIiB8fCAobGluZVs2
XSAhPSAnICcgJiYgbGluZVs2XSAhPSAnXHQnKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIoQ3VlUGFyc2Vy
UHJpdmF0ZUNsaWVudCogY2xpZW50KQorICAgIDogbV9zdGF0ZShJbml0aWFsKQoreworICAgIG1f
Y2xpZW50ID0gY2xpZW50OworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVz
KFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRwdXRDdWVzKQoreworICAgIG91dHB1
dEN1ZXMgPSBtX2N1ZWxpc3Q7CisgICAgbV9jdWVsaXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgV2Vi
VlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7Cisg
ICAgLy8gNC44LjEwLjEzLjMgV0hBVFdHIFdlYlZUVCBQYXJzZXIgYWxnb3JpdGhtLgorICAgIC8v
IDEtMyAtIEluaXRpYWwgc2V0dXAuCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworCisgICAg
ZG8geworICAgICAgICBTdHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRhLCBsZW5ndGgs
ICZwb3NpdGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAg
ICAgY2FzZSBJbml0aWFsOgorICAgICAgICAgICAgLy8gNC0xMiAtIENvbGxlY3QgdGhlIGZpcnN0
IGxpbmUgYW5kIGNoZWNrIGZvciAiV0VCVlRUIi4KKyAgICAgICAgICAgIGlmICghcmVxdWlyZUZp
bGVJZGVudGlmaWVyKGRhdGEsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgbV9zdGF0ZSA9IEhlYWRlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICAgICAgY2FzZSBIZWFkZXI6CisgICAgICAgICAgICAvLyAxMy0xOCAtIEFsbG93IGEgaGVh
ZGVyIChjb21tZW50IGFyZWEpIHVuZGVyIHRoZSBXRUJWVFQgbGluZS4KKyAgICAgICAgICAgIGlm
IChsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gSWQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgSWQ6CisgICAgICAgICAgICAvLyAx
OS0yOSAtIEFsbG93IGFueSBudW1iZXIgb2YgbGluZSB0ZXJtaW5hdG9ycywgdGhlbiBpbml0aWFs
aXplIG5ldyBjdWUgdmFsdWVzLgorICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVzZXRDdWVWYWx1ZXMoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gMzAtMzkgLSBDaGVjayBpZiB0aGlzIGxpbmUgY29udGFp
bnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KKyAgICAgICAgICAgIG1f
c3RhdGUgPSBjb2xsZWN0Q3VlSWQobGluZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIGNhc2UgVGltaW5nc0FuZFNldHRpbmdzOgorICAgICAgICAgICAgLy8gNDAgLSBD
b2xsZWN0IGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy4KKyAgICAgICAgICAgIG1fc3RhdGUgPSBj
b2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGxpbmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgICAgICBjYXNlIEN1ZVRleHQ6CisgICAgICAgICAgICAvLyA0MS01MyAtIENvbGxl
Y3QgdGhlIGN1ZSB0ZXh0LCBjcmVhdGUgYSBjdWUsIGFuZCBhZGQgaXQgdG8gdGhlIG91dHB1dC4K
KyAgICAgICAgICAgIG1fc3RhdGUgPSBjb2xsZWN0Q3VlVGV4dChsaW5lKTsKKyAgICAgICAgICAg
IGlmICgoaW50KXBvc2l0aW9uID49IGxlbmd0aCAtIDEgJiYgbV9zdGF0ZSA9PSBDdWVUZXh0KQor
ICAgICAgICAgICAgICAgIHByb2Nlc3NDdWVUZXh0KCk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEJhZEN1ZToKKyAgICAgICAgICAgIC8vIDU0LTYyIC0gQ29sbGVjdCBhbmQg
ZGlzY2FyZCB0aGUgcmVtYWluaW5nIGN1ZS4KKyAgICAgICAgICAgIG1fc3RhdGUgPSBpZ25vcmVC
YWRDdWUobGluZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUg
KChpbnQpcG9zaXRpb24gPCBsZW5ndGgpOworfQorCitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUg
V2ViVlRUUGFyc2VyOjpjb2xsZWN0Q3VlSWQoY29uc3QgU3RyaW5nJiBsaW5lKQoreworICAgIGlm
IChsaW5lLmNvbnRhaW5zKCItLT4iKSkKKyAgICAgICAgcmV0dXJuIGNvbGxlY3RUaW1pbmdzQW5k
U2V0dGluZ3MobGluZSk7CisgICAgbV9jdXJyZW50SWQgPSBsaW5lOworICAgIHJldHVybiBUaW1p
bmdzQW5kU2V0dGluZ3M7Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJz
ZXI6OmNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBsaW5lKQoreworICAg
IC8vIDQuOC4xMC4xMy4zIENvbGxlY3QgV2ViVlRUIGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy4K
KyAgICAvLyAxLTMgLSBMZXQgaW5wdXQgYmUgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQgYW5kIHBv
c2l0aW9uIGJlIGEgcG9pbnRlciBpbnRvIGlucHV0CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAw
OworICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsICZwb3NpdGlvbik7CisKKyAgICAvLyA0LTUgLSBD
b2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQg
cmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIHN0YXJ0
IHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIFN0cmluZyBzdGFydCA9IFRleHRUcmFj
a0N1ZTo6Y29sbGVjdFN0cmluZyhsaW5lLCAmcG9zaXRpb24pOworICAgIG1fY3VycmVudFN0YXJ0
VGltZSA9IGNvbGxlY3RUaW1lU3RhbXAoc3RhcnQpOworICAgIGlmIChtX2N1cnJlbnRTdGFydFRp
bWUgPT0gbWFsZm9ybWVkVGltZSkKKyAgICAgICAgcmV0dXJuIEJhZEN1ZTsKKyAgICBza2lwV2hp
dGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAgLy8gNi05IC0gSWYgdGhlIG5leHQgdGhy
ZWUgY2hhcmFjdGVycyBhcmUgbm90ICItLT4iLCBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1cmUuCisg
ICAgaWYgKGxpbmUuZmluZCgiLS0+IiwgcG9zaXRpb24pID09IG5vdEZvdW5kKQorICAgICAgICBy
ZXR1cm4gQmFkQ3VlOworICAgIHBvc2l0aW9uICs9IDM7CisgICAgc2tpcFdoaXRlU3BhY2UobGlu
ZSwgJnBvc2l0aW9uKTsKKworICAgIC8vIDEwLTExIC0gQ29sbGVjdCBhIFdlYlZUVCB0aW1lc3Rh
bXAuIElmIHRoYXQgZmFpbHMsIHRoZW4gYWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLiBPdGhlcndp
c2UsIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBlbmQgdGltZSBiZSB0aGUgY29sbGVjdGVkIHRp
bWUuCisgICAgU3RyaW5nIGVuZCA9IFRleHRUcmFja0N1ZTo6Y29sbGVjdFN0cmluZyhsaW5lLCAm
cG9zaXRpb24pOworICAgIG1fY3VycmVudEVuZFRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKGVuZCk7
CisgICAgaWYgKG1fY3VycmVudEVuZFRpbWUgPT0gbWFsZm9ybWVkVGltZSkKKyAgICAgICAgcmV0
dXJuIEJhZEN1ZTsKKyAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAg
Ly8gMTIgLSBQYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzIGZvciB0aGUgY3VlIChjb25kdWN0ZWQg
aW4gVGV4dFRyYWNrQ3VlKS4KKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGxpbmUuc3Vic3RyaW5n
KHBvc2l0aW9uLCBsaW5lLmxlbmd0aCgpLTEpOworICAgIHJldHVybiBDdWVUZXh0OworfQorCitX
ZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0Q3VlVGV4dChjb25z
dCBTdHJpbmcmIGxpbmUpCit7CisgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7CisgICAgICAgIHBy
b2Nlc3NDdWVUZXh0KCk7CisgICAgICAgIHJldHVybiBJZDsKKyAgICB9CisgICAgaWYgKCFtX2N1
cnJlbnRDb250ZW50LmlzRW1wdHkoKSkKKyAgICAgICAgbV9jdXJyZW50Q29udGVudC5hcHBlbmQo
IlxuIik7CisgICAgbV9jdXJyZW50Q29udGVudC5hcHBlbmQobGluZSk7CisgICAgcmV0dXJuIEN1
ZVRleHQ7Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6Omlnbm9y
ZUJhZEN1ZShjb25zdCBTdHJpbmcmIGxpbmUpCit7CisgICAgaWYgKCFsaW5lLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIEJhZEN1ZTsKKyAgICByZXR1cm4gSWQ7Cit9CisKK2RvdWJsZSBXZWJW
VFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3RyaW5nJiBsaW5lKQoreworICAgIC8v
IDQuOC4xMC4xMy4zIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLgorICAgIC8vIDEtNCAtIElu
aXRpYWwgY2hlY2tzLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBlbnVtIE1vZGUg
eyBtaW51dGVzLCBob3VycyB9OworICAgIE1vZGUgbW9kZSA9IG1pbnV0ZXM7CisgICAgaWYgKHBv
c2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIVRleHRUcmFja0N1ZTo6Y2hhcklzQU51bWJlcihs
aW5lW3Bvc2l0aW9uXSkpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworCisgICAgLy8g
NS02IC0gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgMC05LgorICAg
IFN0cmluZyBkaWdpdHMxID0gVGV4dFRyYWNrQ3VlOjpjb2xsZWN0TnVtYmVyQ2hhcmFjdGVycyhs
aW5lLCAmcG9zaXRpb24pOworICAgIGludCB2YWx1ZTEgPSBkaWdpdHMxLnRvSW50KCk7CisKKyAg
ICAvLyA3IC0gSWYgbm90IDIgY2hhcmFjdGVycyBvciB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gNTks
IGludGVycHJldCBhcyBob3Vycy4KKyAgICBpZiAoZGlnaXRzMS5sZW5ndGgoKSAhPSAyIHx8IHZh
bHVlMSA+IDU5KQorICAgICAgICBtb2RlID0gaG91cnM7CisKKyAgICAvLyA4LTEyIC0gQ29sbGVj
dCB0aGUgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJzonIChtdXN0IGJlIDIgY2hhcnMpLgor
ICAgIGlmIChwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbcG9zaXRpb24rK10gIT0g
JzonKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAocG9zaXRpb24gPj0g
bGluZS5sZW5ndGgoKSB8fCAhVGV4dFRyYWNrQ3VlOjpjaGFySXNBTnVtYmVyKGxpbmVbcG9zaXRp
b25dKSkKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgU3RyaW5nIGRpZ2l0czIg
PSBUZXh0VHJhY2tDdWU6OmNvbGxlY3ROdW1iZXJDaGFyYWN0ZXJzKGxpbmUsICZwb3NpdGlvbik7
CisgICAgaW50IHZhbHVlMiA9IGRpZ2l0czIudG9JbnQoKTsKKyAgICBpZiAoZGlnaXRzMi5sZW5n
dGgoKSAhPSAyKSAKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisKKyAgICAvLyAxMyAt
IERldGVjdCB3aGV0aGVyIHRoaXMgdGltZXN0YW1wIGluY2x1ZGVzIGhvdXJzLgorICAgIGludCB2
YWx1ZTM7CisgICAgaWYgKG1vZGUgPT0gaG91cnMgfHwgKHBvc2l0aW9uIDwgbGluZS5sZW5ndGgo
KSAmJiBsaW5lW3Bvc2l0aW9uXSA9PSAnOicpKSB7CisgICAgICAgIGlmIChwb3NpdGlvbiA+PSBs
aW5lLmxlbmd0aCgpIHx8IGxpbmVbcG9zaXRpb25dICE9ICc6JykKKyAgICAgICAgICAgIHJldHVy
biBtYWxmb3JtZWRUaW1lOworICAgICAgICBwb3NpdGlvbisrOworICAgICAgICBpZiAocG9zaXRp
b24gPj0gbGluZS5sZW5ndGgoKSB8fCAhVGV4dFRyYWNrQ3VlOjpjaGFySXNBTnVtYmVyKGxpbmVb
cG9zaXRpb25dKSkKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICBT
dHJpbmcgZGlnaXRzMyA9IFRleHRUcmFja0N1ZTo6Y29sbGVjdE51bWJlckNoYXJhY3RlcnMobGlu
ZSwgJnBvc2l0aW9uKTsKKyAgICAgICAgaWYgKGRpZ2l0czMubGVuZ3RoKCkgIT0gMikKKyAgICAg
ICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICB2YWx1ZTMgPSBkaWdpdHMzLnRv
SW50KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWUzID0gdmFsdWUyOworICAgICAgICB2
YWx1ZTIgPSB2YWx1ZTE7CisgICAgICAgIHZhbHVlMSA9IDA7CisgICAgfQorCisgICAgLy8gMTQt
MTkgLSBDb2xsZWN0IG5leHQgc2VxdWVuY2Ugb2YgMC05IGFmdGVyICcuJyAobXVzdCBiZSAzIGNo
YXJzKS4KKyAgICBpZiAocG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lW3Bvc2l0aW9u
KytdICE9ICcuJykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYgKHBvc2l0
aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIVRleHRUcmFja0N1ZTo6Y2hhcklzQU51bWJlcihsaW5l
W3Bvc2l0aW9uXSkpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgIFN0cmluZyBk
aWdpdHM0ID0gVGV4dFRyYWNrQ3VlOjpjb2xsZWN0TnVtYmVyQ2hhcmFjdGVycyhsaW5lLCAmcG9z
aXRpb24pOworICAgIGlmIChkaWdpdHM0Lmxlbmd0aCgpICE9IDMpCisgICAgICAgIHJldHVybiBt
YWxmb3JtZWRUaW1lOworICAgIGludCB2YWx1ZTQgPSBkaWdpdHM0LnRvSW50KCk7CisgICAgaWYg
KHZhbHVlMiA+IDU5IHx8IHZhbHVlMyA+IDU5KQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGlt
ZTsKKworICAgIC8vIDIwLTIxIC0gQ2FsY3VsYXRlIHJlc3VsdC4KKyAgICByZXR1cm4gKHZhbHVl
MSAqIHNlY29uZHNJbkhvdXIpICsgKHZhbHVlMiAqIHNlY29uZHNJbk1pbnV0ZSkgKyB2YWx1ZTMg
KyAoKGRvdWJsZSl2YWx1ZTQgLyAxMDAwKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnByb2Nl
c3NDdWVUZXh0KCkKK3sKKyAgICAvLyA1MSAtIEN1ZSB0ZXh0IHByb2Nlc3NpbmcgYmFzZWQgb24g
V2ViVlRUIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMgYW5kIFdlYlZUVCBjdWUgdGV4dCBET00gY29u
c3RydWN0aW9uIHJ1bGVzLiAgICAKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0
VHJhY2tDdWU6OmNyZWF0ZShtX2N1cnJlbnRJZCwgbV9jdXJyZW50U3RhcnRUaW1lLCBtX2N1cnJl
bnRFbmRUaW1lLCBtX2N1cnJlbnRDb250ZW50LnRvU3RyaW5nKCksIG1fY3VycmVudFNldHRpbmdz
LCBmYWxzZSk7CisgICAgbV9jdWVsaXN0LmFwcGVuZChjdWUpOworICAgIG1fY2xpZW50LT5uZXdD
dWVzUGFyc2VkKCk7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpyZXNldEN1ZVZhbHVlcygpCit7
CisgICAgbV9jdXJyZW50SWQgPSBlbXB0eVN0cmluZygpOworICAgIG1fY3VycmVudFNldHRpbmdz
ID0gZW1wdHlTdHJpbmcoKTsKKyAgICBtX2N1cnJlbnRTdGFydFRpbWUgPSAwOworICAgIG1fY3Vy
cmVudEVuZFRpbWUgPSAwOworICAgIG1fY3VycmVudENvbnRlbnQuY2xlYXIoKTsKK30KKwordm9p
ZCBXZWJWVFRQYXJzZXI6OnNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWdu
ZWQqIHBvc2l0aW9uKQoreworICAgIHdoaWxlICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYm
IFRleHRUcmFja0N1ZTo6Y2hhcklzQVNwYWNlQ2hhcmFjdGVyKGxpbmVbKnBvc2l0aW9uXSkpCisg
ICAgICAgICgqcG9zaXRpb24pKys7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpza2lwTGluZVRl
cm1pbmF0b3IoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgdW5zaWduZWQqIHBvc2l0aW9u
KQoreworICAgIGlmICgoaW50KSpwb3NpdGlvbiA+PSBsZW5ndGgpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoZGF0YVsqcG9zaXRpb25dID09ICdccicpCisgICAgICAgICgqcG9zaXRpb24pKys7
CisgICAgaWYgKChpbnQpKnBvc2l0aW9uID49IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChkYXRhWypwb3NpdGlvbl0gPT0gJ1xuJykKKyAgICAgICAgKCpwb3NpdGlvbikrKzsKK30K
KworU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29sbGVjdE5leHRMaW5lKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGgsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICB1bnNpZ25lZCBvbGRQb3Np
dGlvbiA9ICpwb3NpdGlvbjsKKyAgICB3aGlsZSAoKGludCkqcG9zaXRpb24gPCBsZW5ndGggJiYg
ZGF0YVsqcG9zaXRpb25dICE9ICdccicgJiYgZGF0YVsqcG9zaXRpb25dICE9ICdcbicpCisgICAg
ICAgICgqcG9zaXRpb24pKys7CisgICAgU3RyaW5nIGxpbmUgPSBTdHJpbmc6OmZyb21VVEY4KGRh
dGEgKyBvbGRQb3NpdGlvbiwgKnBvc2l0aW9uIC0gb2xkUG9zaXRpb24pOworICAgIHNraXBMaW5l
VGVybWluYXRvcihkYXRhLCBsZW5ndGgsIHBvc2l0aW9uKTsKKyAgICByZXR1cm4gbGluZTsKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNr
L1dlYlZUVFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFy
c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjE5OTdhMGU1MmM5MGI1M2MxNGUwNWMxMzMzYjljZjQzZjhhOTNh
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZU
VFBhcnNlci5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWVFRQYXJzZXJfaAorI2RlZmlu
ZSBXZWJWVFRQYXJzZXJfaAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAi
Q3VlUGFyc2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBpbnQgc2Vjb25kc0luSG91ciA9IDM2MDA7CitzdGF0aWMgY29uc3QgaW50IHNl
Y29uZHNJbk1pbnV0ZSA9IDYwOworc3RhdGljIGNvbnN0IGRvdWJsZSBtYWxmb3JtZWRUaW1lID0g
LTE7CisKK2NsYXNzIFdlYlZUVFBhcnNlciA6IHB1YmxpYyBDdWVQYXJzZXJQcml2YXRlSW50ZXJm
YWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJWVFRQYXJzZXIoKSB7IH0KKyAgICAKKyAg
ICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFsLCBIZWFkZXIsIElkLCBUaW1pbmdzQW5kU2V0dGlu
Z3MsIEN1ZVRleHQsIEJhZEN1ZSB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVlRUUGFy
c2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJWVFRQYXJzZXIoY2xpZW50KSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBib29sIHJlcXVpcmVGaWxlSWRlbnRpZmllcihjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpOworCisgICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhW
ZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpOworCitwcm90ZWN0ZWQ6CisgICAgV2ViVlRU
UGFyc2VyKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqKTsKKyAgICAKKyAgICBQYXJzZVN0YXRlIG1f
c3RhdGU7CisKK3ByaXZhdGU6CisgICAgUGFyc2VTdGF0ZSBjb2xsZWN0Q3VlSWQoY29uc3QgU3Ry
aW5nJik7CisgICAgUGFyc2VTdGF0ZSBjb2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGNvbnN0IFN0
cmluZyYpOworICAgIFBhcnNlU3RhdGUgY29sbGVjdEN1ZVRleHQoY29uc3QgU3RyaW5nJik7Cisg
ICAgUGFyc2VTdGF0ZSBpZ25vcmVCYWRDdWUoY29uc3QgU3RyaW5nJik7CisKKyAgICBkb3VibGUg
Y29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHByb2Nlc3NDdWVUZXh0
KCk7CisgICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOworICAgIHZvaWQgc2tpcFdoaXRlU3BhY2Uo
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKKyAgICBzdGF0aWMgdm9pZCBza2lwTGluZVRlcm1p
bmF0b3IoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgdW5zaWduZWQqKTsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCB1
bnNpZ25lZCopOworCisgICAgU3RyaW5nIG1fY3VycmVudElkOworICAgIGRvdWJsZSBtX2N1cnJl
bnRTdGFydFRpbWU7CisgICAgZG91YmxlIG1fY3VycmVudEVuZFRpbWU7CisgICAgU3RyaW5nQnVp
bGRlciBtX2N1cnJlbnRDb250ZW50OworICAgIFN0cmluZyBtX2N1cnJlbnRTZXR0aW5nczsKKwor
ICAgIEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIG1fY2xpZW50OworCisgICAgVmVjdG9yPFJlZlB0
cjxUZXh0VHJhY2tDdWU+ID4gbV9jdWVsaXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102319</attachid>
            <date>2011-07-28 18:23:25 -0700</date>
            <delta_ts>2011-08-02 22:09:47 -0700</delta_ts>
            <desc>updating to ToT so patch will apply</desc>
            <filename>bug-62882-20110728182324.patch</filename>
            <type>text/plain</type>
            <size>41351</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODcxOWRj
M2FlN2FkMzhkYmU4ZjI2MzZiM2I1YzJlMTcyMGM0ODRlOC4uMWEyY2M3MDYxNGIyZjI3Y2E4OTg4
MjM4ZTM2ZmEzN2YwYTg0YmE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTMsNiArMTk5
Myw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE3NDMwYzU2ZmY3ZmIwYmMwZTE2
MGYxZTk1MzYyOTkxMWMyZGRiYi4uMDQ1ZTA1MGVkOWEyNjE4Yzg2NzA1NmRiN2VjYjA4ZGMyMzkx
NGE5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA3LTI4ICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURFT19UUkFDSyBmZWF0dXJlIGRlZmlu
ZSwgd2hpY2ggaXMgdHVybmVkIG9mZiwgYnV0CisgICAgICAgIG5ldyB0ZXN0cyBhcmUgYnJpbmcg
YWRkZWQgaW4gbWVkaWEvdHJhY2svIChzZWUgYnVnIDY0OTIxKS4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL1RleHRUcmFja0N1ZS5jcHA6
CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFj
ay9DdWVQYXJzZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS90cmFjay9XZWJWVFRQYXJzZXIuaDogQWRkZWQuCisKIDIwMTEtMDctMjggIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByODg2MDEuIChSZXF1ZXN0ZWQgYnkgU2FtIFdlaW5pZykuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCAzMDI1N2YyZWI4NjA2MjlmMGIzNTI1MThhOGZmOGM2NWU2ZjQ0OTY3
Li45YjJjYjE1MjI2MjExZmFhZjYxODBjZjY1NGUxY2I5NGUxNWRlYTM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI4NDMsNiArMjg0Myw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svV2ViVlRUUGFyc2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RyZWVTaGFy
ZWQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMU3RyaW5nLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VVSUQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0MGY3ZTUzNTlh
OTYwMWRkYzkzYWU2NDVlZjU4M2E2OWQyMTg5YjUyLi5kZTM4NDFjM2RlNzA1MzZiMGQxMjY1MmZj
N2U1NTJhNzVkYjc2ZWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NDI4LDYgKzQ0MjgsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFj
ay9DdWVQYXJzZXJQcml2YXRlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL1dlYlZU
VFBhcnNlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQlN0cmluZy5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL3dpbi9CU3RyaW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CaXRt
YXBJbmZvLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGI0ZmIwOGI0MzEyYzMyMTMwNGQ3N2RjNjQ3
NWQzODJjODVmY2U4NjQuLjQ3NDA4OGMyZWMzZjI2YjA4ODE4NjA3Y2E0OWFkYTIwN2NlZmI2MTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC0yMTA5LDYgKzIxMDksNyBAQCBIRUFERVJTICs9IFwKICAgICBw
bGF0Zm9ybS9UaW1lci5oIFwKICAgICBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBcCiAgICAg
cGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oIFwKKyAgICBwbGF0Zm9ybS90cmFjay9X
ZWJWVFRQYXJzZXIuaCBcCiAgICAgcGxhdGZvcm0vV2lkZ2V0LmggXAogICAgIHBsYXRmb3JtL1Bs
YXRmb3JtU3RyYXRlZ2llcy5oIFwKICAgICBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDhmNzU0OThjZjA0ZDQ5NGYxNjg1YmJkZTM5YWY4YjU5MTJlMDdhZGEuLjI4ODU4OTQ3YTg1
MTBiZTM4ZGNjNWEzYjU0ZjU3ZTE1ZDQ3OTg3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwNjUsNiArNDA2NSw4IEBACiAJ
CUFCRERGRTc5MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQkRERkU3MzBBNUM2RTZGMDBB
M0UxMUQgLyogUmVuZGVyTWVudUxpc3QuY3BwICovOyB9OwogCQlBQkRERkU3QTBBNUM2RTcwMDBB
M0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFCRERGRTc0MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlz
dC5oICovOyB9OwogCQlBRERGMUFENzEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURERjFBRDUx
MjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCAqLzsgfTsKKwkJQjEwQjc0MEUxM0JF
ODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjEwQjc0MEMxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBh
cnNlci5oICovOyB9OworCQlCMTBCNzQwRjEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI3
NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuY3BwICovOyB9OwogCQlCMTQzNTNE
NTEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxNDM1M0QxMTM4RUE4RUQwMEQ1MzI3NiAv
KiBNZWRpYVN0cmVhbUxpc3QuY3BwICovOyB9OwogCQlCMTQzNTNENjEzOEVBOEVEMDBENTMyNzYg
LyogTWVkaWFTdHJlYW1MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMTQzNTNEMjEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0Lmgg
Ki87IH07CiAJCUIxNDM1M0Y4MTM4RUE5NUIwMEQ1MzI3NiAvKiBKU01lZGlhU3RyZWFtTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQzNTNG
NjEzOEVBOTVCMDBENTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3BwICovOyB9OwpAQCAtMTA1
NjAsNiArMTA1NjIsOCBAQAogCQlBQkRERkU3NDBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVu
dUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lbnVMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREYxQUQ0MTI1N0NEOUEwMDAzQTc1
OSAvKiBSZW5kZXJTVkdQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlclNWR1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERG
MUFENTEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUIxMEI3NDBDMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVlRUUGFyc2VyLmg7IHBhdGggPSBwbGF0Zm9y
bS90cmFjay9XZWJWVFRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEw
Qjc0MEQxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJWVFRQYXJzZXIuY3BwOyBwYXRoID0gcGxhdGZvcm0v
dHJhY2svV2ViVlRUUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjE0
MzUzRDExMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0cmVhbUxpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMTQzNTNEMjEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJl
YW1MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtTGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMTQzNTNEMzEzOEVBOEVEMDBENTMy
NzYgLyogTWVkaWFTdHJlYW1MaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYVN0
cmVhbUxpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc5OTMsNiArMTc5
OTcsOCBAQAogCQkJCUIyRTRFQzk1MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAq
LywKIAkJCQlCMkU0RUM5NjBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmlkbCAqLywK
IAkJCQlCMjhDNkEyNjBEMDBDNDQ4MDAzMzRBQTQgLyogeGxpbmthdHRycy5pbiAqLywKKwkJCQlC
MTBCNzQwQzEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmggKi8sCisJCQkJQjEwQjc0
MEQxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgKi8sCiAJCQkpOwogCQkJcGF0
aCA9IHN2ZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzI2NSw2ICsyMzI3MSwx
NiBAQAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTA4Q0NBNEYxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJS
ZWdpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTVEMTNBMTJBMEIwMDg0NkIyNyAvKiBD
dWVJbmRleC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFBRDRFNUYxM0ExMkEwQjAwODQ2QjI3IC8q
IExvYWRhYmxlVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2MzEzQTEyQTBC
MDA4NDZCMjcgLyogTXV0YWJsZVRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFBRDRF
NjcxM0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFB
RDRFNjkxM0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFja0N1ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQjFBRDRFNkIxM0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFja0N1ZUxpc3QuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUIxQUQ0RTc0MTNBMTJBNDYwMDg0NkIyNyAvKiBDdWVMb2FkZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUIxQUQ0RTdDMTNBMTJBNzIwMDg0NkIyNyAvKiBDdWVQYXJzZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTdEMTNBMTJBNzIwMDg0NkIyNyAvKiBDdWVQYXJzZXJQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMTBCNzQwRTEzQkU4MEJGMDBCQzFDMjYgLyog
V2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI2MDUzLDYgKzI2MDY5LDE1IEBACiAJ
CQkJRkQ1MzczNTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUwOENDQTUwMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUQ3MEFENjU3MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNUMxM0ExMkEwQjAwODQ2QjI3IC8qIEN1
ZUluZGV4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTVFMTNBMTJBMEIwMDg0NkIyNyAv
KiBMb2FkYWJsZVRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2MjEzQTEy
QTBCMDA4NDZCMjcgLyogTXV0YWJsZVRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MUFENEU2NjEzQTEyQTBCMDA4NDZCMjcgLyogVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUIxQUQ0RTY4MTNBMTJBMEIwMDg0NkIyNyAvKiBUZXh0VHJhY2tDdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQjFBRDRFNkExM0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFja0N1ZUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNzMxM0ExMkE0NjAwODQ2QjI3IC8qIEN1ZUxv
YWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU3QjEzQTEyQTcyMDA4NDZCMjcgLyog
Q3VlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxMEI3NDBGMTNCRTgwQkYwMEJDMUMy
NiAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRU
cmFja0N1ZS5jcHAKaW5kZXggM2I3YTg5M2MyY2YwMzllMmU5OTFlMDk2ZjVmNmY0NTQ5ZTdhMGUy
NS4uNWYwOTExZjlhY2Y2NDE0NDc3ZWVlMzI2YjZhZDJmNDFjYzJkZGRhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dFRyYWNrQ3VlLmNwcApAQCAtMiwyMyArMiwyOCBAQAogICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KQEAgLTMxLDYgKzM2LDcgQEAKIAog
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJUZXh0VHJhY2suaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzksMTUgKzQ1LDQ5IEBAIFRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKGNvbnN0IFN0
cmluZyYgaWQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyCiAgICAgLCBtX3N0
YXJ0VGltZShzdGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAgLCBtX2NvbnRlbnQoY29u
dGVudCkKLSAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3BhdXNlT25FeGl0KHBh
dXNlT25FeGl0KQorICAgICwgbV93cml0aW5nRGlyZWN0aW9uKEhvcml6b250YWwpCisgICAgLCBt
X3NuYXBUb0xpbmVzKHRydWUpCisgICAgLCBtX2xpbmVQb3NpdGlvbigtMSkKKyAgICAsIG1fdGV4
dFBvc2l0aW9uKDUwKQorICAgICwgbV9jdWVTaXplKDEwMCkKKyAgICAsIG1fY3VlQWxpZ25tZW50
KE1pZGRsZSkKKyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiB7CisgICAgcGFyc2VTZXR0aW5ncyhz
ZXR0aW5ncyk7CiB9CiAKIFRleHRUcmFja0N1ZTo6flRleHRUcmFja0N1ZSgpCiB7CiB9CiAKK2Jv
b2wgVGV4dFRyYWNrQ3VlOjpjaGFySXNBTnVtYmVyKGNoYXIgYykKK3sKKyAgICByZXR1cm4gJzAn
IDw9IGMgJiYgYyA8PSAnOSc7Cit9CisKK1N0cmluZyBUZXh0VHJhY2tDdWU6OmNvbGxlY3ROdW1i
ZXJDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAgICB3aGlsZSAoKnBvc2l0aW9uIDwgaW5wdXQu
bGVuZ3RoKCkgJiYgY2hhcklzQU51bWJlcihpbnB1dFsqcG9zaXRpb25dKSkKKyAgICAgICAgZGln
aXRzLmFwcGVuZChpbnB1dFsoKnBvc2l0aW9uKSsrXSk7CisgICAgcmV0dXJuIGRpZ2l0cy50b1N0
cmluZygpOworfQorCitib29sIFRleHRUcmFja0N1ZTo6Y2hhcklzQVNwYWNlQ2hhcmFjdGVyKGNo
YXIgYykKK3sKKyAgICAvLyBXZWJWVFQgc3BhY2UgY2hhcmFjdGVycyBhcmUgVSswMDIwIFNQQUNF
LCBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKHRhYiksIFUrMDAwQSBMSU5FIEZFRUQgKExG
KSwgVSswMDBDIEZPUk0gRkVFRCAoRkYpLCBhbmQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1Ip
LgorICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0g
J1xmJyB8fCBjID09ICdccic7Cit9CisKK1N0cmluZyBUZXh0VHJhY2tDdWU6OmNvbGxlY3RTdHJp
bmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nOworICAgIHdoaWxlICgqcG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiAhY2hhcklzQVNwYWNlQ2hhcmFjdGVyKGlucHV0Wypwb3NpdGlvbl0pKQorICAgICAgICBzdHJp
bmcuYXBwZW5kKGlucHV0WygqcG9zaXRpb24pKytdKTsKKyAgICByZXR1cm4gc3RyaW5nLnRvU3Ry
aW5nKCk7Cit9CisKIFRleHRUcmFjayogVGV4dFRyYWNrQ3VlOjp0cmFjaygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fdHJhY2s7CkBAIC03OCwxMCArMTE4LDM3IEBAIGJvb2wgVGV4dFRyYWNrQ3Vl
OjpwYXVzZU9uRXhpdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGF1c2VPbkV4aXQ7CiB9CiAKK1N0
cmluZyBUZXh0VHJhY2tDdWU6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3dy
aXRpbmdEaXJlY3Rpb24pIHsKKyAgICBjYXNlIEhvcml6b250YWw6IAorICAgICAgICByZXR1cm4g
Imhvcml6b250YWwiOworICAgIGNhc2UgVmVydGljYWxHcm93aW5nTGVmdDoKKyAgICAgICAgcmV0
dXJuICJ2ZXJ0aWNhbCI7CisgICAgY2FzZSBWZXJ0aWNhbEdyb3dpbmdSaWdodDoKKyAgICAgICAg
cmV0dXJuICJ2ZXJ0aWNhbC1sciI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIiOwor
ICAgIH0KK30KKworU3RyaW5nIFRleHRUcmFja0N1ZTo6YWxpZ25tZW50KCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fY3VlQWxpZ25tZW50KSB7CisgICAgY2FzZSBTdGFydDogCisgICAgICAgIHJl
dHVybiAic3RhcnQiOworICAgIGNhc2UgTWlkZGxlOgorICAgICAgICByZXR1cm4gIm1pZGRsZSI7
CisgICAgY2FzZSBFbmQ6CisgICAgICAgIHJldHVybiAiZW5kIjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCiBTdHJpbmcgVGV4dFRyYWNrQ3VlOjpnZXRDdWVB
c1NvdXJjZSgpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fY29udGVudDsKIH0KIAogUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBUZXh0VHJhY2tDdWU6OmdldEN1ZUFzSFRNTCgpCkBAIC0xMDEsNiAr
MTY4LDEyMCBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpdmUpCiAg
ICAgbV9pc0FjdGl2ZSA9IGFjdGl2ZTsKIH0KIAordm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0
dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBQYXJzZSB0
aGUgV2ViVlRUIHNldHRpbmdzLgorICAgIC8vIDEgLSBJbml0aWFsIHNldHVwLgorICAgIHVuc2ln
bmVkIHBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSkg
eworICAgICAgICAvLyAyLTQgU2V0dGluZ3MgLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIHJlcHJl
c2VudGluZyBhIHNldHRpbmdzLgorICAgICAgICBjaGFyIHNldHRpbmcgPSBpbnB1dFtwb3NpdGlv
bisrXTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIC8vIDUtNyAtIElmIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRp
b24gaXMgbm90ICc6Jywgc2V0IHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nLgorICAgICAgICBpZiAo
aW5wdXRbcG9zaXRpb24rK10gIT0gJzonKQorICAgICAgICAgICAgc2V0dGluZyA9ICcgJzsKKyAg
ICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIC8vIDggLSBHYXRoZXIgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWUgb2Ygc2V0
dGluZy4KKyAgICAgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAgICAgIGNhc2UgJ0QnOgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIHdyaXRpbmdEaXJlY3Rpb24gPSBjb2xsZWN0
U3RyaW5nKGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJlY3Rp
b24gPT0gInZlcnRpY2FsIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24gPSBW
ZXJ0aWNhbEdyb3dpbmdMZWZ0OworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJlY3Rpb24gPT0g
InZlcnRpY2FsLWxyIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24gPSBWZXJ0
aWNhbEdyb3dpbmdSaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIg
bGluZVBvc2l0aW9uQnVpbGRlcjsKKyAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0
Lmxlbmd0aCgpICYmIChpbnB1dFtwb3NpdGlvbl0gPT0gJy0nIHx8IGlucHV0W3Bvc2l0aW9uXSA9
PSAnJScgfHwgY2hhcklzQU51bWJlcihpbnB1dFtwb3NpdGlvbl0pKSkKKyAgICAgICAgICAgICAg
ICBsaW5lUG9zaXRpb25CdWlsZGVyLmFwcGVuZChpbnB1dFtwb3NpdGlvbisrXSk7CisgICAgICAg
ICAgICBTdHJpbmcgbGluZVBvc2l0aW9uID0gbGluZVBvc2l0aW9uQnVpbGRlci50b1N0cmluZygp
OworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgIWNoYXJJc0FT
cGFjZUNoYXJhY3RlcihpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAgICAgICAgIGdvdG8gT3Ro
ZXJ3aXNlOworICAgICAgICAgICAgaWYgKGxpbmVQb3NpdGlvbi5maW5kKCctJywgMSkgIT0gbm90
Rm91bmQgfHwgbGluZVBvc2l0aW9uLnJldmVyc2VGaW5kKCIlIiwgbGluZVBvc2l0aW9uLmxlbmd0
aCgpIC0gMikgIT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAobGluZVBvc2l0aW9uWzBdID09ICctJyAmJiBsaW5lUG9zaXRpb25bbGluZVBvc2l0aW9u
Lmxlbmd0aCgpIC0gMV0gPT0gJyUnKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgYm9vbCB2YWxpZE51bWJlcjsKKyAgICAgICAgICAgIGxvbmcgbnVtYmVyID0gbGluZVBvc2l0
aW9uLnRvSW50NjQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICghdmFsaWROdW1iZXIp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobGluZVBvc2l0aW9uW2xp
bmVQb3NpdGlvbi5sZW5ndGgoKSAtIDFdID09ICclJykgeworICAgICAgICAgICAgICAgIGlmIChu
dW1iZXIgPCAwIHx8IG51bWJlciA+IDEwMCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgbV9zbmFwVG9MaW5lcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9saW5lUG9zaXRpb24gPSBudW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVCc6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICBTdHJpbmcgdGV4dFBvc2l0aW9uID0gY29sbGVjdE51bWJlckNoYXJhY3RlcnMoaW5wdXQsICZw
b3NpdGlvbik7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaW5wdXRbcG9zaXRpb24rK10g
IT0gJyUnKQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgaWYg
KHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgIWNoYXJJc0FTcGFjZUNoYXJhY3RlcihpbnB1
dFtwb3NpdGlvbl0pKQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAg
ICAgaWYgKHRleHRQb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBib29sIHZhbGlkTnVtYmVyOworICAgICAgICAgICAgbG9uZyBudW1iZXIgPSB0
ZXh0UG9zaXRpb24udG9JbnQ2NCgmdmFsaWROdW1iZXIpOworICAgICAgICAgICAgaWYgKCF2YWxp
ZE51bWJlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChudW1iZXIg
PCAwIHx8IG51bWJlciA+IDEwMCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBt
X3RleHRQb3NpdGlvbiA9IG51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBj
dWVTaXplID0gY29sbGVjdE51bWJlckNoYXJhY3RlcnMoaW5wdXQsICZwb3NpdGlvbik7CisgICAg
ICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoaW5wdXRbcG9zaXRpb24rK10gIT0gJyUnKQorICAgICAg
ICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOyAgICAgIAorICAgICAgICAgICAgaWYgKHBvc2l0aW9u
IDwgaW5wdXQubGVuZ3RoKCkgJiYgIWNoYXJJc0FTcGFjZUNoYXJhY3RlcihpbnB1dFtwb3NpdGlv
bl0pKQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgaWYgKGN1
ZVNpemUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYm9v
bCB2YWxpZE51bWJlcjsKKyAgICAgICAgICAgIGxvbmcgbnVtYmVyID0gY3VlU2l6ZS50b0ludDY0
KCZ2YWxpZE51bWJlcik7CisgICAgICAgICAgICBpZiAoIXZhbGlkTnVtYmVyKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVyID4gMTAw
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9jdWVTaXplID0gbnVtYmVy
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0EnOgor
ICAgICAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGN1ZUFsaWdubWVudCA9IGNvbGxlY3RT
dHJpbmcoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoY3VlQWxpZ25tZW50ID09
ICJzdGFydCIpCisgICAgICAgICAgICAgICAgbV9jdWVBbGlnbm1lbnQgPSBTdGFydDsKKyAgICAg
ICAgICAgIGlmIChjdWVBbGlnbm1lbnQgPT0gIm1pZGRsZSIpCisgICAgICAgICAgICAgICAgbV9j
dWVBbGlnbm1lbnQgPSBNaWRkbGU7CisgICAgICAgICAgICBpZiAoY3VlQWxpZ25tZW50ID09ICJl
bmQiKQorICAgICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gRW5kOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gRGlzY2FyZCBhbnkg
cmVtYWluaW5nIHNwYWNlIGNoYXJhY3RlcnMgYmV0d2VlbiBvciBhZnRlciBzZXR0aW5ncy4KKyAg
ICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgY2hhcklzQVNwYWNlQ2hh
cmFjdGVyKGlucHV0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICBwb3NpdGlvbisrOworICAgICAg
ICBjb250aW51ZTsKK090aGVyd2lzZToKKyAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9m
IGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMgYW5kIGRpc2NhcmQgdGhl
bS4KKyAgICAgICAgY29sbGVjdFN0cmluZyhpbnB1dCwgJnBvc2l0aW9uKTsKKyAgICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tD
dWUuaAppbmRleCBjOWMxNTMzNTk5YmU0ZjExZDdjOWFiMzM1N2U3NTVhZTE1YjI2ZGI4Li4xNzZh
OGY5N2EzOTYyYTVjYTFmZjY2Y2E5MjJmNTY3ZDdiZGFlYThkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4
dFRyYWNrQ3VlLmgKQEAgLTEsMjQgKzEsMjkgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCkBAIC00Myw2ICs0OCwxMyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1ZShpZCwgc3RhcnQs
IGVuZCwgY29udGVudCwgc2V0dGluZ3MsIHBhdXNlT25FeGl0KSk7CiAgICAgfQorICAgIHN0YXRp
YyBib29sIGNoYXJJc0FOdW1iZXIoY2hhcik7CisgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0TnVt
YmVyQ2hhcmFjdGVycyhjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOworICAgIHN0YXRpYyBib29s
IGNoYXJJc0FTcGFjZUNoYXJhY3RlcihjaGFyKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RT
dHJpbmcoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKKyAgICAKKyAgICBlbnVtIERpcmVjdGlv
biB7IEhvcml6b250YWwsIFZlcnRpY2FsR3Jvd2luZ0xlZnQsIFZlcnRpY2FsR3Jvd2luZ1JpZ2h0
IH07CisgICAgZW51bSBBbGlnbm1lbnQgeyBTdGFydCwgTWlkZGxlLCBFbmQgfTsKIAogICAgIHZp
cnR1YWwgflRleHRUcmFja0N1ZSgpOwogCkBAIC01Myw2ICs2NSwxMyBAQCBwdWJsaWM6CiAgICAg
ZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0OwogICAgIGRvdWJsZSBlbmRUaW1lKCkgY29uc3Q7CiAg
ICAgYm9vbCBwYXVzZU9uRXhpdCgpIGNvbnN0OworICAgIAorICAgIFN0cmluZyBkaXJlY3Rpb24o
KSBjb25zdDsKKyAgICBib29sIHNuYXBUb0xpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwVG9M
aW5lczsgfQorICAgIGxvbmcgbGluZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9saW5lUG9z
aXRpb247IH0KKyAgICBsb25nIHRleHRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFBv
c2l0aW9uOyB9CisgICAgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jdWVTaXplOyB9Cisg
ICAgU3RyaW5nIGFsaWdubWVudCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGdldEN1ZUFzU291cmNl
KCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBnZXRDdWVBc0hUTUwoKTsKQEAg
LTYzLDE0ICs4MiwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRleHRUcmFja0N1ZShjb25z
dCBTdHJpbmcmIGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29u
dGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhpdCk7CiAKKyAgICB2
b2lkIHBhcnNlU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CisgICAgCiAgICAgVGV4dFRyYWNrKiBt
X3RyYWNrOwogICAgIAogICAgIFN0cmluZyBtX2lkOwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsK
ICAgICBkb3VibGUgbV9lbmRUaW1lOwogICAgIFN0cmluZyBtX2NvbnRlbnQ7Ci0gICAgU3RyaW5n
IG1fc2V0dGluZ3M7CiAgICAgYm9vbCBtX3BhdXNlT25FeGl0OworICAgIERpcmVjdGlvbiBtX3dy
aXRpbmdEaXJlY3Rpb247CisgICAgYm9vbCBtX3NuYXBUb0xpbmVzOworICAgIGxvbmcgbV9saW5l
UG9zaXRpb247CisgICAgbG9uZyBtX3RleHRQb3NpdGlvbjsKKyAgICBsb25nIG1fY3VlU2l6ZTsK
KyAgICBBbGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisKICAgICBib29sIG1faXNBY3RpdmU7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAppbmRleCAz
YjM1M2U3YzhjMzVkZWYyMzU0ODdmYjliNzYyYTI5YWQ0MDc1YTE2Li4xNDE5ZmQ5MGYxOGE1OGIz
MmNiYmYwZWRiOTA5YTUzYWViODNhODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDdWVQYXJzZXIu
aCIKIAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2UuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTcwLDE1ICs3MSwyMCBAQCBib29sIEN1ZVBhcnNlcjo6c3VwcG9ydHNUeXBlKGNv
bnN0IFN0cmluZyYgdXJsKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDdWVQYXJzZXI6
OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5z
aWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCiB7Ci0gICAgLy8gRklYTUUoNjI4OTMpOiBDcmVhdGUgbV9wcml2YXRlIGJhc2VkIG9uIE1J
TUUgdHlwZS4KLSAgICBtX2NsaWVudC0+dHJhY2tMb2FkU3RhcnRlZCgpOworICAgIGlmIChyZXNw
b25zZS5taW1lVHlwZSgpID09ICJ0ZXh0L3Z0dCIpCisgICAgICAgIGNyZWF0ZVdlYlZUVFBhcnNl
cigpOwogfQogCiB2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbikKIHsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IFNlbmQgZGF0YSBhbG9uZyB0byBt
X3ByaXZhdGUgcGFyc2VyIHRvIGJlIHBhcnNlZC4KKyAgICAvLyBJZiBtaW1lIHR5cGUgZnJvbSBk
aWRSZWNlaXZlUmVzcG9uc2Ugd2FzIG5vdCBpbmZvcm1hdGl2ZSwgc25pZmYgZmlsZSBjb250ZW50
LgorICAgIGlmICghbV9wcml2YXRlICYmIFdlYlZUVFBhcnNlcjo6cmVxdWlyZUZpbGVJZGVudGlm
aWVyKGRhdGEsIGxlbikpCisgICAgICAgIGNyZWF0ZVdlYlZUVFBhcnNlcigpOworCisgICAgaWYg
KG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5wYXJzZUJ5dGVzKGRhdGEsIGxlbik7CiB9
CiAKIHZvaWQgQ3VlUGFyc2VyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpCkBAIC05
Niw2ICsxMDIsMTkgQEAgdm9pZCBDdWVQYXJzZXI6OmZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVm
UHRyPFRleHRUcmFja0N1ZT4gPiYpCiAgICAgLy8gRklYTUUoNjI4OTMpOiBJbXBsZW1lbnQuCiB9
CiAKK3ZvaWQgQ3VlUGFyc2VyOjpuZXdDdWVzUGFyc2VkKCkKK3sKKyAgICBtX2NsaWVudC0+bmV3
Q3Vlc1BhcnNlZCgpOworfQorCit2b2lkIEN1ZVBhcnNlcjo6Y3JlYXRlV2ViVlRUUGFyc2VyKCkK
K3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkgeworICAgICAgICBtX3ByaXZhdGUgPSBXZWJWVFRQYXJz
ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9jbGllbnQtPnRyYWNrTG9hZFN0YXJ0ZWQoKTsK
KyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCmluZGV4IDc0NGNjMzIyNzhjNWY0Y2Y5ZTRm
ODJjYTdjNTNhYjE3YmQ4OWQ4Y2YuLjdjNmM2MzE3NGU1NzgzNjk2MDZlZGEyNWY0OGFkNTQ5OGQw
ODVmMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCkBAIC0z
Myw5ICszMyw5IEBACiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLSNpbmNsdWRlICJDdWVQ
YXJzZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUg
IlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCB0cmFja0xvYWRDb21wbGV0ZWQoKSA9IDA7CiB9OwogCi1jbGFzcyBDdWVQ
YXJzZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitjbGFzcyBDdWVQYXJzZXIg
OiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCB7
CiBwdWJsaWM6CiAgICAgQ3VlUGFyc2VyKCk7CiAgICAgdmlydHVhbCB+Q3VlUGFyc2VyKCk7CkBA
IC02Nyw4ICs2NywxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0c1R5cGUoY29uc3QgU3Ry
aW5nJik7CiAKICAgICB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4gPiYpOworICAgIHZvaWQgbmV3Q3Vlc1BhcnNlZCgpOwogCiBwcml2YXRlOgorICAgIHZv
aWQgY3JlYXRlV2ViVlRUUGFyc2VyKCk7CisgCiAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+
IG1fbG9hZGVyOwogICAgIE93blB0cjxDdWVQYXJzZXJQcml2YXRlSW50ZXJmYWNlPiBtX3ByaXZh
dGU7CiAgICAgQ3VlUGFyc2VyQ2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaAppbmRleCBiYzNlNGZiYzA5NTFiZTM0
Y2JmMDEwNzFlZDI4NjlhOTlhMmY4MzBlLi5jZTYzMzdkOTFlNTBlM2JiMWVkMmZiOGFiMmU0MmJj
ZmVlMTcxM2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFy
c2VyUHJpdmF0ZS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VCeXRlcyhjb25zdCBjaGFyKiwgaW50KSA9IDA7CiAKICAgICAvLyBUcmFuc2ZlcnMgb3du
ZXJzaGlwIG9mIGxhc3QgcGFyc2VkIGN1ZXMgdG8gY2FsbGVyLgotICAgIHZpcnR1YWwgdm9pZCBm
ZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tD
dWU+ID4mKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICBDdWVQYXJzZXJQcml2YXRlSW50ZXJmYWNl
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43ZmVlMzkwMWM4ZDUyOGIwNTFiOWU2ZTdhYzc3YmQwYjlmMzM4NDk0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFy
c2VyLmNwcApAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgV2Vi
VlRUUGFyc2VyOjpyZXF1aXJlRmlsZUlkZW50aWZpZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKK3sKKyAgICAvLyBBIFdlYlZUVCBmaWxlIGlkZW50aWZpZXIgY29uc2lzdHMgb2YgYW4g
b3B0aW9uYWwgQk9NIGNoYXJhY3RlciwKKyAgICAvLyB0aGUgc3RyaW5nICJXRUJWVFQiIGZvbGxv
d2VkIGJ5IGFuIG9wdGlvbmFsIHNwYWNlIG9yIHRhYiBjaGFyYWN0ZXIsCisgICAgLy8gYW5kIGFu
eSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgbGluZSB0ZXJtaW5hdG9ycyAuLi4K
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisgICAgaWYgKGxlbmd0aCA+PSAzICYmIGRhdGFb
MF0gPT0gJ1x4RUYnICYmIGRhdGFbMV0gPT0gJ1x4QkInICYmIGRhdGFbMl0gPT0gJ1x4QkYnKQor
ICAgICAgICBwb3NpdGlvbiArPSAzOworICAgIFN0cmluZyBsaW5lID0gY29sbGVjdE5leHRMaW5l
KGRhdGEsIGxlbmd0aCwgJnBvc2l0aW9uKTsKKyAgICAgICAgCisgICAgaWYgKGxpbmUubGVuZ3Ro
KCkgPCA2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxpbmUubGVuZ3RoKCkgPT0g
NiAmJiBsaW5lICE9ICJXRUJWVFQiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxp
bmUubGVuZ3RoKCkgPiA2ICYmIChsaW5lLnN1YnN0cmluZygwLCA2KSAhPSAiV0VCVlRUIiB8fCAo
bGluZVs2XSAhPSAnICcgJiYgbGluZVs2XSAhPSAnXHQnKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIoQ3Vl
UGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQorICAgIDogbV9zdGF0ZShJbml0aWFsKQorewor
ICAgIG1fY2xpZW50ID0gY2xpZW50OworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6ZmV0Y2hQYXJz
ZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRwdXRDdWVzKQoreworICAg
IG91dHB1dEN1ZXMgPSBtX2N1ZWxpc3Q7CisgICAgbV9jdWVsaXN0LmNsZWFyKCk7Cit9CisKK3Zv
aWQgV2ViVlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
Cit7CisgICAgLy8gNC44LjEwLjEzLjMgV0hBVFdHIFdlYlZUVCBQYXJzZXIgYWxnb3JpdGhtLgor
ICAgIC8vIDEtMyAtIEluaXRpYWwgc2V0dXAuCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwor
CisgICAgZG8geworICAgICAgICBTdHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRhLCBs
ZW5ndGgsICZwb3NpdGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICAgICAgY2FzZSBJbml0aWFsOgorICAgICAgICAgICAgLy8gNC0xMiAtIENvbGxlY3QgdGhl
IGZpcnN0IGxpbmUgYW5kIGNoZWNrIGZvciAiV0VCVlRUIi4KKyAgICAgICAgICAgIGlmICghcmVx
dWlyZUZpbGVJZGVudGlmaWVyKGRhdGEsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgbV9zdGF0ZSA9IEhlYWRlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICAgICAgY2FzZSBIZWFkZXI6CisgICAgICAgICAgICAvLyAxMy0xOCAtIEFsbG93
IGEgaGVhZGVyIChjb21tZW50IGFyZWEpIHVuZGVyIHRoZSBXRUJWVFQgbGluZS4KKyAgICAgICAg
ICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gSWQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgSWQ6CisgICAgICAgICAg
ICAvLyAxOS0yOSAtIEFsbG93IGFueSBudW1iZXIgb2YgbGluZSB0ZXJtaW5hdG9ycywgdGhlbiBp
bml0aWFsaXplIG5ldyBjdWUgdmFsdWVzLgorICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVzZXRDdWVWYWx1ZXMoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gMzAtMzkgLSBDaGVjayBpZiB0aGlzIGxpbmUg
Y29udGFpbnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBjb2xsZWN0Q3VlSWQobGluZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIGNhc2UgVGltaW5nc0FuZFNldHRpbmdzOgorICAgICAgICAgICAgLy8g
NDAgLSBDb2xsZWN0IGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy4KKyAgICAgICAgICAgIG1fc3Rh
dGUgPSBjb2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGxpbmUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgICAgICBjYXNlIEN1ZVRleHQ6CisgICAgICAgICAgICAvLyA0MS01MyAt
IENvbGxlY3QgdGhlIGN1ZSB0ZXh0LCBjcmVhdGUgYSBjdWUsIGFuZCBhZGQgaXQgdG8gdGhlIG91
dHB1dC4KKyAgICAgICAgICAgIG1fc3RhdGUgPSBjb2xsZWN0Q3VlVGV4dChsaW5lKTsKKyAgICAg
ICAgICAgIGlmICgoaW50KXBvc2l0aW9uID49IGxlbmd0aCAtIDEgJiYgbV9zdGF0ZSA9PSBDdWVU
ZXh0KQorICAgICAgICAgICAgICAgIHByb2Nlc3NDdWVUZXh0KCk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEJhZEN1ZToKKyAgICAgICAgICAgIC8vIDU0LTYyIC0gQ29sbGVj
dCBhbmQgZGlzY2FyZCB0aGUgcmVtYWluaW5nIGN1ZS4KKyAgICAgICAgICAgIG1fc3RhdGUgPSBp
Z25vcmVCYWRDdWUobGluZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0g
d2hpbGUgKChpbnQpcG9zaXRpb24gPCBsZW5ndGgpOworfQorCitXZWJWVFRQYXJzZXI6OlBhcnNl
U3RhdGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0Q3VlSWQoY29uc3QgU3RyaW5nJiBsaW5lKQorewor
ICAgIGlmIChsaW5lLmNvbnRhaW5zKCItLT4iKSkKKyAgICAgICAgcmV0dXJuIGNvbGxlY3RUaW1p
bmdzQW5kU2V0dGluZ3MobGluZSk7CisgICAgbV9jdXJyZW50SWQgPSBsaW5lOworICAgIHJldHVy
biBUaW1pbmdzQW5kU2V0dGluZ3M7Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJW
VFRQYXJzZXI6OmNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBsaW5lKQor
eworICAgIC8vIDQuOC4xMC4xMy4zIENvbGxlY3QgV2ViVlRUIGN1ZSB0aW1pbmdzIGFuZCBzZXR0
aW5ncy4KKyAgICAvLyAxLTMgLSBMZXQgaW5wdXQgYmUgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQg
YW5kIHBvc2l0aW9uIGJlIGEgcG9pbnRlciBpbnRvIGlucHV0CisgICAgdW5zaWduZWQgcG9zaXRp
b24gPSAwOworICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsICZwb3NpdGlvbik7CisKKyAgICAvLyA0
LTUgLSBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9y
dCBhbmQgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3Vl
IHN0YXJ0IHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIFN0cmluZyBzdGFydCA9IFRl
eHRUcmFja0N1ZTo6Y29sbGVjdFN0cmluZyhsaW5lLCAmcG9zaXRpb24pOworICAgIG1fY3VycmVu
dFN0YXJ0VGltZSA9IGNvbGxlY3RUaW1lU3RhbXAoc3RhcnQpOworICAgIGlmIChtX2N1cnJlbnRT
dGFydFRpbWUgPT0gbWFsZm9ybWVkVGltZSkKKyAgICAgICAgcmV0dXJuIEJhZEN1ZTsKKyAgICBz
a2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAgLy8gNi05IC0gSWYgdGhlIG5l
eHQgdGhyZWUgY2hhcmFjdGVycyBhcmUgbm90ICItLT4iLCBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1
cmUuCisgICAgaWYgKGxpbmUuZmluZCgiLS0+IiwgcG9zaXRpb24pID09IG5vdEZvdW5kKQorICAg
ICAgICByZXR1cm4gQmFkQ3VlOworICAgIHBvc2l0aW9uICs9IDM7CisgICAgc2tpcFdoaXRlU3Bh
Y2UobGluZSwgJnBvc2l0aW9uKTsKKworICAgIC8vIDEwLTExIC0gQ29sbGVjdCBhIFdlYlZUVCB0
aW1lc3RhbXAuIElmIHRoYXQgZmFpbHMsIHRoZW4gYWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLiBP
dGhlcndpc2UsIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBlbmQgdGltZSBiZSB0aGUgY29sbGVj
dGVkIHRpbWUuCisgICAgU3RyaW5nIGVuZCA9IFRleHRUcmFja0N1ZTo6Y29sbGVjdFN0cmluZyhs
aW5lLCAmcG9zaXRpb24pOworICAgIG1fY3VycmVudEVuZFRpbWUgPSBjb2xsZWN0VGltZVN0YW1w
KGVuZCk7CisgICAgaWYgKG1fY3VycmVudEVuZFRpbWUgPT0gbWFsZm9ybWVkVGltZSkKKyAgICAg
ICAgcmV0dXJuIEJhZEN1ZTsKKyAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOwor
CisgICAgLy8gMTIgLSBQYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzIGZvciB0aGUgY3VlIChjb25k
dWN0ZWQgaW4gVGV4dFRyYWNrQ3VlKS4KKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGxpbmUuc3Vi
c3RyaW5nKHBvc2l0aW9uLCBsaW5lLmxlbmd0aCgpLTEpOworICAgIHJldHVybiBDdWVUZXh0Owor
fQorCitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0Q3VlVGV4
dChjb25zdCBTdHJpbmcmIGxpbmUpCit7CisgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHByb2Nlc3NDdWVUZXh0KCk7CisgICAgICAgIHJldHVybiBJZDsKKyAgICB9CisgICAgaWYg
KCFtX2N1cnJlbnRDb250ZW50LmlzRW1wdHkoKSkKKyAgICAgICAgbV9jdXJyZW50Q29udGVudC5h
cHBlbmQoIlxuIik7CisgICAgbV9jdXJyZW50Q29udGVudC5hcHBlbmQobGluZSk7CisgICAgcmV0
dXJuIEN1ZVRleHQ7Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6
Omlnbm9yZUJhZEN1ZShjb25zdCBTdHJpbmcmIGxpbmUpCit7CisgICAgaWYgKCFsaW5lLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIEJhZEN1ZTsKKyAgICByZXR1cm4gSWQ7Cit9CisKK2RvdWJs
ZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3RyaW5nJiBsaW5lKQorewor
ICAgIC8vIDQuOC4xMC4xMy4zIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLgorICAgIC8vIDEt
NCAtIEluaXRpYWwgY2hlY2tzLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBlbnVt
IE1vZGUgeyBtaW51dGVzLCBob3VycyB9OworICAgIE1vZGUgbW9kZSA9IG1pbnV0ZXM7CisgICAg
aWYgKHBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIVRleHRUcmFja0N1ZTo6Y2hhcklzQU51
bWJlcihsaW5lW3Bvc2l0aW9uXSkpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworCisg
ICAgLy8gNS02IC0gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgMC05
LgorICAgIFN0cmluZyBkaWdpdHMxID0gVGV4dFRyYWNrQ3VlOjpjb2xsZWN0TnVtYmVyQ2hhcmFj
dGVycyhsaW5lLCAmcG9zaXRpb24pOworICAgIGludCB2YWx1ZTEgPSBkaWdpdHMxLnRvSW50KCk7
CisKKyAgICAvLyA3IC0gSWYgbm90IDIgY2hhcmFjdGVycyBvciB2YWx1ZSBpcyBncmVhdGVyIHRo
YW4gNTksIGludGVycHJldCBhcyBob3Vycy4KKyAgICBpZiAoZGlnaXRzMS5sZW5ndGgoKSAhPSAy
IHx8IHZhbHVlMSA+IDU5KQorICAgICAgICBtb2RlID0gaG91cnM7CisKKyAgICAvLyA4LTEyIC0g
Q29sbGVjdCB0aGUgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJzonIChtdXN0IGJlIDIgY2hh
cnMpLgorICAgIGlmIChwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbcG9zaXRpb24r
K10gIT0gJzonKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAocG9zaXRp
b24gPj0gbGluZS5sZW5ndGgoKSB8fCAhVGV4dFRyYWNrQ3VlOjpjaGFySXNBTnVtYmVyKGxpbmVb
cG9zaXRpb25dKSkKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgU3RyaW5nIGRp
Z2l0czIgPSBUZXh0VHJhY2tDdWU6OmNvbGxlY3ROdW1iZXJDaGFyYWN0ZXJzKGxpbmUsICZwb3Np
dGlvbik7CisgICAgaW50IHZhbHVlMiA9IGRpZ2l0czIudG9JbnQoKTsKKyAgICBpZiAoZGlnaXRz
Mi5sZW5ndGgoKSAhPSAyKSAKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisKKyAgICAv
LyAxMyAtIERldGVjdCB3aGV0aGVyIHRoaXMgdGltZXN0YW1wIGluY2x1ZGVzIGhvdXJzLgorICAg
IGludCB2YWx1ZTM7CisgICAgaWYgKG1vZGUgPT0gaG91cnMgfHwgKHBvc2l0aW9uIDwgbGluZS5s
ZW5ndGgoKSAmJiBsaW5lW3Bvc2l0aW9uXSA9PSAnOicpKSB7CisgICAgICAgIGlmIChwb3NpdGlv
biA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbcG9zaXRpb25dICE9ICc6JykKKyAgICAgICAgICAg
IHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICBwb3NpdGlvbisrOworICAgICAgICBpZiAo
cG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCAhVGV4dFRyYWNrQ3VlOjpjaGFySXNBTnVtYmVy
KGxpbmVbcG9zaXRpb25dKSkKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAg
ICAgICBTdHJpbmcgZGlnaXRzMyA9IFRleHRUcmFja0N1ZTo6Y29sbGVjdE51bWJlckNoYXJhY3Rl
cnMobGluZSwgJnBvc2l0aW9uKTsKKyAgICAgICAgaWYgKGRpZ2l0czMubGVuZ3RoKCkgIT0gMikK
KyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICB2YWx1ZTMgPSBkaWdp
dHMzLnRvSW50KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWUzID0gdmFsdWUyOworICAg
ICAgICB2YWx1ZTIgPSB2YWx1ZTE7CisgICAgICAgIHZhbHVlMSA9IDA7CisgICAgfQorCisgICAg
Ly8gMTQtMTkgLSBDb2xsZWN0IG5leHQgc2VxdWVuY2Ugb2YgMC05IGFmdGVyICcuJyAobXVzdCBi
ZSAzIGNoYXJzKS4KKyAgICBpZiAocG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lW3Bv
c2l0aW9uKytdICE9ICcuJykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYg
KHBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIVRleHRUcmFja0N1ZTo6Y2hhcklzQU51bWJl
cihsaW5lW3Bvc2l0aW9uXSkpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgIFN0
cmluZyBkaWdpdHM0ID0gVGV4dFRyYWNrQ3VlOjpjb2xsZWN0TnVtYmVyQ2hhcmFjdGVycyhsaW5l
LCAmcG9zaXRpb24pOworICAgIGlmIChkaWdpdHM0Lmxlbmd0aCgpICE9IDMpCisgICAgICAgIHJl
dHVybiBtYWxmb3JtZWRUaW1lOworICAgIGludCB2YWx1ZTQgPSBkaWdpdHM0LnRvSW50KCk7Cisg
ICAgaWYgKHZhbHVlMiA+IDU5IHx8IHZhbHVlMyA+IDU5KQorICAgICAgICByZXR1cm4gbWFsZm9y
bWVkVGltZTsKKworICAgIC8vIDIwLTIxIC0gQ2FsY3VsYXRlIHJlc3VsdC4KKyAgICByZXR1cm4g
KHZhbHVlMSAqIHNlY29uZHNJbkhvdXIpICsgKHZhbHVlMiAqIHNlY29uZHNJbk1pbnV0ZSkgKyB2
YWx1ZTMgKyAoKGRvdWJsZSl2YWx1ZTQgLyAxMDAwKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6
OnByb2Nlc3NDdWVUZXh0KCkKK3sKKyAgICAvLyA1MSAtIEN1ZSB0ZXh0IHByb2Nlc3NpbmcgYmFz
ZWQgb24gV2ViVlRUIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMgYW5kIFdlYlZUVCBjdWUgdGV4dCBE
T00gY29uc3RydWN0aW9uIHJ1bGVzLiAgICAKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUg
PSBUZXh0VHJhY2tDdWU6OmNyZWF0ZShtX2N1cnJlbnRJZCwgbV9jdXJyZW50U3RhcnRUaW1lLCBt
X2N1cnJlbnRFbmRUaW1lLCBtX2N1cnJlbnRDb250ZW50LnRvU3RyaW5nKCksIG1fY3VycmVudFNl
dHRpbmdzLCBmYWxzZSk7CisgICAgbV9jdWVsaXN0LmFwcGVuZChjdWUpOworICAgIG1fY2xpZW50
LT5uZXdDdWVzUGFyc2VkKCk7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpyZXNldEN1ZVZhbHVl
cygpCit7CisgICAgbV9jdXJyZW50SWQgPSBlbXB0eVN0cmluZygpOworICAgIG1fY3VycmVudFNl
dHRpbmdzID0gZW1wdHlTdHJpbmcoKTsKKyAgICBtX2N1cnJlbnRTdGFydFRpbWUgPSAwOworICAg
IG1fY3VycmVudEVuZFRpbWUgPSAwOworICAgIG1fY3VycmVudENvbnRlbnQuY2xlYXIoKTsKK30K
Kwordm9pZCBXZWJWVFRQYXJzZXI6OnNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgbGluZSwg
dW5zaWduZWQqIHBvc2l0aW9uKQoreworICAgIHdoaWxlICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0
aCgpICYmIFRleHRUcmFja0N1ZTo6Y2hhcklzQVNwYWNlQ2hhcmFjdGVyKGxpbmVbKnBvc2l0aW9u
XSkpCisgICAgICAgICgqcG9zaXRpb24pKys7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpza2lw
TGluZVRlcm1pbmF0b3IoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgdW5zaWduZWQqIHBv
c2l0aW9uKQoreworICAgIGlmICgoaW50KSpwb3NpdGlvbiA+PSBsZW5ndGgpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZGF0YVsqcG9zaXRpb25dID09ICdccicpCisgICAgICAgICgqcG9zaXRp
b24pKys7CisgICAgaWYgKChpbnQpKnBvc2l0aW9uID49IGxlbmd0aCkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChkYXRhWypwb3NpdGlvbl0gPT0gJ1xuJykKKyAgICAgICAgKCpwb3NpdGlvbikr
KzsKK30KKworU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29sbGVjdE5leHRMaW5lKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGgsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICB1bnNpZ25lZCBv
bGRQb3NpdGlvbiA9ICpwb3NpdGlvbjsKKyAgICB3aGlsZSAoKGludCkqcG9zaXRpb24gPCBsZW5n
dGggJiYgZGF0YVsqcG9zaXRpb25dICE9ICdccicgJiYgZGF0YVsqcG9zaXRpb25dICE9ICdcbicp
CisgICAgICAgICgqcG9zaXRpb24pKys7CisgICAgU3RyaW5nIGxpbmUgPSBTdHJpbmc6OmZyb21V
VEY4KGRhdGEgKyBvbGRQb3NpdGlvbiwgKnBvc2l0aW9uIC0gb2xkUG9zaXRpb24pOworICAgIHNr
aXBMaW5lVGVybWluYXRvcihkYXRhLCBsZW5ndGgsIHBvc2l0aW9uKTsKKyAgICByZXR1cm4gbGlu
ZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL1dlYlZUVFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2Vi
VlRUUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE5OTdhMGU1MmM5MGI1M2MxNGUwNWMxMzMzYjljZjQz
ZjhhOTNhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNr
L1dlYlZUVFBhcnNlci5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWVFRQYXJzZXJfaAor
I2RlZmluZSBXZWJWVFRQYXJzZXJfaAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5j
bHVkZSAiQ3VlUGFyc2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBjb25zdCBpbnQgc2Vjb25kc0luSG91ciA9IDM2MDA7CitzdGF0aWMgY29uc3Qg
aW50IHNlY29uZHNJbk1pbnV0ZSA9IDYwOworc3RhdGljIGNvbnN0IGRvdWJsZSBtYWxmb3JtZWRU
aW1lID0gLTE7CisKK2NsYXNzIFdlYlZUVFBhcnNlciA6IHB1YmxpYyBDdWVQYXJzZXJQcml2YXRl
SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJWVFRQYXJzZXIoKSB7IH0KKyAg
ICAKKyAgICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFsLCBIZWFkZXIsIElkLCBUaW1pbmdzQW5k
U2V0dGluZ3MsIEN1ZVRleHQsIEJhZEN1ZSB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8V2Vi
VlRUUGFyc2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJWVFRQYXJzZXIoY2xpZW50KSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBib29sIHJlcXVpcmVGaWxlSWRlbnRpZmllcihjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworCisgICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2Vk
Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpOworCitwcm90ZWN0ZWQ6CisgICAg
V2ViVlRUUGFyc2VyKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqKTsKKyAgICAKKyAgICBQYXJzZVN0
YXRlIG1fc3RhdGU7CisKK3ByaXZhdGU6CisgICAgUGFyc2VTdGF0ZSBjb2xsZWN0Q3VlSWQoY29u
c3QgU3RyaW5nJik7CisgICAgUGFyc2VTdGF0ZSBjb2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGNv
bnN0IFN0cmluZyYpOworICAgIFBhcnNlU3RhdGUgY29sbGVjdEN1ZVRleHQoY29uc3QgU3RyaW5n
Jik7CisgICAgUGFyc2VTdGF0ZSBpZ25vcmVCYWRDdWUoY29uc3QgU3RyaW5nJik7CisKKyAgICBk
b3VibGUgY29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHByb2Nlc3ND
dWVUZXh0KCk7CisgICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOworICAgIHZvaWQgc2tpcFdoaXRl
U3BhY2UoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKKyAgICBzdGF0aWMgdm9pZCBza2lwTGlu
ZVRlcm1pbmF0b3IoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgdW5zaWduZWQqKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIGNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoLCB1bnNpZ25lZCopOworCisgICAgU3RyaW5nIG1fY3VycmVudElkOworICAgIGRvdWJsZSBt
X2N1cnJlbnRTdGFydFRpbWU7CisgICAgZG91YmxlIG1fY3VycmVudEVuZFRpbWU7CisgICAgU3Ry
aW5nQnVpbGRlciBtX2N1cnJlbnRDb250ZW50OworICAgIFN0cmluZyBtX2N1cnJlbnRTZXR0aW5n
czsKKworICAgIEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIG1fY2xpZW50OworCisgICAgVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4gbV9jdWVsaXN0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102739</attachid>
            <date>2011-08-02 22:09:52 -0700</date>
            <delta_ts>2011-08-05 16:14:19 -0700</delta_ts>
            <desc>addressing eric&apos;s comments</desc>
            <filename>bug-62882-20110802220951.patch</filename>
            <type>text/plain</type>
            <size>42997</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIyNDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNTNiZWRi
NGI5NDY4OTc0ZDU1MDUzMmZlZjlkNzFhMTQzOWViMzgyNi4uMGQwYzliZjk5Nzg2MGU0NzU1NjZl
NjgwNzExNmY1MDBkN2RkZmE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTQsNiArMTk5
NCw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjc5N2IyMzljNzk3ZTNlMTkzODdi
NTViMDMyYzZmYzY0Y2QwZjU5My4uNzI4ZDU2Y2MyZjkxNTAxOTBlZTdiMWJjNmEwYjY5N2I1MzM2
Y2E4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA4LTAyICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURFT19UUkFDSyBmZWF0dXJlIGRlZmlu
ZSwgd2hpY2ggaXMgdHVybmVkIG9mZiwgYnV0CisgICAgICAgIG5ldyB0ZXN0cyBoYXZlIGJlZW4g
YWRkZWQgaW4gbWVkaWEvdHJhY2svIChhbmQgYXJlIHNraXBwZWQpLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvVGV4dFRyYWNrQ3VlLmNw
cDoKKyAgICAgICAgKiBodG1sL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmg6
CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oOiBBZGRlZC4KKwogMjAxMS0wOC0wMiAgSmVmZnJleSBQ
ZmF1ICA8anBmYXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBuYW1lc3BhY2UgcHJlZml4IHN1
cHBvcnQgaW4gWE1MIHRva2VuaXplcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
YjM4OGEzNjk5ZGI2NmE2Y2Y0ZGRmOTkwYTliMzNiZDY1NDRjNmZlMi4uZDU4NzhlZjIxOTZkMWE3
ZWE3ZWM0YzcxMTdhOWRkM2VlNzgxMTlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0yODQ1LDYgKzI4NDUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90cmFjay9DdWVQYXJzZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXJQcml2YXRlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZU
VFBhcnNlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNl
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTFN0cmluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9V
VUlELmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjE0MGFkODg4MGFiY2Y5YjU4NDlhNmRhNzQ1
Y2RmZDQwZjQ0YjIzYi4uOGYxZTMxOTg0MTE0NjgzNzk0ZmQ1Y2M0OGE5MjA3ZDhkZTQ4NDgyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDQyMCw2ICs0NDIwLDggQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vd2luL0JTdHJpbmcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQlN0
cmluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQml0bWFwSW5mby5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCA3YTNiZWYxNmY1NzZkNjNiYjQyNDU4NzA1YmYzNjFiODZjNGM3YTFmLi5l
OGQ1NWJlOThhYjY5YjU1YWUzOTZhNmI1NjFjOTA1YjVmN2RhY2Y5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtMjExMSw2ICsyMTExLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vVGltZXIuaCBc
CiAgICAgcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlclByaXZhdGUuaCBcCisgICAgcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAog
ICAgIHBsYXRmb3JtL1dpZGdldC5oIFwKICAgICBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMu
aCBcCiAgICAgcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2ODIxOTU5NDVhMWI4
ZmYxMWE5MTExMjM2YmRjMWZlM2ZjMWUwZjJiLi4zNWQ4MTU5YmE5ZTUzM2YzNzUzZTkzNjkzZTVj
MTY3OTFmOGU5ZTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00MDY1LDYgKzQwNjUsOCBAQAogCQlBQkRERkU3OTBBNUM2RTcw
MDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUJEREZFNzMwQTVDNkU2RjAwQTNFMTFEIC8qIFJlbmRlck1l
bnVMaXN0LmNwcCAqLzsgfTsKIAkJQUJEREZFN0EwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1l
bnVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
QkRERkU3NDBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCAqLzsgfTsKIAkJQURE
RjFBRDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAv
KiBSZW5kZXJTVkdQYXRoLmggKi87IH07CisJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBX
ZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIxMEI3NDBDMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCAqLzsgfTsKKwkJ
QjEwQjc0MEYxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNzQwRDEzQkU4MEJGMDBCQzFD
MjYgLyogV2ViVlRUUGFyc2VyLmNwcCAqLzsgfTsKIAkJQjE0MzUzRDUxMzhFQThFRDAwRDUzMjc2
IC8qIE1lZGlhU3RyZWFtTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMTQzNTNEMTEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0
LmNwcCAqLzsgfTsKIAkJQjE0MzUzRDYxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUz
RDIxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovOyB9OwogCQlCMTQzNTNG
ODEzOEVBOTVCMDBENTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUzRjYxMzhFQTk1QjAwRDUzMjc2
IC8qIEpTTWVkaWFTdHJlYW1MaXN0LmNwcCAqLzsgfTsKQEAgLTEwNTYyLDYgKzEwNTY0LDggQEAK
IAkJQUJEREZFNzQwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNZW51TGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBRERGMUFENDEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0
aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdQYXRo
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFBRDUxMjU3Q0Q5QTAwMDNB
NzU5IC8qIFJlbmRlclNWR1BhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyU1ZHUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMTBCNzQwQzEz
QkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYlZUVFBhcnNlci5oOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEI3NDBEMTNCRTgwQkYwMEJD
MUMyNiAvKiBXZWJWVFRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gV2ViVlRUUGFyc2VyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QxMTM4RUE4RUQwMEQ1
MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjE0MzUzRDIxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjE0MzUzRDMxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFt
TGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0LmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTk3LDYgKzE4MDAxLDggQEAKIAkJCQlCMkU0
RUM5NTBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmggKi8sCiAJCQkJQjJFNEVDOTYw
RDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5pZGwgKi8sCiAJCQkJQjI4QzZBMjYwRDAw
QzQ0ODAwMzM0QUE0IC8qIHhsaW5rYXR0cnMuaW4gKi8sCisJCQkJQjEwQjc0MEMxM0JFODBCRjAw
QkMxQzI2IC8qIFdlYlZUVFBhcnNlci5oICovLAorCQkJCUIxMEI3NDBEMTNCRTgwQkYwMEJDMUMy
NiAvKiBXZWJWVFRQYXJzZXIuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBzdmc7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMyNzIsNiArMjMyNzgsMTYgQEAKIAkJCQk1MDhDQ0E0
RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNBQjQxODIxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQjFBRDRFNUQxM0ExMkEwQjAwODQ2QjI3IC8qIEN1ZUluZGV4LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCMUFENEU1RjEzQTEyQTBCMDA4NDZCMjcgLyogTG9hZGFibGVUZXh0VHJhY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTYzMTNBMTJBMEIwMDg0NkIyNyAvKiBNdXRhYmxl
VGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2NzEzQTEyQTBCMDA4NDZCMjcg
LyogVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2OTEzQTEyQTBCMDA4NDZC
MjcgLyogVGV4dFRyYWNrQ3VlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU2QjEzQTEyQTBC
MDA4NDZCMjcgLyogVGV4dFRyYWNrQ3VlTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFBRDRF
NzQxM0ExMkE0NjAwODQ2QjI3IC8qIEN1ZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjFB
RDRFN0MxM0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QjFBRDRFN0QxM0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlclByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMjYwNjEsNiArMjYwNzcsMTUgQEAKIAkJCQk1MDhDQ0E1MDEzQ0YxMDZC
MDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlENzBB
RDY1NzEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQUI0MTgxMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQjFBRDRFNUMxM0ExMkEwQjAwODQ2QjI3IC8qIEN1ZUluZGV4LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUIxQUQ0RTVFMTNBMTJBMEIwMDg0NkIyNyAvKiBMb2FkYWJsZVRleHRUcmFjay5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2MjEzQTEyQTBCMDA4NDZCMjcgLyogTXV0YWJs
ZVRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2NjEzQTEyQTBCMDA4NDZC
MjcgLyogVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTY4MTNBMTJBMEIw
MDg0NkIyNyAvKiBUZXh0VHJhY2tDdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNkEx
M0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFja0N1ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQjFBRDRFNzMxM0ExMkE0NjAwODQ2QjI3IC8qIEN1ZUxvYWRlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlCMUFENEU3QjEzQTEyQTcyMDA4NDZCMjcgLyogQ3VlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUIxMEI3NDBGMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFj
a0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKaW5kZXggM2I3
YTg5M2MyY2YwMzllMmU5OTFlMDk2ZjVmNmY0NTQ5ZTdhMGUyNS4uY2ExMTI1ZmEzZWQwZmEyMTM5
NjljZjNlZWQ5ZWRiZTY1ODZhZDVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9U
ZXh0VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNw
cApAQCAtMiwyMyArMiwyOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogog
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KQEAgLTMxLDYgKzM2LDggQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50RnJh
Z21lbnQuaCIKICNpbmNsdWRlICJUZXh0VHJhY2suaCIKKyNpbmNsdWRlICJXZWJWVFRQYXJzZXIu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzksOSArNDYsMTYgQEAgVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUoY29u
c3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHIKICAgICAs
IG1fc3RhcnRUaW1lKHN0YXJ0KQogICAgICwgbV9lbmRUaW1lKGVuZCkKICAgICAsIG1fY29udGVu
dChjb250ZW50KQotICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKICAgICAsIG1fcGF1c2VPbkV4
aXQocGF1c2VPbkV4aXQpCisgICAgLCBtX3dyaXRpbmdEaXJlY3Rpb24oSG9yaXpvbnRhbCkKKyAg
ICAsIG1fc25hcFRvTGluZXModHJ1ZSkKKyAgICAsIG1fbGluZVBvc2l0aW9uKC0xKQorICAgICwg
bV90ZXh0UG9zaXRpb24oNTApCisgICAgLCBtX2N1ZVNpemUoMTAwKQorICAgICwgbV9jdWVBbGln
bm1lbnQoTWlkZGxlKQorICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKIHsKKyAgICBwYXJzZVNldHRp
bmdzKHNldHRpbmdzKTsKIH0KIAogVGV4dFRyYWNrQ3VlOjp+VGV4dFRyYWNrQ3VlKCkKQEAgLTc4
LDEwICs5MiwzNyBAQCBib29sIFRleHRUcmFja0N1ZTo6cGF1c2VPbkV4aXQoKSBjb25zdAogICAg
IHJldHVybiBtX3BhdXNlT25FeGl0OwogfQogCitTdHJpbmcgVGV4dFRyYWNrQ3VlOjpkaXJlY3Rp
b24oKSBjb25zdAoreworICAgIHN3aXRjaCAobV93cml0aW5nRGlyZWN0aW9uKSB7CisgICAgY2Fz
ZSBIb3Jpem9udGFsOiAKKyAgICAgICAgcmV0dXJuICJob3Jpem9udGFsIjsKKyAgICBjYXNlIFZl
cnRpY2FsR3Jvd2luZ0xlZnQ6CisgICAgICAgIHJldHVybiAidmVydGljYWwiOworICAgIGNhc2Ug
VmVydGljYWxHcm93aW5nUmlnaHQ6CisgICAgICAgIHJldHVybiAidmVydGljYWwtbHIiOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKK1N0cmluZyBUZXh0VHJh
Y2tDdWU6OmFsaWdubWVudCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2N1ZUFsaWdubWVudCkg
eworICAgIGNhc2UgU3RhcnQ6IAorICAgICAgICByZXR1cm4gInN0YXJ0IjsKKyAgICBjYXNlIE1p
ZGRsZToKKyAgICAgICAgcmV0dXJuICJtaWRkbGUiOworICAgIGNhc2UgRW5kOgorICAgICAgICBy
ZXR1cm4gImVuZCI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30K
KwogU3RyaW5nIFRleHRUcmFja0N1ZTo6Z2V0Q3VlQXNTb3VyY2UoKQogewotICAgIC8vIEZJWE1F
KDYyODgzKTogSW1wbGVtZW50LgotICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHJldHVy
biBtX2NvbnRlbnQ7CiB9CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gVGV4dFRyYWNr
Q3VlOjpnZXRDdWVBc0hUTUwoKQpAQCAtMTAxLDYgKzE0MiwxMzggQEAgdm9pZCBUZXh0VHJhY2tD
dWU6OnNldElzQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7CiB9
CiAKK3ZvaWQgVGV4dFRyYWNrQ3VlOjpwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYgaW5wdXQp
Cit7CisgICAgLy8gNC44LjEwLjEzLjMgUGFyc2UgdGhlIFdlYlZUVCBzZXR0aW5ncy4KKyAgICAv
LyAxIC0gSW5pdGlhbCBzZXR1cC4KKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisgICAgd2hp
bGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkpIHsKKyAgICAgICAgLy8gMi00IFNldHRpbmdz
IC0gZ2V0IHRoZSBuZXh0IGNoYXJhY3RlciByZXByZXNlbnRpbmcgYSBzZXR0aW5ncy4KKyAgICAg
ICAgY2hhciBzZXR0aW5nID0gaW5wdXRbcG9zaXRpb24rK107CisgICAgICAgIGlmIChwb3NpdGlv
biA+PSBpbnB1dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gNS03
IC0gSWYgdGhlIGNoYXJhY3RlciBhdCBwb3NpdGlvbiBpcyBub3QgJzonLCBzZXQgc2V0dGluZyB0
byBlbXB0eSBzdHJpbmcuCisgICAgICAgIGlmIChpbnB1dFtwb3NpdGlvbisrXSAhPSAnOicpCisg
ICAgICAgICAgICBzZXR0aW5nID0gJ1wwJzsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0
Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyA4IC0gR2F0aGVyIHNl
dHRpbmdzIGJhc2VkIG9uIHZhbHVlIG9mIHNldHRpbmcuCisgICAgICAgIHN3aXRjaCAoc2V0dGlu
ZykgeworICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIDEt
MyAtIENvbGxlY3QgdGhlIG5leHQgd29yZCBhbmQgc2V0IHRoZSB3cml0aW5nIGRpcmVjdGlvbiBh
Y2NvcmRpbmdseS4KKyAgICAgICAgICAgIFN0cmluZyB3cml0aW5nRGlyZWN0aW9uID0gV2ViVlRU
UGFyc2VyOjpjb2xsZWN0V29yZChpbnB1dCwgJnBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmICh3
cml0aW5nRGlyZWN0aW9uID09ICJ2ZXJ0aWNhbCIpCisgICAgICAgICAgICAgICAgbV93cml0aW5n
RGlyZWN0aW9uID0gVmVydGljYWxHcm93aW5nTGVmdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHdy
aXRpbmdEaXJlY3Rpb24gPT0gInZlcnRpY2FsLWxyIikKKyAgICAgICAgICAgICAgICBtX3dyaXRp
bmdEaXJlY3Rpb24gPSBWZXJ0aWNhbEdyb3dpbmdSaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIDEtMiAtIENvbGxlY3QgY2hhcnMgdGhhdCBhcmUgZWl0aGVyICctJywgJyUnLCBvciBh
IGRpZ2l0LgorICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBsaW5lUG9zaXRpb25CdWlsZGVyOwor
ICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgKGlucHV0W3Bv
c2l0aW9uXSA9PSAnLScgfHwgaW5wdXRbcG9zaXRpb25dID09ICclJyB8fCBpc0FTQ0lJRGlnaXQo
aW5wdXRbcG9zaXRpb25dKSkpCisgICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uQnVpbGRlci5h
cHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOworICAgICAgICAgICAgU3RyaW5nIGxpbmVQb3NpdGlv
biA9IGxpbmVQb3NpdGlvbkJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmIChwb3Np
dGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmICFXZWJWVFRQYXJzZXI6OmlzQVNwYWNlKGlucHV0W3Bv
c2l0aW9uXSkpCisgICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAgICAgICAgICAv
LyAzLTUgLSBJZiB0aGVyZSBpcyBub3QgYXQgbGVhc3Qgb25lIGRpZ2l0IGNoYXJhY3RlciwgYSAn
LScgb2NjdXJzIGFueXdoZXJlIG90aGVyIHRoYW4gdGhlIGZyb250LCBvciBhICclJyBvY2N1cnMg
YW55d2hlcmUgb3RoZXIgdGhhbiB0aGUgZW5kLCB0aGVuIGlnbm9yZSB0aGlzIHNldHRpbmcgYW5k
IGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlmIChsaW5lUG9zaXRpb24uZmluZCgnLScsIDEp
ICE9IG5vdEZvdW5kIHx8IGxpbmVQb3NpdGlvbi5yZXZlcnNlRmluZCgiJSIsIGxpbmVQb3NpdGlv
bi5sZW5ndGgoKSAtIDIpICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgLy8gNiAtIElmIHRoZSBmaXJzdCBjaGFyIGlzIGEgJy0nIGFuZCB0aGUgbGFzdCBj
aGFyIGlzIGEgJyUnLCBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlmIChs
aW5lUG9zaXRpb25bMF0gPT0gJy0nICYmIGxpbmVQb3NpdGlvbltsaW5lUG9zaXRpb24ubGVuZ3Ro
KCkgLSAxXSA9PSAnJScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyA3
IC0gSW50ZXJwcmV0IGFzIG51bWJlciAoaWdub3JpbmcgcG9zc2libGUgJyUnKS4KKyAgICAgICAg
ICAgIGJvb2wgdmFsaWROdW1iZXI7CisgICAgICAgICAgICBsb25nIG51bWJlciA9IGxpbmVQb3Np
dGlvbi50b0ludCgmdmFsaWROdW1iZXIpOworICAgICAgICAgICAgaWYgKCF2YWxpZE51bWJlcikK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIDggLSBJZiB0aGUgbGFzdCBj
aGFyIGlzIGEgJyUnIGFuZCB0aGUgdmFsdWUgaXMgbm90IGJldHdlZW4gMCBhbmQgMTAwLCBpZ25v
cmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlmIChsaW5lUG9zaXRpb25bbGluZVBv
c2l0aW9uLmxlbmd0aCgpIC0gMV0gPT0gJyUnKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJl
ciA8IDAgfHwgbnVtYmVyID4gMTAwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAvLyAxMCAtIElmICclJyB0aGVuIHNldCBzbmFwLXRvLWxpbmVzIGZsYWcgdG8g
ZmFsc2UuCisgICAgICAgICAgICAgICAgbV9zbmFwVG9MaW5lcyA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gOSAtIFNldCBjdWUgbGluZSBwb3NpdGlvbiB0byB0aGUgbnVt
YmVyIGZvdW5kLgorICAgICAgICAgICAgbV9saW5lUG9zaXRpb24gPSBudW1iZXI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVCc6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAvLyAxLTIgLSBDb2xsZWN0IGNoYXJhY3RlcnNzIHRoYXQgYXJlIGRp
Z2l0cy4KKyAgICAgICAgICAgIFN0cmluZyB0ZXh0UG9zaXRpb24gPSBXZWJWVFRQYXJzZXI6OmNv
bGxlY3REaWdpdHMoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAgICAgICBpZiAocG9zaXRpb24g
Pj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAv
LyAzIC0gQ2hhcmFjdGVyIGF0IGVuZCBtdXN0IGJlICclJywgb3RoZXJ3aXNlIGlnbm9yZSBhbmQg
a2VlcCBsb29raW5nLgorICAgICAgICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uKytdICE9ICclJykK
KyAgICAgICAgICAgICAgICBnb3RvIE90aGVyd2lzZTsKKyAgICAgICAgICAgIC8vIDQtNiAtIEVu
c3VyZSBubyBvdGhlciBjaGFycyBpbiB0aGlzIHNldHRpbmcgYW5kIHNldHRpbmcgaXMgbm90IGVt
cHR5LgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgIVdlYlZU
VFBhcnNlcjo6aXNBU3BhY2UoaW5wdXRbcG9zaXRpb25dKSkKKyAgICAgICAgICAgICAgICBnb3Rv
IE90aGVyd2lzZTsKKyAgICAgICAgICAgIGlmICh0ZXh0UG9zaXRpb24uaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gNy04IC0gSW50ZXJwcmV0IGFzIG51
bWJlciBhbmQgbWFrZSBzdXJlIGl0IGlzIGJldHdlZW4gMCBhbmQgMTAwLgorICAgICAgICAgICAg
Ym9vbCB2YWxpZE51bWJlcjsKKyAgICAgICAgICAgIGxvbmcgbnVtYmVyID0gdGV4dFBvc2l0aW9u
LnRvSW50KCZ2YWxpZE51bWJlcik7CisgICAgICAgICAgICBpZiAoIXZhbGlkTnVtYmVyKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVy
ID4gMTAwKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIDkgLSBTZXQgY3Vl
IHRleHQgcG9zaXRpb24gdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1fdGV4dFBv
c2l0aW9uID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJ1MnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0yIC0gQ29sbGVj
dCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGRpZ2l0cy4KKyAgICAgICAgICAgIFN0cmluZyBjdWVTaXpl
ID0gV2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKGlucHV0LCAmcG9zaXRpb24pOworICAgICAg
ICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgLy8gMyAtIENoYXJhY3RlciBhdCBlbmQgbXVzdCBiZSAnJScsIG90
aGVyd2lzZSBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlmIChpbnB1dFtw
b3NpdGlvbisrXSAhPSAnJScpCisgICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAg
ICAgICAgICAvLyA0LTYgLSBFbnN1cmUgbm8gb3RoZXIgY2hhcnMgaW4gdGhpcyBzZXR0aW5nIGFu
ZCBzZXR0aW5nIGlzIG5vdCBlbXB0eS4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGlucHV0
Lmxlbmd0aCgpICYmICFXZWJWVFRQYXJzZXI6OmlzQVNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCisg
ICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAgICAgICAgICBpZiAoY3VlU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyA3LTggLSBJ
bnRlcnByZXQgYXMgbnVtYmVyIGFuZCBtYWtlIHN1cmUgaXQgaXMgYmV0d2VlbiAwIGFuZCAxMDAu
CisgICAgICAgICAgICBib29sIHZhbGlkTnVtYmVyOworICAgICAgICAgICAgbG9uZyBudW1iZXIg
PSBjdWVTaXplLnRvSW50KCZ2YWxpZE51bWJlcik7CisgICAgICAgICAgICBpZiAoIXZhbGlkTnVt
YmVyKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG51bWJlciA8IDAg
fHwgbnVtYmVyID4gMTAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8g
OSAtIFNldCBjdWUgc2l6ZSB0byB0aGUgbnVtYmVyIGZvdW5kLgorICAgICAgICAgICAgbV9jdWVT
aXplID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ0EnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS00IC0gQ29sbGVjdCB0
aGUgbmV4dCB3b3JkIGFuZCBzZXQgdGhlIGN1ZSBhbGlnbm1lbnQgYWNjb3JkaW5nbHkuCisgICAg
ICAgICAgICBTdHJpbmcgY3VlQWxpZ25tZW50ID0gV2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChp
bnB1dCwgJnBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChjdWVBbGlnbm1lbnQgPT0gInN0YXJ0
IikKKyAgICAgICAgICAgICAgICBtX2N1ZUFsaWdubWVudCA9IFN0YXJ0OworICAgICAgICAgICAg
ZWxzZSBpZiAoY3VlQWxpZ25tZW50ID09ICJtaWRkbGUiKQorICAgICAgICAgICAgICAgIG1fY3Vl
QWxpZ25tZW50ID0gTWlkZGxlOworICAgICAgICAgICAgZWxzZSBpZiAoY3VlQWxpZ25tZW50ID09
ICJlbmQiKQorICAgICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gRW5kOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gRGlzY2FyZCBh
bnkgcmVtYWluaW5nIHNwYWNlIGNoYXJhY3RlcnMgYmV0d2VlbiBvciBhZnRlciBzZXR0aW5ncyAo
bm90IGluIHRoZSBzcGVjLCBidXQgd2UgdGhpbmsgaXQgc2hvdWxkIGJlKS4KKyAgICAgICAgd2hp
bGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgV2ViVlRUUGFyc2VyOjppc0FTcGFjZShp
bnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAgICAgcG9zaXRpb24rKzsKKyAgICAgICAgY29udGlu
dWU7CisKK090aGVyd2lzZToKKyAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJh
Y3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMgYW5kIGRpc2NhcmQgdGhlbS4KKyAg
ICAgICAgV2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChpbnB1dCwgJnBvc2l0aW9uKTsKKyAgICB9
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
VHJhY2tDdWUuaAppbmRleCBjOWMxNTMzNTk5YmU0ZjExZDdjOWFiMzM1N2U3NTVhZTE1YjI2ZGI4
Li4wYWUyOGE5YjIzMzc1NGY0OWRlZjRjZjMwYmUwMThiNWM3Zjk4M2E2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dFRyYWNrQ3VlLmgKQEAgLTEsMjQgKzEsMjkgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCkBAIC00Myw2ICs0OCw5IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3VlKGlkLCBz
dGFydCwgZW5kLCBjb250ZW50LCBzZXR0aW5ncywgcGF1c2VPbkV4aXQpKTsKICAgICB9CisgICAg
CisgICAgZW51bSBEaXJlY3Rpb24geyBIb3Jpem9udGFsLCBWZXJ0aWNhbEdyb3dpbmdMZWZ0LCBW
ZXJ0aWNhbEdyb3dpbmdSaWdodCB9OworICAgIGVudW0gQWxpZ25tZW50IHsgU3RhcnQsIE1pZGRs
ZSwgRW5kIH07CiAKICAgICB2aXJ0dWFsIH5UZXh0VHJhY2tDdWUoKTsKIApAQCAtNTMsNiArNjEs
MTMgQEAgcHVibGljOgogICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdDsKICAgICBkb3VibGUg
ZW5kVGltZSgpIGNvbnN0OwogICAgIGJvb2wgcGF1c2VPbkV4aXQoKSBjb25zdDsKKyAgICAKKyAg
ICBTdHJpbmcgZGlyZWN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBzbmFwVG9MaW5lcygpIGNvbnN0
IHsgcmV0dXJuIG1fc25hcFRvTGluZXM7IH0KKyAgICBsb25nIGxpbmVQb3NpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZVBvc2l0aW9uOyB9CisgICAgbG9uZyB0ZXh0UG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3RleHRQb3NpdGlvbjsgfQorICAgIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY3VlU2l6ZTsgfQorICAgIFN0cmluZyBhbGlnbm1lbnQoKSBjb25zdDsKIAogICAgIFN0
cmluZyBnZXRDdWVBc1NvdXJjZSgpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Z2V0Q3VlQXNIVE1MKCk7CkBAIC02MywxNCArNzgsMjIgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBUZXh0VHJhY2tDdWUoY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5k
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1
c2VPbkV4aXQpOwogCisgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYpOworICAg
IAogICAgIFRleHRUcmFjayogbV90cmFjazsKICAgICAKICAgICBTdHJpbmcgbV9pZDsKICAgICBk
b3VibGUgbV9zdGFydFRpbWU7CiAgICAgZG91YmxlIG1fZW5kVGltZTsKICAgICBTdHJpbmcgbV9j
b250ZW50OwotICAgIFN0cmluZyBtX3NldHRpbmdzOwogICAgIGJvb2wgbV9wYXVzZU9uRXhpdDsK
KyAgICBEaXJlY3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOworICAgIGJvb2wgbV9zbmFwVG9MaW5l
czsKKyAgICBsb25nIG1fbGluZVBvc2l0aW9uOworICAgIGxvbmcgbV90ZXh0UG9zaXRpb247Cisg
ICAgbG9uZyBtX2N1ZVNpemU7CisgICAgQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50OworCiAgICAg
Ym9vbCBtX2lzQWN0aXZlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5jcHAKaW5kZXggM2IzNTNlN2M4YzM1ZGVmMjM1NDg3ZmI5Yjc2MmEyOWFkNDA3NWEx
Ni4uZDk0YTViMTJiNjY2OWRiNjA1ODYyZTdmNzI1NGU5YjY1NTIwNmQzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiQ3VlUGFyc2VyLmgiCiAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCwxNSArNzEsMjAgQEAgYm9vbCBDdWVQYXJz
ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyAvKmlk
ZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIEN1ZVBhcnNlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogQ3JlYXRlIG1f
cHJpdmF0ZSBiYXNlZCBvbiBNSU1FIHR5cGUuCi0gICAgbV9jbGllbnQtPnRyYWNrTG9hZFN0YXJ0
ZWQoKTsKKyAgICBpZiAocmVzcG9uc2UubWltZVR5cGUoKSA9PSAidGV4dC92dHQiKQorICAgICAg
ICBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKIH0KIAogdm9pZCBDdWVQYXJzZXI6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7Ci0gICAgLy8gRklYTUUoNjI4OTMpOiBT
ZW5kIGRhdGEgYWxvbmcgdG8gbV9wcml2YXRlIHBhcnNlciB0byBiZSBwYXJzZWQuCisgICAgLy8g
SWYgbWltZSB0eXBlIGZyb20gZGlkUmVjZWl2ZVJlc3BvbnNlIHdhcyBub3QgaW5mb3JtYXRpdmUs
IHNuaWZmIGZpbGUgY29udGVudC4KKyAgICBpZiAoIW1fcHJpdmF0ZSAmJiBXZWJWVFRQYXJzZXI6
Omhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoZGF0YSwgbGVuKSkKKyAgICAgICAgY3JlYXRlV2Vi
VlRUUGFyc2VyKCk7CisKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnBh
cnNlQnl0ZXMoZGF0YSwgbGVuKTsKIH0KIAogdm9pZCBDdWVQYXJzZXI6OmRpZEZpbmlzaExvYWRp
bmcodW5zaWduZWQgbG9uZykKQEAgLTk2LDYgKzEwMiwxOSBAQCB2b2lkIEN1ZVBhcnNlcjo6ZmV0
Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikKICAgICAvLyBGSVhN
RSg2Mjg5Myk6IEltcGxlbWVudC4KIH0KIAordm9pZCBDdWVQYXJzZXI6Om5ld0N1ZXNQYXJzZWQo
KQoreworICAgIG1fY2xpZW50LT5uZXdDdWVzUGFyc2VkKCk7Cit9CisKK3ZvaWQgQ3VlUGFyc2Vy
OjpjcmVhdGVXZWJWVFRQYXJzZXIoKQoreworICAgIGlmICghbV9wcml2YXRlKSB7CisgICAgICAg
IG1fcHJpdmF0ZSA9IFdlYlZUVFBhcnNlcjo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX2NsaWVu
dC0+dHJhY2tMb2FkU3RhcnRlZCgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgKaW5k
ZXggNzQ0Y2MzMjI3OGM1ZjRjZjllNGY4MmNhN2M1M2FiMTdiZDg5ZDhjZi4uN2M2YzYzMTc0ZTU3
ODM2OTYwNmVkYTI1ZjQ4YWQ1NDk4ZDA4NWYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmgKQEAgLTMzLDkgKzMzLDkgQEAKIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKIAotI2luY2x1ZGUgIkN1ZVBhcnNlclByaXZhdGUuaCIKICNpbmNsdWRlICJUaHJlYWRh
YmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1
ZGUgIldlYlZUVFBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTMs
NyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrTG9hZENvbXBsZXRlZCgp
ID0gMDsKIH07CiAKLWNsYXNzIEN1ZVBhcnNlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50IHsKK2NsYXNzIEN1ZVBhcnNlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LCBD
dWVQYXJzZXJQcml2YXRlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBDdWVQYXJzZXIoKTsKICAgICB2
aXJ0dWFsIH5DdWVQYXJzZXIoKTsKQEAgLTY3LDggKzY3LDExIEBAIHB1YmxpYzoKICAgICBib29s
IHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgZmV0Y2hQYXJzZWRDdWVz
KFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CisgICAgdm9pZCBuZXdDdWVzUGFyc2Vk
KCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKKyAKICAgICBS
ZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgT3duUHRyPEN1ZVBhcnNlclBy
aXZhdGVJbnRlcmZhY2U+IG1fcHJpdmF0ZTsKICAgICBDdWVQYXJzZXJDbGllbnQqIG1fY2xpZW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJp
dmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5o
CmluZGV4IGJjM2U0ZmJjMDk1MWJlMzRjYmYwMTA3MWVkMjg2OWE5OWEyZjgzMGUuLjM2NGY0Nzcz
NjdhZGQ2NzZhYTIzODhlZmUyNzk5OWRhYjA5N2JmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgKQEAgLTUxLDEwICs1MSwxMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q3VlUGFyc2VyUHJpdmF0ZUludGVyZmFjZSgpIHsgfQogCiAg
ICAgLy8gSW5wdXQgZGF0YSB0byB0aGUgcGFyc2VyIHRvIHBhcnNlLgotICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqLCBpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VCeXRlcyhjb25zdCBjaGFyKiwgdW5zaWduZWQpID0gMDsKIAogICAgIC8vIFRyYW5zZmVycyBv
d25lcnNoaXAgb2YgbGFzdCBwYXJzZWQgY3VlcyB0byBjYWxsZXIuCi0gICAgdmlydHVhbCB2b2lk
IGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4gPiYpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIEN1ZVBhcnNlclByaXZhdGVJbnRlcmZh
Y2UoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZU
VFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNjOWNiYzgwZWRmNGUyN2FhZTZjZTY0OTA2YjFjNjQ1OWQzNjAzNzUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQ
YXJzZXIuY3BwCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIldlYlZUVFBhcnNlci5oIgorCisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBX
ZWJWVFRQYXJzZXI6Omhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoY29uc3QgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEEgV2ViVlRUIGZpbGUgaWRlbnRpZmllciBjb25z
aXN0cyBvZiBhbiBvcHRpb25hbCBCT00gY2hhcmFjdGVyLAorICAgIC8vIHRoZSBzdHJpbmcgIldF
QlZUVCIgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgc3BhY2Ugb3IgdGFiIGNoYXJhY3RlciwKKyAg
ICAvLyBhbmQgYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBsaW5lIHRlcm1p
bmF0b3JzIC4uLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBpZiAobGVuZ3RoID49
IDMgJiYgZGF0YVswXSA9PSAnXHhFRicgJiYgZGF0YVsxXSA9PSAnXHhCQicgJiYgZGF0YVsyXSA9
PSAnXHhCRicpCisgICAgICAgIHBvc2l0aW9uICs9IDM7CisgICAgU3RyaW5nIGxpbmUgPSBjb2xs
ZWN0TmV4dExpbmUoZGF0YSwgbGVuZ3RoLCAmcG9zaXRpb24pOworICAgICAgICAKKyAgICBpZiAo
bGluZS5sZW5ndGgoKSA8IDYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobGluZS5s
ZW5ndGgoKSA9PSA2ICYmIGxpbmUgIT0gIldFQlZUVCIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobGluZS5sZW5ndGgoKSA+IDYgJiYgKGxpbmUuc3Vic3RyaW5nKDAsIDYpICE9ICJX
RUJWVFQiIHx8IChsaW5lWzZdICE9ICcgJyAmJiBsaW5lWzZdICE9ICdcdCcpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgV2ViVlRUUGFyc2Vy
Ojpjb2xsZWN0RGlnaXRzKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIGRpZ2l0czsKKyAgICB3aGlsZSAoKnBvc2l0aW9uIDwgaW5w
dXQubGVuZ3RoKCkgJiYgaXNBU0NJSURpZ2l0KGlucHV0Wypwb3NpdGlvbl0pKQorICAgICAgICBk
aWdpdHMuYXBwZW5kKGlucHV0WygqcG9zaXRpb24pKytdKTsKKyAgICByZXR1cm4gZGlnaXRzLnRv
U3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3JkKGNvbnN0IFN0
cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZzsKKyAgICB3aGlsZSAoKnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgIWlzQVNwYWNl
KGlucHV0Wypwb3NpdGlvbl0pKQorICAgICAgICBzdHJpbmcuYXBwZW5kKGlucHV0WygqcG9zaXRp
b24pKytdKTsKKyAgICByZXR1cm4gc3RyaW5nLnRvU3RyaW5nKCk7Cit9CisKK1dlYlZUVFBhcnNl
cjo6V2ViVlRUUGFyc2VyKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIGNsaWVudCkKKyAgICA6IG1f
c3RhdGUoSW5pdGlhbCkKK3sKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKK30KKwordm9pZCBXZWJW
VFRQYXJzZXI6OmZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYg
b3V0cHV0Q3VlcykKK3sKKyAgICBvdXRwdXRDdWVzID0gbV9jdWVsaXN0OworICAgIG1fY3VlbGlz
dC5jbGVhcigpOworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2VCeXRlcyhjb25zdCBjaGFy
KiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gNC44LjEwLjEzLjMgV0hBVFdHIFdl
YlZUVCBQYXJzZXIgYWxnb3JpdGhtLgorICAgIC8vIDEtMyAtIEluaXRpYWwgc2V0dXAuCisgICAg
dW5zaWduZWQgcG9zaXRpb24gPSAwOworCisgICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7
CisgICAgICAgIFN0cmluZyBsaW5lID0gY29sbGVjdE5leHRMaW5lKGRhdGEsIGxlbmd0aCwgJnBv
c2l0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgICAgICBj
YXNlIEluaXRpYWw6CisgICAgICAgICAgICAvLyA0LTEyIC0gQ29sbGVjdCB0aGUgZmlyc3QgbGlu
ZSBhbmQgY2hlY2sgZm9yICJXRUJWVFQiLgorICAgICAgICAgICAgaWYgKCFoYXNSZXF1aXJlZEZp
bGVJZGVudGlmaWVyKGRhdGEsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgbV9zdGF0ZSA9IEhlYWRlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICAgICAgY2FzZSBIZWFkZXI6CisgICAgICAgICAgICAvLyAxMy0xOCAtIEFsbG93IGEgaGVh
ZGVyIChjb21tZW50IGFyZWEpIHVuZGVyIHRoZSBXRUJWVFQgbGluZS4KKyAgICAgICAgICAgIGlm
IChsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gSWQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgSWQ6CisgICAgICAgICAgICAvLyAx
OS0yOSAtIEFsbG93IGFueSBudW1iZXIgb2YgbGluZSB0ZXJtaW5hdG9ycywgdGhlbiBpbml0aWFs
aXplIG5ldyBjdWUgdmFsdWVzLgorICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVzZXRDdWVWYWx1ZXMoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gMzAtMzkgLSBDaGVjayBpZiB0aGlzIGxpbmUgY29udGFp
bnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KKyAgICAgICAgICAgIG1f
c3RhdGUgPSBjb2xsZWN0Q3VlSWQobGluZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIGNhc2UgVGltaW5nc0FuZFNldHRpbmdzOgorICAgICAgICAgICAgLy8gNDAgLSBD
b2xsZWN0IGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy4KKyAgICAgICAgICAgIG1fc3RhdGUgPSBj
b2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGxpbmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgICAgICBjYXNlIEN1ZVRleHQ6CisgICAgICAgICAgICAvLyA0MS01MyAtIENvbGxl
Y3QgdGhlIGN1ZSB0ZXh0LCBjcmVhdGUgYSBjdWUsIGFuZCBhZGQgaXQgdG8gdGhlIG91dHB1dC4K
KyAgICAgICAgICAgIG1fc3RhdGUgPSBjb2xsZWN0Q3VlVGV4dChsaW5lLCBsZW5ndGgsIHBvc2l0
aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQmFkQ3VlOgorICAgICAg
ICAgICAgLy8gNTQtNjIgLSBDb2xsZWN0IGFuZCBkaXNjYXJkIHRoZSByZW1haW5pbmcgY3VlLgor
ICAgICAgICAgICAgbV9zdGF0ZSA9IGlnbm9yZUJhZEN1ZShsaW5lKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2Vi
VlRUUGFyc2VyOjpjb2xsZWN0Q3VlSWQoY29uc3QgU3RyaW5nJiBsaW5lKQoreworICAgIGlmIChs
aW5lLmNvbnRhaW5zKCItLT4iKSkKKyAgICAgICAgcmV0dXJuIGNvbGxlY3RUaW1pbmdzQW5kU2V0
dGluZ3MobGluZSk7CisgICAgbV9jdXJyZW50SWQgPSBsaW5lOworICAgIHJldHVybiBUaW1pbmdz
QW5kU2V0dGluZ3M7Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6
OmNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBsaW5lKQoreworICAgIC8v
IDQuOC4xMC4xMy4zIENvbGxlY3QgV2ViVlRUIGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy4KKyAg
ICAvLyAxLTMgLSBMZXQgaW5wdXQgYmUgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQgYW5kIHBvc2l0
aW9uIGJlIGEgcG9pbnRlciBpbnRvIGlucHV0CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwor
ICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsICZwb3NpdGlvbik7CisKKyAgICAvLyA0LTUgLSBDb2xs
ZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQgcmV0
dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIHN0YXJ0IHRp
bWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1lLgorICAgIG1fY3VycmVudFN0YXJ0VGltZSA9IGNvbGxl
Y3RUaW1lU3RhbXAobGluZSwgJnBvc2l0aW9uKTsKKyAgICBpZiAobV9jdXJyZW50U3RhcnRUaW1l
ID09IG1hbGZvcm1lZFRpbWUpCisgICAgICAgIHJldHVybiBCYWRDdWU7CisgICAgc2tpcFdoaXRl
U3BhY2UobGluZSwgJnBvc2l0aW9uKTsKKworICAgIC8vIDYtOSAtIElmIHRoZSBuZXh0IHRocmVl
IGNoYXJhY3RlcnMgYXJlIG5vdCAiLS0+IiwgYWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLgorICAg
IGlmIChsaW5lLmZpbmQoIi0tPiIsIHBvc2l0aW9uKSA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0
dXJuIEJhZEN1ZTsKKyAgICBwb3NpdGlvbiArPSAzOworICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUs
ICZwb3NpdGlvbik7CisKKyAgICAvLyAxMC0xMSAtIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1w
LiBJZiB0aGF0IGZhaWxzLCB0aGVuIGFib3J0IGFuZCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNl
LCBsZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUgZW5kIHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1l
LgorICAgIG1fY3VycmVudEVuZFRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKGxpbmUsICZwb3NpdGlv
bik7CisgICAgaWYgKG1fY3VycmVudEVuZFRpbWUgPT0gbWFsZm9ybWVkVGltZSkKKyAgICAgICAg
cmV0dXJuIEJhZEN1ZTsKKyAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisg
ICAgLy8gMTIgLSBQYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzIGZvciB0aGUgY3VlIChjb25kdWN0
ZWQgaW4gVGV4dFRyYWNrQ3VlKS4KKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGxpbmUuc3Vic3Ry
aW5nKHBvc2l0aW9uLCBsaW5lLmxlbmd0aCgpLTEpOworICAgIHJldHVybiBDdWVUZXh0OworfQor
CitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0Q3VlVGV4dChj
b25zdCBTdHJpbmcmIGxpbmUsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zaXRpb24pCit7
CisgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7CisgICAgICAgIHByb2Nlc3NDdWVUZXh0KCk7Cisg
ICAgICAgIHJldHVybiBJZDsKKyAgICB9CisgICAgaWYgKCFtX2N1cnJlbnRDb250ZW50LmlzRW1w
dHkoKSkKKyAgICAgICAgbV9jdXJyZW50Q29udGVudC5hcHBlbmQoIlxuIik7CisgICAgbV9jdXJy
ZW50Q29udGVudC5hcHBlbmQobGluZSk7CisKKyAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKQor
ICAgICAgICBwcm9jZXNzQ3VlVGV4dCgpOworICAgICAgICAgICAgICAgIAorICAgIHJldHVybiBD
dWVUZXh0OworfQorCitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjppZ25v
cmVCYWRDdWUoY29uc3QgU3RyaW5nJiBsaW5lKQoreworICAgIGlmICghbGluZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBCYWRDdWU7CisgICAgcmV0dXJuIElkOworfQorCit2b2lkIFdlYlZU
VFBhcnNlcjo6cHJvY2Vzc0N1ZVRleHQoKQoreworICAgIC8vIDUxIC0gQ3VlIHRleHQgcHJvY2Vz
c2luZyBiYXNlZCBvbiBXZWJWVFQgY3VlIHRleHQgcGFyc2luZyBydWxlcyBhbmQgV2ViVlRUIGN1
ZSB0ZXh0IERPTSBjb25zdHJ1Y3Rpb24gcnVsZXMuCisgICAgLy8gRklYTUUoNjQxMzIpOiBQcm9j
ZXNzIHRoZSBjdWUgdGV4dCBhcyBwZXIgdGhlIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMuIAorICAg
IC8vICAgICBTb3VyY2U6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pZnJhbWUtZWxlbWVudC5odG1sI3dlYnZ0dC1jdWUtdGV4
dC1wYXJzaW5nLXJ1bGVzCisgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNr
Q3VlOjpjcmVhdGUobV9jdXJyZW50SWQsIG1fY3VycmVudFN0YXJ0VGltZSwgbV9jdXJyZW50RW5k
VGltZSwgbV9jdXJyZW50Q29udGVudC50b1N0cmluZygpLCBtX2N1cnJlbnRTZXR0aW5ncywgZmFs
c2UpOworICAgIG1fY3VlbGlzdC5hcHBlbmQoY3VlKTsKKyAgICBtX2NsaWVudC0+bmV3Q3Vlc1Bh
cnNlZCgpOworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6cmVzZXRDdWVWYWx1ZXMoKQoreworICAg
IG1fY3VycmVudElkID0gZW1wdHlTdHJpbmcoKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IGVt
cHR5U3RyaW5nKCk7CisgICAgbV9jdXJyZW50U3RhcnRUaW1lID0gMDsKKyAgICBtX2N1cnJlbnRF
bmRUaW1lID0gMDsKKyAgICBtX2N1cnJlbnRDb250ZW50LmNsZWFyKCk7Cit9CisKK2RvdWJsZSBX
ZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3RyaW5nJiBsaW5lLCB1bnNpZ25l
ZCogcG9zaXRpb24pCit7CisgICAgLy8gNC44LjEwLjEzLjMgQ29sbGVjdCBhIFdlYlZUVCB0aW1l
c3RhbXAuCisgICAgLy8gMS00IC0gSW5pdGlhbCBjaGVja3MsIGxldCBtb3N0IHNpZ25pZmljYW50
IHVuaXRzIGJlIG1pbnV0ZXMuCisgICAgZW51bSBNb2RlIHsgbWludXRlcywgaG91cnMgfTsKKyAg
ICBNb2RlIG1vZGUgPSBtaW51dGVzOworICAgIGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgo
KSB8fCAhaXNBU0NJSURpZ2l0KGxpbmVbKnBvc2l0aW9uXSkpCisgICAgICAgIHJldHVybiBtYWxm
b3JtZWRUaW1lOworCisgICAgLy8gNS02IC0gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3Rl
cnMgdGhhdCBhcmUgMC05LgorICAgIFN0cmluZyBkaWdpdHMxID0gY29sbGVjdERpZ2l0cyhsaW5l
LCBwb3NpdGlvbik7CisgICAgaW50IHZhbHVlMSA9IGRpZ2l0czEudG9JbnQoKTsKKworICAgIC8v
IDcgLSBJZiBub3QgMiBjaGFyYWN0ZXJzIG9yIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiA1OSwgaW50
ZXJwcmV0IGFzIGhvdXJzLgorICAgIGlmIChkaWdpdHMxLmxlbmd0aCgpICE9IDIgfHwgdmFsdWUx
ID4gNTkpCisgICAgICAgIG1vZGUgPSBob3VyczsKKworICAgIC8vIDgtMTIgLSBDb2xsZWN0IHRo
ZSBuZXh0IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAnOicgKG11c3QgYmUgMiBjaGFycykuCisgICAg
aWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbKCpwb3NpdGlvbikrK10gIT0g
JzonKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAoKnBvc2l0aW9uID49
IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdpdChsaW5lWygqcG9zaXRpb24pXSkpCisgICAg
ICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgIFN0cmluZyBkaWdpdHMyID0gY29sbGVjdERp
Z2l0cyhsaW5lLCBwb3NpdGlvbik7CisgICAgaW50IHZhbHVlMiA9IGRpZ2l0czIudG9JbnQoKTsK
KyAgICBpZiAoZGlnaXRzMi5sZW5ndGgoKSAhPSAyKSAKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1l
ZFRpbWU7CisKKyAgICAvLyAxMyAtIERldGVjdCB3aGV0aGVyIHRoaXMgdGltZXN0YW1wIGluY2x1
ZGVzIGhvdXJzLgorICAgIGludCB2YWx1ZTM7CisgICAgaWYgKG1vZGUgPT0gaG91cnMgfHwgKCpw
b3NpdGlvbiA8IGxpbmUubGVuZ3RoKCkgJiYgbGluZVsqcG9zaXRpb25dID09ICc6JykpIHsKKyAg
ICAgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbKnBvc2l0aW9uXSAh
PSAnOicpCisgICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICAgICAgKCpwb3Np
dGlvbikrKzsKKyAgICAgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8ICFpc0FT
Q0lJRGlnaXQobGluZVsqcG9zaXRpb25dKSkKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRU
aW1lOworICAgICAgICBTdHJpbmcgZGlnaXRzMyA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9zaXRp
b24pOworICAgICAgICBpZiAoZGlnaXRzMy5sZW5ndGgoKSAhPSAyKQorICAgICAgICAgICAgcmV0
dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgICAgIHZhbHVlMyA9IGRpZ2l0czMudG9JbnQoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB2YWx1ZTMgPSB2YWx1ZTI7CisgICAgICAgIHZhbHVlMiA9IHZh
bHVlMTsKKyAgICAgICAgdmFsdWUxID0gMDsKKyAgICB9CisKKyAgICAvLyAxNC0xOSAtIENvbGxl
Y3QgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJy4nIChtdXN0IGJlIDMgY2hhcnMpLgorICAg
IGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lWygqcG9zaXRpb24pKytdICE9
ICcuJykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYgKCpwb3NpdGlvbiA+
PSBsaW5lLmxlbmd0aCgpIHx8ICFpc0FTQ0lJRGlnaXQobGluZVsqcG9zaXRpb25dKSkKKyAgICAg
ICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgU3RyaW5nIGRpZ2l0czQgPSBjb2xsZWN0RGln
aXRzKGxpbmUsIHBvc2l0aW9uKTsKKyAgICBpZiAoZGlnaXRzNC5sZW5ndGgoKSAhPSAzKQorICAg
ICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpbnQgdmFsdWU0ID0gZGlnaXRzNC50b0lu
dCgpOworICAgIGlmICh2YWx1ZTIgPiA1OSB8fCB2YWx1ZTMgPiA1OSkKKyAgICAgICAgcmV0dXJu
IG1hbGZvcm1lZFRpbWU7CisKKyAgICAvLyAyMC0yMSAtIENhbGN1bGF0ZSByZXN1bHQuCisgICAg
cmV0dXJuICh2YWx1ZTEgKiBzZWNvbmRzUGVySG91cikgKyAodmFsdWUyICogc2Vjb25kc1Blck1p
bnV0ZSkgKyB2YWx1ZTMgKyAoKGRvdWJsZSl2YWx1ZTQgLyAxMDAwKTsKK30KKwordm9pZCBXZWJW
VFRQYXJzZXI6OnNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQqIHBv
c2l0aW9uKQoreworICAgIHdoaWxlICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYmIGlzQVNw
YWNlKGxpbmVbKnBvc2l0aW9uXSkpCisgICAgICAgICgqcG9zaXRpb24pKys7Cit9CisKK3ZvaWQg
V2ViVlRUUGFyc2VyOjpza2lwTGluZVRlcm1pbmF0b3IoY29uc3QgY2hhciogZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCogcG9zaXRpb24pCit7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBs
ZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGF0YVsqcG9zaXRpb25dID09ICdccicp
CisgICAgICAgICgqcG9zaXRpb24pKys7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBsZW5ndGgpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZGF0YVsqcG9zaXRpb25dID09ICdcbicpCisgICAgICAg
ICgqcG9zaXRpb24pKys7Cit9CisKK1N0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3ROZXh0TGlu
ZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKiBwb3NpdGlvbikK
K3sKKyAgICB1bnNpZ25lZCBvbGRQb3NpdGlvbiA9ICpwb3NpdGlvbjsKKyAgICB3aGlsZSAoKnBv
c2l0aW9uIDwgbGVuZ3RoICYmIGRhdGFbKnBvc2l0aW9uXSAhPSAnXHInICYmIGRhdGFbKnBvc2l0
aW9uXSAhPSAnXG4nKQorICAgICAgICAoKnBvc2l0aW9uKSsrOworICAgIFN0cmluZyBsaW5lID0g
U3RyaW5nOjpmcm9tVVRGOChkYXRhICsgb2xkUG9zaXRpb24sICpwb3NpdGlvbiAtIG9sZFBvc2l0
aW9uKTsKKyAgICBza2lwTGluZVRlcm1pbmF0b3IoZGF0YSwgbGVuZ3RoLCBwb3NpdGlvbik7Cisg
ICAgcmV0dXJuIGxpbmU7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2OTM1MmMwZDg3OTIyMzQzNDA0
ZTZmMWUwOTdiNTkwODNhYjk1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YlZUVFBhcnNlcl9oCisjZGVmaW5lIFdlYlZUVFBhcnNlcl9oCisKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisKKyNpbmNsdWRlICJDdWVQYXJzZXJQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVySG91ciA9IDM2MDA7
CitzdGF0aWMgY29uc3QgaW50IHNlY29uZHNQZXJNaW51dGUgPSA2MDsKK3N0YXRpYyBjb25zdCBk
b3VibGUgbWFsZm9ybWVkVGltZSA9IC0xOworCitjbGFzcyBXZWJWVFRQYXJzZXIgOiBwdWJsaWMg
Q3VlUGFyc2VyUHJpdmF0ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViVlRU
UGFyc2VyKCkgeyB9CisgICAgCisgICAgZW51bSBQYXJzZVN0YXRlIHsgSW5pdGlhbCwgSGVhZGVy
LCBJZCwgVGltaW5nc0FuZFNldHRpbmdzLCBDdWVUZXh0LCBCYWRDdWUgfTsKKworICAgIHN0YXRp
YyBQYXNzT3duUHRyPFdlYlZUVFBhcnNlcj4gY3JlYXRlKEN1ZVBhcnNlclByaXZhdGVDbGllbnQq
IGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViVlRUUGFyc2Vy
KGNsaWVudCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBoYXNSZXF1aXJlZEZpbGVJ
ZGVudGlmaWVyKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBzdGF0
aWMgaW5saW5lIGJvb2wgaXNBU3BhY2UoY2hhciBjKQorICAgIHsKKyAgICAgICAgLy8gV2ViVlRU
IHNwYWNlIGNoYXJhY3RlcnMgYXJlIFUrMDAyMCBTUEFDRSwgVSswMDA5IENIQVJBQ1RFUiBUQUJV
TEFUSU9OICh0YWIpLCBVKzAwMEEgTElORSBGRUVEIChMRiksIFUrMDAwQyBGT1JNIEZFRUQgKEZG
KSwgYW5kIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gICAgKENSKS4KKyAgICAgICAgcmV0dXJuIGMg
PT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXGYnIHx8IGMgPT0gJ1xy
JzsKKyAgICB9CisgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0RGlnaXRzKGNvbnN0IFN0cmluZyYs
IHVuc2lnbmVkKik7CisgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0V29yZChjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCopOworCisgICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8
UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5
dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCopOworICAgIAorICAgIFBhcnNl
U3RhdGUgbV9zdGF0ZTsKKworcHJpdmF0ZToKKyAgICBQYXJzZVN0YXRlIGNvbGxlY3RDdWVJZChj
b25zdCBTdHJpbmcmKTsKKyAgICBQYXJzZVN0YXRlIGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3Mo
Y29uc3QgU3RyaW5nJik7CisgICAgUGFyc2VTdGF0ZSBjb2xsZWN0Q3VlVGV4dChjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKTsKKyAgICBQYXJzZVN0YXRlIGlnbm9yZUJh
ZEN1ZShjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgcHJvY2Vzc0N1ZVRleHQoKTsKKyAgICB2
b2lkIHJlc2V0Q3VlVmFsdWVzKCk7CisgICAgZG91YmxlIGNvbGxlY3RUaW1lU3RhbXAoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQqKTsKKyAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkKik7CisgICAgc3RhdGljIHZvaWQgc2tpcExpbmVUZXJtaW5hdG9yKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQqKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIGNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkKik7CisKKyAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CisgICAgZG91YmxlIG1fY3VycmVu
dFN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsKKyAgICBTdHJpbmdCdWls
ZGVyIG1fY3VycmVudENvbnRlbnQ7CisgICAgU3RyaW5nIG1fY3VycmVudFNldHRpbmdzOworCisg
ICAgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogbV9jbGllbnQ7CisKKyAgICBWZWN0b3I8UmVmUHRy
PFRleHRUcmFja0N1ZT4gPiBtX2N1ZWxpc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103129</attachid>
            <date>2011-08-05 16:14:24 -0700</date>
            <delta_ts>2011-08-05 17:39:22 -0700</delta_ts>
            <desc>some nits and int to long casting removed</desc>
            <filename>bug-62882-20110805161423.patch</filename>
            <type>text/plain</type>
            <size>43552</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI1MjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOWE0YzI3
M2IwZWMzZmVkMTM1YWM3OTYzZTY1MTkwNTFkN2Y5ZWRjNi4uNGI4M2FkYTMwZTY4MzA0ZjY1YjVi
OWIzOTg2ODJkMDIyYzUwMGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTgsNiArMTk5
OCw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk3NGMzMWU0NWViYTlmMmU5ZmFi
NDg0MWE4MDNiNDFjMmQwODQ3ZC4uMGI4N2RkMjhhMzM0MDE3NzM2MjcwY2I1MTk0ODI2MDYyZDgx
ODFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA4LTA1ICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURFT19UUkFDSyBmZWF0dXJlIGRlZmlu
ZSwgd2hpY2ggaXMgdHVybmVkIG9mZiwgYnV0CisgICAgICAgIG5ldyB0ZXN0cyBoYXZlIGJlZW4g
YWRkZWQgaW4gbWVkaWEvdHJhY2svIChhbmQgYXJlIHNraXBwZWQpLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvVGV4dFRyYWNrQ3VlLmNw
cDoKKyAgICAgICAgKiBodG1sL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmg6
CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oOiBBZGRlZC4KKwogMjAxMS0wOC0wNSAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxl
cmF0ZWQgY2FudmFzIGJyZWFrcyB3aGVuIG1vdmluZyBjYW52YXNlcyBvciByZXNvdXJjZXMgYmV0
d2VlbiBQYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOGJkNTU1NTBmY2Ex
ODYwOWQzNGVjNTRkYjJmNGZmNTQ0NzE0ZjZhMi4uODg5YTAxZmVkZWE0YWVhZGM0NDc0YjEyOGZi
ZDNjNTJlMDNmZmFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yODYwLDYg
KzI4NjAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL0N1ZVBhcnNlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2
YXRlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1VSTFN0cmluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VVUlELmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggNDc0NzZlMmRiYmEzYTkzOTNmZTg0MmE5Zjk0NTRiYTI0NDhhMGQ2
Mi4uYWI4NTk3NGNmNDk2NjNiOTg3Yzc1YjJlN2EzZDI1Y2I4ZmY2M2EwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDQzMCw2ICs0NDMwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2lu
L0JTdHJpbmcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQlN0cmluZy5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS93aW4vQml0bWFwSW5mby5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCBiN2QwMDJiOTFmODAxYTI2YjdiODdiZmNhMzQ4YWE4YjE2Y2MzNjM2Li4yZjE1MzkyYTMwMGY0
YzBlOGU3ZThlODJlYmM5MTQxN2Y0ZmE2NmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjExOSw2ICsy
MTE5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vVGltZXIuaCBcCiAgICAgcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZh
dGUuaCBcCisgICAgcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAogICAgIHBsYXRmb3Jt
L1dpZGdldC5oIFwKICAgICBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaCBcCiAgICAgcGxh
dGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzMDIwMjY3M2MzMjQyN2M3NWIyMzVkYzM4
NjM5YzE5NWFhNmVkMWRkLi44YWYxNGQwNjVjMWQyMjRmNDFiMTJhZGU3OGU0ZjYxZWNlNDZjYTQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC00MDc5LDYgKzQwNzksOCBAQAogCQlBQkRERkU3OTBBNUM2RTcwMDBBM0UxMUQgLyog
UmVuZGVyTWVudUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUJEREZFNzMwQTVDNkU2RjAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmNwcCAq
LzsgfTsKIAkJQUJEREZFN0EwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQkRERkU3NDBBNUM2
RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCAqLzsgfTsKIAkJQURERjFBRDcxMjU3Q0Q5
QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQ
YXRoLmggKi87IH07CisJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI3NDBD
MTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCAqLzsgfTsKKwkJQjEwQjc0MEYxM0JF
ODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNzQwRDEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRU
UGFyc2VyLmNwcCAqLzsgfTsKIAkJQjE0MzUzRDUxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3Ry
ZWFtTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMTQzNTNEMTEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCAqLzsgfTsK
IAkJQjE0MzUzRDYxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUzRDIxMzhFQThFRDAw
RDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovOyB9OwogCQlCMTQzNTNGODEzOEVBOTVCMDBE
NTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUzRjYxMzhFQTk1QjAwRDUzMjc2IC8qIEpTTWVkaWFT
dHJlYW1MaXN0LmNwcCAqLzsgfTsKQEAgLTEwNTk0LDYgKzEwNTk2LDggQEAKIAkJQUJEREZFNzQw
QTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJNZW51TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRERGMUFENDEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdQYXRoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRl
clNWR1BhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMTBCNzQwQzEzQkU4MEJGMDBCQzFD
MjYgLyogV2ViVlRUUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YlZUVFBhcnNlci5oOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJW
VFRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViVlRU
UGFyc2VyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QxMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRp
YVN0cmVhbUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVk
aWFTdHJlYW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjE0MzUzRDIx
MzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjE0MzUzRDMxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4MDQ5LDYgKzE4MDUzLDggQEAKIAkJCQlCMkU0RUM5NTBEMDBDMjJC
MDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmggKi8sCiAJCQkJQjJFNEVDOTYwRDAwQzIyQjAwNDMy
NjQzIC8qIFNWR1pvb21FdmVudC5pZGwgKi8sCiAJCQkJQjI4QzZBMjYwRDAwQzQ0ODAwMzM0QUE0
IC8qIHhsaW5rYXR0cnMuaW4gKi8sCisJCQkJQjEwQjc0MEMxM0JFODBCRjAwQkMxQzI2IC8qIFdl
YlZUVFBhcnNlci5oICovLAorCQkJCUIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQ
YXJzZXIuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBzdmc7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjMzMzksNiArMjMzNDUsMTYgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEy
RjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1Mzcz
NTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFE
NEU1RDEzQTEyQTBCMDA4NDZCMjcgLyogQ3VlSW5kZXguaCBpbiBIZWFkZXJzICovLAorCQkJCUIx
QUQ0RTVGMTNBMTJBMEIwMDg0NkIyNyAvKiBMb2FkYWJsZVRleHRUcmFjay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQjFBRDRFNjMxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFibGVUZXh0VHJhY2suaCBp
biBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTY3MTNBMTJBMEIwMDg0NkIyNyAvKiBUZXh0VHJhY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTY5MTNBMTJBMEIwMDg0NkIyNyAvKiBUZXh0VHJh
Y2tDdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTZCMTNBMTJBMEIwMDg0NkIyNyAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3NDEzQTEyQTQ2MDA4
NDZCMjcgLyogQ3VlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3QzEzQTEyQTcy
MDA4NDZCMjcgLyogQ3VlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3RDEzQTEy
QTcyMDA4NDZCMjcgLyogQ3VlUGFyc2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjEw
Qjc0MEUxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yNjEzNyw2ICsyNjE1MywxNSBAQAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBY
U0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3RTJFMEUxMkYwRkM5QzAw
QzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1MzczNTIxMzdC
NjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTVD
MTNBMTJBMEIwMDg0NkIyNyAvKiBDdWVJbmRleC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFE
NEU1RTEzQTEyQTBCMDA4NDZCMjcgLyogTG9hZGFibGVUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQjFBRDRFNjIxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFibGVUZXh0VHJhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNjYxM0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2ODEzQTEyQTBCMDA4NDZCMjcgLyogVGV4
dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTZBMTNBMTJBMEIwMDg0NkIy
NyAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTczMTNB
MTJBNDYwMDg0NkIyNyAvKiBDdWVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRF
N0IxM0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MTBCNzQwRjEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCmluZGV4IDNiN2E4OTNjMmNmMDM5ZTJl
OTkxZTA5NmY1ZjZmNDU0OWU3YTBlMjUuLjQ2ZTI2ZTU5YzY2NmE4MDJkZjg2OTVkOGUzYzgwOThh
MTJkOWYzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKQEAgLTIsMjMgKzIs
MjggQEAKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CkBAIC0zMSw2ICszNiw4IEBACiAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiVGV4dFRyYWNrLmgiCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5
LDkgKzQ2LDE2IEBAIFRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKGNvbnN0IFN0cmluZyYgaWQs
IGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyCiAgICAgLCBtX3N0YXJ0VGltZShz
dGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAgLCBtX2NvbnRlbnQoY29udGVudCkKLSAg
ICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3BhdXNlT25FeGl0KHBhdXNlT25FeGl0
KQorICAgICwgbV93cml0aW5nRGlyZWN0aW9uKEhvcml6b250YWwpCisgICAgLCBtX3NuYXBUb0xp
bmVzKHRydWUpCisgICAgLCBtX2xpbmVQb3NpdGlvbigtMSkKKyAgICAsIG1fdGV4dFBvc2l0aW9u
KDUwKQorICAgICwgbV9jdWVTaXplKDEwMCkKKyAgICAsIG1fY3VlQWxpZ25tZW50KE1pZGRsZSkK
KyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiB7CisgICAgcGFyc2VTZXR0aW5ncyhzZXR0aW5ncyk7
CiB9CiAKIFRleHRUcmFja0N1ZTo6flRleHRUcmFja0N1ZSgpCkBAIC03OCwxMCArOTIsMzcgQEAg
Ym9vbCBUZXh0VHJhY2tDdWU6OnBhdXNlT25FeGl0KCkgY29uc3QKICAgICByZXR1cm4gbV9wYXVz
ZU9uRXhpdDsKIH0KIAorU3RyaW5nIFRleHRUcmFja0N1ZTo6ZGlyZWN0aW9uKCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fd3JpdGluZ0RpcmVjdGlvbikgeworICAgIGNhc2UgSG9yaXpvbnRhbDog
CisgICAgICAgIHJldHVybiAiaG9yaXpvbnRhbCI7CisgICAgY2FzZSBWZXJ0aWNhbEdyb3dpbmdM
ZWZ0OgorICAgICAgICByZXR1cm4gInZlcnRpY2FsIjsKKyAgICBjYXNlIFZlcnRpY2FsR3Jvd2lu
Z1JpZ2h0OgorICAgICAgICByZXR1cm4gInZlcnRpY2FsLWxyIjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCitTdHJpbmcgVGV4dFRyYWNrQ3VlOjphbGlnbm1l
bnQoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9jdWVBbGlnbm1lbnQpIHsKKyAgICBjYXNlIFN0
YXJ0OiAKKyAgICAgICAgcmV0dXJuICJzdGFydCI7CisgICAgY2FzZSBNaWRkbGU6CisgICAgICAg
IHJldHVybiAibWlkZGxlIjsKKyAgICBjYXNlIEVuZDoKKyAgICAgICAgcmV0dXJuICJlbmQiOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKIFN0cmluZyBUZXh0
VHJhY2tDdWU6OmdldEN1ZUFzU291cmNlKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxl
bWVudC4KLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9jb250ZW50Owog
fQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFRleHRUcmFja0N1ZTo6Z2V0Q3VlQXNI
VE1MKCkKQEAgLTEwMSw2ICsxNDIsMTU2IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRJc0FjdGl2
ZShib29sIGFjdGl2ZSkKICAgICBtX2lzQWN0aXZlID0gYWN0aXZlOwogfQogCit2b2lkIFRleHRU
cmFja0N1ZTo6cGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIC8vIDQu
OC4xMC4xMy4zIFBhcnNlIHRoZSBXZWJWVFQgc2V0dGluZ3MuCisgICAgLy8gMSAtIEluaXRpYWwg
c2V0dXAuCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIHdoaWxlIChwb3NpdGlvbiA8
IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIDItNCBTZXR0aW5ncyAtIGdldCB0aGUgbmV4
dCBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nIGEgc2V0dGluZ3MuCisgICAgICAgIGNoYXIgc2V0dGlu
ZyA9IGlucHV0W3Bvc2l0aW9uKytdOworICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVu
Z3RoKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gNS03IC0gSWYgdGhlIGNo
YXJhY3RlciBhdCBwb3NpdGlvbiBpcyBub3QgJzonLCBzZXQgc2V0dGluZyB0byBlbXB0eSBzdHJp
bmcuCisgICAgICAgIGlmIChpbnB1dFtwb3NpdGlvbisrXSAhPSAnOicpCisgICAgICAgICAgICBz
ZXR0aW5nID0gJ1wwJzsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIDggLSBHYXRoZXIgc2V0dGluZ3MgYmFz
ZWQgb24gdmFsdWUgb2Ygc2V0dGluZy4KKyAgICAgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAg
ICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0zIC0gQ29sbGVj
dCB0aGUgbmV4dCB3b3JkIGFuZCBzZXQgdGhlIHdyaXRpbmcgZGlyZWN0aW9uIGFjY29yZGluZ2x5
LgorICAgICAgICAgICAgU3RyaW5nIHdyaXRpbmdEaXJlY3Rpb24gPSBXZWJWVFRQYXJzZXI6OmNv
bGxlY3RXb3JkKGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJl
Y3Rpb24gPT0gInZlcnRpY2FsIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24g
PSBWZXJ0aWNhbEdyb3dpbmdMZWZ0OworICAgICAgICAgICAgZWxzZSBpZiAod3JpdGluZ0RpcmVj
dGlvbiA9PSAidmVydGljYWwtbHIiKQorICAgICAgICAgICAgICAgIG1fd3JpdGluZ0RpcmVjdGlv
biA9IFZlcnRpY2FsR3Jvd2luZ1JpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0y
IC0gQ29sbGVjdCBjaGFycyB0aGF0IGFyZSBlaXRoZXIgJy0nLCAnJScsIG9yIGEgZGlnaXQuCisg
ICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGxpbmVQb3NpdGlvbkJ1aWxkZXI7CisgICAgICAgICAg
ICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAoaW5wdXRbcG9zaXRpb25dID09
ICctJyB8fCBpbnB1dFtwb3NpdGlvbl0gPT0gJyUnIHx8IGlzQVNDSUlEaWdpdChpbnB1dFtwb3Np
dGlvbl0pKSkKKyAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25CdWlsZGVyLmFwcGVuZChpbnB1
dFtwb3NpdGlvbisrXSk7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgo
KSAmJiAhV2ViVlRUUGFyc2VyOjppc0FTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAg
ICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgU3RyaW5nIGxpbmVQb3NpdGlvbiA9
IGxpbmVQb3NpdGlvbkJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgICAgICAgICAgLy8gMy01IC0g
SWYgdGhlcmUgaXMgbm90IGF0IGxlYXN0IG9uZSBkaWdpdCBjaGFyYWN0ZXIsCisgICAgICAgICAg
ICAvLyAgICAgICBhICctJyBvY2N1cnMgYW55d2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJvbnQsIG9y
CisgICAgICAgICAgICAvLyAgICAgICBhICclJyBvY2N1cnMgYW55d2hlcmUgb3RoZXIgdGhhbiB0
aGUgZW5kLCB0aGVuCisgICAgICAgICAgICAvLyAgICAgICBpZ25vcmUgdGhpcyBzZXR0aW5nIGFu
ZCBrZWVwIGxvb2tpbmcuCisgICAgICAgICAgICBpZiAobGluZVBvc2l0aW9uLmZpbmQoJy0nLCAx
KSAhPSBub3RGb3VuZCB8fCBsaW5lUG9zaXRpb24ucmV2ZXJzZUZpbmQoIiUiLCBsaW5lUG9zaXRp
b24ubGVuZ3RoKCkgLSAyKSAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgLy8gNiAtIElmIHRoZSBmaXJzdCBjaGFyIGlzIGEgJy0nIGFuZCB0aGUgbGFz
dCBjaGFyIGlzIGEgJyUnLCBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlm
IChsaW5lUG9zaXRpb25bMF0gPT0gJy0nICYmIGxpbmVQb3NpdGlvbltsaW5lUG9zaXRpb24ubGVu
Z3RoKCkgLSAxXSA9PSAnJScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IC8vIDcgLSBJbnRlcnByZXQgYXMgbnVtYmVyICh0b0ludCBpZ25vcmVzIHRyYWlsaW5nIG5vbi1k
aWdpdCBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgLy8gICAgIHN1Y2ggYXMgYSBwb3NzaWJsZSAn
JScpLgorICAgICAgICAgICAgYm9vbCB2YWxpZE51bWJlcjsKKyAgICAgICAgICAgIGludCBudW1i
ZXIgPSBsaW5lUG9zaXRpb24udG9JbnQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICgh
dmFsaWROdW1iZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIDgg
LSBJZiB0aGUgbGFzdCBjaGFyIGlzIGEgJyUnIGFuZCB0aGUgdmFsdWUgaXMgbm90IGJldHdlZW4g
MCBhbmQgMTAwLCBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlmIChsaW5l
UG9zaXRpb25bbGluZVBvc2l0aW9uLmxlbmd0aCgpIC0gMV0gPT0gJyUnKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVyID4gMTAwKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIDEwIC0gSWYgJyUnIHRoZW4gc2V0IHNuYXAt
dG8tbGluZXMgZmxhZyB0byBmYWxzZS4KKyAgICAgICAgICAgICAgICBtX3NuYXBUb0xpbmVzID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIDkgLSBTZXQgY3VlIGxpbmUg
cG9zaXRpb24gdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1fbGluZVBvc2l0aW9u
ID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1QnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0yIC0gQ29sbGVjdCBjaGFy
YWN0ZXJzIHRoYXQgYXJlIGRpZ2l0cy4KKyAgICAgICAgICAgIFN0cmluZyB0ZXh0UG9zaXRpb24g
PSBXZWJWVFRQYXJzZXI6OmNvbGxlY3REaWdpdHMoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAg
ICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIC8vIDMgLSBDaGFyYWN0ZXIgYXQgZW5kIG11c3QgYmUgJyUnLCBv
dGhlcndpc2UgaWdub3JlIGFuZCBrZWVwIGxvb2tpbmcuCisgICAgICAgICAgICBpZiAoaW5wdXRb
cG9zaXRpb24rK10gIT0gJyUnKQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworCisg
ICAgICAgICAgICAvLyA0LTYgLSBFbnN1cmUgbm8gb3RoZXIgY2hhcnMgaW4gdGhpcyBzZXR0aW5n
IGFuZCBzZXR0aW5nIGlzIG5vdCBlbXB0eS4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGlu
cHV0Lmxlbmd0aCgpICYmICFXZWJWVFRQYXJzZXI6OmlzQVNwYWNlKGlucHV0W3Bvc2l0aW9uXSkp
CisgICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAgICAgICAgICBpZiAodGV4dFBv
c2l0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Ly8gNy04IC0gSW50ZXJwcmV0IGFzIG51bWJlciBhbmQgbWFrZSBzdXJlIGl0IGlzIGJldHdlZW4g
MCBhbmQgMTAwCisgICAgICAgICAgICAvLyAodG9JbnQgaWdub3JlcyB0cmFpbGluZyBub24tZGln
aXQgY2hhcmFjdGVycywgc3VjaCBhcyBhIHBvc3NpYmxlICclJykuCisgICAgICAgICAgICBib29s
IHZhbGlkTnVtYmVyOworICAgICAgICAgICAgaW50IG51bWJlciA9IHRleHRQb3NpdGlvbi50b0lu
dCgmdmFsaWROdW1iZXIpOworICAgICAgICAgICAgaWYgKCF2YWxpZE51bWJlcikKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChudW1iZXIgPCAwIHx8IG51bWJlciA+IDEw
MCkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIDkgLSBTZXQgY3VlIHRl
eHQgcG9zaXRpb24gdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1fdGV4dFBvc2l0
aW9uID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ1MnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0yIC0gQ29sbGVjdCBj
aGFyYWN0ZXJzIHRoYXQgYXJlIGRpZ2l0cy4KKyAgICAgICAgICAgIFN0cmluZyBjdWVTaXplID0g
V2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgLy8gMyAtIENoYXJhY3RlciBhdCBlbmQgbXVzdCBiZSAnJScsIG90aGVy
d2lzZSBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlmIChpbnB1dFtwb3Np
dGlvbisrXSAhPSAnJScpCisgICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAgICAg
ICAgICAvLyA0LTYgLSBFbnN1cmUgbm8gb3RoZXIgY2hhcnMgaW4gdGhpcyBzZXR0aW5nIGFuZCBz
ZXR0aW5nIGlzIG5vdCBlbXB0eS4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGlucHV0Lmxl
bmd0aCgpICYmICFXZWJWVFRQYXJzZXI6OmlzQVNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCisgICAg
ICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAgICAgICAgICBpZiAoY3VlU2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyA3LTggLSBJbnRl
cnByZXQgYXMgbnVtYmVyIGFuZCBtYWtlIHN1cmUgaXQgaXMgYmV0d2VlbiAwIGFuZCAxMDAuCisg
ICAgICAgICAgICBib29sIHZhbGlkTnVtYmVyOworICAgICAgICAgICAgaW50IG51bWJlciA9IGN1
ZVNpemUudG9JbnQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICghdmFsaWROdW1iZXIp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobnVtYmVyIDwgMCB8fCBu
dW1iZXIgPiAxMDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyA5IC0g
U2V0IGN1ZSBzaXplIHRvIHRoZSBudW1iZXIgZm91bmQuCisgICAgICAgICAgICBtX2N1ZVNpemUg
PSBudW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnQSc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAvLyAxLTQgLSBDb2xsZWN0IHRoZSBu
ZXh0IHdvcmQgYW5kIHNldCB0aGUgY3VlIGFsaWdubWVudCBhY2NvcmRpbmdseS4KKyAgICAgICAg
ICAgIFN0cmluZyBjdWVBbGlnbm1lbnQgPSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3JkKGlucHV0
LCAmcG9zaXRpb24pOworICAgICAgICAgICAgaWYgKGN1ZUFsaWdubWVudCA9PSAic3RhcnQiKQor
ICAgICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gU3RhcnQ7CisgICAgICAgICAgICBlbHNl
IGlmIChjdWVBbGlnbm1lbnQgPT0gIm1pZGRsZSIpCisgICAgICAgICAgICAgICAgbV9jdWVBbGln
bm1lbnQgPSBNaWRkbGU7CisgICAgICAgICAgICBlbHNlIGlmIChjdWVBbGlnbm1lbnQgPT0gImVu
ZCIpCisgICAgICAgICAgICAgICAgbV9jdWVBbGlnbm1lbnQgPSBFbmQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERpc2NhcmQgYW55
IHJlbWFpbmluZyBzcGFjZSBjaGFyYWN0ZXJzIGJldHdlZW4gb3IgYWZ0ZXIgc2V0dGluZ3MgKG5v
dCBpbiB0aGUgc3BlYywgYnV0IHdlIHRoaW5rIGl0IHNob3VsZCBiZSkuCisgICAgICAgIHdoaWxl
IChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmIFdlYlZUVFBhcnNlcjo6aXNBU3BhY2UoaW5w
dXRbcG9zaXRpb25dKSkKKyAgICAgICAgICAgIHBvc2l0aW9uKys7CisgICAgICAgIGNvbnRpbnVl
OworCitPdGhlcndpc2U6CisgICAgICAgIC8vIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0
ZXJzIHRoYXQgYXJlIG5vdCBzcGFjZSBjaGFyYWN0ZXJzIGFuZCBkaXNjYXJkIHRoZW0uCisgICAg
ICAgIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQoaW5wdXQsICZwb3NpdGlvbik7CisgICAgfQor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRy
YWNrQ3VlLmgKaW5kZXggYzljMTUzMzU5OWJlNGYxMWQ3YzlhYjMzNTdlNzU1YWUxNWIyNmRiOC4u
YTJkMTIxY2VmMTA0NzMwNTJkNzU1YmUwOTcwZDY4MWRkZDlkYmQxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L1RleHRUcmFja0N1ZS5oCkBAIC0xLDI0ICsxLDI5IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwpAQCAtNDMsNiArNDgsOSBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1ZShpZCwgc3Rh
cnQsIGVuZCwgY29udGVudCwgc2V0dGluZ3MsIHBhdXNlT25FeGl0KSk7CiAgICAgfQorICAgIAor
ICAgIGVudW0gRGlyZWN0aW9uIHsgSG9yaXpvbnRhbCwgVmVydGljYWxHcm93aW5nTGVmdCwgVmVy
dGljYWxHcm93aW5nUmlnaHQgfTsKKyAgICBlbnVtIEFsaWdubWVudCB7IFN0YXJ0LCBNaWRkbGUs
IEVuZCB9OwogCiAgICAgdmlydHVhbCB+VGV4dFRyYWNrQ3VlKCk7CiAKQEAgLTUzLDYgKzYxLDEz
IEBAIHB1YmxpYzoKICAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3Q7CiAgICAgZG91YmxlIGVu
ZFRpbWUoKSBjb25zdDsKICAgICBib29sIHBhdXNlT25FeGl0KCkgY29uc3Q7CisgICAgCisgICAg
U3RyaW5nIGRpcmVjdGlvbigpIGNvbnN0OworICAgIGJvb2wgc25hcFRvTGluZXMoKSBjb25zdCB7
IHJldHVybiBtX3NuYXBUb0xpbmVzOyB9CisgICAgaW50IGxpbmVQb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZVBvc2l0aW9uOyB9CisgICAgaW50IHRleHRQb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dFBvc2l0aW9uOyB9CisgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2N1ZVNpemU7IH0KKyAgICBTdHJpbmcgYWxpZ25tZW50KCkgY29uc3Q7CiAKICAgICBTdHJpbmcg
Z2V0Q3VlQXNTb3VyY2UoKTsKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGdldEN1
ZUFzSFRNTCgpOwpAQCAtNjMsMTQgKzc4LDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVGV4
dFRyYWNrQ3VlKGNvbnN0IFN0cmluZyYgaWQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzLCBib29sIHBhdXNlT25F
eGl0KTsKIAorICAgIHZvaWQgcGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKKyAgICAKICAg
ICBUZXh0VHJhY2sqIG1fdHJhY2s7CiAgICAgCiAgICAgU3RyaW5nIG1faWQ7CiAgICAgZG91Ymxl
IG1fc3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2VuZFRpbWU7CiAgICAgU3RyaW5nIG1fY29udGVu
dDsKLSAgICBTdHJpbmcgbV9zZXR0aW5nczsKICAgICBib29sIG1fcGF1c2VPbkV4aXQ7CisgICAg
RGlyZWN0aW9uIG1fd3JpdGluZ0RpcmVjdGlvbjsKKyAgICBib29sIG1fc25hcFRvTGluZXM7Cisg
ICAgaW50IG1fbGluZVBvc2l0aW9uOworICAgIGludCBtX3RleHRQb3NpdGlvbjsKKyAgICBpbnQg
bV9jdWVTaXplOworICAgIEFsaWdubWVudCBtX2N1ZUFsaWdubWVudDsKKwogICAgIGJvb2wgbV9p
c0FjdGl2ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNr
L0N1ZVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIu
Y3BwCmluZGV4IDNiMzUzZTdjOGMzNWRlZjIzNTQ4N2ZiOWI3NjJhMjlhZDQwNzVhMTYuLjRhNjg2
OWJhOWRiNDcxYzQ2NGZjNDBkYjQwYzgyMTBjZTk2NGQyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
IkN1ZVBhcnNlci5oIgogCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsMTUgKzcxLDIwIEBAIGJvb2wgQ3VlUGFyc2VyOjpzdXBw
b3J0c1R5cGUoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVy
Ki8sIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQordm9pZCBDdWVQYXJzZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZSh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKIHsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IENyZWF0ZSBtX3ByaXZhdGUg
YmFzZWQgb24gTUlNRSB0eXBlLgotICAgIG1fY2xpZW50LT50cmFja0xvYWRTdGFydGVkKCk7Cisg
ICAgaWYgKHJlc3BvbnNlLm1pbWVUeXBlKCkgPT0gInRleHQvdnR0IikKKyAgICAgICAgY3JlYXRl
V2ViVlRUUGFyc2VyKCk7CiB9CiAKLXZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuKQordm9pZCBDdWVQYXJzZXI6OmRpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgLy8gRklYTUUoNjI4OTMpOiBTZW5k
IGRhdGEgYWxvbmcgdG8gbV9wcml2YXRlIHBhcnNlciB0byBiZSBwYXJzZWQuCisgICAgLy8gSWYg
bWltZSB0eXBlIGZyb20gZGlkUmVjZWl2ZVJlc3BvbnNlIHdhcyBub3QgaW5mb3JtYXRpdmUsIHNu
aWZmIGZpbGUgY29udGVudC4KKyAgICBpZiAoIW1fcHJpdmF0ZSAmJiBXZWJWVFRQYXJzZXI6Omhh
c1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoZGF0YSwgbGVuZ3RoKSkKKyAgICAgICAgY3JlYXRlV2Vi
VlRUUGFyc2VyKCk7CisKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnBh
cnNlQnl0ZXMoZGF0YSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBDdWVQYXJzZXI6OmRpZEZpbmlzaExv
YWRpbmcodW5zaWduZWQgbG9uZykKQEAgLTk2LDYgKzEwMiwxOSBAQCB2b2lkIEN1ZVBhcnNlcjo6
ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikKICAgICAvLyBG
SVhNRSg2Mjg5Myk6IEltcGxlbWVudC4KIH0KIAordm9pZCBDdWVQYXJzZXI6Om5ld0N1ZXNQYXJz
ZWQoKQoreworICAgIG1fY2xpZW50LT5uZXdDdWVzUGFyc2VkKCk7Cit9CisKK3ZvaWQgQ3VlUGFy
c2VyOjpjcmVhdGVXZWJWVFRQYXJzZXIoKQoreworICAgIGlmICghbV9wcml2YXRlKSB7CisgICAg
ICAgIG1fcHJpdmF0ZSA9IFdlYlZUVFBhcnNlcjo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX2Ns
aWVudC0+dHJhY2tMb2FkU3RhcnRlZCgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNr
L0N1ZVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgK
aW5kZXggNzQ0Y2MzMjI3OGM1ZjRjZjllNGY4MmNhN2M1M2FiMTdiZDg5ZDhjZi4uN2M2YzYzMTc0
ZTU3ODM2OTYwNmVkYTI1ZjQ4YWQ1NDk4ZDA4NWYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmgKQEAgLTMzLDkgKzMzLDkgQEAKIAogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKIAotI2luY2x1ZGUgIkN1ZVBhcnNlclByaXZhdGUuaCIKICNpbmNsdWRlICJUaHJl
YWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYlZUVFBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAt
NTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrTG9hZENvbXBsZXRl
ZCgpID0gMDsKIH07CiAKLWNsYXNzIEN1ZVBhcnNlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50IHsKK2NsYXNzIEN1ZVBhcnNlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
LCBDdWVQYXJzZXJQcml2YXRlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBDdWVQYXJzZXIoKTsKICAg
ICB2aXJ0dWFsIH5DdWVQYXJzZXIoKTsKQEAgLTY3LDggKzY3LDExIEBAIHB1YmxpYzoKICAgICBi
b29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgZmV0Y2hQYXJzZWRD
dWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CisgICAgdm9pZCBuZXdDdWVzUGFy
c2VkKCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKKyAKICAg
ICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgT3duUHRyPEN1ZVBhcnNl
clByaXZhdGVJbnRlcmZhY2U+IG1fcHJpdmF0ZTsKICAgICBDdWVQYXJzZXJDbGllbnQqIG1fY2xp
ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2Vy
UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0
ZS5oCmluZGV4IGJjM2U0ZmJjMDk1MWJlMzRjYmYwMTA3MWVkMjg2OWE5OWEyZjgzMGUuLjM2NGY0
NzczNjdhZGQ2NzZhYTIzODhlZmUyNzk5OWRhYjA5N2JmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgKQEAgLTUxLDEwICs1MSwxMCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q3VlUGFyc2VyUHJpdmF0ZUludGVyZmFjZSgpIHsgfQog
CiAgICAgLy8gSW5wdXQgZGF0YSB0byB0aGUgcGFyc2VyIHRvIHBhcnNlLgotICAgIHZpcnR1YWwg
dm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqLCBpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VCeXRlcyhjb25zdCBjaGFyKiwgdW5zaWduZWQpID0gMDsKIAogICAgIC8vIFRyYW5zZmVy
cyBvd25lcnNoaXAgb2YgbGFzdCBwYXJzZWQgY3VlcyB0byBjYWxsZXIuCi0gICAgdmlydHVhbCB2
b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRU
cmFja0N1ZT4gPiYpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIEN1ZVBhcnNlclByaXZhdGVJbnRl
cmZhY2UoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dl
YlZUVFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJz
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdmYTdjZGQ5NjY2NDIxODZhNTlkMGZlODIyY2EwZjU5NWExZWY5
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJW
VFRQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIldlYlZUVFBhcnNlci5oIgorCisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBXZWJWVFRQYXJzZXI6Omhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEEgV2ViVlRUIGZpbGUgaWRlbnRpZmllciBj
b25zaXN0cyBvZiBhbiBvcHRpb25hbCBCT00gY2hhcmFjdGVyLAorICAgIC8vIHRoZSBzdHJpbmcg
IldFQlZUVCIgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgc3BhY2Ugb3IgdGFiIGNoYXJhY3RlciwK
KyAgICAvLyBhbmQgYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBsaW5lIHRl
cm1pbmF0b3JzIC4uLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICBpZiAobGVuZ3Ro
ID49IDMgJiYgZGF0YVswXSA9PSAnXHhFRicgJiYgZGF0YVsxXSA9PSAnXHhCQicgJiYgZGF0YVsy
XSA9PSAnXHhCRicpCisgICAgICAgIHBvc2l0aW9uICs9IDM7CisgICAgU3RyaW5nIGxpbmUgPSBj
b2xsZWN0TmV4dExpbmUoZGF0YSwgbGVuZ3RoLCAmcG9zaXRpb24pOworICAgICAgICAKKyAgICBp
ZiAobGluZS5sZW5ndGgoKSA8IDYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobGlu
ZS5sZW5ndGgoKSA9PSA2ICYmIGxpbmUgIT0gIldFQlZUVCIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIElmIGxpbmUgaXMgbW9yZSB0aGFuIHNpeCBjaGFyYWN0ZXJzCisgICAgLy8g
YnV0IHRoZSBmaXJzdCBzaXggY2hhcmFjdGVycyBkbyBub3QgZXhhY3RseSBlcXVhbCAiV0VCVlRU
IiwKKyAgICAvLyBvciB0aGUgc2V2ZW50aCBjaGFyYWN0ZXIgaXMgbmVpdGhlciBhIHNwYWNlIG5v
ciBhIHRhYiBjaGFyYWN0ZXIsIHRoZW4gYWJvcnQuCisgICAgaWYgKGxpbmUubGVuZ3RoKCkgPiA2
ICYmIChsaW5lLnN1YnN0cmluZygwLCA2KSAhPSAiV0VCVlRUIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgKGxpbmVbNl0gIT0gJyAnICYmIGxpbmVbNl0gIT0gJ1x0JykpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1N0cmluZyBXZWJWVFRQ
YXJzZXI6OmNvbGxlY3REaWdpdHMoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0
aW9uKQoreworICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOworICAgIHdoaWxlICgqcG9zaXRpb24g
PCBpbnB1dC5sZW5ndGgoKSAmJiBpc0FTQ0lJRGlnaXQoaW5wdXRbKnBvc2l0aW9uXSkpCisgICAg
ICAgIGRpZ2l0cy5hcHBlbmQoaW5wdXRbKCpwb3NpdGlvbikrK10pOworICAgIHJldHVybiBkaWdp
dHMudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQoY29u
c3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nOworICAgIHdoaWxlICgqcG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAhaXNB
U3BhY2UoaW5wdXRbKnBvc2l0aW9uXSkpCisgICAgICAgIHN0cmluZy5hcHBlbmQoaW5wdXRbKCpw
b3NpdGlvbikrK10pOworICAgIHJldHVybiBzdHJpbmcudG9TdHJpbmcoKTsKK30KKworV2ViVlRU
UGFyc2VyOjpXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQorICAg
IDogbV9zdGF0ZShJbml0aWFsKQoreworICAgIG1fY2xpZW50ID0gY2xpZW50OworfQorCit2b2lk
IFdlYlZUVFBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3Vl
PiA+JiBvdXRwdXRDdWVzKQoreworICAgIG91dHB1dEN1ZXMgPSBtX2N1ZWxpc3Q7CisgICAgbV9j
dWVsaXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBXSEFU
V0cgV2ViVlRUIFBhcnNlciBhbGdvcml0aG0uCisgICAgLy8gMS0zIC0gSW5pdGlhbCBzZXR1cC4K
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisKKyAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5n
dGgpIHsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBjb2xsZWN0TmV4dExpbmUoZGF0YSwgbGVuZ3Ro
LCAmcG9zaXRpb24pOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
ICAgIGNhc2UgSW5pdGlhbDoKKyAgICAgICAgICAgIC8vIDQtMTIgLSBDb2xsZWN0IHRoZSBmaXJz
dCBsaW5lIGFuZCBjaGVjayBmb3IgIldFQlZUVCIuCisgICAgICAgICAgICBpZiAoIWhhc1JlcXVp
cmVkRmlsZUlkZW50aWZpZXIoZGF0YSwgbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBtX3N0YXRlID0gSGVhZGVyOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgICAgICBjYXNlIEhlYWRlcjoKKyAgICAgICAgICAgIC8vIDEzLTE4IC0gQWxsb3cg
YSBoZWFkZXIgKGNvbW1lbnQgYXJlYSkgdW5kZXIgdGhlIFdFQlZUVCBsaW5lLgorICAgICAgICAg
ICAgaWYgKGxpbmUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJZDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBJZDoKKyAgICAgICAgICAg
IC8vIDE5LTI5IC0gQWxsb3cgYW55IG51bWJlciBvZiBsaW5lIHRlcm1pbmF0b3JzLCB0aGVuIGlu
aXRpYWxpemUgbmV3IGN1ZSB2YWx1ZXMuCisgICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXNldEN1ZVZhbHVlcygpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyAzMC0zOSAtIENoZWNrIGlmIHRoaXMgbGluZSBj
b250YWlucyBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9yIHRpbWluZyBkYXRhLgorICAgICAgICAg
ICAgbV9zdGF0ZSA9IGNvbGxlY3RDdWVJZChsaW5lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICAgICAgY2FzZSBUaW1pbmdzQW5kU2V0dGluZ3M6CisgICAgICAgICAgICAvLyA0
MCAtIENvbGxlY3QgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzLgorICAgICAgICAgICAgbV9zdGF0
ZSA9IGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MobGluZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgICAgIGNhc2UgQ3VlVGV4dDoKKyAgICAgICAgICAgIC8vIDQxLTUzIC0g
Q29sbGVjdCB0aGUgY3VlIHRleHQsIGNyZWF0ZSBhIGN1ZSwgYW5kIGFkZCBpdCB0byB0aGUgb3V0
cHV0LgorICAgICAgICAgICAgbV9zdGF0ZSA9IGNvbGxlY3RDdWVUZXh0KGxpbmUsIGxlbmd0aCwg
cG9zaXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCYWRDdWU6Cisg
ICAgICAgICAgICAvLyA1NC02MiAtIENvbGxlY3QgYW5kIGRpc2NhcmQgdGhlIHJlbWFpbmluZyBj
dWUuCisgICAgICAgICAgICBtX3N0YXRlID0gaWdub3JlQmFkQ3VlKGxpbmUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0
ZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RDdWVJZChjb25zdCBTdHJpbmcmIGxpbmUpCit7CisgICAg
aWYgKGxpbmUuY29udGFpbnMoIi0tPiIpKQorICAgICAgICByZXR1cm4gY29sbGVjdFRpbWluZ3NB
bmRTZXR0aW5ncyhsaW5lKTsKKyAgICBtX2N1cnJlbnRJZCA9IGxpbmU7CisgICAgcmV0dXJuIFRp
bWluZ3NBbmRTZXR0aW5nczsKK30KKworV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBh
cnNlcjo6Y29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25zdCBTdHJpbmcmIGxpbmUpCit7Cisg
ICAgLy8gNC44LjEwLjEzLjMgQ29sbGVjdCBXZWJWVFQgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdz
LgorICAgIC8vIDEtMyAtIExldCBpbnB1dCBiZSB0aGUgc3RyaW5nIGJlaW5nIHBhcnNlZCBhbmQg
cG9zaXRpb24gYmUgYSBwb2ludGVyIGludG8gaW5wdXQKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9
IDA7CisgICAgc2tpcFdoaXRlU3BhY2UobGluZSwgJnBvc2l0aW9uKTsKKworICAgIC8vIDQtNSAt
IENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGFib3J0IGFu
ZCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBsZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUgc3Rh
cnQgdGltZSBiZSB0aGUgY29sbGVjdGVkIHRpbWUuCisgICAgbV9jdXJyZW50U3RhcnRUaW1lID0g
Y29sbGVjdFRpbWVTdGFtcChsaW5lLCAmcG9zaXRpb24pOworICAgIGlmIChtX2N1cnJlbnRTdGFy
dFRpbWUgPT0gbWFsZm9ybWVkVGltZSkKKyAgICAgICAgcmV0dXJuIEJhZEN1ZTsKKyAgICBza2lw
V2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAgLy8gNi05IC0gSWYgdGhlIG5leHQg
dGhyZWUgY2hhcmFjdGVycyBhcmUgbm90ICItLT4iLCBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1cmUu
CisgICAgaWYgKGxpbmUuZmluZCgiLS0+IiwgcG9zaXRpb24pID09IG5vdEZvdW5kKQorICAgICAg
ICByZXR1cm4gQmFkQ3VlOworICAgIHBvc2l0aW9uICs9IDM7CisgICAgc2tpcFdoaXRlU3BhY2Uo
bGluZSwgJnBvc2l0aW9uKTsKKworICAgIC8vIDEwLTExIC0gQ29sbGVjdCBhIFdlYlZUVCB0aW1l
c3RhbXAuIElmIHRoYXQgZmFpbHMsIHRoZW4gYWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLiBPdGhl
cndpc2UsIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBlbmQgdGltZSBiZSB0aGUgY29sbGVjdGVk
IHRpbWUuCisgICAgbV9jdXJyZW50RW5kVGltZSA9IGNvbGxlY3RUaW1lU3RhbXAobGluZSwgJnBv
c2l0aW9uKTsKKyAgICBpZiAobV9jdXJyZW50RW5kVGltZSA9PSBtYWxmb3JtZWRUaW1lKQorICAg
ICAgICByZXR1cm4gQmFkQ3VlOworICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsICZwb3NpdGlvbik7
CisKKyAgICAvLyAxMiAtIFBhcnNlIHRoZSBXZWJWVFQgc2V0dGluZ3MgZm9yIHRoZSBjdWUgKGNv
bmR1Y3RlZCBpbiBUZXh0VHJhY2tDdWUpLgorICAgIG1fY3VycmVudFNldHRpbmdzID0gbGluZS5z
dWJzdHJpbmcocG9zaXRpb24sIGxpbmUubGVuZ3RoKCktMSk7CisgICAgcmV0dXJuIEN1ZVRleHQ7
Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RDdWVU
ZXh0KGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwb3NpdGlv
bikKK3sKKyAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcHJvY2Vzc0N1ZVRleHQo
KTsKKyAgICAgICAgcmV0dXJuIElkOworICAgIH0KKyAgICBpZiAoIW1fY3VycmVudENvbnRlbnQu
aXNFbXB0eSgpKQorICAgICAgICBtX2N1cnJlbnRDb250ZW50LmFwcGVuZCgiXG4iKTsKKyAgICBt
X2N1cnJlbnRDb250ZW50LmFwcGVuZChsaW5lKTsKKworICAgIGlmIChwb3NpdGlvbiA+PSBsZW5n
dGgpCisgICAgICAgIHByb2Nlc3NDdWVUZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgcmV0
dXJuIEN1ZVRleHQ7Cit9CisKK1dlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6
Omlnbm9yZUJhZEN1ZShjb25zdCBTdHJpbmcmIGxpbmUpCit7CisgICAgaWYgKCFsaW5lLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIEJhZEN1ZTsKKyAgICByZXR1cm4gSWQ7Cit9CisKK3ZvaWQg
V2ViVlRUUGFyc2VyOjpwcm9jZXNzQ3VlVGV4dCgpCit7CisgICAgLy8gNTEgLSBDdWUgdGV4dCBw
cm9jZXNzaW5nIGJhc2VkIG9uIFdlYlZUVCBjdWUgdGV4dCBwYXJzaW5nIHJ1bGVzIGFuZCBXZWJW
VFQgY3VlIHRleHQgRE9NIGNvbnN0cnVjdGlvbiBydWxlcy4KKyAgICAvLyBGSVhNRSg2NDEzMik6
IFByb2Nlc3MgdGhlIGN1ZSB0ZXh0IGFzIHBlciB0aGUgY3VlIHRleHQgcGFyc2luZyBydWxlcy4g
CisgICAgLy8gICAgIFNvdXJjZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBz
L2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlmcmFtZS1lbGVtZW50Lmh0bWwjd2VidnR0LWN1
ZS10ZXh0LXBhcnNpbmctcnVsZXMKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0
VHJhY2tDdWU6OmNyZWF0ZShtX2N1cnJlbnRJZCwgbV9jdXJyZW50U3RhcnRUaW1lLCBtX2N1cnJl
bnRFbmRUaW1lLCBtX2N1cnJlbnRDb250ZW50LnRvU3RyaW5nKCksIG1fY3VycmVudFNldHRpbmdz
LCBmYWxzZSk7CisgICAgbV9jdWVsaXN0LmFwcGVuZChjdWUpOworICAgIG1fY2xpZW50LT5uZXdD
dWVzUGFyc2VkKCk7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpyZXNldEN1ZVZhbHVlcygpCit7
CisgICAgbV9jdXJyZW50SWQgPSBlbXB0eVN0cmluZygpOworICAgIG1fY3VycmVudFNldHRpbmdz
ID0gZW1wdHlTdHJpbmcoKTsKKyAgICBtX2N1cnJlbnRTdGFydFRpbWUgPSAwOworICAgIG1fY3Vy
cmVudEVuZFRpbWUgPSAwOworICAgIG1fY3VycmVudENvbnRlbnQuY2xlYXIoKTsKK30KKworZG91
YmxlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmIGxpbmUsIHVu
c2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IGEgV2ViVlRU
IHRpbWVzdGFtcC4KKyAgICAvLyAxLTQgLSBJbml0aWFsIGNoZWNrcywgbGV0IG1vc3Qgc2lnbmlm
aWNhbnQgdW5pdHMgYmUgbWludXRlcy4KKyAgICBlbnVtIE1vZGUgeyBtaW51dGVzLCBob3VycyB9
OworICAgIE1vZGUgbW9kZSA9IG1pbnV0ZXM7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxl
bmd0aCgpIHx8ICFpc0FTQ0lJRGlnaXQobGluZVsqcG9zaXRpb25dKSkKKyAgICAgICAgcmV0dXJu
IG1hbGZvcm1lZFRpbWU7CisKKyAgICAvLyA1LTYgLSBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY2hh
cmFjdGVycyB0aGF0IGFyZSAwLTkuCisgICAgU3RyaW5nIGRpZ2l0czEgPSBjb2xsZWN0RGlnaXRz
KGxpbmUsIHBvc2l0aW9uKTsKKyAgICBpbnQgdmFsdWUxID0gZGlnaXRzMS50b0ludCgpOworCisg
ICAgLy8gNyAtIElmIG5vdCAyIGNoYXJhY3RlcnMgb3IgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDU5
LCBpbnRlcnByZXQgYXMgaG91cnMuCisgICAgaWYgKGRpZ2l0czEubGVuZ3RoKCkgIT0gMiB8fCB2
YWx1ZTEgPiA1OSkKKyAgICAgICAgbW9kZSA9IGhvdXJzOworCisgICAgLy8gOC0xMiAtIENvbGxl
Y3QgdGhlIG5leHQgc2VxdWVuY2Ugb2YgMC05IGFmdGVyICc6JyAobXVzdCBiZSAyIGNoYXJzKS4K
KyAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgbGluZVsoKnBvc2l0aW9uKSsr
XSAhPSAnOicpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgIGlmICgqcG9zaXRp
b24gPj0gbGluZS5sZW5ndGgoKSB8fCAhaXNBU0NJSURpZ2l0KGxpbmVbKCpwb3NpdGlvbildKSkK
KyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgU3RyaW5nIGRpZ2l0czIgPSBjb2xs
ZWN0RGlnaXRzKGxpbmUsIHBvc2l0aW9uKTsKKyAgICBpbnQgdmFsdWUyID0gZGlnaXRzMi50b0lu
dCgpOworICAgIGlmIChkaWdpdHMyLmxlbmd0aCgpICE9IDIpIAorICAgICAgICByZXR1cm4gbWFs
Zm9ybWVkVGltZTsKKworICAgIC8vIDEzIC0gRGV0ZWN0IHdoZXRoZXIgdGhpcyB0aW1lc3RhbXAg
aW5jbHVkZXMgaG91cnMuCisgICAgaW50IHZhbHVlMzsKKyAgICBpZiAobW9kZSA9PSBob3VycyB8
fCAoKnBvc2l0aW9uIDwgbGluZS5sZW5ndGgoKSAmJiBsaW5lWypwb3NpdGlvbl0gPT0gJzonKSkg
eworICAgICAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgbGluZVsqKHBvc2l0
aW9uKSsrXSAhPSAnOicpCisgICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICAg
ICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8ICFpc0FTQ0lJRGlnaXQobGluZVsq
cG9zaXRpb25dKSkKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICBT
dHJpbmcgZGlnaXRzMyA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9zaXRpb24pOworICAgICAgICBp
ZiAoZGlnaXRzMy5sZW5ndGgoKSAhPSAyKQorICAgICAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRp
bWU7CisgICAgICAgIHZhbHVlMyA9IGRpZ2l0czMudG9JbnQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB2YWx1ZTMgPSB2YWx1ZTI7CisgICAgICAgIHZhbHVlMiA9IHZhbHVlMTsKKyAgICAgICAg
dmFsdWUxID0gMDsKKyAgICB9CisKKyAgICAvLyAxNC0xOSAtIENvbGxlY3QgbmV4dCBzZXF1ZW5j
ZSBvZiAwLTkgYWZ0ZXIgJy4nIChtdXN0IGJlIDMgY2hhcnMpLgorICAgIGlmICgqcG9zaXRpb24g
Pj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lWygqcG9zaXRpb24pKytdICE9ICcuJykKKyAgICAgICAg
cmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgp
IHx8ICFpc0FTQ0lJRGlnaXQobGluZVsqcG9zaXRpb25dKSkKKyAgICAgICAgcmV0dXJuIG1hbGZv
cm1lZFRpbWU7CisgICAgU3RyaW5nIGRpZ2l0czQgPSBjb2xsZWN0RGlnaXRzKGxpbmUsIHBvc2l0
aW9uKTsKKyAgICBpZiAoZGlnaXRzNC5sZW5ndGgoKSAhPSAzKQorICAgICAgICByZXR1cm4gbWFs
Zm9ybWVkVGltZTsKKyAgICBpbnQgdmFsdWU0ID0gZGlnaXRzNC50b0ludCgpOworICAgIGlmICh2
YWx1ZTIgPiA1OSB8fCB2YWx1ZTMgPiA1OSkKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7
CisKKyAgICAvLyAyMC0yMSAtIENhbGN1bGF0ZSByZXN1bHQuCisgICAgcmV0dXJuICh2YWx1ZTEg
KiBzZWNvbmRzUGVySG91cikgKyAodmFsdWUyICogc2Vjb25kc1Blck1pbnV0ZSkgKyB2YWx1ZTMg
KyAoKGRvdWJsZSl2YWx1ZTQgLyAxMDAwKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnNraXBX
aGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAg
IHdoaWxlICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYmIGlzQVNwYWNlKGxpbmVbKnBvc2l0
aW9uXSkpCisgICAgICAgICgqcG9zaXRpb24pKys7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpz
a2lwTGluZVRlcm1pbmF0b3IoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCogcG9zaXRpb24pCit7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBsZW5ndGgpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoZGF0YVsqcG9zaXRpb25dID09ICdccicpCisgICAgICAgICgqcG9z
aXRpb24pKys7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBsZW5ndGgpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoZGF0YVsqcG9zaXRpb25dID09ICdcbicpCisgICAgICAgICgqcG9zaXRpb24pKys7
Cit9CisKK1N0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICB1bnNpZ25l
ZCBvbGRQb3NpdGlvbiA9ICpwb3NpdGlvbjsKKyAgICB3aGlsZSAoKnBvc2l0aW9uIDwgbGVuZ3Ro
ICYmIGRhdGFbKnBvc2l0aW9uXSAhPSAnXHInICYmIGRhdGFbKnBvc2l0aW9uXSAhPSAnXG4nKQor
ICAgICAgICAoKnBvc2l0aW9uKSsrOworICAgIFN0cmluZyBsaW5lID0gU3RyaW5nOjpmcm9tVVRG
OChkYXRhICsgb2xkUG9zaXRpb24sICpwb3NpdGlvbiAtIG9sZFBvc2l0aW9uKTsKKyAgICBza2lw
TGluZVRlcm1pbmF0b3IoZGF0YSwgbGVuZ3RoLCBwb3NpdGlvbik7CisgICAgcmV0dXJuIGxpbmU7
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
cmFjay9XZWJWVFRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZU
VFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2OTM1MmMwZDg3OTIyMzQzNDA0ZTZmMWUwOTdiNTkwODNh
Yjk1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9X
ZWJWVFRQYXJzZXIuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZUVFBhcnNlcl9oCisj
ZGVmaW5lIFdlYlZUVFBhcnNlcl9oCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNs
dWRlICJDdWVQYXJzZXJQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVySG91ciA9IDM2MDA7CitzdGF0aWMgY29uc3Qg
aW50IHNlY29uZHNQZXJNaW51dGUgPSA2MDsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWFsZm9ybWVk
VGltZSA9IC0xOworCitjbGFzcyBXZWJWVFRQYXJzZXIgOiBwdWJsaWMgQ3VlUGFyc2VyUHJpdmF0
ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViVlRUUGFyc2VyKCkgeyB9Cisg
ICAgCisgICAgZW51bSBQYXJzZVN0YXRlIHsgSW5pdGlhbCwgSGVhZGVyLCBJZCwgVGltaW5nc0Fu
ZFNldHRpbmdzLCBDdWVUZXh0LCBCYWRDdWUgfTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFdl
YlZUVFBhcnNlcj4gY3JlYXRlKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIGNsaWVudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViVlRUUGFyc2VyKGNsaWVudCkpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBoYXNSZXF1aXJlZEZpbGVJZGVudGlmaWVyKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wg
aXNBU3BhY2UoY2hhciBjKQorICAgIHsKKyAgICAgICAgLy8gV2ViVlRUIHNwYWNlIGNoYXJhY3Rl
cnMgYXJlIFUrMDAyMCBTUEFDRSwgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OICh0YWIpLCBV
KzAwMEEgTElORSBGRUVEIChMRiksIFUrMDAwQyBGT1JNIEZFRUQgKEZGKSwgYW5kIFUrMDAwRCBD
QVJSSUFHRSBSRVRVUk4gICAgKENSKS4KKyAgICAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0g
J1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXGYnIHx8IGMgPT0gJ1xyJzsKKyAgICB9CisgICAg
c3RhdGljIFN0cmluZyBjb2xsZWN0RGlnaXRzKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7Cisg
ICAgc3RhdGljIFN0cmluZyBjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOwor
CisgICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4gPiYpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJWVFRQYXJzZXIo
Q3VlUGFyc2VyUHJpdmF0ZUNsaWVudCopOworICAgIAorICAgIFBhcnNlU3RhdGUgbV9zdGF0ZTsK
KworcHJpdmF0ZToKKyAgICBQYXJzZVN0YXRlIGNvbGxlY3RDdWVJZChjb25zdCBTdHJpbmcmKTsK
KyAgICBQYXJzZVN0YXRlIGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7
CisgICAgUGFyc2VTdGF0ZSBjb2xsZWN0Q3VlVGV4dChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkKTsKKyAgICBQYXJzZVN0YXRlIGlnbm9yZUJhZEN1ZShjb25zdCBTdHJp
bmcmKTsKKworICAgIHZvaWQgcHJvY2Vzc0N1ZVRleHQoKTsKKyAgICB2b2lkIHJlc2V0Q3VlVmFs
dWVzKCk7CisgICAgZG91YmxlIGNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3RyaW5nJiwgdW5zaWdu
ZWQqKTsKKyAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7
CisgICAgc3RhdGljIHZvaWQgc2tpcExpbmVUZXJtaW5hdG9yKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQqKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3ROZXh0
TGluZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKik7CisKKyAg
ICBTdHJpbmcgbV9jdXJyZW50SWQ7CisgICAgZG91YmxlIG1fY3VycmVudFN0YXJ0VGltZTsKKyAg
ICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsKKyAgICBTdHJpbmdCdWlsZGVyIG1fY3VycmVudENv
bnRlbnQ7CisgICAgU3RyaW5nIG1fY3VycmVudFNldHRpbmdzOworCisgICAgQ3VlUGFyc2VyUHJp
dmF0ZUNsaWVudCogbV9jbGllbnQ7CisKKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4g
PiBtX2N1ZWxpc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2Vu
ZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103135</attachid>
            <date>2011-08-05 17:39:27 -0700</date>
            <delta_ts>2011-08-05 18:31:33 -0700</delta_ts>
            <desc>fixing some typos</desc>
            <filename>bug-62882-20110805173926.patch</filename>
            <type>text/plain</type>
            <size>43560</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI1MjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOWE0YzI3
M2IwZWMzZmVkMTM1YWM3OTYzZTY1MTkwNTFkN2Y5ZWRjNi4uNGI4M2FkYTMwZTY4MzA0ZjY1YjVi
OWIzOTg2ODJkMDIyYzUwMGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTgsNiArMTk5
OCw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk3NGMzMWU0NWViYTlmMmU5ZmFi
NDg0MWE4MDNiNDFjMmQwODQ3ZC4uMGI4N2RkMjhhMzM0MDE3NzM2MjcwY2I1MTk0ODI2MDYyZDgx
ODFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA4LTA1ICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURFT19UUkFDSyBmZWF0dXJlIGRlZmlu
ZSwgd2hpY2ggaXMgdHVybmVkIG9mZiwgYnV0CisgICAgICAgIG5ldyB0ZXN0cyBoYXZlIGJlZW4g
YWRkZWQgaW4gbWVkaWEvdHJhY2svIChhbmQgYXJlIHNraXBwZWQpLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvVGV4dFRyYWNrQ3VlLmNw
cDoKKyAgICAgICAgKiBodG1sL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmg6
CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oOiBBZGRlZC4KKwogMjAxMS0wOC0wNSAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxl
cmF0ZWQgY2FudmFzIGJyZWFrcyB3aGVuIG1vdmluZyBjYW52YXNlcyBvciByZXNvdXJjZXMgYmV0
d2VlbiBQYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOGJkNTU1NTBmY2Ex
ODYwOWQzNGVjNTRkYjJmNGZmNTQ0NzE0ZjZhMi4uODg5YTAxZmVkZWE0YWVhZGM0NDc0YjEyOGZi
ZDNjNTJlMDNmZmFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yODYwLDYg
KzI4NjAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL0N1ZVBhcnNlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2
YXRlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1VSTFN0cmluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VVUlELmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggNDc0NzZlMmRiYmEzYTkzOTNmZTg0MmE5Zjk0NTRiYTI0NDhhMGQ2
Mi4uYWI4NTk3NGNmNDk2NjNiOTg3Yzc1YjJlN2EzZDI1Y2I4ZmY2M2EwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDQzMCw2ICs0NDMwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2lu
L0JTdHJpbmcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQlN0cmluZy5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS93aW4vQml0bWFwSW5mby5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCBiN2QwMDJiOTFmODAxYTI2YjdiODdiZmNhMzQ4YWE4YjE2Y2MzNjM2Li4yZjE1MzkyYTMwMGY0
YzBlOGU3ZThlODJlYmM5MTQxN2Y0ZmE2NmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjExOSw2ICsy
MTE5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vVGltZXIuaCBcCiAgICAgcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZh
dGUuaCBcCisgICAgcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAogICAgIHBsYXRmb3Jt
L1dpZGdldC5oIFwKICAgICBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaCBcCiAgICAgcGxh
dGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzMDIwMjY3M2MzMjQyN2M3NWIyMzVkYzM4
NjM5YzE5NWFhNmVkMWRkLi44YWYxNGQwNjVjMWQyMjRmNDFiMTJhZGU3OGU0ZjYxZWNlNDZjYTQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC00MDc5LDYgKzQwNzksOCBAQAogCQlBQkRERkU3OTBBNUM2RTcwMDBBM0UxMUQgLyog
UmVuZGVyTWVudUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUJEREZFNzMwQTVDNkU2RjAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmNwcCAq
LzsgfTsKIAkJQUJEREZFN0EwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQkRERkU3NDBBNUM2
RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCAqLzsgfTsKIAkJQURERjFBRDcxMjU3Q0Q5
QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQ
YXRoLmggKi87IH07CisJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI3NDBD
MTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCAqLzsgfTsKKwkJQjEwQjc0MEYxM0JF
ODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNzQwRDEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRU
UGFyc2VyLmNwcCAqLzsgfTsKIAkJQjE0MzUzRDUxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3Ry
ZWFtTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMTQzNTNEMTEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCAqLzsgfTsK
IAkJQjE0MzUzRDYxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUzRDIxMzhFQThFRDAw
RDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovOyB9OwogCQlCMTQzNTNGODEzOEVBOTVCMDBE
NTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUzRjYxMzhFQTk1QjAwRDUzMjc2IC8qIEpTTWVkaWFT
dHJlYW1MaXN0LmNwcCAqLzsgfTsKQEAgLTEwNTk0LDYgKzEwNTk2LDggQEAKIAkJQUJEREZFNzQw
QTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJNZW51TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRERGMUFENDEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdQYXRoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRl
clNWR1BhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMTBCNzQwQzEzQkU4MEJGMDBCQzFD
MjYgLyogV2ViVlRUUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YlZUVFBhcnNlci5oOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJW
VFRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViVlRU
UGFyc2VyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QxMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRp
YVN0cmVhbUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVk
aWFTdHJlYW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjE0MzUzRDIx
MzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjE0MzUzRDMxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4MDQ5LDYgKzE4MDUzLDggQEAKIAkJCQlCMkU0RUM5NTBEMDBDMjJC
MDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmggKi8sCiAJCQkJQjJFNEVDOTYwRDAwQzIyQjAwNDMy
NjQzIC8qIFNWR1pvb21FdmVudC5pZGwgKi8sCiAJCQkJQjI4QzZBMjYwRDAwQzQ0ODAwMzM0QUE0
IC8qIHhsaW5rYXR0cnMuaW4gKi8sCisJCQkJQjEwQjc0MEMxM0JFODBCRjAwQkMxQzI2IC8qIFdl
YlZUVFBhcnNlci5oICovLAorCQkJCUIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQ
YXJzZXIuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBzdmc7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjMzMzksNiArMjMzNDUsMTYgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEy
RjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1Mzcz
NTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFE
NEU1RDEzQTEyQTBCMDA4NDZCMjcgLyogQ3VlSW5kZXguaCBpbiBIZWFkZXJzICovLAorCQkJCUIx
QUQ0RTVGMTNBMTJBMEIwMDg0NkIyNyAvKiBMb2FkYWJsZVRleHRUcmFjay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQjFBRDRFNjMxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFibGVUZXh0VHJhY2suaCBp
biBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTY3MTNBMTJBMEIwMDg0NkIyNyAvKiBUZXh0VHJhY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTY5MTNBMTJBMEIwMDg0NkIyNyAvKiBUZXh0VHJh
Y2tDdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTZCMTNBMTJBMEIwMDg0NkIyNyAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3NDEzQTEyQTQ2MDA4
NDZCMjcgLyogQ3VlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3QzEzQTEyQTcy
MDA4NDZCMjcgLyogQ3VlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3RDEzQTEy
QTcyMDA4NDZCMjcgLyogQ3VlUGFyc2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjEw
Qjc0MEUxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yNjEzNyw2ICsyNjE1MywxNSBAQAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBY
U0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3RTJFMEUxMkYwRkM5QzAw
QzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1MzczNTIxMzdC
NjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTVD
MTNBMTJBMEIwMDg0NkIyNyAvKiBDdWVJbmRleC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFE
NEU1RTEzQTEyQTBCMDA4NDZCMjcgLyogTG9hZGFibGVUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQjFBRDRFNjIxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFibGVUZXh0VHJhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNjYxM0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2ODEzQTEyQTBCMDA4NDZCMjcgLyogVGV4
dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTZBMTNBMTJBMEIwMDg0NkIy
NyAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTczMTNB
MTJBNDYwMDg0NkIyNyAvKiBDdWVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRF
N0IxM0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MTBCNzQwRjEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCmluZGV4IDNiN2E4OTNjMmNmMDM5ZTJl
OTkxZTA5NmY1ZjZmNDU0OWU3YTBlMjUuLmQ5NDVjMDczMzM5MTJjZDdlNzgxZGU4NzVkNGEzNzMz
NmJhNTAxZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKQEAgLTIsMjMgKzIs
MjggQEAKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CkBAIC0zMSw2ICszNiw4IEBACiAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiVGV4dFRyYWNrLmgiCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5
LDkgKzQ2LDE2IEBAIFRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKGNvbnN0IFN0cmluZyYgaWQs
IGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyCiAgICAgLCBtX3N0YXJ0VGltZShz
dGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAgLCBtX2NvbnRlbnQoY29udGVudCkKLSAg
ICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3BhdXNlT25FeGl0KHBhdXNlT25FeGl0
KQorICAgICwgbV93cml0aW5nRGlyZWN0aW9uKEhvcml6b250YWwpCisgICAgLCBtX3NuYXBUb0xp
bmVzKHRydWUpCisgICAgLCBtX2xpbmVQb3NpdGlvbigtMSkKKyAgICAsIG1fdGV4dFBvc2l0aW9u
KDUwKQorICAgICwgbV9jdWVTaXplKDEwMCkKKyAgICAsIG1fY3VlQWxpZ25tZW50KE1pZGRsZSkK
KyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiB7CisgICAgcGFyc2VTZXR0aW5ncyhzZXR0aW5ncyk7
CiB9CiAKIFRleHRUcmFja0N1ZTo6flRleHRUcmFja0N1ZSgpCkBAIC03OCwxMCArOTIsMzcgQEAg
Ym9vbCBUZXh0VHJhY2tDdWU6OnBhdXNlT25FeGl0KCkgY29uc3QKICAgICByZXR1cm4gbV9wYXVz
ZU9uRXhpdDsKIH0KIAorU3RyaW5nIFRleHRUcmFja0N1ZTo6ZGlyZWN0aW9uKCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fd3JpdGluZ0RpcmVjdGlvbikgeworICAgIGNhc2UgSG9yaXpvbnRhbDog
CisgICAgICAgIHJldHVybiAiaG9yaXpvbnRhbCI7CisgICAgY2FzZSBWZXJ0aWNhbEdyb3dpbmdM
ZWZ0OgorICAgICAgICByZXR1cm4gInZlcnRpY2FsIjsKKyAgICBjYXNlIFZlcnRpY2FsR3Jvd2lu
Z1JpZ2h0OgorICAgICAgICByZXR1cm4gInZlcnRpY2FsLWxyIjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCitTdHJpbmcgVGV4dFRyYWNrQ3VlOjphbGlnbm1l
bnQoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9jdWVBbGlnbm1lbnQpIHsKKyAgICBjYXNlIFN0
YXJ0OiAKKyAgICAgICAgcmV0dXJuICJzdGFydCI7CisgICAgY2FzZSBNaWRkbGU6CisgICAgICAg
IHJldHVybiAibWlkZGxlIjsKKyAgICBjYXNlIEVuZDoKKyAgICAgICAgcmV0dXJuICJlbmQiOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKIFN0cmluZyBUZXh0
VHJhY2tDdWU6OmdldEN1ZUFzU291cmNlKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxl
bWVudC4KLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9jb250ZW50Owog
fQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFRleHRUcmFja0N1ZTo6Z2V0Q3VlQXNI
VE1MKCkKQEAgLTEwMSw2ICsxNDIsMTYwIEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRJc0FjdGl2
ZShib29sIGFjdGl2ZSkKICAgICBtX2lzQWN0aXZlID0gYWN0aXZlOwogfQogCit2b2lkIFRleHRU
cmFja0N1ZTo6cGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIC8vIDQu
OC4xMC4xMy4zIFBhcnNlIHRoZSBXZWJWVFQgc2V0dGluZ3MuCisgICAgLy8gMSAtIEluaXRpYWwg
c2V0dXAuCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIHdoaWxlIChwb3NpdGlvbiA8
IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIDItNCBTZXR0aW5ncyAtIGdldCB0aGUgbmV4
dCBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nIGEgc2V0dGluZ3MuCisgICAgICAgIGNoYXIgc2V0dGlu
ZyA9IGlucHV0W3Bvc2l0aW9uKytdOworICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVu
Z3RoKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gNS03IC0gSWYgdGhlIGNo
YXJhY3RlciBhdCBwb3NpdGlvbiBpcyBub3QgJzonLCBzZXQgc2V0dGluZyB0byBlbXB0eSBzdHJp
bmcuCisgICAgICAgIGlmIChpbnB1dFtwb3NpdGlvbisrXSAhPSAnOicpCisgICAgICAgICAgICBz
ZXR0aW5nID0gJ1wwJzsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIDggLSBHYXRoZXIgc2V0dGluZ3MgYmFz
ZWQgb24gdmFsdWUgb2Ygc2V0dGluZy4KKyAgICAgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAg
ICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0zIC0gQ29sbGVj
dCB0aGUgbmV4dCB3b3JkIGFuZCBzZXQgdGhlIHdyaXRpbmcgZGlyZWN0aW9uIGFjY29yZGluZ2x5
LgorICAgICAgICAgICAgU3RyaW5nIHdyaXRpbmdEaXJlY3Rpb24gPSBXZWJWVFRQYXJzZXI6OmNv
bGxlY3RXb3JkKGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJl
Y3Rpb24gPT0gInZlcnRpY2FsIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24g
PSBWZXJ0aWNhbEdyb3dpbmdMZWZ0OworICAgICAgICAgICAgZWxzZSBpZiAod3JpdGluZ0RpcmVj
dGlvbiA9PSAidmVydGljYWwtbHIiKQorICAgICAgICAgICAgICAgIG1fd3JpdGluZ0RpcmVjdGlv
biA9IFZlcnRpY2FsR3Jvd2luZ1JpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0y
IC0gQ29sbGVjdCBjaGFycyB0aGF0IGFyZSBlaXRoZXIgJy0nLCAnJScsIG9yIGEgZGlnaXQuCisg
ICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGxpbmVQb3NpdGlvbkJ1aWxkZXI7CisgICAgICAgICAg
ICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAoaW5wdXRbcG9zaXRpb25dID09
ICctJyB8fCBpbnB1dFtwb3NpdGlvbl0gPT0gJyUnIHx8IGlzQVNDSUlEaWdpdChpbnB1dFtwb3Np
dGlvbl0pKSkKKyAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25CdWlsZGVyLmFwcGVuZChpbnB1
dFtwb3NpdGlvbisrXSk7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgo
KSAmJiAhV2ViVlRUUGFyc2VyOjppc0FTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAg
ICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgU3RyaW5nIGxpbmVQb3NpdGlvbiA9
IGxpbmVQb3NpdGlvbkJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgICAgICAgICAgLy8gMy01IC0g
SWYgdGhlcmUgaXMgbm90IGF0IGxlYXN0IG9uZSBkaWdpdCBjaGFyYWN0ZXIsCisgICAgICAgICAg
ICAvLyAgICAgICBhICctJyBvY2N1cnMgYW55d2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJvbnQsIG9y
CisgICAgICAgICAgICAvLyAgICAgICBhICclJyBvY2N1cnMgYW55d2hlcmUgb3RoZXIgdGhhbiB0
aGUgZW5kLCB0aGVuCisgICAgICAgICAgICAvLyAgICAgICBpZ25vcmUgdGhpcyBzZXR0aW5nIGFu
ZCBrZWVwIGxvb2tpbmcuCisgICAgICAgICAgICBpZiAobGluZVBvc2l0aW9uLmZpbmQoJy0nLCAx
KSAhPSBub3RGb3VuZCB8fCBsaW5lUG9zaXRpb24ucmV2ZXJzZUZpbmQoIiUiLCBsaW5lUG9zaXRp
b24ubGVuZ3RoKCkgLSAyKSAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgLy8gNiAtIElmIHRoZSBmaXJzdCBjaGFyIGlzIGEgJy0nIGFuZCB0aGUgbGFz
dCBjaGFyIGlzIGEgJyUnLCBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlm
IChsaW5lUG9zaXRpb25bMF0gPT0gJy0nICYmIGxpbmVQb3NpdGlvbltsaW5lUG9zaXRpb24ubGVu
Z3RoKCkgLSAxXSA9PSAnJScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IC8vIDcgLSBJbnRlcnByZXQgYXMgbnVtYmVyICh0b0ludCBpZ25vcmVzIHRyYWlsaW5nIG5vbi1k
aWdpdCBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgLy8gICAgIHN1Y2ggYXMgYSBwb3NzaWJsZSAn
JScpLgorICAgICAgICAgICAgYm9vbCB2YWxpZE51bWJlcjsKKyAgICAgICAgICAgIGludCBudW1i
ZXIgPSBsaW5lUG9zaXRpb24udG9JbnQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICgh
dmFsaWROdW1iZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIDgg
LSBJZiB0aGUgbGFzdCBjaGFyIGlzIGEgJyUnIGFuZCB0aGUgdmFsdWUgaXMgbm90IGJldHdlZW4g
MCBhbmQgMTAwLCBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlmIChsaW5l
UG9zaXRpb25bbGluZVBvc2l0aW9uLmxlbmd0aCgpIC0gMV0gPT0gJyUnKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVyID4gMTAwKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIDEwIC0gSWYgJyUnIHRoZW4gc2V0IHNuYXAt
dG8tbGluZXMgZmxhZyB0byBmYWxzZS4KKyAgICAgICAgICAgICAgICBtX3NuYXBUb0xpbmVzID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIDkgLSBTZXQgY3VlIGxpbmUg
cG9zaXRpb24gdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1fbGluZVBvc2l0aW9u
ID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1QnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0yIC0gQ29sbGVjdCBjaGFy
YWN0ZXJzIHRoYXQgYXJlIGRpZ2l0cy4KKyAgICAgICAgICAgIFN0cmluZyB0ZXh0UG9zaXRpb24g
PSBXZWJWVFRQYXJzZXI6OmNvbGxlY3REaWdpdHMoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAg
ICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIC8vIDMgLSBDaGFyYWN0ZXIgYXQgZW5kIG11c3QgYmUgJyUnLCBv
dGhlcndpc2UgaWdub3JlIGFuZCBrZWVwIGxvb2tpbmcuCisgICAgICAgICAgICBpZiAoaW5wdXRb
cG9zaXRpb24rK10gIT0gJyUnKQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworCisg
ICAgICAgICAgICAvLyA0LTYgLSBFbnN1cmUgbm8gb3RoZXIgY2hhcnMgaW4gdGhpcyBzZXR0aW5n
IGFuZCBzZXR0aW5nIGlzIG5vdCBlbXB0eS4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGlu
cHV0Lmxlbmd0aCgpICYmICFXZWJWVFRQYXJzZXI6OmlzQVNwYWNlKGlucHV0W3Bvc2l0aW9uXSkp
CisgICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAgICAgICAgICBpZiAodGV4dFBv
c2l0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Ly8gNy04IC0gSW50ZXJwcmV0IGFzIG51bWJlciBhbmQgbWFrZSBzdXJlIGl0IGlzIGJldHdlZW4g
MCBhbmQgMTAwCisgICAgICAgICAgICAvLyAodG9JbnQgaWdub3JlcyB0cmFpbGluZyBub24tZGln
aXQgY2hhcmFjdGVycywgc3VjaCBhcyBhIHBvc3NpYmxlICclJykuCisgICAgICAgICAgICBib29s
IHZhbGlkTnVtYmVyOworICAgICAgICAgICAgaW50IG51bWJlciA9IHRleHRQb3NpdGlvbi50b0lu
dCgmdmFsaWROdW1iZXIpOworICAgICAgICAgICAgaWYgKCF2YWxpZE51bWJlcikKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChudW1iZXIgPCAwIHx8IG51bWJlciA+IDEw
MCkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIDkgLSBTZXQgY3VlIHRl
eHQgcG9zaXRpb24gdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1fdGV4dFBvc2l0
aW9uID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ1MnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0yIC0gQ29sbGVjdCBj
aGFyYWN0ZXJzIHRoYXQgYXJlIGRpZ2l0cy4KKyAgICAgICAgICAgIFN0cmluZyBjdWVTaXplID0g
V2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAvLyAzIC0gQ2hhcmFjdGVyIGF0IGVuZCBtdXN0IGJlICclJywgb3Ro
ZXJ3aXNlIGlnbm9yZSBhbmQga2VlcCBsb29raW5nLgorICAgICAgICAgICAgaWYgKGlucHV0W3Bv
c2l0aW9uKytdICE9ICclJykKKyAgICAgICAgICAgICAgICBnb3RvIE90aGVyd2lzZTsKKworICAg
ICAgICAgICAgLy8gNC02IC0gRW5zdXJlIG5vIG90aGVyIGNoYXJzIGluIHRoaXMgc2V0dGluZyBh
bmQgc2V0dGluZyBpcyBub3QgZW1wdHkuCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBpbnB1
dC5sZW5ndGgoKSAmJiAhV2ViVlRUUGFyc2VyOjppc0FTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQor
ICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgaWYgKGN1ZVNpemUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyA3LTgg
LSBJbnRlcnByZXQgYXMgbnVtYmVyIGFuZCBtYWtlIHN1cmUgaXQgaXMgYmV0d2VlbiAwIGFuZCAx
MDAuCisgICAgICAgICAgICBib29sIHZhbGlkTnVtYmVyOworICAgICAgICAgICAgaW50IG51bWJl
ciA9IGN1ZVNpemUudG9JbnQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRO
dW1iZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobnVtYmVyIDwg
MCB8fCBudW1iZXIgPiAxMDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IC8vIDkgLSBTZXQgY3VlIHNpemUgdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1f
Y3VlU2l6ZSA9IG51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdBJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIDEtNCAtIENvbGxl
Y3QgdGhlIG5leHQgd29yZCBhbmQgc2V0IHRoZSBjdWUgYWxpZ25tZW50IGFjY29yZGluZ2x5Lgor
ICAgICAgICAgICAgU3RyaW5nIGN1ZUFsaWdubWVudCA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdv
cmQoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoY3VlQWxpZ25tZW50ID09ICJz
dGFydCIpCisgICAgICAgICAgICAgICAgbV9jdWVBbGlnbm1lbnQgPSBTdGFydDsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGN1ZUFsaWdubWVudCA9PSAibWlkZGxlIikKKyAgICAgICAgICAgICAgICBt
X2N1ZUFsaWdubWVudCA9IE1pZGRsZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1ZUFsaWdubWVu
dCA9PSAiZW5kIikKKyAgICAgICAgICAgICAgICBtX2N1ZUFsaWdubWVudCA9IEVuZDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGlz
Y2FyZCBhbnkgcmVtYWluaW5nIHNwYWNlIGNoYXJhY3RlcnMgYmV0d2VlbiBvciBhZnRlciBzZXR0
aW5ncyAobm90IGluIHRoZSBzcGVjLCBidXQgd2UgdGhpbmsgaXQgc2hvdWxkIGJlKS4KKyAgICAg
ICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgV2ViVlRUUGFyc2VyOjppc0FT
cGFjZShpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAgICAgcG9zaXRpb24rKzsKKyAgICAgICAg
Y29udGludWU7CisKK090aGVyd2lzZToKKyAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9m
IGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMgYW5kIGRpc2NhcmQgdGhl
bS4KKyAgICAgICAgV2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChpbnB1dCwgJnBvc2l0aW9uKTsK
KyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9UZXh0VHJhY2tDdWUuaAppbmRleCBjOWMxNTMzNTk5YmU0ZjExZDdjOWFiMzM1N2U3NTVhZTE1
YjI2ZGI4Li5hMmQxMjFjZWYxMDQ3MzA1MmQ3NTViZTA5NzBkNjgxZGRkOWRiZDFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmgKQEAgLTEsMjQgKzEsMjkgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCkBAIC00Myw2ICs0OCw5IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3Vl
KGlkLCBzdGFydCwgZW5kLCBjb250ZW50LCBzZXR0aW5ncywgcGF1c2VPbkV4aXQpKTsKICAgICB9
CisgICAgCisgICAgZW51bSBEaXJlY3Rpb24geyBIb3Jpem9udGFsLCBWZXJ0aWNhbEdyb3dpbmdM
ZWZ0LCBWZXJ0aWNhbEdyb3dpbmdSaWdodCB9OworICAgIGVudW0gQWxpZ25tZW50IHsgU3RhcnQs
IE1pZGRsZSwgRW5kIH07CiAKICAgICB2aXJ0dWFsIH5UZXh0VHJhY2tDdWUoKTsKIApAQCAtNTMs
NiArNjEsMTMgQEAgcHVibGljOgogICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdDsKICAgICBk
b3VibGUgZW5kVGltZSgpIGNvbnN0OwogICAgIGJvb2wgcGF1c2VPbkV4aXQoKSBjb25zdDsKKyAg
ICAKKyAgICBTdHJpbmcgZGlyZWN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBzbmFwVG9MaW5lcygp
IGNvbnN0IHsgcmV0dXJuIG1fc25hcFRvTGluZXM7IH0KKyAgICBpbnQgbGluZVBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lUG9zaXRpb247IH0KKyAgICBpbnQgdGV4dFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0UG9zaXRpb247IH0KKyAgICBpbnQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VlU2l6ZTsgfQorICAgIFN0cmluZyBhbGlnbm1lbnQoKSBjb25zdDsKIAogICAg
IFN0cmluZyBnZXRDdWVBc1NvdXJjZSgpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZ2V0Q3VlQXNIVE1MKCk7CkBAIC02MywxNCArNzgsMjIgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBUZXh0VHJhY2tDdWUoY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUg
ZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wg
cGF1c2VPbkV4aXQpOwogCisgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYpOwor
ICAgIAogICAgIFRleHRUcmFjayogbV90cmFjazsKICAgICAKICAgICBTdHJpbmcgbV9pZDsKICAg
ICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgZG91YmxlIG1fZW5kVGltZTsKICAgICBTdHJpbmcg
bV9jb250ZW50OwotICAgIFN0cmluZyBtX3NldHRpbmdzOwogICAgIGJvb2wgbV9wYXVzZU9uRXhp
dDsKKyAgICBEaXJlY3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOworICAgIGJvb2wgbV9zbmFwVG9M
aW5lczsKKyAgICBpbnQgbV9saW5lUG9zaXRpb247CisgICAgaW50IG1fdGV4dFBvc2l0aW9uOwor
ICAgIGludCBtX2N1ZVNpemU7CisgICAgQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50OworCiAgICAg
Ym9vbCBtX2lzQWN0aXZlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5jcHAKaW5kZXggM2IzNTNlN2M4YzM1ZGVmMjM1NDg3ZmI5Yjc2MmEyOWFkNDA3NWEx
Ni4uNGE2ODY5YmE5ZGI0NzFjNDY0ZmM0MGRiNDBjODIxMGNlOTY0ZDIzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiQ3VlUGFyc2VyLmgiCiAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCwxNSArNzEsMjAgQEAgYm9vbCBDdWVQYXJz
ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyAvKmlk
ZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIEN1ZVBhcnNlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogQ3JlYXRlIG1f
cHJpdmF0ZSBiYXNlZCBvbiBNSU1FIHR5cGUuCi0gICAgbV9jbGllbnQtPnRyYWNrTG9hZFN0YXJ0
ZWQoKTsKKyAgICBpZiAocmVzcG9uc2UubWltZVR5cGUoKSA9PSAidGV4dC92dHQiKQorICAgICAg
ICBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKIH0KIAotdm9pZCBDdWVQYXJzZXI6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCit2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2
ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg5
Myk6IFNlbmQgZGF0YSBhbG9uZyB0byBtX3ByaXZhdGUgcGFyc2VyIHRvIGJlIHBhcnNlZC4KKyAg
ICAvLyBJZiBtaW1lIHR5cGUgZnJvbSBkaWRSZWNlaXZlUmVzcG9uc2Ugd2FzIG5vdCBpbmZvcm1h
dGl2ZSwgc25pZmYgZmlsZSBjb250ZW50LgorICAgIGlmICghbV9wcml2YXRlICYmIFdlYlZUVFBh
cnNlcjo6aGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcihkYXRhLCBsZW5ndGgpKQorICAgICAgICBj
cmVhdGVXZWJWVFRQYXJzZXIoKTsKKworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJp
dmF0ZS0+cGFyc2VCeXRlcyhkYXRhLCBsZW5ndGgpOwogfQogCiB2b2lkIEN1ZVBhcnNlcjo6ZGlk
RmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQpAQCAtOTYsNiArMTAyLDE5IEBAIHZvaWQgQ3Vl
UGFyc2VyOjpmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKQog
ICAgIC8vIEZJWE1FKDYyODkzKTogSW1wbGVtZW50LgogfQogCit2b2lkIEN1ZVBhcnNlcjo6bmV3
Q3Vlc1BhcnNlZCgpCit7CisgICAgbV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQoKTsKK30KKwordm9p
ZCBDdWVQYXJzZXI6OmNyZWF0ZVdlYlZUVFBhcnNlcigpCit7CisgICAgaWYgKCFtX3ByaXZhdGUp
IHsKKyAgICAgICAgbV9wcml2YXRlID0gV2ViVlRUUGFyc2VyOjpjcmVhdGUodGhpcyk7CisgICAg
ICAgIG1fY2xpZW50LT50cmFja0xvYWRTdGFydGVkKCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuaAppbmRleCA3NDRjYzMyMjc4YzVmNGNmOWU0ZjgyY2E3YzUzYWIxN2JkODlkOGNmLi43
YzZjNjMxNzRlNTc4MzY5NjA2ZWRhMjVmNDhhZDU0OThkMDg1ZjA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaApAQCAtMzMsOSArMzMsOSBAQAogCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogCi0jaW5jbHVkZSAiQ3VlUGFyc2VyUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tMb2Fk
Q29tcGxldGVkKCkgPSAwOwogfTsKIAotY2xhc3MgQ3VlUGFyc2VyIDogcHVibGljIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQgeworY2xhc3MgQ3VlUGFyc2VyIDogcHVibGljIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQsIEN1ZVBhcnNlclByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIEN1ZVBhcnNl
cigpOwogICAgIHZpcnR1YWwgfkN1ZVBhcnNlcigpOwpAQCAtNjcsOCArNjcsMTEgQEAgcHVibGlj
OgogICAgIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBmZXRj
aFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKTsKKyAgICB2b2lkIG5l
d0N1ZXNQYXJzZWQoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZVdlYlZUVFBhcnNlcigp
OworIAogICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKICAgICBPd25QdHI8
Q3VlUGFyc2VyUHJpdmF0ZUludGVyZmFjZT4gbV9wcml2YXRlOwogICAgIEN1ZVBhcnNlckNsaWVu
dCogbV9jbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJz
ZXJQcml2YXRlLmgKaW5kZXggYmMzZTRmYmMwOTUxYmUzNGNiZjAxMDcxZWQyODY5YTk5YTJmODMw
ZS4uMzY0ZjQ3NzM2N2FkZDY3NmFhMjM4OGVmZTI3OTk5ZGFiMDk3YmY2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaApAQCAtNTEsMTAg
KzUxLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DdWVQYXJzZXJQcml2YXRlSW50ZXJmYWNl
KCkgeyB9CiAKICAgICAvLyBJbnB1dCBkYXRhIHRvIHRoZSBwYXJzZXIgdG8gcGFyc2UuCi0gICAg
dmlydHVhbCB2b2lkIHBhcnNlQnl0ZXMoY29uc3QgY2hhciosIGludCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkgPSAwOwogCiAgICAgLy8g
VHJhbnNmZXJzIG93bmVyc2hpcCBvZiBsYXN0IHBhcnNlZCBjdWVzIHRvIGNhbGxlci4KLSAgICB2
aXJ0dWFsIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxQYXNzUmVmUHRyPFRleHRUcmFja0N1
ZT4gPiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiA+JikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ3VlUGFyc2VyUHJp
dmF0ZUludGVyZmFjZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dl
YlZUVFBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI2NDQzNDYyZGMzNGE3Y2FmYjYxMjM3OGI2NjBm
NjhiNDk3ZTJjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL1dlYlZUVFBhcnNlci5jcHAKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgi
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitib29sIFdlYlZUVFBhcnNlcjo6aGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcihjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQSBXZWJWVFQgZmlsZSBpZGVu
dGlmaWVyIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsIEJPTSBjaGFyYWN0ZXIsCisgICAgLy8gdGhl
IHN0cmluZyAiV0VCVlRUIiBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBzcGFjZSBvciB0YWIgY2hh
cmFjdGVyLAorICAgIC8vIGFuZCBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90
IGxpbmUgdGVybWluYXRvcnMgLi4uCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIGlm
IChsZW5ndGggPj0gMyAmJiBkYXRhWzBdID09ICdceEVGJyAmJiBkYXRhWzFdID09ICdceEJCJyAm
JiBkYXRhWzJdID09ICdceEJGJykKKyAgICAgICAgcG9zaXRpb24gKz0gMzsKKyAgICBTdHJpbmcg
bGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRhLCBsZW5ndGgsICZwb3NpdGlvbik7CisgICAgICAg
IAorICAgIGlmIChsaW5lLmxlbmd0aCgpIDwgNikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChsaW5lLmxlbmd0aCgpID09IDYgJiYgbGluZSAhPSAiV0VCVlRUIikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gSWYgbGluZSBpcyBtb3JlIHRoYW4gc2l4IGNoYXJhY3RlcnMK
KyAgICAvLyBidXQgdGhlIGZpcnN0IHNpeCBjaGFyYWN0ZXJzIGRvIG5vdCBleGFjdGx5IGVxdWFs
ICJXRUJWVFQiLAorICAgIC8vIG9yIHRoZSBzZXZlbnRoIGNoYXJhY3RlciBpcyBuZWl0aGVyIGEg
c3BhY2Ugbm9yIGEgdGFiIGNoYXJhY3RlciwgdGhlbiBhYm9ydC4KKyAgICBpZiAobGluZS5sZW5n
dGgoKSA+IDYgJiYgKGxpbmUuc3Vic3RyaW5nKDAsIDYpICE9ICJXRUJWVFQiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCAobGluZVs2XSAhPSAnICcgJiYgbGluZVs2XSAhPSAnXHQn
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5n
IFdlYlZUVFBhcnNlcjo6Y29sbGVjdERpZ2l0cyhjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25l
ZCogcG9zaXRpb24pCit7CisgICAgU3RyaW5nQnVpbGRlciBkaWdpdHM7CisgICAgd2hpbGUgKCpw
b3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmIGlzQVNDSUlEaWdpdChpbnB1dFsqcG9zaXRpb25d
KSkKKyAgICAgICAgZGlnaXRzLmFwcGVuZChpbnB1dFsoKnBvc2l0aW9uKSsrXSk7CisgICAgcmV0
dXJuIGRpZ2l0cy50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViVlRUUGFyc2VyOjpjb2xsZWN0
V29yZChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCogcG9zaXRpb24pCit7CisgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmc7CisgICAgd2hpbGUgKCpwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgp
ICYmICFpc0FTcGFjZShpbnB1dFsqcG9zaXRpb25dKSkKKyAgICAgICAgc3RyaW5nLmFwcGVuZChp
bnB1dFsoKnBvc2l0aW9uKSsrXSk7CisgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOworfQor
CitXZWJWVFRQYXJzZXI6OldlYlZUVFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50KiBjbGll
bnQpCisgICAgOiBtX3N0YXRlKEluaXRpYWwpCit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9
CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0
VHJhY2tDdWU+ID4mIG91dHB1dEN1ZXMpCit7CisgICAgb3V0cHV0Q3VlcyA9IG1fY3VlbGlzdDsK
KyAgICBtX2N1ZWxpc3QuY2xlYXIoKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnBhcnNlQnl0
ZXMoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIDQuOC4xMC4x
My4zIFdIQVRXRyBXZWJWVFQgUGFyc2VyIGFsZ29yaXRobS4KKyAgICAvLyAxLTMgLSBJbml0aWFs
IHNldHVwLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKworICAgIHdoaWxlIChwb3NpdGlv
biA8IGxlbmd0aCkgeworICAgICAgICBTdHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRh
LCBsZW5ndGgsICZwb3NpdGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fc3RhdGUp
IHsKKyAgICAgICAgY2FzZSBJbml0aWFsOgorICAgICAgICAgICAgLy8gNC0xMiAtIENvbGxlY3Qg
dGhlIGZpcnN0IGxpbmUgYW5kIGNoZWNrIGZvciAiV0VCVlRUIi4KKyAgICAgICAgICAgIGlmICgh
aGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcihkYXRhLCBsZW5ndGgpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBIZWFkZXI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIGNhc2UgSGVhZGVyOgorICAgICAgICAgICAgLy8gMTMtMTgg
LSBBbGxvdyBhIGhlYWRlciAoY29tbWVudCBhcmVhKSB1bmRlciB0aGUgV0VCVlRUIGxpbmUuCisg
ICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IElkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIElkOgorICAg
ICAgICAgICAgLy8gMTktMjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMs
IHRoZW4gaW5pdGlhbGl6ZSBuZXcgY3VlIHZhbHVlcy4KKyAgICAgICAgICAgIGlmIChsaW5lLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlc2V0Q3VlVmFs
dWVzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIDMwLTM5IC0gQ2hlY2sgaWYgdGhp
cyBsaW5lIGNvbnRhaW5zIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb3IgdGltaW5nIGRhdGEuCisg
ICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZUlkKGxpbmUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICBjYXNlIFRpbWluZ3NBbmRTZXR0aW5nczoKKyAgICAgICAg
ICAgIC8vIDQwIC0gQ29sbGVjdCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3MuCisgICAgICAgICAg
ICBtX3N0YXRlID0gY29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhsaW5lKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBDdWVUZXh0OgorICAgICAgICAgICAgLy8g
NDEtNTMgLSBDb2xsZWN0IHRoZSBjdWUgdGV4dCwgY3JlYXRlIGEgY3VlLCBhbmQgYWRkIGl0IHRv
IHRoZSBvdXRwdXQuCisgICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZVRleHQobGluZSwg
bGVuZ3RoLCBwb3NpdGlvbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJh
ZEN1ZToKKyAgICAgICAgICAgIC8vIDU0LTYyIC0gQ29sbGVjdCBhbmQgZGlzY2FyZCB0aGUgcmVt
YWluaW5nIGN1ZS4KKyAgICAgICAgICAgIG1fc3RhdGUgPSBpZ25vcmVCYWRDdWUobGluZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViVlRUUGFyc2VyOjpQ
YXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdEN1ZUlkKGNvbnN0IFN0cmluZyYgbGluZSkK
K3sKKyAgICBpZiAobGluZS5jb250YWlucygiLS0+IikpCisgICAgICAgIHJldHVybiBjb2xsZWN0
VGltaW5nc0FuZFNldHRpbmdzKGxpbmUpOworICAgIG1fY3VycmVudElkID0gbGluZTsKKyAgICBy
ZXR1cm4gVGltaW5nc0FuZFNldHRpbmdzOworfQorCitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUg
V2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYgbGlu
ZSkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IFdlYlZUVCBjdWUgdGltaW5ncyBhbmQg
c2V0dGluZ3MuCisgICAgLy8gMS0zIC0gTGV0IGlucHV0IGJlIHRoZSBzdHJpbmcgYmVpbmcgcGFy
c2VkIGFuZCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgaW50byBpbnB1dAorICAgIHVuc2lnbmVkIHBv
c2l0aW9uID0gMDsKKyAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAg
Ly8gNC01IC0gQ29sbGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAuIElmIHRoYXQgZmFpbHMsIHRoZW4g
YWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGxldCBjdWUncyB0ZXh0IHRyYWNr
IGN1ZSBzdGFydCB0aW1lIGJlIHRoZSBjb2xsZWN0ZWQgdGltZS4KKyAgICBtX2N1cnJlbnRTdGFy
dFRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKGxpbmUsICZwb3NpdGlvbik7CisgICAgaWYgKG1fY3Vy
cmVudFN0YXJ0VGltZSA9PSBtYWxmb3JtZWRUaW1lKQorICAgICAgICByZXR1cm4gQmFkQ3VlOwor
ICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsICZwb3NpdGlvbik7CisKKyAgICAvLyA2LTkgLSBJZiB0
aGUgbmV4dCB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBub3QgIi0tPiIsIGFib3J0IGFuZCByZXR1cm4g
ZmFpbHVyZS4KKyAgICBpZiAobGluZS5maW5kKCItLT4iLCBwb3NpdGlvbikgPT0gbm90Rm91bmQp
CisgICAgICAgIHJldHVybiBCYWRDdWU7CisgICAgcG9zaXRpb24gKz0gMzsKKyAgICBza2lwV2hp
dGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAgLy8gMTAtMTEgLSBDb2xsZWN0IGEgV2Vi
VlRUIHRpbWVzdGFtcC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1
cmUuIE90aGVyd2lzZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIGVuZCB0aW1lIGJlIHRoZSBj
b2xsZWN0ZWQgdGltZS4KKyAgICBtX2N1cnJlbnRFbmRUaW1lID0gY29sbGVjdFRpbWVTdGFtcChs
aW5lLCAmcG9zaXRpb24pOworICAgIGlmIChtX2N1cnJlbnRFbmRUaW1lID09IG1hbGZvcm1lZFRp
bWUpCisgICAgICAgIHJldHVybiBCYWRDdWU7CisgICAgc2tpcFdoaXRlU3BhY2UobGluZSwgJnBv
c2l0aW9uKTsKKworICAgIC8vIDEyIC0gUGFyc2UgdGhlIFdlYlZUVCBzZXR0aW5ncyBmb3IgdGhl
IGN1ZSAoY29uZHVjdGVkIGluIFRleHRUcmFja0N1ZSkuCisgICAgbV9jdXJyZW50U2V0dGluZ3Mg
PSBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbiwgbGluZS5sZW5ndGgoKS0xKTsKKyAgICByZXR1cm4g
Q3VlVGV4dDsKK30KKworV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29s
bGVjdEN1ZVRleHQoY29uc3QgU3RyaW5nJiBsaW5lLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHBvc2l0aW9uKQoreworICAgIGlmIChsaW5lLmlzRW1wdHkoKSkgeworICAgICAgICBwcm9jZXNz
Q3VlVGV4dCgpOworICAgICAgICByZXR1cm4gSWQ7CisgICAgfQorICAgIGlmICghbV9jdXJyZW50
Q29udGVudC5pc0VtcHR5KCkpCisgICAgICAgIG1fY3VycmVudENvbnRlbnQuYXBwZW5kKCJcbiIp
OworICAgIG1fY3VycmVudENvbnRlbnQuYXBwZW5kKGxpbmUpOworCisgICAgaWYgKHBvc2l0aW9u
ID49IGxlbmd0aCkKKyAgICAgICAgcHJvY2Vzc0N1ZVRleHQoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICByZXR1cm4gQ3VlVGV4dDsKK30KKworV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZU
VFBhcnNlcjo6aWdub3JlQmFkQ3VlKGNvbnN0IFN0cmluZyYgbGluZSkKK3sKKyAgICBpZiAoIWxp
bmUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQmFkQ3VlOworICAgIHJldHVybiBJZDsKK30K
Kwordm9pZCBXZWJWVFRQYXJzZXI6OnByb2Nlc3NDdWVUZXh0KCkKK3sKKyAgICAvLyA1MSAtIEN1
ZSB0ZXh0IHByb2Nlc3NpbmcgYmFzZWQgb24gV2ViVlRUIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMg
YW5kIFdlYlZUVCBjdWUgdGV4dCBET00gY29uc3RydWN0aW9uIHJ1bGVzLgorICAgIC8vIEZJWE1F
KDY0MTMyKTogUHJvY2VzcyB0aGUgY3VlIHRleHQgYXMgcGVyIHRoZSBjdWUgdGV4dCBwYXJzaW5n
IHJ1bGVzLiAKKyAgICAvLyAgICAgU291cmNlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaWZyYW1lLWVsZW1lbnQuaHRtbCN3
ZWJ2dHQtY3VlLXRleHQtcGFyc2luZy1ydWxlcworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1
ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKG1fY3VycmVudElkLCBtX2N1cnJlbnRTdGFydFRpbWUs
IG1fY3VycmVudEVuZFRpbWUsIG1fY3VycmVudENvbnRlbnQudG9TdHJpbmcoKSwgbV9jdXJyZW50
U2V0dGluZ3MsIGZhbHNlKTsKKyAgICBtX2N1ZWxpc3QuYXBwZW5kKGN1ZSk7CisgICAgbV9jbGll
bnQtPm5ld0N1ZXNQYXJzZWQoKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnJlc2V0Q3VlVmFs
dWVzKCkKK3sKKyAgICBtX2N1cnJlbnRJZCA9IGVtcHR5U3RyaW5nKCk7CisgICAgbV9jdXJyZW50
U2V0dGluZ3MgPSBlbXB0eVN0cmluZygpOworICAgIG1fY3VycmVudFN0YXJ0VGltZSA9IDA7Cisg
ICAgbV9jdXJyZW50RW5kVGltZSA9IDA7CisgICAgbV9jdXJyZW50Q29udGVudC5jbGVhcigpOwor
fQorCitkb3VibGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKGNvbnN0IFN0cmluZyYg
bGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAgIC8vIDQuOC4xMC4xMy4zIENvbGxlY3Qg
YSBXZWJWVFQgdGltZXN0YW1wLgorICAgIC8vIDEtNCAtIEluaXRpYWwgY2hlY2tzLCBsZXQgbW9z
dCBzaWduaWZpY2FudCB1bml0cyBiZSBtaW51dGVzLgorICAgIGVudW0gTW9kZSB7IG1pbnV0ZXMs
IGhvdXJzIH07CisgICAgTW9kZSBtb2RlID0gbWludXRlczsKKyAgICBpZiAoKnBvc2l0aW9uID49
IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdpdChsaW5lWypwb3NpdGlvbl0pKQorICAgICAg
ICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKworICAgIC8vIDUtNiAtIENvbGxlY3QgYSBzZXF1ZW5j
ZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIDAtOS4KKyAgICBTdHJpbmcgZGlnaXRzMSA9IGNvbGxl
Y3REaWdpdHMobGluZSwgcG9zaXRpb24pOworICAgIGludCB2YWx1ZTEgPSBkaWdpdHMxLnRvSW50
KCk7CisKKyAgICAvLyA3IC0gSWYgbm90IDIgY2hhcmFjdGVycyBvciB2YWx1ZSBpcyBncmVhdGVy
IHRoYW4gNTksIGludGVycHJldCBhcyBob3Vycy4KKyAgICBpZiAoZGlnaXRzMS5sZW5ndGgoKSAh
PSAyIHx8IHZhbHVlMSA+IDU5KQorICAgICAgICBtb2RlID0gaG91cnM7CisKKyAgICAvLyA4LTEy
IC0gQ29sbGVjdCB0aGUgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJzonIChtdXN0IGJlIDIg
Y2hhcnMpLgorICAgIGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lWygqcG9z
aXRpb24pKytdICE9ICc6JykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYg
KCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8ICFpc0FTQ0lJRGlnaXQobGluZVsoKnBvc2l0
aW9uKV0pKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBTdHJpbmcgZGlnaXRz
MiA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9zaXRpb24pOworICAgIGludCB2YWx1ZTIgPSBkaWdp
dHMyLnRvSW50KCk7CisgICAgaWYgKGRpZ2l0czIubGVuZ3RoKCkgIT0gMikgCisgICAgICAgIHJl
dHVybiBtYWxmb3JtZWRUaW1lOworCisgICAgLy8gMTMgLSBEZXRlY3Qgd2hldGhlciB0aGlzIHRp
bWVzdGFtcCBpbmNsdWRlcyBob3Vycy4KKyAgICBpbnQgdmFsdWUzOworICAgIGlmIChtb2RlID09
IGhvdXJzIHx8ICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYmIGxpbmVbKnBvc2l0aW9uXSA9
PSAnOicpKSB7CisgICAgICAgIGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5l
WygqcG9zaXRpb24pKytdICE9ICc6JykKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1l
OworICAgICAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdp
dChsaW5lWypwb3NpdGlvbl0pKQorICAgICAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Cisg
ICAgICAgIFN0cmluZyBkaWdpdHMzID0gY29sbGVjdERpZ2l0cyhsaW5lLCBwb3NpdGlvbik7Cisg
ICAgICAgIGlmIChkaWdpdHMzLmxlbmd0aCgpICE9IDIpCisgICAgICAgICAgICByZXR1cm4gbWFs
Zm9ybWVkVGltZTsKKyAgICAgICAgdmFsdWUzID0gZGlnaXRzMy50b0ludCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHZhbHVlMyA9IHZhbHVlMjsKKyAgICAgICAgdmFsdWUyID0gdmFsdWUxOwor
ICAgICAgICB2YWx1ZTEgPSAwOworICAgIH0KKworICAgIC8vIDE0LTE5IC0gQ29sbGVjdCBuZXh0
IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAnLicgKG11c3QgYmUgMyBjaGFycykuCisgICAgaWYgKCpw
b3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbKCpwb3NpdGlvbikrK10gIT0gJy4nKQor
ICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUu
bGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdpdChsaW5lWypwb3NpdGlvbl0pKQorICAgICAgICByZXR1
cm4gbWFsZm9ybWVkVGltZTsKKyAgICBTdHJpbmcgZGlnaXRzNCA9IGNvbGxlY3REaWdpdHMobGlu
ZSwgcG9zaXRpb24pOworICAgIGlmIChkaWdpdHM0Lmxlbmd0aCgpICE9IDMpCisgICAgICAgIHJl
dHVybiBtYWxmb3JtZWRUaW1lOworICAgIGludCB2YWx1ZTQgPSBkaWdpdHM0LnRvSW50KCk7Cisg
ICAgaWYgKHZhbHVlMiA+IDU5IHx8IHZhbHVlMyA+IDU5KQorICAgICAgICByZXR1cm4gbWFsZm9y
bWVkVGltZTsKKworICAgIC8vIDIwLTIxIC0gQ2FsY3VsYXRlIHJlc3VsdC4KKyAgICByZXR1cm4g
KHZhbHVlMSAqIHNlY29uZHNQZXJIb3VyKSArICh2YWx1ZTIgKiBzZWNvbmRzUGVyTWludXRlKSAr
IHZhbHVlMyArICgoZG91YmxlKXZhbHVlNCAvIDEwMDApOworfQorCit2b2lkIFdlYlZUVFBhcnNl
cjo6c2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiBsaW5lLCB1bnNpZ25lZCogcG9zaXRpb24p
Cit7CisgICAgd2hpbGUgKCpwb3NpdGlvbiA8IGxpbmUubGVuZ3RoKCkgJiYgaXNBU3BhY2UobGlu
ZVsqcG9zaXRpb25dKSkKKyAgICAgICAgKCpwb3NpdGlvbikrKzsKK30KKwordm9pZCBXZWJWVFRQ
YXJzZXI6OnNraXBMaW5lVGVybWluYXRvcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICBpZiAoKnBvc2l0aW9uID49IGxlbmd0aCkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChkYXRhWypwb3NpdGlvbl0gPT0gJ1xyJykKKyAgICAg
ICAgKCpwb3NpdGlvbikrKzsKKyAgICBpZiAoKnBvc2l0aW9uID49IGxlbmd0aCkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChkYXRhWypwb3NpdGlvbl0gPT0gJ1xuJykKKyAgICAgICAgKCpwb3Np
dGlvbikrKzsKK30KKworU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29sbGVjdE5leHRMaW5lKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAg
IHVuc2lnbmVkIG9sZFBvc2l0aW9uID0gKnBvc2l0aW9uOworICAgIHdoaWxlICgqcG9zaXRpb24g
PCBsZW5ndGggJiYgZGF0YVsqcG9zaXRpb25dICE9ICdccicgJiYgZGF0YVsqcG9zaXRpb25dICE9
ICdcbicpCisgICAgICAgICgqcG9zaXRpb24pKys7CisgICAgU3RyaW5nIGxpbmUgPSBTdHJpbmc6
OmZyb21VVEY4KGRhdGEgKyBvbGRQb3NpdGlvbiwgKnBvc2l0aW9uIC0gb2xkUG9zaXRpb24pOwor
ICAgIHNraXBMaW5lVGVybWluYXRvcihkYXRhLCBsZW5ndGgsIHBvc2l0aW9uKTsKKyAgICByZXR1
cm4gbGluZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJh
Y2svV2ViVlRUUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY5MzUyYzBkODc5MjIzNDM0MDRlNmYxZTA5
N2I1OTA4M2FiOTVkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL1dlYlZUVFBhcnNlci5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVlRUUGFy
c2VyX2gKKyNkZWZpbmUgV2ViVlRUUGFyc2VyX2gKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KworI2luY2x1ZGUgIkN1ZVBhcnNlclByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgaW50IHNlY29uZHNQZXJIb3VyID0gMzYwMDsKK3N0YXRp
YyBjb25zdCBpbnQgc2Vjb25kc1Blck1pbnV0ZSA9IDYwOworc3RhdGljIGNvbnN0IGRvdWJsZSBt
YWxmb3JtZWRUaW1lID0gLTE7CisKK2NsYXNzIFdlYlZUVFBhcnNlciA6IHB1YmxpYyBDdWVQYXJz
ZXJQcml2YXRlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJWVFRQYXJzZXIo
KSB7IH0KKyAgICAKKyAgICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFsLCBIZWFkZXIsIElkLCBU
aW1pbmdzQW5kU2V0dGluZ3MsIEN1ZVRleHQsIEJhZEN1ZSB9OworCisgICAgc3RhdGljIFBhc3NP
d25QdHI8V2ViVlRUUGFyc2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJWVFRQYXJzZXIoY2xpZW50
KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGhhc1JlcXVpcmVkRmlsZUlkZW50aWZp
ZXIoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0FTcGFjZShjaGFyIGMpCisgICAgeworICAgICAgICAvLyBXZWJWVFQgc3BhY2Ug
Y2hhcmFjdGVycyBhcmUgVSswMDIwIFNQQUNFLCBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04g
KHRhYiksIFUrMDAwQSBMSU5FIEZFRUQgKExGKSwgVSswMDBDIEZPUk0gRkVFRCAoRkYpLCBhbmQg
VSswMDBEIENBUlJJQUdFIFJFVFVSTiAgICAoQ1IpLgorICAgICAgICByZXR1cm4gYyA9PSAnICcg
fHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcZicgfHwgYyA9PSAnXHInOworICAg
IH0KKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3REaWdpdHMoY29uc3QgU3RyaW5nJiwgdW5zaWdu
ZWQqKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RXb3JkKGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8
VGV4dFRyYWNrQ3VlPiA+Jik7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBhcnNlQnl0ZXMoY29u
c3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKworcHJvdGVjdGVkOgorICAgIFdlYlZU
VFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50Kik7CisgICAgCisgICAgUGFyc2VTdGF0ZSBt
X3N0YXRlOworCitwcml2YXRlOgorICAgIFBhcnNlU3RhdGUgY29sbGVjdEN1ZUlkKGNvbnN0IFN0
cmluZyYpOworICAgIFBhcnNlU3RhdGUgY29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25zdCBT
dHJpbmcmKTsKKyAgICBQYXJzZVN0YXRlIGNvbGxlY3RDdWVUZXh0KGNvbnN0IFN0cmluZyYsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQpOworICAgIFBhcnNlU3RhdGUgaWdub3JlQmFkQ3VlKGNv
bnN0IFN0cmluZyYpOworCisgICAgdm9pZCBwcm9jZXNzQ3VlVGV4dCgpOworICAgIHZvaWQgcmVz
ZXRDdWVWYWx1ZXMoKTsKKyAgICBkb3VibGUgY29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCopOworICAgIHZvaWQgc2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQqKTsKKyAgICBzdGF0aWMgdm9pZCBza2lwTGluZVRlcm1pbmF0b3IoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCopOworICAgIHN0YXRpYyBTdHJpbmcgY29s
bGVjdE5leHRMaW5lKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQq
KTsKKworICAgIFN0cmluZyBtX2N1cnJlbnRJZDsKKyAgICBkb3VibGUgbV9jdXJyZW50U3RhcnRU
aW1lOworICAgIGRvdWJsZSBtX2N1cnJlbnRFbmRUaW1lOworICAgIFN0cmluZ0J1aWxkZXIgbV9j
dXJyZW50Q29udGVudDsKKyAgICBTdHJpbmcgbV9jdXJyZW50U2V0dGluZ3M7CisKKyAgICBDdWVQ
YXJzZXJQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKworICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRy
YWNrQ3VlPiA+IG1fY3VlbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103136</attachid>
            <date>2011-08-05 18:31:39 -0700</date>
            <delta_ts>2011-08-05 19:01:06 -0700</delta_ts>
            <desc>updating to ToT</desc>
            <filename>bug-62882-20110805183137.patch</filename>
            <type>text/plain</type>
            <size>43503</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI1MzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOWE0YzI3
M2IwZWMzZmVkMTM1YWM3OTYzZTY1MTkwNTFkN2Y5ZWRjNi4uNGI4M2FkYTMwZTY4MzA0ZjY1YjVi
OWIzOTg2ODJkMDIyYzUwMGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTgsNiArMTk5
OCw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQ4NmE5MmU4NDQ3MDcyODBhODcx
MDhmYjRhN2JiODA3ZmI4MmE2NC4uZjEzZDQ0M2VmMTIyNjM2MGQ4NmJkODBjOGQ2ZGU2NWU0OTBi
NTUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA4LTA1ICBBbm5hIENhdmVu
ZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGRpbmcgYSBXZWJWVFRQYXJz
ZXIgZm9yIDx0cmFjaz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURFT19UUkFDSyBmZWF0dXJlIGRlZmlu
ZSwgd2hpY2ggaXMgdHVybmVkIG9mZiwgYnV0CisgICAgICAgIG5ldyB0ZXN0cyBoYXZlIGJlZW4g
YWRkZWQgaW4gbWVkaWEvdHJhY2svIChhbmQgYXJlIHNraXBwZWQpLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvVGV4dFRyYWNrQ3VlLmNw
cDoKKyAgICAgICAgKiBodG1sL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmg6
CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oOiBBZGRlZC4KKwogMjAxMS0wOC0wNSAgS2VudCBUYW11
cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjkyNDc3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOGJkNTU1NTBmY2Ex
ODYwOWQzNGVjNTRkYjJmNGZmNTQ0NzE0ZjZhMi4uODg5YTAxZmVkZWE0YWVhZGM0NDc0YjEyOGZi
ZDNjNTJlMDNmZmFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yODYwLDYg
KzI4NjAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL0N1ZVBhcnNlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2
YXRlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1VSTFN0cmluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VVUlELmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggNDc0NzZlMmRiYmEzYTkzOTNmZTg0MmE5Zjk0NTRiYTI0NDhhMGQ2
Mi4uYWI4NTk3NGNmNDk2NjNiOTg3Yzc1YjJlN2EzZDI1Y2I4ZmY2M2EwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDQzMCw2ICs0NDMwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2lu
L0JTdHJpbmcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQlN0cmluZy5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS93aW4vQml0bWFwSW5mby5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCBiN2QwMDJiOTFmODAxYTI2YjdiODdiZmNhMzQ4YWE4YjE2Y2MzNjM2Li4yZjE1MzkyYTMwMGY0
YzBlOGU3ZThlODJlYmM5MTQxN2Y0ZmE2NmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjExOSw2ICsy
MTE5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vVGltZXIuaCBcCiAgICAgcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZh
dGUuaCBcCisgICAgcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAogICAgIHBsYXRmb3Jt
L1dpZGdldC5oIFwKICAgICBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaCBcCiAgICAgcGxh
dGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNjM1NzU5OGZmYjM4NjZiYjhkNGZlYWYy
MGEzZjg0ZGZkMWMzZWZhLi5jZjljNDkyMzNiNzA4MDJhODE5OGM4MjZkZDE5YjMxYzQxNzViMjE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC00MDc5LDYgKzQwNzksOCBAQAogCQlBQkRERkU3OTBBNUM2RTcwMDBBM0UxMUQgLyog
UmVuZGVyTWVudUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUJEREZFNzMwQTVDNkU2RjAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmNwcCAq
LzsgfTsKIAkJQUJEREZFN0EwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQkRERkU3NDBBNUM2
RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCAqLzsgfTsKIAkJQURERjFBRDcxMjU3Q0Q5
QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQ
YXRoLmggKi87IH07CisJCUIxMEI3NDBFMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI3NDBD
MTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQYXJzZXIuaCAqLzsgfTsKKwkJQjEwQjc0MEYxM0JF
ODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNzQwRDEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRU
UGFyc2VyLmNwcCAqLzsgfTsKIAkJQjE0MzUzRDUxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3Ry
ZWFtTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMTQzNTNEMTEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCAqLzsgfTsK
IAkJQjE0MzUzRDYxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUzRDIxMzhFQThFRDAw
RDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovOyB9OwogCQlCMTQzNTNGODEzOEVBOTVCMDBE
NTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjE0MzUzRjYxMzhFQTk1QjAwRDUzMjc2IC8qIEpTTWVkaWFT
dHJlYW1MaXN0LmNwcCAqLzsgfTsKQEAgLTEwNTkyLDYgKzEwNTk0LDggQEAKIAkJQUJEREZFNzQw
QTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJNZW51TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRERGMUFENDEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdQYXRoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRl
clNWR1BhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMTBCNzQwQzEzQkU4MEJGMDBCQzFD
MjYgLyogV2ViVlRUUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YlZUVFBhcnNlci5oOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJW
VFRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViVlRU
UGFyc2VyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QxMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRp
YVN0cmVhbUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVk
aWFTdHJlYW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjE0MzUzRDIx
MzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjE0MzUzRDMxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4MDQ1LDYgKzE4MDQ5LDggQEAKIAkJCQlCMkU0RUM5NTBEMDBDMjJC
MDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmggKi8sCiAJCQkJQjJFNEVDOTYwRDAwQzIyQjAwNDMy
NjQzIC8qIFNWR1pvb21FdmVudC5pZGwgKi8sCiAJCQkJQjI4QzZBMjYwRDAwQzQ0ODAwMzM0QUE0
IC8qIHhsaW5rYXR0cnMuaW4gKi8sCisJCQkJQjEwQjc0MEMxM0JFODBCRjAwQkMxQzI2IC8qIFdl
YlZUVFBhcnNlci5oICovLAorCQkJCUIxMEI3NDBEMTNCRTgwQkYwMEJDMUMyNiAvKiBXZWJWVFRQ
YXJzZXIuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBzdmc7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjMzMzIsNiArMjMzMzgsMTYgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEy
RjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1Mzcz
NTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFE
NEU1RDEzQTEyQTBCMDA4NDZCMjcgLyogQ3VlSW5kZXguaCBpbiBIZWFkZXJzICovLAorCQkJCUIx
QUQ0RTVGMTNBMTJBMEIwMDg0NkIyNyAvKiBMb2FkYWJsZVRleHRUcmFjay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQjFBRDRFNjMxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFibGVUZXh0VHJhY2suaCBp
biBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTY3MTNBMTJBMEIwMDg0NkIyNyAvKiBUZXh0VHJhY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTY5MTNBMTJBMEIwMDg0NkIyNyAvKiBUZXh0VHJh
Y2tDdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUIxQUQ0RTZCMTNBMTJBMEIwMDg0NkIyNyAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3NDEzQTEyQTQ2MDA4
NDZCMjcgLyogQ3VlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3QzEzQTEyQTcy
MDA4NDZCMjcgLyogQ3VlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMUFENEU3RDEzQTEy
QTcyMDA4NDZCMjcgLyogQ3VlUGFyc2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjEw
Qjc0MEUxM0JFODBCRjAwQkMxQzI2IC8qIFdlYlZUVFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yNjEyOSw2ICsyNjE0NSwxNSBAQAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBY
U0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3RTJFMEUxMkYwRkM5QzAw
QzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1MzczNTIxMzdC
NjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTVD
MTNBMTJBMEIwMDg0NkIyNyAvKiBDdWVJbmRleC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFE
NEU1RTEzQTEyQTBCMDA4NDZCMjcgLyogTG9hZGFibGVUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQjFBRDRFNjIxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFibGVUZXh0VHJhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRFNjYxM0ExMkEwQjAwODQ2QjI3IC8qIFRleHRUcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMUFENEU2ODEzQTEyQTBCMDA4NDZCMjcgLyogVGV4
dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTZBMTNBMTJBMEIwMDg0NkIy
NyAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIxQUQ0RTczMTNB
MTJBNDYwMDg0NkIyNyAvKiBDdWVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjFBRDRF
N0IxM0ExMkE3MjAwODQ2QjI3IC8qIEN1ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MTBCNzQwRjEzQkU4MEJGMDBCQzFDMjYgLyogV2ViVlRUUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCmluZGV4IDNiN2E4OTNjMmNmMDM5ZTJl
OTkxZTA5NmY1ZjZmNDU0OWU3YTBlMjUuLmQ5NDVjMDczMzM5MTJjZDdlNzgxZGU4NzVkNGEzNzMz
NmJhNTAxZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKQEAgLTIsMjMgKzIs
MjggQEAKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CkBAIC0zMSw2ICszNiw4IEBACiAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiVGV4dFRyYWNrLmgiCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5
LDkgKzQ2LDE2IEBAIFRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKGNvbnN0IFN0cmluZyYgaWQs
IGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyCiAgICAgLCBtX3N0YXJ0VGltZShz
dGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAgLCBtX2NvbnRlbnQoY29udGVudCkKLSAg
ICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3BhdXNlT25FeGl0KHBhdXNlT25FeGl0
KQorICAgICwgbV93cml0aW5nRGlyZWN0aW9uKEhvcml6b250YWwpCisgICAgLCBtX3NuYXBUb0xp
bmVzKHRydWUpCisgICAgLCBtX2xpbmVQb3NpdGlvbigtMSkKKyAgICAsIG1fdGV4dFBvc2l0aW9u
KDUwKQorICAgICwgbV9jdWVTaXplKDEwMCkKKyAgICAsIG1fY3VlQWxpZ25tZW50KE1pZGRsZSkK
KyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiB7CisgICAgcGFyc2VTZXR0aW5ncyhzZXR0aW5ncyk7
CiB9CiAKIFRleHRUcmFja0N1ZTo6flRleHRUcmFja0N1ZSgpCkBAIC03OCwxMCArOTIsMzcgQEAg
Ym9vbCBUZXh0VHJhY2tDdWU6OnBhdXNlT25FeGl0KCkgY29uc3QKICAgICByZXR1cm4gbV9wYXVz
ZU9uRXhpdDsKIH0KIAorU3RyaW5nIFRleHRUcmFja0N1ZTo6ZGlyZWN0aW9uKCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fd3JpdGluZ0RpcmVjdGlvbikgeworICAgIGNhc2UgSG9yaXpvbnRhbDog
CisgICAgICAgIHJldHVybiAiaG9yaXpvbnRhbCI7CisgICAgY2FzZSBWZXJ0aWNhbEdyb3dpbmdM
ZWZ0OgorICAgICAgICByZXR1cm4gInZlcnRpY2FsIjsKKyAgICBjYXNlIFZlcnRpY2FsR3Jvd2lu
Z1JpZ2h0OgorICAgICAgICByZXR1cm4gInZlcnRpY2FsLWxyIjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCitTdHJpbmcgVGV4dFRyYWNrQ3VlOjphbGlnbm1l
bnQoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9jdWVBbGlnbm1lbnQpIHsKKyAgICBjYXNlIFN0
YXJ0OiAKKyAgICAgICAgcmV0dXJuICJzdGFydCI7CisgICAgY2FzZSBNaWRkbGU6CisgICAgICAg
IHJldHVybiAibWlkZGxlIjsKKyAgICBjYXNlIEVuZDoKKyAgICAgICAgcmV0dXJuICJlbmQiOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKIFN0cmluZyBUZXh0
VHJhY2tDdWU6OmdldEN1ZUFzU291cmNlKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxl
bWVudC4KLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9jb250ZW50Owog
fQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFRleHRUcmFja0N1ZTo6Z2V0Q3VlQXNI
VE1MKCkKQEAgLTEwMSw2ICsxNDIsMTYwIEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRJc0FjdGl2
ZShib29sIGFjdGl2ZSkKICAgICBtX2lzQWN0aXZlID0gYWN0aXZlOwogfQogCit2b2lkIFRleHRU
cmFja0N1ZTo6cGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIC8vIDQu
OC4xMC4xMy4zIFBhcnNlIHRoZSBXZWJWVFQgc2V0dGluZ3MuCisgICAgLy8gMSAtIEluaXRpYWwg
c2V0dXAuCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIHdoaWxlIChwb3NpdGlvbiA8
IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIDItNCBTZXR0aW5ncyAtIGdldCB0aGUgbmV4
dCBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nIGEgc2V0dGluZ3MuCisgICAgICAgIGNoYXIgc2V0dGlu
ZyA9IGlucHV0W3Bvc2l0aW9uKytdOworICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVu
Z3RoKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gNS03IC0gSWYgdGhlIGNo
YXJhY3RlciBhdCBwb3NpdGlvbiBpcyBub3QgJzonLCBzZXQgc2V0dGluZyB0byBlbXB0eSBzdHJp
bmcuCisgICAgICAgIGlmIChpbnB1dFtwb3NpdGlvbisrXSAhPSAnOicpCisgICAgICAgICAgICBz
ZXR0aW5nID0gJ1wwJzsKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIDggLSBHYXRoZXIgc2V0dGluZ3MgYmFz
ZWQgb24gdmFsdWUgb2Ygc2V0dGluZy4KKyAgICAgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAg
ICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0zIC0gQ29sbGVj
dCB0aGUgbmV4dCB3b3JkIGFuZCBzZXQgdGhlIHdyaXRpbmcgZGlyZWN0aW9uIGFjY29yZGluZ2x5
LgorICAgICAgICAgICAgU3RyaW5nIHdyaXRpbmdEaXJlY3Rpb24gPSBXZWJWVFRQYXJzZXI6OmNv
bGxlY3RXb3JkKGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJl
Y3Rpb24gPT0gInZlcnRpY2FsIikKKyAgICAgICAgICAgICAgICBtX3dyaXRpbmdEaXJlY3Rpb24g
PSBWZXJ0aWNhbEdyb3dpbmdMZWZ0OworICAgICAgICAgICAgZWxzZSBpZiAod3JpdGluZ0RpcmVj
dGlvbiA9PSAidmVydGljYWwtbHIiKQorICAgICAgICAgICAgICAgIG1fd3JpdGluZ0RpcmVjdGlv
biA9IFZlcnRpY2FsR3Jvd2luZ1JpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0y
IC0gQ29sbGVjdCBjaGFycyB0aGF0IGFyZSBlaXRoZXIgJy0nLCAnJScsIG9yIGEgZGlnaXQuCisg
ICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGxpbmVQb3NpdGlvbkJ1aWxkZXI7CisgICAgICAgICAg
ICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiAoaW5wdXRbcG9zaXRpb25dID09
ICctJyB8fCBpbnB1dFtwb3NpdGlvbl0gPT0gJyUnIHx8IGlzQVNDSUlEaWdpdChpbnB1dFtwb3Np
dGlvbl0pKSkKKyAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25CdWlsZGVyLmFwcGVuZChpbnB1
dFtwb3NpdGlvbisrXSk7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgo
KSAmJiAhV2ViVlRUUGFyc2VyOjppc0FTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAg
ICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgU3RyaW5nIGxpbmVQb3NpdGlvbiA9
IGxpbmVQb3NpdGlvbkJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgICAgICAgICAgLy8gMy01IC0g
SWYgdGhlcmUgaXMgbm90IGF0IGxlYXN0IG9uZSBkaWdpdCBjaGFyYWN0ZXIsCisgICAgICAgICAg
ICAvLyAgICAgICBhICctJyBvY2N1cnMgYW55d2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJvbnQsIG9y
CisgICAgICAgICAgICAvLyAgICAgICBhICclJyBvY2N1cnMgYW55d2hlcmUgb3RoZXIgdGhhbiB0
aGUgZW5kLCB0aGVuCisgICAgICAgICAgICAvLyAgICAgICBpZ25vcmUgdGhpcyBzZXR0aW5nIGFu
ZCBrZWVwIGxvb2tpbmcuCisgICAgICAgICAgICBpZiAobGluZVBvc2l0aW9uLmZpbmQoJy0nLCAx
KSAhPSBub3RGb3VuZCB8fCBsaW5lUG9zaXRpb24ucmV2ZXJzZUZpbmQoIiUiLCBsaW5lUG9zaXRp
b24ubGVuZ3RoKCkgLSAyKSAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgLy8gNiAtIElmIHRoZSBmaXJzdCBjaGFyIGlzIGEgJy0nIGFuZCB0aGUgbGFz
dCBjaGFyIGlzIGEgJyUnLCBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlm
IChsaW5lUG9zaXRpb25bMF0gPT0gJy0nICYmIGxpbmVQb3NpdGlvbltsaW5lUG9zaXRpb24ubGVu
Z3RoKCkgLSAxXSA9PSAnJScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IC8vIDcgLSBJbnRlcnByZXQgYXMgbnVtYmVyICh0b0ludCBpZ25vcmVzIHRyYWlsaW5nIG5vbi1k
aWdpdCBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgLy8gICAgIHN1Y2ggYXMgYSBwb3NzaWJsZSAn
JScpLgorICAgICAgICAgICAgYm9vbCB2YWxpZE51bWJlcjsKKyAgICAgICAgICAgIGludCBudW1i
ZXIgPSBsaW5lUG9zaXRpb24udG9JbnQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICgh
dmFsaWROdW1iZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIDgg
LSBJZiB0aGUgbGFzdCBjaGFyIGlzIGEgJyUnIGFuZCB0aGUgdmFsdWUgaXMgbm90IGJldHdlZW4g
MCBhbmQgMTAwLCBpZ25vcmUgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgIGlmIChsaW5l
UG9zaXRpb25bbGluZVBvc2l0aW9uLmxlbmd0aCgpIC0gMV0gPT0gJyUnKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVyID4gMTAwKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIDEwIC0gSWYgJyUnIHRoZW4gc2V0IHNuYXAt
dG8tbGluZXMgZmxhZyB0byBmYWxzZS4KKyAgICAgICAgICAgICAgICBtX3NuYXBUb0xpbmVzID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIDkgLSBTZXQgY3VlIGxpbmUg
cG9zaXRpb24gdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1fbGluZVBvc2l0aW9u
ID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1QnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0yIC0gQ29sbGVjdCBjaGFy
YWN0ZXJzIHRoYXQgYXJlIGRpZ2l0cy4KKyAgICAgICAgICAgIFN0cmluZyB0ZXh0UG9zaXRpb24g
PSBXZWJWVFRQYXJzZXI6OmNvbGxlY3REaWdpdHMoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAg
ICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIC8vIDMgLSBDaGFyYWN0ZXIgYXQgZW5kIG11c3QgYmUgJyUnLCBv
dGhlcndpc2UgaWdub3JlIGFuZCBrZWVwIGxvb2tpbmcuCisgICAgICAgICAgICBpZiAoaW5wdXRb
cG9zaXRpb24rK10gIT0gJyUnKQorICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworCisg
ICAgICAgICAgICAvLyA0LTYgLSBFbnN1cmUgbm8gb3RoZXIgY2hhcnMgaW4gdGhpcyBzZXR0aW5n
IGFuZCBzZXR0aW5nIGlzIG5vdCBlbXB0eS4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGlu
cHV0Lmxlbmd0aCgpICYmICFXZWJWVFRQYXJzZXI6OmlzQVNwYWNlKGlucHV0W3Bvc2l0aW9uXSkp
CisgICAgICAgICAgICAgICAgZ290byBPdGhlcndpc2U7CisgICAgICAgICAgICBpZiAodGV4dFBv
c2l0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Ly8gNy04IC0gSW50ZXJwcmV0IGFzIG51bWJlciBhbmQgbWFrZSBzdXJlIGl0IGlzIGJldHdlZW4g
MCBhbmQgMTAwCisgICAgICAgICAgICAvLyAodG9JbnQgaWdub3JlcyB0cmFpbGluZyBub24tZGln
aXQgY2hhcmFjdGVycywgc3VjaCBhcyBhIHBvc3NpYmxlICclJykuCisgICAgICAgICAgICBib29s
IHZhbGlkTnVtYmVyOworICAgICAgICAgICAgaW50IG51bWJlciA9IHRleHRQb3NpdGlvbi50b0lu
dCgmdmFsaWROdW1iZXIpOworICAgICAgICAgICAgaWYgKCF2YWxpZE51bWJlcikKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChudW1iZXIgPCAwIHx8IG51bWJlciA+IDEw
MCkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIDkgLSBTZXQgY3VlIHRl
eHQgcG9zaXRpb24gdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1fdGV4dFBvc2l0
aW9uID0gbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ1MnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gMS0yIC0gQ29sbGVjdCBj
aGFyYWN0ZXJzIHRoYXQgYXJlIGRpZ2l0cy4KKyAgICAgICAgICAgIFN0cmluZyBjdWVTaXplID0g
V2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAvLyAzIC0gQ2hhcmFjdGVyIGF0IGVuZCBtdXN0IGJlICclJywgb3Ro
ZXJ3aXNlIGlnbm9yZSBhbmQga2VlcCBsb29raW5nLgorICAgICAgICAgICAgaWYgKGlucHV0W3Bv
c2l0aW9uKytdICE9ICclJykKKyAgICAgICAgICAgICAgICBnb3RvIE90aGVyd2lzZTsKKworICAg
ICAgICAgICAgLy8gNC02IC0gRW5zdXJlIG5vIG90aGVyIGNoYXJzIGluIHRoaXMgc2V0dGluZyBh
bmQgc2V0dGluZyBpcyBub3QgZW1wdHkuCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBpbnB1
dC5sZW5ndGgoKSAmJiAhV2ViVlRUUGFyc2VyOjppc0FTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQor
ICAgICAgICAgICAgICAgIGdvdG8gT3RoZXJ3aXNlOworICAgICAgICAgICAgaWYgKGN1ZVNpemUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyA3LTgg
LSBJbnRlcnByZXQgYXMgbnVtYmVyIGFuZCBtYWtlIHN1cmUgaXQgaXMgYmV0d2VlbiAwIGFuZCAx
MDAuCisgICAgICAgICAgICBib29sIHZhbGlkTnVtYmVyOworICAgICAgICAgICAgaW50IG51bWJl
ciA9IGN1ZVNpemUudG9JbnQoJnZhbGlkTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRO
dW1iZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobnVtYmVyIDwg
MCB8fCBudW1iZXIgPiAxMDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IC8vIDkgLSBTZXQgY3VlIHNpemUgdG8gdGhlIG51bWJlciBmb3VuZC4KKyAgICAgICAgICAgIG1f
Y3VlU2l6ZSA9IG51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdBJzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIDEtNCAtIENvbGxl
Y3QgdGhlIG5leHQgd29yZCBhbmQgc2V0IHRoZSBjdWUgYWxpZ25tZW50IGFjY29yZGluZ2x5Lgor
ICAgICAgICAgICAgU3RyaW5nIGN1ZUFsaWdubWVudCA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdv
cmQoaW5wdXQsICZwb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoY3VlQWxpZ25tZW50ID09ICJz
dGFydCIpCisgICAgICAgICAgICAgICAgbV9jdWVBbGlnbm1lbnQgPSBTdGFydDsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGN1ZUFsaWdubWVudCA9PSAibWlkZGxlIikKKyAgICAgICAgICAgICAgICBt
X2N1ZUFsaWdubWVudCA9IE1pZGRsZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1ZUFsaWdubWVu
dCA9PSAiZW5kIikKKyAgICAgICAgICAgICAgICBtX2N1ZUFsaWdubWVudCA9IEVuZDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGlz
Y2FyZCBhbnkgcmVtYWluaW5nIHNwYWNlIGNoYXJhY3RlcnMgYmV0d2VlbiBvciBhZnRlciBzZXR0
aW5ncyAobm90IGluIHRoZSBzcGVjLCBidXQgd2UgdGhpbmsgaXQgc2hvdWxkIGJlKS4KKyAgICAg
ICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgV2ViVlRUUGFyc2VyOjppc0FT
cGFjZShpbnB1dFtwb3NpdGlvbl0pKQorICAgICAgICAgICAgcG9zaXRpb24rKzsKKyAgICAgICAg
Y29udGludWU7CisKK090aGVyd2lzZToKKyAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9m
IGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMgYW5kIGRpc2NhcmQgdGhl
bS4KKyAgICAgICAgV2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChpbnB1dCwgJnBvc2l0aW9uKTsK
KyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9UZXh0VHJhY2tDdWUuaAppbmRleCBjOWMxNTMzNTk5YmU0ZjExZDdjOWFiMzM1N2U3NTVhZTE1
YjI2ZGI4Li5hMmQxMjFjZWYxMDQ3MzA1MmQ3NTViZTA5NzBkNjgxZGRkOWRiZDFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmgKQEAgLTEsMjQgKzEsMjkgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCkBAIC00Myw2ICs0OCw5IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3Vl
KGlkLCBzdGFydCwgZW5kLCBjb250ZW50LCBzZXR0aW5ncywgcGF1c2VPbkV4aXQpKTsKICAgICB9
CisgICAgCisgICAgZW51bSBEaXJlY3Rpb24geyBIb3Jpem9udGFsLCBWZXJ0aWNhbEdyb3dpbmdM
ZWZ0LCBWZXJ0aWNhbEdyb3dpbmdSaWdodCB9OworICAgIGVudW0gQWxpZ25tZW50IHsgU3RhcnQs
IE1pZGRsZSwgRW5kIH07CiAKICAgICB2aXJ0dWFsIH5UZXh0VHJhY2tDdWUoKTsKIApAQCAtNTMs
NiArNjEsMTMgQEAgcHVibGljOgogICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdDsKICAgICBk
b3VibGUgZW5kVGltZSgpIGNvbnN0OwogICAgIGJvb2wgcGF1c2VPbkV4aXQoKSBjb25zdDsKKyAg
ICAKKyAgICBTdHJpbmcgZGlyZWN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBzbmFwVG9MaW5lcygp
IGNvbnN0IHsgcmV0dXJuIG1fc25hcFRvTGluZXM7IH0KKyAgICBpbnQgbGluZVBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lUG9zaXRpb247IH0KKyAgICBpbnQgdGV4dFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0UG9zaXRpb247IH0KKyAgICBpbnQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VlU2l6ZTsgfQorICAgIFN0cmluZyBhbGlnbm1lbnQoKSBjb25zdDsKIAogICAg
IFN0cmluZyBnZXRDdWVBc1NvdXJjZSgpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZ2V0Q3VlQXNIVE1MKCk7CkBAIC02MywxNCArNzgsMjIgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBUZXh0VHJhY2tDdWUoY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUg
ZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wg
cGF1c2VPbkV4aXQpOwogCisgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYpOwor
ICAgIAogICAgIFRleHRUcmFjayogbV90cmFjazsKICAgICAKICAgICBTdHJpbmcgbV9pZDsKICAg
ICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgZG91YmxlIG1fZW5kVGltZTsKICAgICBTdHJpbmcg
bV9jb250ZW50OwotICAgIFN0cmluZyBtX3NldHRpbmdzOwogICAgIGJvb2wgbV9wYXVzZU9uRXhp
dDsKKyAgICBEaXJlY3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOworICAgIGJvb2wgbV9zbmFwVG9M
aW5lczsKKyAgICBpbnQgbV9saW5lUG9zaXRpb247CisgICAgaW50IG1fdGV4dFBvc2l0aW9uOwor
ICAgIGludCBtX2N1ZVNpemU7CisgICAgQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50OworCiAgICAg
Ym9vbCBtX2lzQWN0aXZlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5jcHAKaW5kZXggM2IzNTNlN2M4YzM1ZGVmMjM1NDg3ZmI5Yjc2MmEyOWFkNDA3NWEx
Ni4uNGE2ODY5YmE5ZGI0NzFjNDY0ZmM0MGRiNDBjODIxMGNlOTY0ZDIzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiQ3VlUGFyc2VyLmgiCiAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCwxNSArNzEsMjAgQEAgYm9vbCBDdWVQYXJz
ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyAvKmlk
ZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIEN1ZVBhcnNlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogQ3JlYXRlIG1f
cHJpdmF0ZSBiYXNlZCBvbiBNSU1FIHR5cGUuCi0gICAgbV9jbGllbnQtPnRyYWNrTG9hZFN0YXJ0
ZWQoKTsKKyAgICBpZiAocmVzcG9uc2UubWltZVR5cGUoKSA9PSAidGV4dC92dHQiKQorICAgICAg
ICBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKIH0KIAotdm9pZCBDdWVQYXJzZXI6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCit2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2
ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg5
Myk6IFNlbmQgZGF0YSBhbG9uZyB0byBtX3ByaXZhdGUgcGFyc2VyIHRvIGJlIHBhcnNlZC4KKyAg
ICAvLyBJZiBtaW1lIHR5cGUgZnJvbSBkaWRSZWNlaXZlUmVzcG9uc2Ugd2FzIG5vdCBpbmZvcm1h
dGl2ZSwgc25pZmYgZmlsZSBjb250ZW50LgorICAgIGlmICghbV9wcml2YXRlICYmIFdlYlZUVFBh
cnNlcjo6aGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcihkYXRhLCBsZW5ndGgpKQorICAgICAgICBj
cmVhdGVXZWJWVFRQYXJzZXIoKTsKKworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJp
dmF0ZS0+cGFyc2VCeXRlcyhkYXRhLCBsZW5ndGgpOwogfQogCiB2b2lkIEN1ZVBhcnNlcjo6ZGlk
RmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQpAQCAtOTYsNiArMTAyLDE5IEBAIHZvaWQgQ3Vl
UGFyc2VyOjpmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKQog
ICAgIC8vIEZJWE1FKDYyODkzKTogSW1wbGVtZW50LgogfQogCit2b2lkIEN1ZVBhcnNlcjo6bmV3
Q3Vlc1BhcnNlZCgpCit7CisgICAgbV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQoKTsKK30KKwordm9p
ZCBDdWVQYXJzZXI6OmNyZWF0ZVdlYlZUVFBhcnNlcigpCit7CisgICAgaWYgKCFtX3ByaXZhdGUp
IHsKKyAgICAgICAgbV9wcml2YXRlID0gV2ViVlRUUGFyc2VyOjpjcmVhdGUodGhpcyk7CisgICAg
ICAgIG1fY2xpZW50LT50cmFja0xvYWRTdGFydGVkKCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuaAppbmRleCA3NDRjYzMyMjc4YzVmNGNmOWU0ZjgyY2E3YzUzYWIxN2JkODlkOGNmLi43
YzZjNjMxNzRlNTc4MzY5NjA2ZWRhMjVmNDhhZDU0OThkMDg1ZjA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaApAQCAtMzMsOSArMzMsOSBAQAogCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogCi0jaW5jbHVkZSAiQ3VlUGFyc2VyUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tMb2Fk
Q29tcGxldGVkKCkgPSAwOwogfTsKIAotY2xhc3MgQ3VlUGFyc2VyIDogcHVibGljIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQgeworY2xhc3MgQ3VlUGFyc2VyIDogcHVibGljIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQsIEN1ZVBhcnNlclByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIEN1ZVBhcnNl
cigpOwogICAgIHZpcnR1YWwgfkN1ZVBhcnNlcigpOwpAQCAtNjcsOCArNjcsMTEgQEAgcHVibGlj
OgogICAgIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBmZXRj
aFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKTsKKyAgICB2b2lkIG5l
d0N1ZXNQYXJzZWQoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZVdlYlZUVFBhcnNlcigp
OworIAogICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKICAgICBPd25QdHI8
Q3VlUGFyc2VyUHJpdmF0ZUludGVyZmFjZT4gbV9wcml2YXRlOwogICAgIEN1ZVBhcnNlckNsaWVu
dCogbV9jbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJz
ZXJQcml2YXRlLmgKaW5kZXggYmMzZTRmYmMwOTUxYmUzNGNiZjAxMDcxZWQyODY5YTk5YTJmODMw
ZS4uMzY0ZjQ3NzM2N2FkZDY3NmFhMjM4OGVmZTI3OTk5ZGFiMDk3YmY2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaApAQCAtNTEsMTAg
KzUxLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DdWVQYXJzZXJQcml2YXRlSW50ZXJmYWNl
KCkgeyB9CiAKICAgICAvLyBJbnB1dCBkYXRhIHRvIHRoZSBwYXJzZXIgdG8gcGFyc2UuCi0gICAg
dmlydHVhbCB2b2lkIHBhcnNlQnl0ZXMoY29uc3QgY2hhciosIGludCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkgPSAwOwogCiAgICAgLy8g
VHJhbnNmZXJzIG93bmVyc2hpcCBvZiBsYXN0IHBhcnNlZCBjdWVzIHRvIGNhbGxlci4KLSAgICB2
aXJ0dWFsIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxQYXNzUmVmUHRyPFRleHRUcmFja0N1
ZT4gPiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiA+JikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ3VlUGFyc2VyUHJp
dmF0ZUludGVyZmFjZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dl
YlZUVFBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI2NDQzNDYyZGMzNGE3Y2FmYjYxMjM3OGI2NjBm
NjhiNDk3ZTJjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL1dlYlZUVFBhcnNlci5jcHAKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgi
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitib29sIFdlYlZUVFBhcnNlcjo6aGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcihjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQSBXZWJWVFQgZmlsZSBpZGVu
dGlmaWVyIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsIEJPTSBjaGFyYWN0ZXIsCisgICAgLy8gdGhl
IHN0cmluZyAiV0VCVlRUIiBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBzcGFjZSBvciB0YWIgY2hh
cmFjdGVyLAorICAgIC8vIGFuZCBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90
IGxpbmUgdGVybWluYXRvcnMgLi4uCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIGlm
IChsZW5ndGggPj0gMyAmJiBkYXRhWzBdID09ICdceEVGJyAmJiBkYXRhWzFdID09ICdceEJCJyAm
JiBkYXRhWzJdID09ICdceEJGJykKKyAgICAgICAgcG9zaXRpb24gKz0gMzsKKyAgICBTdHJpbmcg
bGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRhLCBsZW5ndGgsICZwb3NpdGlvbik7CisgICAgICAg
IAorICAgIGlmIChsaW5lLmxlbmd0aCgpIDwgNikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChsaW5lLmxlbmd0aCgpID09IDYgJiYgbGluZSAhPSAiV0VCVlRUIikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gSWYgbGluZSBpcyBtb3JlIHRoYW4gc2l4IGNoYXJhY3RlcnMK
KyAgICAvLyBidXQgdGhlIGZpcnN0IHNpeCBjaGFyYWN0ZXJzIGRvIG5vdCBleGFjdGx5IGVxdWFs
ICJXRUJWVFQiLAorICAgIC8vIG9yIHRoZSBzZXZlbnRoIGNoYXJhY3RlciBpcyBuZWl0aGVyIGEg
c3BhY2Ugbm9yIGEgdGFiIGNoYXJhY3RlciwgdGhlbiBhYm9ydC4KKyAgICBpZiAobGluZS5sZW5n
dGgoKSA+IDYgJiYgKGxpbmUuc3Vic3RyaW5nKDAsIDYpICE9ICJXRUJWVFQiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCAobGluZVs2XSAhPSAnICcgJiYgbGluZVs2XSAhPSAnXHQn
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5n
IFdlYlZUVFBhcnNlcjo6Y29sbGVjdERpZ2l0cyhjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25l
ZCogcG9zaXRpb24pCit7CisgICAgU3RyaW5nQnVpbGRlciBkaWdpdHM7CisgICAgd2hpbGUgKCpw
b3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmIGlzQVNDSUlEaWdpdChpbnB1dFsqcG9zaXRpb25d
KSkKKyAgICAgICAgZGlnaXRzLmFwcGVuZChpbnB1dFsoKnBvc2l0aW9uKSsrXSk7CisgICAgcmV0
dXJuIGRpZ2l0cy50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViVlRUUGFyc2VyOjpjb2xsZWN0
V29yZChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCogcG9zaXRpb24pCit7CisgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmc7CisgICAgd2hpbGUgKCpwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgp
ICYmICFpc0FTcGFjZShpbnB1dFsqcG9zaXRpb25dKSkKKyAgICAgICAgc3RyaW5nLmFwcGVuZChp
bnB1dFsoKnBvc2l0aW9uKSsrXSk7CisgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOworfQor
CitXZWJWVFRQYXJzZXI6OldlYlZUVFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50KiBjbGll
bnQpCisgICAgOiBtX3N0YXRlKEluaXRpYWwpCit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9
CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0
VHJhY2tDdWU+ID4mIG91dHB1dEN1ZXMpCit7CisgICAgb3V0cHV0Q3VlcyA9IG1fY3VlbGlzdDsK
KyAgICBtX2N1ZWxpc3QuY2xlYXIoKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnBhcnNlQnl0
ZXMoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIDQuOC4xMC4x
My4zIFdIQVRXRyBXZWJWVFQgUGFyc2VyIGFsZ29yaXRobS4KKyAgICAvLyAxLTMgLSBJbml0aWFs
IHNldHVwLgorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKworICAgIHdoaWxlIChwb3NpdGlv
biA8IGxlbmd0aCkgeworICAgICAgICBTdHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRh
LCBsZW5ndGgsICZwb3NpdGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fc3RhdGUp
IHsKKyAgICAgICAgY2FzZSBJbml0aWFsOgorICAgICAgICAgICAgLy8gNC0xMiAtIENvbGxlY3Qg
dGhlIGZpcnN0IGxpbmUgYW5kIGNoZWNrIGZvciAiV0VCVlRUIi4KKyAgICAgICAgICAgIGlmICgh
aGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcihkYXRhLCBsZW5ndGgpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBIZWFkZXI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIGNhc2UgSGVhZGVyOgorICAgICAgICAgICAgLy8gMTMtMTgg
LSBBbGxvdyBhIGhlYWRlciAoY29tbWVudCBhcmVhKSB1bmRlciB0aGUgV0VCVlRUIGxpbmUuCisg
ICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IElkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIElkOgorICAg
ICAgICAgICAgLy8gMTktMjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMs
IHRoZW4gaW5pdGlhbGl6ZSBuZXcgY3VlIHZhbHVlcy4KKyAgICAgICAgICAgIGlmIChsaW5lLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlc2V0Q3VlVmFs
dWVzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIDMwLTM5IC0gQ2hlY2sgaWYgdGhp
cyBsaW5lIGNvbnRhaW5zIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb3IgdGltaW5nIGRhdGEuCisg
ICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZUlkKGxpbmUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICBjYXNlIFRpbWluZ3NBbmRTZXR0aW5nczoKKyAgICAgICAg
ICAgIC8vIDQwIC0gQ29sbGVjdCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3MuCisgICAgICAgICAg
ICBtX3N0YXRlID0gY29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhsaW5lKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBDdWVUZXh0OgorICAgICAgICAgICAgLy8g
NDEtNTMgLSBDb2xsZWN0IHRoZSBjdWUgdGV4dCwgY3JlYXRlIGEgY3VlLCBhbmQgYWRkIGl0IHRv
IHRoZSBvdXRwdXQuCisgICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZVRleHQobGluZSwg
bGVuZ3RoLCBwb3NpdGlvbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJh
ZEN1ZToKKyAgICAgICAgICAgIC8vIDU0LTYyIC0gQ29sbGVjdCBhbmQgZGlzY2FyZCB0aGUgcmVt
YWluaW5nIGN1ZS4KKyAgICAgICAgICAgIG1fc3RhdGUgPSBpZ25vcmVCYWRDdWUobGluZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViVlRUUGFyc2VyOjpQ
YXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdEN1ZUlkKGNvbnN0IFN0cmluZyYgbGluZSkK
K3sKKyAgICBpZiAobGluZS5jb250YWlucygiLS0+IikpCisgICAgICAgIHJldHVybiBjb2xsZWN0
VGltaW5nc0FuZFNldHRpbmdzKGxpbmUpOworICAgIG1fY3VycmVudElkID0gbGluZTsKKyAgICBy
ZXR1cm4gVGltaW5nc0FuZFNldHRpbmdzOworfQorCitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUg
V2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYgbGlu
ZSkKK3sKKyAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IFdlYlZUVCBjdWUgdGltaW5ncyBhbmQg
c2V0dGluZ3MuCisgICAgLy8gMS0zIC0gTGV0IGlucHV0IGJlIHRoZSBzdHJpbmcgYmVpbmcgcGFy
c2VkIGFuZCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgaW50byBpbnB1dAorICAgIHVuc2lnbmVkIHBv
c2l0aW9uID0gMDsKKyAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAg
Ly8gNC01IC0gQ29sbGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAuIElmIHRoYXQgZmFpbHMsIHRoZW4g
YWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGxldCBjdWUncyB0ZXh0IHRyYWNr
IGN1ZSBzdGFydCB0aW1lIGJlIHRoZSBjb2xsZWN0ZWQgdGltZS4KKyAgICBtX2N1cnJlbnRTdGFy
dFRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKGxpbmUsICZwb3NpdGlvbik7CisgICAgaWYgKG1fY3Vy
cmVudFN0YXJ0VGltZSA9PSBtYWxmb3JtZWRUaW1lKQorICAgICAgICByZXR1cm4gQmFkQ3VlOwor
ICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsICZwb3NpdGlvbik7CisKKyAgICAvLyA2LTkgLSBJZiB0
aGUgbmV4dCB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBub3QgIi0tPiIsIGFib3J0IGFuZCByZXR1cm4g
ZmFpbHVyZS4KKyAgICBpZiAobGluZS5maW5kKCItLT4iLCBwb3NpdGlvbikgPT0gbm90Rm91bmQp
CisgICAgICAgIHJldHVybiBCYWRDdWU7CisgICAgcG9zaXRpb24gKz0gMzsKKyAgICBza2lwV2hp
dGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAgLy8gMTAtMTEgLSBDb2xsZWN0IGEgV2Vi
VlRUIHRpbWVzdGFtcC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1
cmUuIE90aGVyd2lzZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIGVuZCB0aW1lIGJlIHRoZSBj
b2xsZWN0ZWQgdGltZS4KKyAgICBtX2N1cnJlbnRFbmRUaW1lID0gY29sbGVjdFRpbWVTdGFtcChs
aW5lLCAmcG9zaXRpb24pOworICAgIGlmIChtX2N1cnJlbnRFbmRUaW1lID09IG1hbGZvcm1lZFRp
bWUpCisgICAgICAgIHJldHVybiBCYWRDdWU7CisgICAgc2tpcFdoaXRlU3BhY2UobGluZSwgJnBv
c2l0aW9uKTsKKworICAgIC8vIDEyIC0gUGFyc2UgdGhlIFdlYlZUVCBzZXR0aW5ncyBmb3IgdGhl
IGN1ZSAoY29uZHVjdGVkIGluIFRleHRUcmFja0N1ZSkuCisgICAgbV9jdXJyZW50U2V0dGluZ3Mg
PSBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbiwgbGluZS5sZW5ndGgoKS0xKTsKKyAgICByZXR1cm4g
Q3VlVGV4dDsKK30KKworV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29s
bGVjdEN1ZVRleHQoY29uc3QgU3RyaW5nJiBsaW5lLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHBvc2l0aW9uKQoreworICAgIGlmIChsaW5lLmlzRW1wdHkoKSkgeworICAgICAgICBwcm9jZXNz
Q3VlVGV4dCgpOworICAgICAgICByZXR1cm4gSWQ7CisgICAgfQorICAgIGlmICghbV9jdXJyZW50
Q29udGVudC5pc0VtcHR5KCkpCisgICAgICAgIG1fY3VycmVudENvbnRlbnQuYXBwZW5kKCJcbiIp
OworICAgIG1fY3VycmVudENvbnRlbnQuYXBwZW5kKGxpbmUpOworCisgICAgaWYgKHBvc2l0aW9u
ID49IGxlbmd0aCkKKyAgICAgICAgcHJvY2Vzc0N1ZVRleHQoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICByZXR1cm4gQ3VlVGV4dDsKK30KKworV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZU
VFBhcnNlcjo6aWdub3JlQmFkQ3VlKGNvbnN0IFN0cmluZyYgbGluZSkKK3sKKyAgICBpZiAoIWxp
bmUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQmFkQ3VlOworICAgIHJldHVybiBJZDsKK30K
Kwordm9pZCBXZWJWVFRQYXJzZXI6OnByb2Nlc3NDdWVUZXh0KCkKK3sKKyAgICAvLyA1MSAtIEN1
ZSB0ZXh0IHByb2Nlc3NpbmcgYmFzZWQgb24gV2ViVlRUIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMg
YW5kIFdlYlZUVCBjdWUgdGV4dCBET00gY29uc3RydWN0aW9uIHJ1bGVzLgorICAgIC8vIEZJWE1F
KDY0MTMyKTogUHJvY2VzcyB0aGUgY3VlIHRleHQgYXMgcGVyIHRoZSBjdWUgdGV4dCBwYXJzaW5n
IHJ1bGVzLiAKKyAgICAvLyAgICAgU291cmNlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaWZyYW1lLWVsZW1lbnQuaHRtbCN3
ZWJ2dHQtY3VlLXRleHQtcGFyc2luZy1ydWxlcworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1
ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKG1fY3VycmVudElkLCBtX2N1cnJlbnRTdGFydFRpbWUs
IG1fY3VycmVudEVuZFRpbWUsIG1fY3VycmVudENvbnRlbnQudG9TdHJpbmcoKSwgbV9jdXJyZW50
U2V0dGluZ3MsIGZhbHNlKTsKKyAgICBtX2N1ZWxpc3QuYXBwZW5kKGN1ZSk7CisgICAgbV9jbGll
bnQtPm5ld0N1ZXNQYXJzZWQoKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnJlc2V0Q3VlVmFs
dWVzKCkKK3sKKyAgICBtX2N1cnJlbnRJZCA9IGVtcHR5U3RyaW5nKCk7CisgICAgbV9jdXJyZW50
U2V0dGluZ3MgPSBlbXB0eVN0cmluZygpOworICAgIG1fY3VycmVudFN0YXJ0VGltZSA9IDA7Cisg
ICAgbV9jdXJyZW50RW5kVGltZSA9IDA7CisgICAgbV9jdXJyZW50Q29udGVudC5jbGVhcigpOwor
fQorCitkb3VibGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKGNvbnN0IFN0cmluZyYg
bGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAgIC8vIDQuOC4xMC4xMy4zIENvbGxlY3Qg
YSBXZWJWVFQgdGltZXN0YW1wLgorICAgIC8vIDEtNCAtIEluaXRpYWwgY2hlY2tzLCBsZXQgbW9z
dCBzaWduaWZpY2FudCB1bml0cyBiZSBtaW51dGVzLgorICAgIGVudW0gTW9kZSB7IG1pbnV0ZXMs
IGhvdXJzIH07CisgICAgTW9kZSBtb2RlID0gbWludXRlczsKKyAgICBpZiAoKnBvc2l0aW9uID49
IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdpdChsaW5lWypwb3NpdGlvbl0pKQorICAgICAg
ICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKworICAgIC8vIDUtNiAtIENvbGxlY3QgYSBzZXF1ZW5j
ZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIDAtOS4KKyAgICBTdHJpbmcgZGlnaXRzMSA9IGNvbGxl
Y3REaWdpdHMobGluZSwgcG9zaXRpb24pOworICAgIGludCB2YWx1ZTEgPSBkaWdpdHMxLnRvSW50
KCk7CisKKyAgICAvLyA3IC0gSWYgbm90IDIgY2hhcmFjdGVycyBvciB2YWx1ZSBpcyBncmVhdGVy
IHRoYW4gNTksIGludGVycHJldCBhcyBob3Vycy4KKyAgICBpZiAoZGlnaXRzMS5sZW5ndGgoKSAh
PSAyIHx8IHZhbHVlMSA+IDU5KQorICAgICAgICBtb2RlID0gaG91cnM7CisKKyAgICAvLyA4LTEy
IC0gQ29sbGVjdCB0aGUgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJzonIChtdXN0IGJlIDIg
Y2hhcnMpLgorICAgIGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lWygqcG9z
aXRpb24pKytdICE9ICc6JykKKyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYg
KCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8ICFpc0FTQ0lJRGlnaXQobGluZVsoKnBvc2l0
aW9uKV0pKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBTdHJpbmcgZGlnaXRz
MiA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9zaXRpb24pOworICAgIGludCB2YWx1ZTIgPSBkaWdp
dHMyLnRvSW50KCk7CisgICAgaWYgKGRpZ2l0czIubGVuZ3RoKCkgIT0gMikgCisgICAgICAgIHJl
dHVybiBtYWxmb3JtZWRUaW1lOworCisgICAgLy8gMTMgLSBEZXRlY3Qgd2hldGhlciB0aGlzIHRp
bWVzdGFtcCBpbmNsdWRlcyBob3Vycy4KKyAgICBpbnQgdmFsdWUzOworICAgIGlmIChtb2RlID09
IGhvdXJzIHx8ICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYmIGxpbmVbKnBvc2l0aW9uXSA9
PSAnOicpKSB7CisgICAgICAgIGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5l
WygqcG9zaXRpb24pKytdICE9ICc6JykKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1l
OworICAgICAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdp
dChsaW5lWypwb3NpdGlvbl0pKQorICAgICAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Cisg
ICAgICAgIFN0cmluZyBkaWdpdHMzID0gY29sbGVjdERpZ2l0cyhsaW5lLCBwb3NpdGlvbik7Cisg
ICAgICAgIGlmIChkaWdpdHMzLmxlbmd0aCgpICE9IDIpCisgICAgICAgICAgICByZXR1cm4gbWFs
Zm9ybWVkVGltZTsKKyAgICAgICAgdmFsdWUzID0gZGlnaXRzMy50b0ludCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHZhbHVlMyA9IHZhbHVlMjsKKyAgICAgICAgdmFsdWUyID0gdmFsdWUxOwor
ICAgICAgICB2YWx1ZTEgPSAwOworICAgIH0KKworICAgIC8vIDE0LTE5IC0gQ29sbGVjdCBuZXh0
IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAnLicgKG11c3QgYmUgMyBjaGFycykuCisgICAgaWYgKCpw
b3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbKCpwb3NpdGlvbikrK10gIT0gJy4nKQor
ICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUu
bGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdpdChsaW5lWypwb3NpdGlvbl0pKQorICAgICAgICByZXR1
cm4gbWFsZm9ybWVkVGltZTsKKyAgICBTdHJpbmcgZGlnaXRzNCA9IGNvbGxlY3REaWdpdHMobGlu
ZSwgcG9zaXRpb24pOworICAgIGlmIChkaWdpdHM0Lmxlbmd0aCgpICE9IDMpCisgICAgICAgIHJl
dHVybiBtYWxmb3JtZWRUaW1lOworICAgIGludCB2YWx1ZTQgPSBkaWdpdHM0LnRvSW50KCk7Cisg
ICAgaWYgKHZhbHVlMiA+IDU5IHx8IHZhbHVlMyA+IDU5KQorICAgICAgICByZXR1cm4gbWFsZm9y
bWVkVGltZTsKKworICAgIC8vIDIwLTIxIC0gQ2FsY3VsYXRlIHJlc3VsdC4KKyAgICByZXR1cm4g
KHZhbHVlMSAqIHNlY29uZHNQZXJIb3VyKSArICh2YWx1ZTIgKiBzZWNvbmRzUGVyTWludXRlKSAr
IHZhbHVlMyArICgoZG91YmxlKXZhbHVlNCAvIDEwMDApOworfQorCit2b2lkIFdlYlZUVFBhcnNl
cjo6c2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiBsaW5lLCB1bnNpZ25lZCogcG9zaXRpb24p
Cit7CisgICAgd2hpbGUgKCpwb3NpdGlvbiA8IGxpbmUubGVuZ3RoKCkgJiYgaXNBU3BhY2UobGlu
ZVsqcG9zaXRpb25dKSkKKyAgICAgICAgKCpwb3NpdGlvbikrKzsKK30KKwordm9pZCBXZWJWVFRQ
YXJzZXI6OnNraXBMaW5lVGVybWluYXRvcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICBpZiAoKnBvc2l0aW9uID49IGxlbmd0aCkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChkYXRhWypwb3NpdGlvbl0gPT0gJ1xyJykKKyAgICAg
ICAgKCpwb3NpdGlvbikrKzsKKyAgICBpZiAoKnBvc2l0aW9uID49IGxlbmd0aCkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChkYXRhWypwb3NpdGlvbl0gPT0gJ1xuJykKKyAgICAgICAgKCpwb3Np
dGlvbikrKzsKK30KKworU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29sbGVjdE5leHRMaW5lKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAg
IHVuc2lnbmVkIG9sZFBvc2l0aW9uID0gKnBvc2l0aW9uOworICAgIHdoaWxlICgqcG9zaXRpb24g
PCBsZW5ndGggJiYgZGF0YVsqcG9zaXRpb25dICE9ICdccicgJiYgZGF0YVsqcG9zaXRpb25dICE9
ICdcbicpCisgICAgICAgICgqcG9zaXRpb24pKys7CisgICAgU3RyaW5nIGxpbmUgPSBTdHJpbmc6
OmZyb21VVEY4KGRhdGEgKyBvbGRQb3NpdGlvbiwgKnBvc2l0aW9uIC0gb2xkUG9zaXRpb24pOwor
ICAgIHNraXBMaW5lVGVybWluYXRvcihkYXRhLCBsZW5ndGgsIHBvc2l0aW9uKTsKKyAgICByZXR1
cm4gbGluZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJh
Y2svV2ViVlRUUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY5MzUyYzBkODc5MjIzNDM0MDRlNmYxZTA5
N2I1OTA4M2FiOTVkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL1dlYlZUVFBhcnNlci5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVlRUUGFy
c2VyX2gKKyNkZWZpbmUgV2ViVlRUUGFyc2VyX2gKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KworI2luY2x1ZGUgIkN1ZVBhcnNlclByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgaW50IHNlY29uZHNQZXJIb3VyID0gMzYwMDsKK3N0YXRp
YyBjb25zdCBpbnQgc2Vjb25kc1Blck1pbnV0ZSA9IDYwOworc3RhdGljIGNvbnN0IGRvdWJsZSBt
YWxmb3JtZWRUaW1lID0gLTE7CisKK2NsYXNzIFdlYlZUVFBhcnNlciA6IHB1YmxpYyBDdWVQYXJz
ZXJQcml2YXRlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJWVFRQYXJzZXIo
KSB7IH0KKyAgICAKKyAgICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFsLCBIZWFkZXIsIElkLCBU
aW1pbmdzQW5kU2V0dGluZ3MsIEN1ZVRleHQsIEJhZEN1ZSB9OworCisgICAgc3RhdGljIFBhc3NP
d25QdHI8V2ViVlRUUGFyc2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJWVFRQYXJzZXIoY2xpZW50
KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGhhc1JlcXVpcmVkRmlsZUlkZW50aWZp
ZXIoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0FTcGFjZShjaGFyIGMpCisgICAgeworICAgICAgICAvLyBXZWJWVFQgc3BhY2Ug
Y2hhcmFjdGVycyBhcmUgVSswMDIwIFNQQUNFLCBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04g
KHRhYiksIFUrMDAwQSBMSU5FIEZFRUQgKExGKSwgVSswMDBDIEZPUk0gRkVFRCAoRkYpLCBhbmQg
VSswMDBEIENBUlJJQUdFIFJFVFVSTiAgICAoQ1IpLgorICAgICAgICByZXR1cm4gYyA9PSAnICcg
fHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcZicgfHwgYyA9PSAnXHInOworICAg
IH0KKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3REaWdpdHMoY29uc3QgU3RyaW5nJiwgdW5zaWdu
ZWQqKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RXb3JkKGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8
VGV4dFRyYWNrQ3VlPiA+Jik7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBhcnNlQnl0ZXMoY29u
c3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKworcHJvdGVjdGVkOgorICAgIFdlYlZU
VFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50Kik7CisgICAgCisgICAgUGFyc2VTdGF0ZSBt
X3N0YXRlOworCitwcml2YXRlOgorICAgIFBhcnNlU3RhdGUgY29sbGVjdEN1ZUlkKGNvbnN0IFN0
cmluZyYpOworICAgIFBhcnNlU3RhdGUgY29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25zdCBT
dHJpbmcmKTsKKyAgICBQYXJzZVN0YXRlIGNvbGxlY3RDdWVUZXh0KGNvbnN0IFN0cmluZyYsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQpOworICAgIFBhcnNlU3RhdGUgaWdub3JlQmFkQ3VlKGNv
bnN0IFN0cmluZyYpOworCisgICAgdm9pZCBwcm9jZXNzQ3VlVGV4dCgpOworICAgIHZvaWQgcmVz
ZXRDdWVWYWx1ZXMoKTsKKyAgICBkb3VibGUgY29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCopOworICAgIHZvaWQgc2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQqKTsKKyAgICBzdGF0aWMgdm9pZCBza2lwTGluZVRlcm1pbmF0b3IoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCopOworICAgIHN0YXRpYyBTdHJpbmcgY29s
bGVjdE5leHRMaW5lKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQq
KTsKKworICAgIFN0cmluZyBtX2N1cnJlbnRJZDsKKyAgICBkb3VibGUgbV9jdXJyZW50U3RhcnRU
aW1lOworICAgIGRvdWJsZSBtX2N1cnJlbnRFbmRUaW1lOworICAgIFN0cmluZ0J1aWxkZXIgbV9j
dXJyZW50Q29udGVudDsKKyAgICBTdHJpbmcgbV9jdXJyZW50U2V0dGluZ3M7CisKKyAgICBDdWVQ
YXJzZXJQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKworICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRy
YWNrQ3VlPiA+IG1fY3VlbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>