<?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>15119</bug_id>
          
          <creation_ts>2007-08-30 13:15:58 -0700</creation_ts>
          <short_desc>Non-UTF-8 query parameters not handled properly when not generated by the form code</short_desc>
          <delta_ts>2008-07-30 17:46:50 -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>WebCore Misc.</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brett Wilson (Google)">brettw</reporter>
          <assigned_to name="Brett Wilson (Google)">brettw</assigned_to>
          <cc>ap</cc>
    
    <cc>gavin.sharp</cc>
    
    <cc>ian</cc>
    
    <cc>julian.reschke</cc>
    
    <cc>mrowe</cc>
    
    <cc>webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1170</commentid>
    <comment_count>0</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2007-08-30 13:15:58 -0700</bug_when>
    <thetext>If I have a link on a page with query characters not ASCII, KURL will convert them to the encoding of the page. If this link contains characters not present in the page character set (it could have been generated by script) that character will be replaced with a &quot;?&quot; in the final URL.

Instead, it should do like the form encoder, which causes ICU to generate entity names. In addition, the non-numeric characters (&quot;&amp;#x&quot;) in these entity names should be escaped, but these characters should NOT be escaped when they were not generated by ICU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169</commentid>
    <comment_count>1</comment_count>
      <attachid>16166</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2007-08-30 13:37:10 -0700</bug_when>
    <thetext>Created attachment 16166
Test case

Here is an example that illustrates this problem. The page is in Big5, and script generates a URL that is not encodable in Big5.

Firefox, IE, and Safari all generate a query in the encoding of the page when possible. (In this case, you will see gibberish in the Google result page since Google expects UTF-8.)

When the character is not representable, Firefox falls back on UTF-8, which amusingly gives the &quot;correct&quot; answer for Google. IE and Safari both substitute a literal question mark for the invalid character.

The only right thing to do in this case would be to use the same logic as the form code does when you paste the character into a form field on such a page and submit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-08-30 22:39:15 -0700</bug_when>
    <thetext>&gt; Firefox, IE, and Safari all generate a query in the encoding of the page when
&gt; possible.

Firefox has URL encoding behavior configurable via its &quot;network.standard-url.encode-utf8&quot; about:config option. Searching b.m.o comments for this option name gives a good list of issues to consider when fixing this bug. Also see bug 7461.

Obviously, a question mark is not a good replacement for an un-encodable character.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68766</commentid>
    <comment_count>3</comment_count>
    <who name="Robert Blaut">webkit</who>
    <bug_when>2008-01-29 22:42:34 -0800</bug_when>
    <thetext>I&apos;m not sure but searching from test case shows me proper results so this bug is probably fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68769</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-01-30 00:06:20 -0800</bug_when>
    <thetext>I do not think anything has changed here: clicking on the first link still results is a search for &quot;?&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68771</commentid>
    <comment_count>5</comment_count>
    <who name="Robert Blaut">webkit</who>
    <bug_when>2008-01-30 00:11:13 -0800</bug_when>
    <thetext>So the test case is confusing :( It should contain clear message how to perform test, expected result and current result.
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69105</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-01 14:28:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/4306856&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72324</commentid>
    <comment_count>7</comment_count>
      <attachid>19443</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-02-28 23:10:09 -0800</bug_when>
    <thetext>Created attachment 19443
Patch with layout test

This adds an additional optional argument to the text encoding functions. This is required since the query may contain &quot;?&quot; and &quot;;&quot; that should not be escaped, yet the ones in the added entities should.

The form code does not need this flag. It builds the string up using unescaped entities. When doing a post they shouldn&apos;t be escaped. When doing a get with the parameters in the URL, all &quot;&amp;&quot;, &quot;;&quot; and &quot;#&quot; will be percent-escaped (since they shouldn&apos;t interfere with the regular parsing of the URL).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72351</commentid>
    <comment_count>8</comment_count>
      <attachid>19443</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-29 10:02:01 -0800</bug_when>
    <thetext>Comment on attachment 19443
Patch with layout test

Looks good.

It&apos;s too bad that there&apos;s so much repeated code in the various codecs. Is there some way to share more of the code? More helper functions in the base class, perhaps?

+// Invalid character handler when wriuting escaped entities for unrepresentable

Typo here: &quot;wriuting&quot;.

+        char number[32];
+        sprintf(number, &quot;%%26%%23%d%%3B&quot;, codePoint);

Security screening tools are going to complain about our use of sprintf. Lets use snprintf as we do in source files like String.cpp using the &lt;wtf/StringExtras.h&gt; header. I know the existing code was using sprintf, but lets not.

+        UChar outChar;
+        if ((outChar = getGbkEscape(codePoint))) {

If you&apos;re going to initialize the variable in the if statement, then please define it inside the if statement too. Then you won&apos;t need the double parentheses.

+            return;
+        } else {

Please don&apos;t use else after return.

+        // allowEntities will cause characters not encodable in the output
+        // character encoding to be escaped as in XML/HTML entities.
+        // For example, U+06DE will be &quot;&amp;#1758;&quot; (in octal). When unset, some
+        // replacement character will be unsed for unencodable characters.
+        //
+        // When escapeEntities is set, non-alphanumeric characters in the
+        // entity will be escaped using URL rules. In the above example, of
+        // &quot;&amp;#1758;&quot; it will generate &quot;%26%231758#3B&quot;. This flag has no effect
+        // when allowEntities is false.
+        CString encode(const UChar*, size_t length, bool allowEntities = false, bool escapeEntities = false) const;

I think that two booleans is an ugly way to pass the entity policy. How about an enum instead? Or maybe separate virtual  encode functions rather than a single function with a flag. Do we really need all three policies? 

Sorry to be so nitpicky, but I find the spacing in comments like this hard to read. If there are spaces between the paragraphs, but not between  the last paragraph and the function definition it makes it hard to read.

I&apos;m going to say review+, but I&apos;d prefer to see a new patch with the issues I mention above fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72424</commentid>
    <comment_count>9</comment_count>
      <attachid>19468</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-02-29 20:02:01 -0800</bug_when>
    <thetext>Created attachment 19468
Revised patch

&gt; It&apos;s too bad that there&apos;s so much repeated code in the various codecs. Is there
&gt; some way to share more of the code? More helper functions in the base class,
&gt; perhaps?

I added a static function in TextCodec to do character replacement. This consolidates all the printfs in one place. I would have made it protected, but it is used by several file-static functions. It makes the code a little shorter and reduces duplication.

&gt; I think that two booleans is an ugly way to pass the entity policy. How about
&gt; an enum instead? Or maybe separate virtual  encode functions rather than a
&gt; single function with a flag. Do we really need all three policies?

You&apos;re right, I was trying to minimize changes to calling code, but that&apos;s probably a silly reason and it turns out this flag was only used in a couple of places. I made this an enum in TextCodec which makes it more clear. It also makes the function more self-documenting, and I removed the comment where you were complaining about spacing.

I fixed everything else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72530</commentid>
    <comment_count>10</comment_count>
      <attachid>19468</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-02 18:43:06 -0800</bug_when>
    <thetext>Comment on attachment 19468
Revised patch

Looking good!

As documented in http://webkit.org/coding/coding-style.html, we don&apos;t use all capitals for enums. It should be Substitute, Entity and EscapedEntity rather than SUBSTIUTE, ENTITY and ESCAPED_ENTITY. I also would suggest making UnencodableHandling a top level member of WebCore and naming the enum values QuestionMarksForUnencodables, EntitiesForUnencodables, and URLEncodedEntitiesForUnencodables.

(The all capital style for macros was invented to keep the macros from colliding with other uses of the same identifier and it&apos;s not needed for things that aren&apos;t macros.)

I don&apos;t think the encode function needs a default value for UnencodableHandling. I&apos;d prefer to see it capitalized at every call site.

I&apos;m slightly uncomfortable with the non-thread-safe implementation of unencodeableCharReplacement. How about having the function take a reference to an array of the right size instead? Then the caller can supply the buffer. I&apos;d also suggest using int&amp; rather than int* for the length out pointer.

 284                                      UChar32 codePoint, UConverterCallbackReason reason, UErrorCode* err) {

We put braces on separate lines not on the same line as the declaration.

 295 // Substutites special GBK characters, escaping all other unassigned entities.

Typo here in the word &quot;Substutites&quot;.

 309 // Combines both gbkUrlEscapedEntityCallack with GBK character substitution.

Strange wording here: Both/with.

 79             int replLen;
 80             const char* repl = TextCodec::unencodableCharReplacement(c, unencodable, &amp;replLen);

I prefer actual words rather than fragments like &quot;repl&quot; for variable names.

I&apos;m going to say review- this time because I&apos;d like at least some of these style issues to be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72658</commentid>
    <comment_count>11</comment_count>
      <attachid>19514</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-03-03 22:27:07 -0800</bug_when>
    <thetext>Created attachment 19514
Revised patch x2

&gt; As documented in http://webkit.org/coding/coding-style.html, we don&apos;t use all
&gt; capitals for enums. It should be Substitute, Entity and EscapedEntity rather
&gt; than SUBSTIUTE, ENTITY and ESCAPED_ENTITY. I also would suggest making
&gt; UnencodableHandling a top level member of WebCore and naming the enum values
&gt; QuestionMarksForUnencodables, EntitiesForUnencodables, and
&gt; URLEncodedEntitiesForUnencodables.

Ugh, I&apos;ve got way too many coding styles in my head nowadays.


&gt; I don&apos;t think the encode function needs a default value for
&gt; UnencodableHandling. I&apos;d prefer to see it capitalized at every call site.

I assume you mean specified at every call site? I was initially very resistant to this because I didn&apos;t want to change 1000 files, but there are only a couple places it&apos;s used. I agree, don&apos;t think the default value is very clear here.


&gt; I&apos;m slightly uncomfortable with the non-thread-safe implementation of
&gt; unencodeableCharReplacement. How about having the function take a reference to
&gt; an array of the right size instead? Then the caller can supply the buffer. I&apos;d
&gt; also suggest using int&amp; rather than int* for the length out pointer.

I used a buffer and returned the length (since I don&apos;t use the return value for anything) which I think is more clear than an out param.

I changed XMLHTTPRequest code to specify entities rather than substitution. It looks like it&apos;s currently hard-coded for UTF-8, so this won&apos;t be an issue, but I&apos;m pretty sure when you correctly support the document encoding, entities will be correct here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73019</commentid>
    <comment_count>12</comment_count>
      <attachid>19514</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-07 12:28:56 -0800</bug_when>
    <thetext>Comment on attachment 19514
Revised patch x2

Looks great.

 59     switch (unencodable) {
 60     case QuestionMarksForUnencodables:
 61         replacement[0] = &apos;?&apos;;
 62         replacement[1] = 0;
 63         return 1;
 64     case EntitiesForUnencodables:
 65         snprintf(replacement, 32, &quot;&amp;#%u;&quot;, codePoint);
 66         break;
 67     case URLEncodedEntitiesForUnencodables:
 68         snprintf(replacement, 32, &quot;%%26%%23%u%%3B&quot;, codePoint);
 69         break;
 70     default:
 71         ASSERT_NOT_REACHED();
 72         replacement[0] = 0;
 73     }
 74     return static_cast&lt;int&gt;(strlen(replacement));

I normally like to leave out the default: case so that GCC will warn if we ever add a new value for the enum. That requires a little bit of reorganization, though. Not very important.

I noticed that at some other call sites, you did not include a default: ASSERT_NOT_REACHED. It would be better to be consistent.

 44         // Substitues the replacement character &quot;?&quot;.

Typo &quot;Substitutes&quot; is spelled wrong.

It&apos;s a little annoying that the value &quot;32&quot; is repeated at all the various sites. Maybe it should have been named. Maybe a typedef for char[32] would have been the best way to not repeat the value in multiple places; could use sizeof(type) in the few places where the number is needed (passing in to snprintf).

r=me as is, but there is still a little room for improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73478</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-03-12 10:31:49 -0700</bug_when>
    <thetext>Marvin, can you please make the improvements Darin has suggested and upload a new revision of the patch to be landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74026</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-16 20:47:23 -0700</bug_when>
    <thetext>I decided to do the requested tweaks myself.

Committed revision 31089.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77157</commentid>
    <comment_count>15</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-04-10 08:18:52 -0700</bug_when>
    <thetext>Thanks Darin! Sorry I took so long. I was on vacation and then so busy as a result of begin on vacation I didn&apos;t get to this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84707</commentid>
    <comment_count>16</comment_count>
    <who name="Julian Reschke">julian.reschke</who>
    <bug_when>2008-06-29 05:12:57 -0700</bug_when>
    <thetext>Exactly how is this approach better than either sticking with what Webkit did before (mirroring IE/Opera), *or* doing what Firefox does (which at least has a minimal chance of being understood by the server)?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84730</commentid>
    <comment_count>17</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2008-06-29 14:23:05 -0700</bug_when>
    <thetext>(HTML5 makes this non-conforming at the moment.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87454</commentid>
    <comment_count>18</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-07-30 17:46:50 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Exactly how is this approach better than either sticking with what Webkit did
&gt; before (mirroring IE/Opera), *or* doing what Firefox does (which at least has a
&gt; minimal chance of being understood by the server)?

This is how things are encoded by the form code of all browsers. Therefore, most servers are already setup to handle this type of input in the query encodings. IE/Opera lose the data, and Firefox generates gibberish in the encoding the server expects. Those options seem worse, no?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16166</attachid>
            <date>2007-08-30 13:37:10 -0700</date>
            <delta_ts>2007-08-30 13:37:10 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>big5.html</filename>
            <type>text/html</type>
            <size>1042</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9YmlnNSI+PHRpdGxlPmJpZyA1IHF1ZXJ5IGVuY29kaW5nIHRlc3Q8L3Rp
dGxlPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVuY3Rpb24gZG9pdChjaCkg
ew0KICB2YXIgcyA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9IjsNCiAgcyArPSBT
dHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsNCiAgZG9jdW1lbnQubG9jYXRpb24gPSBzOw0KfQ0KPC9z
Y3JpcHQ+DQo8L2hlYWQ+PGJvZHk+DQo8cD5UaGlzIHBhZ2UgaXMgaW4gQmlnNTwvcD4NCg0KPGEg
aHJlZj0iIyIgb25jbGljaz0iZG9pdCgweDZkZSk7Ij5DbGljayBoZXJlIHRvIHNlYXJjaCBHb29n
bGUgZm9yIGFuIGludmFsaWQgQmlnNSBjaGFyYWN0ZXI8L2E+PGJyPg0KPGEgaHJlZj0iIyIgb25j
bGljaz0iZG9pdCgweDhhZGQpOyI+Q2xpY2sgaGVyZSB0byBzZWFyY2ggR29vZ2xlIGZvciBhbiB2
YWxpZCBCaWc1IGNoYXJhY3RlcjwvYT4NCg0KPGhyPg0KUGFzdGUgY2hhcmFjdGVyIFUrMDZERSBp
bnRvIGhlcmUgdG8gc2VlIHdoYXQgdGhlIGludmFsaWQtQmlnNS1jaGFyYWN0ZXIgcXVlcnkgc2hv
dWxkIGxvb2sgbGlrZTogPHR0PjxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/
cT0lMjYlMjMxNzU4JTNCJmJ0bkc9R29vZ2xlK1NlYXJjaCI+aHR0cDovL3d3dy5nb29nbGUuY29t
L3NlYXJjaD9xPSUyNiUyMzE3NTglM0ImYnRuRz1Hb29nbGUrU2VhcmNoPC9hPjwvdHQ+ICh5b3Ug
Y2FuIGNsaWNrIHRoZSBsaW5rIGFuZCBjb3B5IHRoZSBjaGFyYWN0ZXIgb3V0IG9mIHRoZSBHb29n
bGUgc2VhcmNoIGJveCk8cD4NCjxmb3JtIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3Nl
YXJjaCIgbmFtZT1mIGFjY2VwdC1jaGFyc2V0PSJiaWc1Ij48aW5wdXQgbWF4bGVuZ3RoPTIwNDgg
bmFtZT1xIHNpemU9NTU+PGlucHV0IG5hbWU9YnRuRyB0eXBlPXN1Ym1pdCB2YWx1ZT0iR29vZ2xl
IFNlYXJjaCI+PC9mb3JtPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19443</attachid>
            <date>2008-02-28 23:10:09 -0800</date>
            <delta_ts>2008-02-29 20:02:01 -0800</delta_ts>
            <desc>Patch with layout test</desc>
            <filename>entity.diff</filename>
            <type>text/plain</type>
            <size>23147</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDY1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDgtMDItMjggIE1hcnZpbiBEZWNrZXIgIDxtYXJ2LmRlY2tlckBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IGJ1ZyAxNTExOTogVVJMIHF1ZXJ5IGNoYXJhY3RlcnMgdGhhdCBhcmUgdW5lbmNvZGFi
bGUgaW4gdGhlCisgICAgICAgIHJlcXVlc3QncyBjaGFyYWN0ZXIgc2V0IHNob3VsZCBiZSBjb252
ZXJ0ZWQgdG8gWE1MIGVudGl0aWVzIHdpdGgKKyAgICAgICAgbm9uLWFscGhhbnVtZXJpYyBjaGFy
YWN0ZXJzIGVzY2FwZWQuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy91cmkvZXNjYXBlZC1l
bnRpdHkuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjplbmNvZGVSZWxhdGl2ZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6Z2JrVXJsRXNjYXBlZEVudGl0eUNhbGxhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
ZGVjSUNVOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmg6
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENvZGVjTGF0aW4xOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENv
ZGVjTGF0aW4xLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEYxNjo6ZW5jb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2Lmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVDb21wbGV4
VXNlckRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVXNlckRlZmluZWQ6OmVu
Y29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRFbmNvZGluZzo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNNYWM6OmVuY29kZSk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmg6CisKIDIwMDgtMDItMjggIE1hcmsgUm93ZSAg
PG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL0tVUkwuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTcsMTIgKzE0OTcsMTYgQEAgc3RhdGljIHZvaWQgZW5j
b2RlUmVsYXRpdmVTdHJpbmcoY29uc3QgUwogICAgIH0KIAogICAgIGlmIChwYXRoRW5kID09IC0x
KSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvICJhbGxvdyBlbnRpdGll
cyIgZm9yIHRoZSBwYXRoIGVuY29kaW5nIHNpbmNlIHdlCisgICAgICAgIC8vIGtub3cgaXQncyBV
VEYtOCBhbmQgd2lsbCBoYXZlIG5vIHVuZW5jb2RhYmxlIGNoYXJhY3RlcnMuCiAgICAgICAgIENT
dHJpbmcgZGVjb2RlZCA9IHBhdGhFbmNvZGluZy5lbmNvZGUocy5kYXRhKCksIHMuc2l6ZSgpKTsK
ICAgICAgICAgb3V0cHV0LnJlc2l6ZShkZWNvZGVkLmxlbmd0aCgpKTsKICAgICAgICAgbWVtY3B5
KG91dHB1dC5kYXRhKCksIGRlY29kZWQuZGF0YSgpLCBkZWNvZGVkLmxlbmd0aCgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBDU3RyaW5nIHBhdGhEZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29k
ZShzLmRhdGEoKSwgcGF0aEVuZCk7Ci0gICAgICAgIENTdHJpbmcgb3RoZXJEZWNvZGVkID0gb3Ro
ZXJFbmNvZGluZy5lbmNvZGUocy5kYXRhKCkgKyBwYXRoRW5kLCBzLnNpemUoKSAtIHBhdGhFbmQp
OworICAgICAgICAvLyBVbmVuY29kYWJsZSBjaGFyYWN0ZXJzIGluIFVSTHMgYXJlIHJlcHJlc2Vu
dGVkIGJ5IGNvbnZlcnRpbmcKKyAgICAgICAgLy8gdGhlbSB0byBYTUwgZW50aXRpZXMgYW5kIGVz
Y2FwaW5nIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycy4KKyAgICAgICAgQ1N0cmluZyBvdGhl
ckRlY29kZWQgPSBvdGhlckVuY29kaW5nLmVuY29kZShzLmRhdGEoKSArIHBhdGhFbmQsIHMuc2l6
ZSgpIC0gcGF0aEVuZCwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICAgICAgb3V0cHV0LnJlc2l6ZShwYXRo
RGVjb2RlZC5sZW5ndGgoKSArIG90aGVyRGVjb2RlZC5sZW5ndGgoKSk7CiAgICAgICAgIG1lbWNw
eShvdXRwdXQuZGF0YSgpLCBwYXRoRGVjb2RlZC5kYXRhKCksIHBhdGhEZWNvZGVkLmxlbmd0aCgp
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmgJKHJldmlzaW9uIDMwNjUwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3
ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+VGV4dENvZGVj
KCk7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3Qg
bGVuZ3RoLCBib29sIGZsdXNoID0gZmFsc2UpID0gMDsKLSAgICAgICAgdmlydHVhbCBDU3RyaW5n
IGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcyA9
IGZhbHNlKSA9IDA7CisgICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMgPSBmYWxzZSwgYm9vbCBlc2NhcGVF
bnRpdGllcyA9IGZhbHNlKSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0YXRpYyB2
b2lkIGFwcGVuZE9taXR0aW5nQk9NKFZlY3RvcjxVQ2hhcj4mLCBjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHJl
dmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgc3RkOjptaW47CiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNvbnN0IHNpemVfdCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0
OwotICAgIAorCiBzdGF0aWMgVUNvbnZlcnRlciogY2FjaGVkQ29udmVydGVySUNVOwogCiBzdGF0
aWMgYXV0b19wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNJQ1UoY29uc3QgVGV4dEVuY29kaW5n
JiBlbmNvZGluZywgY29uc3Qgdm9pZCopCkBAIC0yNzgsNiArMjc4LDIyIEBAIHN0YXRpYyBVQ2hh
ciBnZXRHYmtFc2NhcGUoVUNoYXIzMiBjb2RlUG8KICAgICB9CiB9CiAKKy8vIEludmFsaWQgY2hh
cmFjdGVyIGhhbmRsZXIgd2hlbiB3cml1dGluZyBlc2NhcGVkIGVudGl0aWVzIGZvciB1bnJlcHJl
c2VudGFibGUKKy8vIGNoYXJhY3RlcnMuIFNlZSB0aGUgZGVjbGFyYXRpb24gb2YgVGV4dENvZGVj
OjplbmNvZGUgZm9yIG1vcmUuCitzdGF0aWMgdm9pZCB1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2so
Y29uc3Qgdm9pZCogY29udGV4dCwgVUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyogZnJvbVVBcmdz
LCBjb25zdCBVQ2hhciogY29kZVVuaXRzLCBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxi
YWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJyKSB7CisgICAgaWYgKHJlYXNvbiA9PSBV
Q05WX1VOQVNTSUdORUQpIHsKKyAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKKworICAgICAg
ICBjaGFyIG51bWJlclszMl07CisgICAgICAgIHNwcmludGYobnVtYmVyLCAiJSUyNiUlMjMlZCUl
M0IiLCBjb2RlUG9pbnQpOworICAgICAgICBpbnQgbnVtYmVyTGVuID0gc3RhdGljX2Nhc3Q8aW50
PihzdHJsZW4obnVtYmVyKSk7CisgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlQnl0ZXMoZnJvbVVB
cmdzLCBudW1iZXIsIG51bWJlckxlbiwgMCwgZXJyKTsKKyAgICB9IGVsc2UKKyAgICAgICAgVUNO
Vl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBs
ZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworfQorCisvLyBTdWJzdHV0aXRlcyBzcGVj
aWFsIEdCSyBjaGFyYWN0ZXJzLCBlc2NhcGluZyBhbGwgb3RoZXIgdW5hc3NpZ25lZCBlbnRpdGll
cy4KIHN0YXRpYyB2b2lkIGdia0NhbGxiYWNrRXNjYXBlKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVD
b252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0
cywgaW50MzJfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcjMy
IGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSog
ZXJyKSAKIHsKQEAgLTI5MSw2ICszMDcsMjUgQEAgc3RhdGljIHZvaWQgZ2JrQ2FsbGJhY2tFc2Nh
cGUoY29uc3Qgdm9pZAogICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBm
cm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKIH0K
IAorLy8gQ29tYmluZXMgYm90aCBnYmtVcmxFc2NhcGVkRW50aXR5Q2FsbGFjayB3aXRoIEdCSyBj
aGFyYWN0ZXIgc3Vic3RpdHV0aW9uLgorc3RhdGljIHZvaWQgZ2JrVXJsRXNjYXBlZEVudGl0eUNh
bGxhY2soY29uc3Qgdm9pZCogY29udGV4dCwgVUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyogZnJv
bVVBcmdzLCBjb25zdCBVQ2hhciogY29kZVVuaXRzLCBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVy
dGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpIAoreworICAgIGlmIChy
ZWFzb24gPT0gVUNOVl9VTkFTU0lHTkVEKSB7CisgICAgICAgIFVDaGFyIG91dENoYXI7CisgICAg
ICAgIGlmICgob3V0Q2hhciA9IGdldEdia0VzY2FwZShjb2RlUG9pbnQpKSkgeworICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRDaGFyOworICAgICAgICAgICAgKmVyciA9IFVf
WkVST19FUlJPUjsKKyAgICAgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJn
cywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFjayhjb250
ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJy
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBVQ05WX0ZST01f
VV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwg
Y29kZVBvaW50LCByZWFzb24sIGVycik7Cit9CisKIHN0YXRpYyB2b2lkIGdia0NhbGxiYWNrU3Vi
c3RpdHV0ZShjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBm
cm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVy
Q2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpIAogewpAQCAtMzA0LDcgKzMz
OSw3IEBAIHN0YXRpYyB2b2lkIGdia0NhbGxiYWNrU3Vic3RpdHV0ZShjb25zdCAKICAgICBVQ05W
X0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRz
LCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOwogfQogCi1DU3RyaW5nIFRleHRDb2Rl
Y0lDVTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29s
IGFsbG93RW50aXRpZXMpCitDU3RyaW5nIFRleHRDb2RlY0lDVTo6ZW5jb2RlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMsIGJvb2wgZXNj
YXBlRW50aXRpZXMpCiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiAiIjsKQEAg
LTMyMiwxMiArMzU3LDE3IEBAIENTdHJpbmcgVGV4dENvZGVjSUNVOjplbmNvZGUoY29uc3QgVUNo
YXIKIAogICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UgPSBjb3B5LmNoYXJhY3RlcnMoKTsKICAgICBj
b25zdCBVQ2hhciogc291cmNlTGltaXQgPSBzb3VyY2UgKyBjb3B5Lmxlbmd0aCgpOwotICAgIAor
CiAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAKLSAgICBpZiAoYWxsb3dFbnRp
dGllcykKLSAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBtX25l
ZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tFc2NhcGUgOiBVQ05WX0ZST01fVV9DQUxMQkFD
S19FU0NBUEUsIFVDTlZfRVNDQVBFX1hNTF9ERUMsIDAsIDAsICZlcnIpOwotICAgIGVsc2Ugewor
ICAgIGlmIChhbGxvd0VudGl0aWVzKSB7CisgICAgICAgIC8vIEFwcGVuZCBYTUwgZW50aXRpZXMg
KHBvc3NpYmx5IGVzY2FwZWQgZnVydGhlcikgZm9yIHVuZW5jb2RhYmxlIGNoYXJhY3RlcnMuCisg
ICAgICAgIGlmIChlc2NhcGVFbnRpdGllcykKKyAgICAgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxs
QmFjayhtX2NvbnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia1VybEVzY2FwZWRF
bnRpdHlDYWxsYWNrIDogdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrLCAwLCAwLCAwLCAmZXJyKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVy
dGVySUNVLCBtX25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tFc2NhcGUgOiBVQ05WX0ZS
T01fVV9DQUxMQkFDS19FU0NBUEUsIFVDTlZfRVNDQVBFX1hNTF9ERUMsIDAsIDAsICZlcnIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIERlZmF1bHQgdG8gc3Vic3RpdHV0aW5nIHVuZW5jb2Rh
YmxlIGNoYXJhY3RlcnMgd2l0aCAiPyIuCiAgICAgICAgIHVjbnZfc2V0U3Vic3RDaGFycyhtX2Nv
bnZlcnRlcklDVSwgIj8iLCAxLCAmZXJyKTsKICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNr
KG1fY29udmVydGVySUNVLCBtX25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tTdWJzdGl0
dXRlIDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSwgMCwgMCwgMCwgJmVycik7CiAg
ICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAkocmV2aXNpb24gMzA2
NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IH5UZXh0Q29kZWNJQ1UoKTsKIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2ggPSBmYWxzZSk7Ci0gICAgICAgIHZpcnR1
YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93
RW50aXRpZXMgPSBmYWxzZSk7CisgICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNvZGUoY29uc3Qg
VUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMgPSBmYWxzZSwgYm9vbCBl
c2NhcGVFbnRpdGllcyA9IGZhbHNlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgY3Jl
YXRlSUNVQ29udmVydGVyKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjTGF0aW4xLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjTGF0aW4xLmNwcAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjTGF0aW4xLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBA
IFN0cmluZyBUZXh0Q29kZWNMYXRpbjE6OmRlY29kZShjb25zdCBjaGEKICAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChjaGFyYWN0ZXJzKTsKIH0KIAotc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxl
eFdpbmRvd3NMYXRpbjEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGJv
b2wgYWxsb3dFbnRpdGllcykKK3N0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0
aW4xKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50
aXRpZXMsIGJvb2wgZXNjYXBlRW50aXRpZXMpCiB7CiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdChs
ZW5ndGgpOwogICAgIGNoYXIqIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsKQEAgLTE2MCw4ICsxNjAs
MTEgQEAgc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbgogICAgICAgICAg
ICAgICAgICAgICBnb3RvIGdvdEJ5dGU7CiAgICAgICAgICAgICAvLyBObyB3YXkgdG8gZW5jb2Rl
IHRoaXMgY2hhcmFjdGVyIHdpdGggV2luZG93cyBMYXRpbi0xLgogICAgICAgICAgICAgaWYgKGFs
bG93RW50aXRpZXMpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGVudGl0eUJ1ZmZlclsxNl07Ci0g
ICAgICAgICAgICAgICAgc3ByaW50ZihlbnRpdHlCdWZmZXIsICImIyV1OyIsIGMpOworICAgICAg
ICAgICAgICAgIGNoYXIgZW50aXR5QnVmZmVyWzMyXTsKKyAgICAgICAgICAgICAgICBpZiAoZXNj
YXBlRW50aXRpZXMpCisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZW50aXR5QnVmZmVyLCAi
JSUyNiUlMjMldSUlM0IiLCBjKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNwcmludGYoZW50aXR5QnVmZmVyLCAiJiMldTsiLCBjKTsKICAgICAgICAgICAgICAg
ICBzaXplX3QgZW50aXR5TGVuZ3RoID0gc3RybGVuKGVudGl0eUJ1ZmZlcik7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0Lmdyb3cocmVzdWx0TGVuZ3RoICsgZW50aXR5TGVuZ3RoICsgbGVuZ3RoIC0g
aSk7CiAgICAgICAgICAgICAgICAgYnl0ZXMgPSByZXN1bHQuZGF0YSgpOwpAQCAtMTc4LDcgKzE4
MSw3IEBAIHN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4KICAgICByZXR1
cm4gQ1N0cmluZyhieXRlcywgcmVzdWx0TGVuZ3RoKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNM
YXRpbjE6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgYm9v
bCBhbGxvd0VudGl0aWVzKQorQ1N0cmluZyBUZXh0Q29kZWNMYXRpbjE6OmVuY29kZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzLCBib29s
IGVzY2FwZUVudGl0aWVzKQogewogICAgIHsKICAgICAgICAgY2hhciogYnl0ZXM7CkBAIC0xOTcs
NyArMjAwLDcgQEAgQ1N0cmluZyBUZXh0Q29kZWNMYXRpbjE6OmVuY29kZShjb25zdCBVQwogICAg
IH0KIAogICAgIC8vIElmIGl0IHdhc24ndCBhbGwgQVNDSUksIGNhbGwgdGhlIGZ1bmN0aW9uIHRo
YXQgaGFuZGxlcyBtb3JlLWNvbXBsZXggY2FzZXMuCi0gICAgcmV0dXJuIGVuY29kZUNvbXBsZXhX
aW5kb3dzTGF0aW4xKGNoYXJhY3RlcnMsIGxlbmd0aCwgYWxsb3dFbnRpdGllcyk7CisgICAgcmV0
dXJuIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKGNoYXJhY3RlcnMsIGxlbmd0aCwgYWxsb3dF
bnRpdGllcywgZXNjYXBlRW50aXRpZXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oCShyZXZpc2lvbiAzMDY1
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKICAgICAgICAgdmly
dHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNo
ID0gZmFsc2UpOwotICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2UpOworICAgICAgICB2aXJ0
dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxv
d0VudGl0aWVzID0gZmFsc2UsIGJvb2wgZXNjYXBlRW50aXRpZXMgPSBmYWxzZSk7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1VURjE2LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjVVRGMTYuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVVEYxNi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBT
dHJpbmcgVGV4dENvZGVjVVRGMTY6OmRlY29kZShjb25zdCBjaGFyCiAgICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQoYnVmZmVyKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZW5jb2RlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sKQorQ1N0cmluZyBUZXh0
Q29kZWNVVEYxNjo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
LCBib29sLCBib29sKQogewogICAgIGNoYXIqIGJ5dGVzOwogICAgIENTdHJpbmcgc3RyaW5nID0g
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGggKiAyLCBieXRlcyk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFRleHRDb2RlY1VURjE2KGJv
b2wgbGl0dGxlRW5kaWFuKSA6IG1fbGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbiksIG1faGF2ZUJ1
ZmZlcmVkQnl0ZShmYWxzZSkgeyB9CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNv
bnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoID0gZmFsc2UpOwotICAgICAgICB2
aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBh
bGxvd0VudGl0aWVzID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNv
bnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2UsIGJv
b2wgZXNjYXBlRW50aXRpZXMgPSBmYWxzZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBib29s
IG1fbGl0dGxlRW5kaWFuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1Vz
ZXJEZWZpbmVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjVXNlckRlZmluZWQuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYy
LDcgQEAgU3RyaW5nIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpkZWNvZGUoY29ucwogICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLXN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBs
ZXhVc2VyRGVmaW5lZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgYm9v
bCBhbGxvd0VudGl0aWVzKQorc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVk
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRp
ZXMsIGJvb2wgZXNjYXBlRW50aXRpZXMpCiB7CiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdChsZW5n
dGgpOwogICAgIGNoYXIqIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsKQEAgLTc3LDggKzc3LDExIEBA
IHN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhVc2VyRGVmaW5lZCgKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAvLyBObyB3YXkgdG8gZW5jb2RlIHRoaXMgY2hhcmFjdGVyIHdpdGggeC11
c2VyLWRlZmluZWQuCiAgICAgICAgICAgICBpZiAoYWxsb3dFbnRpdGllcykgewotICAgICAgICAg
ICAgICAgIGNoYXIgZW50aXR5QnVmZmVyWzE2XTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGVu
dGl0eUJ1ZmZlciwgIiYjJXU7IiwgYyk7CisgICAgICAgICAgICAgICAgY2hhciBlbnRpdHlCdWZm
ZXJbMzJdOworICAgICAgICAgICAgICAgIGlmIChlc2NhcGVFbnRpdGllcykKKyAgICAgICAgICAg
ICAgICAgICAgc3ByaW50ZihlbnRpdHlCdWZmZXIsICIlJTI2JSUyMyV1JSUzQiIsIGMpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihlbnRpdHlCdWZm
ZXIsICImIyV1OyIsIGMpOwogICAgICAgICAgICAgICAgIHNpemVfdCBlbnRpdHlMZW5ndGggPSBz
dHJsZW4oZW50aXR5QnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXN1bHQuZ3JvdyhyZXN1bHRM
ZW5ndGggKyBlbnRpdHlMZW5ndGggKyBsZW5ndGggLSBpKTsKICAgICAgICAgICAgICAgICBieXRl
cyA9IHJlc3VsdC5kYXRhKCk7CkBAIC05Miw3ICs5NSw3IEBAIHN0YXRpYyBDU3RyaW5nIGVuY29k
ZUNvbXBsZXhVc2VyRGVmaW5lZCgKICAgICByZXR1cm4gQ1N0cmluZyhieXRlcywgcmVzdWx0TGVu
Z3RoKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZW5jb2RlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMpCitDU3Ry
aW5nIFRleHRDb2RlY1VzZXJEZWZpbmVkOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcywgYm9vbCBlc2NhcGVFbnRpdGllcykK
IHsKICAgICBjaGFyKiBieXRlczsKICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1Vu
aW5pdGlhbGl6ZWQobGVuZ3RoLCBieXRlcyk7CkBAIC0xMDksNyArMTEyLDcgQEAgQ1N0cmluZyBU
ZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZW5jb2RlKGNvbgogICAgICAgICByZXR1cm4gc3RyaW5nOwog
CiAgICAgLy8gSWYgaXQgd2Fzbid0IGFsbCBBU0NJSSwgY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCBo
YW5kbGVzIG1vcmUtY29tcGxleCBjYXNlcy4KLSAgICByZXR1cm4gZW5jb2RlQ29tcGxleFVzZXJE
ZWZpbmVkKGNoYXJhY3RlcnMsIGxlbmd0aCwgYWxsb3dFbnRpdGllcyk7CisgICAgcmV0dXJuIGVu
Y29kZUNvbXBsZXhVc2VyRGVmaW5lZChjaGFyYWN0ZXJzLCBsZW5ndGgsIGFsbG93RW50aXRpZXMs
IGVzY2FwZUVudGl0aWVzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmgJKHJldmlzaW9uIDMw
NjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCiAgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9v
bCBmbHVzaCA9IGZhbHNlKTsKLSAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcyA9IGZhbHNlKTsKKyAgICAg
ICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIGJv
b2wgYWxsb3dFbnRpdGllcyA9IGZhbHNlLCBib29sIGVzY2FwZUVudGl0aWVzID0gZmFsc2UpOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIFN0
cmluZyBUZXh0RW5jb2Rpbmc6OmRlY29kZShjb25zdCBjaGFyKiAKICAgICByZXR1cm4gVGV4dERl
Y29kZXIoKnRoaXMpLmRlY29kZShkYXRhLCBsZW5ndGgsIHRydWUpOwogfQogCi1DU3RyaW5nIFRl
eHRFbmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
LCBib29sIGFsbG93RW50aXRpZXMpIGNvbnN0CitDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2Rl
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRp
ZXMsIGJvb2wgZXNjYXBlRW50aXRpZXMpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25hbWUpCiAgICAg
ICAgIHJldHVybiBDU3RyaW5nKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAgQ1N0cmluZyBUZXh0RW5j
b2Rpbmc6OmVuY29kZShjb25zdCBVQ2hhcgogICAgICAgICBzb3VyY2UgPSBub3JtYWxpemVkQ2hh
cmFjdGVycy5kYXRhKCk7CiAgICAgICAgIHNvdXJjZUxlbmd0aCA9IG5vcm1hbGl6ZWRMZW5ndGg7
CiAgICAgfQotICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUoc291cmNlLCBz
b3VyY2VMZW5ndGgsIGFsbG93RW50aXRpZXMpOworICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRo
aXMpLT5lbmNvZGUoc291cmNlLCBzb3VyY2VMZW5ndGgsIGFsbG93RW50aXRpZXMsIGVzY2FwZUVu
dGl0aWVzKTsKICNlbGlmIFVTRShRVDRfVU5JQ09ERSkKICAgICBRU3RyaW5nIHN0cihyZWludGVy
cHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCk7CiAgICAgc3RyID0g
c3RyLm5vcm1hbGl6ZWQoUVN0cmluZzo6Tm9ybWFsaXphdGlvbkZvcm1fQyk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcs
MTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGNs
b3Nlc3Q4Qml0RXF1aXZhbGVudCgpIGNvbnN0OwogCiAgICAgICAgIFN0cmluZyBkZWNvZGUoY29u
c3QgY2hhciosIHNpemVfdCBsZW5ndGgpIGNvbnN0OwotICAgICAgICBDU3RyaW5nIGVuY29kZShj
b25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcyA9IGZhbHNlKSBj
b25zdDsKKworICAgICAgICAvLyBhbGxvd0VudGl0aWVzIHdpbGwgY2F1c2UgY2hhcmFjdGVycyBu
b3QgZW5jb2RhYmxlIGluIHRoZSBvdXRwdXQKKyAgICAgICAgLy8gY2hhcmFjdGVyIGVuY29kaW5n
IHRvIGJlIGVzY2FwZWQgYXMgaW4gWE1ML0hUTUwgZW50aXRpZXMuCisgICAgICAgIC8vIEZvciBl
eGFtcGxlLCBVKzA2REUgd2lsbCBiZSAiJiMxNzU4OyIgKGluIG9jdGFsKS4gV2hlbiB1bnNldCwg
c29tZQorICAgICAgICAvLyByZXBsYWNlbWVudCBjaGFyYWN0ZXIgd2lsbCBiZSB1bnNlZCBmb3Ig
dW5lbmNvZGFibGUgY2hhcmFjdGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2hlbiBlc2Nh
cGVFbnRpdGllcyBpcyBzZXQsIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBpbiB0aGUKKyAg
ICAgICAgLy8gZW50aXR5IHdpbGwgYmUgZXNjYXBlZCB1c2luZyBVUkwgcnVsZXMuIEluIHRoZSBh
Ym92ZSBleGFtcGxlLCBvZgorICAgICAgICAvLyAiJiMxNzU4OyIgaXQgd2lsbCBnZW5lcmF0ZSAi
JTI2JTIzMTc1OCMzQiIuIFRoaXMgZmxhZyBoYXMgbm8gZWZmZWN0CisgICAgICAgIC8vIHdoZW4g
YWxsb3dFbnRpdGllcyBpcyBmYWxzZS4KKyAgICAgICAgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNo
YXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMgPSBmYWxzZSwgYm9vbCBlc2Nh
cGVFbnRpdGllcyA9IGZhbHNlKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0
IGNoYXIqIG1fbmFtZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVj
TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2Rl
Y01hYy5jcHAJKHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9U
ZXh0Q29kZWNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgU3RyaW5n
IFRleHRDb2RlY01hYzo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIHJldHVybiByZXN1bHRTdHJp
bmc7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjTWFjOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcykKK0NTdHJpbmcgVGV4dENv
ZGVjTWFjOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGJv
b2wgYWxsb3dFbnRpdGllcywgYm9vbCBlc2NhcGVFbnRpdGllcykKIHsKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHJlYWxseSB1c2UgVEVDIGhlcmUgaW5zdGVhZCBvZiBDRlN0cmluZyBmb3IgY29u
c2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgZGlyZWN0aW9uLgogCkBAIC0zMDMsOCArMzAzLDExIEBA
IENTdHJpbmcgVGV4dENvZGVjTWFjOjplbmNvZGUoY29uc3QgVUNoYXIKICAgICAgICAgICAgICAg
ICAgICAgKytjaGFyYWN0ZXJzQ29udmVydGVkOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNoYXIgZW50aXR5QnVmZmVyWzE2XTsKLSAgICAgICAgICAgIHNw
cmludGYoZW50aXR5QnVmZmVyLCAiJiMldTsiLCBiYWRDaGFyKTsKKyAgICAgICAgICAgIGNoYXIg
ZW50aXR5QnVmZmVyWzMyXTsKKyAgICAgICAgICAgIGlmIChlc2NhcGVFbnRpdGllcykKKyAgICAg
ICAgICAgICAgICBzcHJpbnRmKGVudGl0eUJ1ZmZlciwgIiUlMjYlJTIzJXUlJTNCIiwgYmFkQ2hh
cik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ByaW50ZihlbnRpdHlCdWZm
ZXIsICImIyV1OyIsIGJhZENoYXIpOwogICAgICAgICAgICAgc2l6ZV90IGVudGl0eUxlbmd0aCA9
IHN0cmxlbihlbnRpdHlCdWZmZXIpOwogICAgICAgICAgICAgcmVzdWx0Lmdyb3coc2l6ZSArIGVu
dGl0eUxlbmd0aCk7CiAgICAgICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSArIHNpemUsIGVu
dGl0eUJ1ZmZlciwgZW50aXR5TGVuZ3RoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9t
YWMvVGV4dENvZGVjTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9UZXh0Q29kZWNNYWMuaAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvbWFjL1RleHRDb2RlY01hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+VGV4dENvZGVjTWFjKCk7CiAKICAg
ICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBi
b29sIGZsdXNoID0gZmFsc2UpOwotICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0
IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2UpOworICAg
ICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
Ym9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2UsIGJvb2wgZXNjYXBlRW50aXRpZXMgPSBmYWxzZSk7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBPU1N0YXR1cyBkZWNvZGUoY29uc3QgdW5zaWduZWQg
Y2hhciogaW5wdXRCdWZmZXIsIGludCBpbnB1dEJ1ZmZlckxlbmd0aCwgaW50JiBpbnB1dExlbmd0
aCwKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwNjU2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDgtMDItMjggIE1hcnZpbiBEZWNrZXIg
IDxtYXJ2LmRlY2tlckBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRml4IGJ1ZyAxNTExOSwgdW5lbmNvZGFibGUgY2hhcmFjdGVycyBp
biBVUkxzIHNob3VsZCBiZSBlbnRpdHktZXNjYXBlZC4KKworICAgICAgICAqIGh0dHAvdGVzdHMv
dXJpL2VzY2FwZWQtZW50aXR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy91cmkvZXNjYXBlZC1lbnRpdHkuaHRtbDogQWRkZWQuCisKIDIwMDgtMDItMjggIEp1c3Rp
biBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2VzY2FwZWQt
ZW50aXR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3VyaS9lc2NhcGVkLWVudGl0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3VyaS9lc2NhcGVkLWVudGl0eS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgZm9yIGJ1ZyAxNTExOTogVW5yZXByZXNlbnRhYmxl
IGNoYXJhY3RlcnMgaW4gYSBVUkwncyBjaGFyYWN0ZXIgc2V0IHNob3VsZCBiZSBjb252ZXJ0ZWQg
dG8gZXNjYXBlZCBlbnRpdGllcy4gV2UgdXNlIHRoZSBjaGFyYWN0ZXIgVSswNkRFICjbnikgd2hp
Y2ggZG9lcyBub3QgZXhpc3QgaW4gQmlnLTUuCisKK05vdGUgdGhhdCB0aGlzIGV4YWN0IHBhZ2Ug
d29uJ3Qgd29yayBpbiBJRSBvciBGaXJlZm94LiBGaXJlZm94IHNlZW1zIHRvIGFsd2F5cyB1c2Ug
VVRGLTggZm9yIGxvY2FsIGZpbGVzLCBhbmQgSUUgYWN0dWFsbHkgcHJlc2VydmVzIHRoZSBVbmlj
b2RlIGluIHRoZSBVUkwgd2hlbiB3ZSBnZXQgaXQgZnJvbSBKUywgc28gd2UgZG9uJ3Qga25vdyB3
aGF0IHdvdWxkIGdldCBzZW50IG92ZXIgdGhlIHdpcmUuIEhvd2V2ZXIsIGJvdGggYnJvd3NlcnMg
d2lsbCBzZW5kICUyNiUyMzE3NTglM0Igb3ZlciBIVFRQIGZvciB0aGUgcXVlcnkuCisKKyIvdXJp
L2ludGVyY2VwdC9wcmludC9zY3JpcHQuanM/JTI2JTIzMTc1OCUzQiIgKG5vIHRhcmdldCBjaGFy
c2V0IHNwZWNpZmllZCwgc2hvdWxkIGJlIEJpZzUpCisiL3VyaS9pbnRlcmNlcHQvcHJpbnQvc2Ny
aXB0LmpzPyUyNiUyMzE3NTglM0IiIChCaWc1IHNwZWNpZmllZCkKK1Nob3cgdGhlIHNvdXJjZSBh
dHRyaWJ1dGUgb2YgdGhlIHNjcmlwdHMuCisiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3VyaS9pbnRl
cmNlcHQvcHJpbnQvc2NyaXB0LmpzPyUyNiUyMzE3NTglM0IiCisiaHR0cDovLzEyNy4wLjAuMTo4
MDAwL3VyaS9pbnRlcmNlcHQvcHJpbnQvc2NyaXB0LmpzPyUyNiUyMzE3NTglM0IiCisKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2VzY2FwZWQtZW50aXR5Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy91cmkvZXNjYXBlZC1lbnRpdHkuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2VzY2FwZWQtZW50aXR5Lmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBo
dHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1iaWc1
Ij4KKzwvaGVhZD4KKzxib2R5PgorCis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
Kzwvc2NyaXB0PgorCis8cD5UZXN0IGZvciA8YSBocmVmPSdodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTExOSc+YnVnIDE1MTE5PC9hPjoKK1VucmVwcmVzZW50YWJsZSBj
aGFyYWN0ZXJzIGluIGEgVVJMJ3MgY2hhcmFjdGVyIHNldCBzaG91bGQgYmUgY29udmVydGVkIHRv
Citlc2NhcGVkIGVudGl0aWVzLiBXZSB1c2UgdGhlIGNoYXJhY3RlciBVKzA2REUgKCYjeDZkZTsp
IHdoaWNoIGRvZXMgbm90IGV4aXN0IGluCitCaWctNS48L3A+CisKKzxwPk5vdGUgdGhhdCB0aGlz
IGV4YWN0IHBhZ2Ugd29uJ3Qgd29yayBpbiBJRSBvciBGaXJlZm94LiBGaXJlZm94IHNlZW1zIHRv
CithbHdheXMgdXNlIFVURi04IGZvciBsb2NhbCBmaWxlcywgYW5kIElFIGFjdHVhbGx5IHByZXNl
cnZlcyB0aGUgVW5pY29kZSBpbiB0aGUKK1VSTCB3aGVuIHdlIGdldCBpdCBmcm9tIEpTLCBzbyB3
ZSBkb24ndCBrbm93IHdoYXQgd291bGQgZ2V0IHNlbnQgb3ZlciB0aGUgd2lyZS4KK0hvd2V2ZXIs
IGJvdGggYnJvd3NlcnMgd2lsbCBzZW5kIDx0dD4lMjYlMjMxNzU4JTNCPC90dD4gb3ZlciBIVFRQ
IGZvciB0aGUKK3F1ZXJ5LjwvcD4KKworIjxzY3JpcHQgaWQ9c2NyMSBzcmM9ImludGVyY2VwdC9w
cmludC9zY3JpcHQuanM/JiN4NkRFOyI+PC9zY3JpcHQ+IiAobm8gdGFyZ2V0IGNoYXJzZXQgc3Bl
Y2lmaWVkLCBzaG91bGQgYmUgQmlnNSk8YnI+CisiPHNjcmlwdCBpZD1zY3IyIGNoYXJzZXQ9ImJp
ZzUiIHNyYz0iaW50ZXJjZXB0L3ByaW50L3NjcmlwdC5qcz8mI3g2REU7Ij48L3NjcmlwdD4iIChC
aWc1IHNwZWNpZmllZCk8YnI+CisKK1Nob3cgdGhlIHNvdXJjZSBhdHRyaWJ1dGUgb2YgdGhlIHNj
cmlwdHMuPGJyPgorPHNjcmlwdD4KKyB0cnkgeworICBkb2N1bWVudC53cml0ZSgnIicgKyBkb2N1
bWVudC5zY3JpcHRzWzFdLnNyYyArICciPGJyPicpOworICBkb2N1bWVudC53cml0ZSgnIicgKyBk
b2N1bWVudC5zY3JpcHRzWzJdLnNyYyArICciPGJyPicpOworIH0gY2F0Y2ggKGV4KSB7CisgIGRv
Y3VtZW50LndyaXRlKCciJyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3IxIikuc3JjICsg
JyI8YnI+Jyk7CisgIGRvY3VtZW50LndyaXRlKCciJyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJzY3IyIikuc3JjICsgJyI8YnI+Jyk7CisgfQorPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRt
bD4KKwo=
</data>
<flag name="review"
          id="8504"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19468</attachid>
            <date>2008-02-29 20:02:01 -0800</date>
            <delta_ts>2008-03-03 22:27:07 -0800</delta_ts>
            <desc>Revised patch</desc>
            <filename>entity.diff</filename>
            <type>text/plain</type>
            <size>28623</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDY5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDgtMDItMjggIE1hcnZpbiBEZWNrZXIgIDxtYXJ2LmRlY2tlckBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IGJ1ZyAxNTExOTogVVJMIHF1ZXJ5IGNoYXJhY3RlcnMgdGhhdCBhcmUgdW5lbmNvZGFi
bGUgaW4gdGhlCisgICAgICAgIHJlcXVlc3QncyBjaGFyYWN0ZXIgc2V0IHNob3VsZCBiZSBjb252
ZXJ0ZWQgdG8gWE1MIGVudGl0aWVzIHdpdGgKKyAgICAgICAgbm9uLWFscGhhbnVtZXJpYyBjaGFy
YWN0ZXJzIGVzY2FwZWQuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy91cmkvZXNjYXBlZC1l
bnRpdHkuaHRtbAorCisgICAgICAgICogQ2hhbmdlTG9nOgorICAgICAgICAqIGh0bWwvRm9ybURh
dGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5n
KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQ6OmZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVJlbGF0aXZlU3RyaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWM6
OnVuZW5jb2RhYmxlQ2hhclJlcGxhY2VtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlYy5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjOjopOgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVybEVzY2Fw
ZWRFbnRpdHlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpnYmtVcmxFc2NhcGVkRW50aXR5
Q2FsbGFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OmVuY29kZSk6CisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb2RlY0lDVTo6c2V0TmVlZHNHQktGYWxsYmFja3MpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjTGF0aW4xLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUNvbXBsZXhX
aW5kb3dzTGF0aW4xKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZW5jb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjVVRGMTY6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
VEYxNi5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY1VzZXJEZWZpbmVkOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OmVuY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjTWFjOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL1RleHRDb2Rl
Y01hYy5oOgorCiAyMDA4LTAyLTI5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBidWlsZC1maXgga2FybWEKSW5kZXg6IFdlYkNvcmUvaHRt
bC9Gb3JtRGF0YUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxp
c3QuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyBDU3RyaW5nIGZpeExpbmVC
cmVha3MoY29uc3QgQ1N0cmkKIAogdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25z
dCBTdHJpbmcmIHMpCiB7Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29k
aW5nLmVuY29kZShzLmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgdHJ1ZSkpOworICAgIENTdHJp
bmcgY3N0ciA9IGZpeExpbmVCcmVha3MobV9lbmNvZGluZy5lbmNvZGUocy5jaGFyYWN0ZXJzKCks
IHMubGVuZ3RoKCksIFRleHRDb2RlYzo6RU5USVRZKSk7CiAgICAgbV9saXN0LmFwcGVuZChjc3Ry
KTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwNjUwKQor
KysgV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
NSw3ICsyOTUsNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBIVE1MRm9ybUVsZW1lbnQ6OmZvCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGluZ3MgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVz
IGNoYXJhY3RlcnMgeW91IGNhbid0IGVuY29kZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0LgogICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kU3RyaW5nKGhlYWRlciwgIjsgZmlsZW5hbWU9XCIiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsIGVuY29kaW5nLmVuY29kZShmaWxlbmFtZS5jaGFy
YWN0ZXJzKCksIGZpbGVuYW1lLmxlbmd0aCgpLCB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRTdHJpbmcoaGVhZGVyLCBlbmNvZGluZy5lbmNvZGUoZmlsZW5hbWUuY2hhcmFj
dGVycygpLCBmaWxlbmFtZS5sZW5ndGgoKSwgVGV4dENvZGVjOjpFTlRJVFkpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmQoJyInKTsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiAz
MDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
OTcsMTIgKzE0OTcsMTYgQEAgc3RhdGljIHZvaWQgZW5jb2RlUmVsYXRpdmVTdHJpbmcoY29uc3Qg
UwogICAgIH0KIAogICAgIGlmIChwYXRoRW5kID09IC0xKSB7CisgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBkb24ndCBuZWVkIHRvICJhbGxvdyBlbnRpdGllcyIgZm9yIHRoZSBwYXRoIGVuY29kaW5n
IHNpbmNlIHdlCisgICAgICAgIC8vIGtub3cgaXQncyBVVEYtOCBhbmQgd2lsbCBoYXZlIG5vIHVu
ZW5jb2RhYmxlIGNoYXJhY3RlcnMuCiAgICAgICAgIENTdHJpbmcgZGVjb2RlZCA9IHBhdGhFbmNv
ZGluZy5lbmNvZGUocy5kYXRhKCksIHMuc2l6ZSgpKTsKICAgICAgICAgb3V0cHV0LnJlc2l6ZShk
ZWNvZGVkLmxlbmd0aCgpKTsKICAgICAgICAgbWVtY3B5KG91dHB1dC5kYXRhKCksIGRlY29kZWQu
ZGF0YSgpLCBkZWNvZGVkLmxlbmd0aCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBDU3RyaW5n
IHBhdGhEZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29kZShzLmRhdGEoKSwgcGF0aEVuZCk7Ci0g
ICAgICAgIENTdHJpbmcgb3RoZXJEZWNvZGVkID0gb3RoZXJFbmNvZGluZy5lbmNvZGUocy5kYXRh
KCkgKyBwYXRoRW5kLCBzLnNpemUoKSAtIHBhdGhFbmQpOworICAgICAgICAvLyBVbmVuY29kYWJs
ZSBjaGFyYWN0ZXJzIGluIFVSTHMgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnZlcnRpbmcKKyAgICAg
ICAgLy8gdGhlbSB0byBYTUwgZW50aXRpZXMgYW5kIGVzY2FwaW5nIG5vbi1hbHBoYW51bWVyaWMg
Y2hhcmFjdGVycy4KKyAgICAgICAgQ1N0cmluZyBvdGhlckRlY29kZWQgPSBvdGhlckVuY29kaW5n
LmVuY29kZShzLmRhdGEoKSArIHBhdGhFbmQsIHMuc2l6ZSgpIC0gcGF0aEVuZCwgVGV4dENvZGVj
OjpFU0NBUEVEX0VOVElUWSk7CiAKICAgICAgICAgb3V0cHV0LnJlc2l6ZShwYXRoRGVjb2RlZC5s
ZW5ndGgoKSArIG90aGVyRGVjb2RlZC5sZW5ndGgoKSk7CiAgICAgICAgIG1lbWNweShvdXRwdXQu
ZGF0YSgpLCBwYXRoRGVjb2RlZC5kYXRhKCksIHBhdGhEZWNvZGVkLmxlbmd0aCgpKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiVGV4dENvZGVjLmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC01Myw0ICs1NCwyNyBAQCB2b2lkIFRleHRDb2RlYzo6YXBwZW5kT21pdHRpbmdCT00o
VmVjdG9yCiAgICAgICAgIHYuYXBwZW5kKCZjaGFyYWN0ZXJzW3N0YXJ0XSwgbGVuZ3RoIC0gc3Rh
cnQpOwogfQogCitjb25zdCBjaGFyKiBUZXh0Q29kZWM6OnVuZW5jb2RhYmxlQ2hhclJlcGxhY2Vt
ZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5lbmNvZGFibGVIYW5kbGluZyB1bmVuY29kYWJsZSwg
aW50KiByZXBsYWNlbWVudExlbikKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGVudGl0eUJ1ZmZl
ckxlbiA9IDMyOworICAgIHN0YXRpYyBjaGFyIGVudGl0eUJ1ZmZlcltlbnRpdHlCdWZmZXJMZW5d
OworCisgICAgc3dpdGNoICh1bmVuY29kYWJsZSkgeworICAgIGNhc2UgU1VCU1RJVFVURToKKyAg
ICAgICAgKnJlcGxhY2VtZW50TGVuID0gMTsKKyAgICAgICAgcmV0dXJuICI/IjsKKyAgICBjYXNl
IEVOVElUWToKKyAgICAgICAgc25wcmludGYoZW50aXR5QnVmZmVyLCBlbnRpdHlCdWZmZXJMZW4s
ICImIyV1OyIsIGNvZGVQb2ludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVNDQVBFRF9F
TlRJVFk6CisgICAgICAgIHNucHJpbnRmKGVudGl0eUJ1ZmZlciwgZW50aXR5QnVmZmVyTGVuLCAi
JSUyNiUlMjMldSUlM0IiLCBjb2RlUG9pbnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZW50aXR5QnVmZmVyWzBd
ID0gMDsKKyAgICB9CisgICAgKnJlcGxhY2VtZW50TGVuID0gc3RhdGljX2Nhc3Q8aW50PihzdHJs
ZW4oZW50aXR5QnVmZmVyKSk7CisgICAgcmV0dXJuIGVudGl0eUJ1ZmZlcjsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaAkocmV2aXNp
b24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDEwICs0MCwzMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBUZXh0Q29kZWMgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgorICAgICAgICAvLyBTcGVj
aWZpZXMgd2hhdCB3aWxsIGhhcHBlbiB3aGVuIGEgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkIHRo
YXQgaXMKKyAgICAgICAgLy8gbm90IGVuY29kYWJsZSBpbiB0aGUgY2hhcmFjdGVyIHNldC4KKyAg
ICAgICAgZW51bSBVbmVuY29kYWJsZUhhbmRsaW5nIHsKKyAgICAgICAgICAgIC8vIFN1YnN0aXR1
ZXMgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCI/IikuCisgICAgICAgICAgICBTVUJTVElUVVRF
LAorCisgICAgICAgICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgYW4gWE1MIGVudGl0
eS4gRm9yIGV4YW1wbGUsIFUrMDZERQorICAgICAgICAgICAgLy8gd291bGQgYmUgIiYjMTc1ODsi
ICgweDZERSA9IDE3NTggaW4gb2N0YWwpLgorICAgICAgICAgICAgRU5USVRZLAorCisgICAgICAg
ICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgZW4gZW50aXR5IGFzIGFib3ZlLCBidXQg
ZXNjYXBlZAorICAgICAgICAgICAgLy8gbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBUaGlz
IGlzIHVzZWQgaW4gVVJMcy4KKyAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBVKzZERSB3b3Vs
ZCBiZSAiJTI2JTIzMTc1OCUzQiIuCisgICAgICAgICAgICBFU0NBUEVEX0VOVElUWSwKKyAgICAg
ICAgfTsKKworCiAgICAgICAgIHZpcnR1YWwgflRleHRDb2RlYygpOwogCiAgICAgICAgIHZpcnR1
YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCA9
IGZhbHNlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMgPSBmYWxzZSkgPSAwOworICAgICAg
ICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5l
bmNvZGFibGVIYW5kbGluZyB1bmVuY29kYWJsZSA9IFNVQlNUSVRVVEUpID0gMDsKKworICAgICAg
ICAvLyBSZXR1cm5zIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0
aGUgZ2l2ZW4KKyAgICAgICAgLy8gdW5lbmNvZGFibGUgY2hhcmFjdGVyLiBUaGUgc3RyaW5nIGlz
IHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB3aWxsCisgICAgICAgIC8vIGJlIG92ZXJ3cml0dGVu
IGluIHRoZSBuZXh0IGNhbGwuIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB3aWxsCisgICAgICAg
IC8vIGJlIHBsYWNlZCBpbiAqcmVwbGFjZW1lbnRMZW4sIHdoaWNoIG11c3QgYmUgbm9uLW51bGwu
CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1bmVuY29kYWJsZUNoYXJSZXBsYWNlbWVudCh1
bnNpZ25lZCBjb2RlUG9pbnQsIFVuZW5jb2RhYmxlSGFuZGxpbmcgdW5lbmNvZGFibGUsIGludCog
cmVwbGFjZW1lbnRMZW4pOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdGF0aWMgdm9pZCBh
cHBlbmRPbWl0dGluZ0JPTShWZWN0b3I8VUNoYXI+JiwgY29uc3QgVUNoYXIqLCBzaXplX3QgbGVu
Z3RoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCShyZXZpc2lv
biAzMDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHVzaW5nIHN0ZDo6bWluOwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4NDsKLSAg
ICAKKwogc3RhdGljIFVDb252ZXJ0ZXIqIGNhY2hlZENvbnZlcnRlcklDVTsKIAogc3RhdGljIGF1
dG9fcHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjSUNVKGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIGNvbnN0IHZvaWQqKQpAQCAtMjc4LDYgKzI3OCwyMSBAQCBzdGF0aWMgVUNoYXIgZ2V0
R2JrRXNjYXBlKFVDaGFyMzIgY29kZVBvCiAgICAgfQogfQogCisvLyBJbnZhbGlkIGNoYXJhY3Rl
ciBoYW5kbGVyIHdoZW4gd3JpdGluZyBlc2NhcGVkIGVudGl0aWVzIGZvciB1bnJlcHJlc2VudGFi
bGUKKy8vIGNoYXJhY3RlcnMuIFNlZSB0aGUgZGVjbGFyYXRpb24gb2YgVGV4dENvZGVjOjplbmNv
ZGUgZm9yIG1vcmUuCitzdGF0aWMgdm9pZCB1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2soY29uc3Qg
dm9pZCogY29udGV4dCwgVUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyogZnJvbVVBcmdzLCBjb25z
dCBVQ2hhciogY29kZVVuaXRzLCBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVh
c29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJyKSB7CisgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VO
QVNTSUdORUQpIHsKKyAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKKworICAgICAgICBpbnQg
ZW50aXR5TGVuOworICAgICAgICBjb25zdCBjaGFyKiBlbnRpdHkgPSBUZXh0Q29kZWM6OnVuZW5j
b2RhYmxlQ2hhclJlcGxhY2VtZW50KGNvZGVQb2ludCwgVGV4dENvZGVjOjpFU0NBUEVEX0VOVElU
WSwgJmVudGl0eUxlbik7CisgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlQnl0ZXMoZnJvbVVBcmdz
LCBlbnRpdHksIGVudGl0eUxlbiwgMCwgZXJyKTsKKyAgICB9IGVsc2UKKyAgICAgICAgVUNOVl9G
Uk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5n
dGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworfQorCisvLyBTdWJzdHV0aXRlcyBzcGVjaWFs
IEdCSyBjaGFyYWN0ZXJzLCBlc2NhcGluZyBhbGwgb3RoZXIgdW5hc3NpZ25lZCBlbnRpdGllcy4K
IHN0YXRpYyB2b2lkIGdia0NhbGxiYWNrRXNjYXBlKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVDb252
ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0cywg
aW50MzJfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNv
ZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJy
KSAKIHsKQEAgLTI5MSw2ICszMDYsMjMgQEAgc3RhdGljIHZvaWQgZ2JrQ2FsbGJhY2tFc2NhcGUo
Y29uc3Qgdm9pZAogICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9t
VUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKIH0KIAor
Ly8gQ29tYmluZXMgYm90aCBnYmtVcmxFc2NhcGVkRW50aXR5Q2FsbGFjayB3aXRoIEdCSyBjaGFy
YWN0ZXIgc3Vic3RpdHV0aW9uLgorc3RhdGljIHZvaWQgZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxh
Y2soY29uc3Qgdm9pZCogY29udGV4dCwgVUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyogZnJvbVVB
cmdzLCBjb25zdCBVQ2hhciogY29kZVVuaXRzLCBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVy
Q2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpIAoreworICAgIGlmIChyZWFz
b24gPT0gVUNOVl9VTkFTU0lHTkVEKSB7CisgICAgICAgIGlmIChVQ2hhciBvdXRDaGFyID0gZ2V0
R2JrRXNjYXBlKGNvZGVQb2ludCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzb3VyY2Ug
PSAmb3V0Q2hhcjsKKyAgICAgICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAg
ICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSArIDEs
IDAsIGVycik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXJsRXNj
YXBlZEVudGl0eUNhbGxiYWNrKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgs
IGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFVD
TlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywg
bGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKK30KKwogc3RhdGljIHZvaWQgZ2JrQ2Fs
bGJhY2tTdWJzdGl0dXRlKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29k
ZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVD
b252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikgCiB7CkBAIC0z
MDQsNyArMzM2LDcgQEAgc3RhdGljIHZvaWQgZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlKGNvbnN0IAog
ICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUoY29udGV4dCwgZnJvbVVBcmdzLCBj
b2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7CiB9CiAKLUNTdHJpbmcg
VGV4dENvZGVjSUNVOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgsIGJvb2wgYWxsb3dFbnRpdGllcykKK0NTdHJpbmcgVGV4dENvZGVjSUNVOjplbmNvZGUoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcg
dW5lbmNvZGFibGUpCiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiAiIjsKQEAg
LTMyMiwxNCArMzU0LDIwIEBAIENTdHJpbmcgVGV4dENvZGVjSUNVOjplbmNvZGUoY29uc3QgVUNo
YXIKIAogICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UgPSBjb3B5LmNoYXJhY3RlcnMoKTsKICAgICBj
b25zdCBVQ2hhciogc291cmNlTGltaXQgPSBzb3VyY2UgKyBjb3B5Lmxlbmd0aCgpOwotICAgIAor
CiAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAKLSAgICBpZiAoYWxsb3dFbnRp
dGllcykKLSAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBtX25l
ZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tFc2NhcGUgOiBVQ05WX0ZST01fVV9DQUxMQkFD
S19FU0NBUEUsIFVDTlZfRVNDQVBFX1hNTF9ERUMsIDAsIDAsICZlcnIpOwotICAgIGVsc2Ugewor
ICAgIHN3aXRjaCAodW5lbmNvZGFibGUpIHsKKyAgICBjYXNlIFNVQlNUSVRVVEU6CiAgICAgICAg
IHVjbnZfc2V0U3Vic3RDaGFycyhtX2NvbnZlcnRlcklDVSwgIj8iLCAxLCAmZXJyKTsKICAgICAg
ICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBtX25lZWRzR0JLRmFsbGJh
Y2tzID8gZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlIDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfU1VCU1RJ
VFVURSwgMCwgMCwgMCwgJmVycik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRU5USVRZOgor
ICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXJJQ1UsIG1fbmVlZHNHQktG
YWxsYmFja3MgPyBnYmtDYWxsYmFja0VzY2FwZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQ
RSwgVUNOVl9FU0NBUEVfWE1MX0RFQywgMCwgMCwgJmVycik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRVNDQVBFRF9FTlRJVFk6CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2Nv
bnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia1VybEVzY2FwZWRFbnRpdHlDYWxs
YWNrIDogdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrLCAwLCAwLCAwLCAmZXJyKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnIpKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgJKHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNyArNDYs
MTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5UZXh0Q29kZWNJQ1Uo
KTsKIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBs
ZW5ndGgsIGJvb2wgZmx1c2ggPSBmYWxzZSk7Ci0gICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNv
ZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMgPSBmYWxz
ZSk7CisgICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3Qg
bGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIHVuZW5jb2RhYmxlID0gU1VCU1RJVFVURSk7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNyZWF0ZUlDVUNvbnZlcnRlcigpIGNvbnN0Owog
ICAgICAgICB2b2lkIHJlbGVhc2VJQ1VDb252ZXJ0ZXIoKSBjb25zdDsKICAgICAgICAgYm9vbCBu
ZWVkc0dCS0ZhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNHQktGYWxsYmFja3M7IH0K
LSAgICAgICAgdm9pZCBzZXROZWVkc0dCS0ZhbGxiYWNrcyhib29sIG5lZWRzRmFsbGJhY2tzKSB7
IG1fbmVlZHNHQktGYWxsYmFja3MgPSBuZWVkc0ZhbGxiYWNrczsgfSAKKyAgICAgICAgdm9pZCBz
ZXROZWVkc0dCS0ZhbGxiYWNrcyhib29sIG5lZWRzRmFsbGJhY2tzKSB7IG1fbmVlZHNHQktGYWxs
YmFja3MgPSBuZWVkc0ZhbGxiYWNrczsgfQogCiAgICAgICAgIFRleHRFbmNvZGluZyBtX2VuY29k
aW5nOwogICAgICAgICB1bnNpZ25lZCBtX251bUJ1ZmZlcmVkQnl0ZXM7Ci0gICAgICAgIHVuc2ln
bmVkIGNoYXIgbV9idWZmZXJlZEJ5dGVzWzE2XTsgLy8gYmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBt
dWx0aS1ieXRlIGNoYXJhY3RlciAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZm
ZXJlZEJ5dGVzWzE2XTsgLy8gYmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBtdWx0aS1ieXRlIGNoYXJh
Y3RlcgogICAgICAgICBtdXRhYmxlIFVDb252ZXJ0ZXIqIG1fY29udmVydGVySUNVOwogICAgICAg
ICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsKICAgICB9OwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAJKHJldmlzaW9uIDMwNjUwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Miw3ICsxNDIsNyBAQCBTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3Qg
Y2hhCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoY2hhcmFjdGVycyk7CiB9CiAKLXN0YXRpYyBD
U3RyaW5nIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMpCitzdGF0aWMgQ1N0cmluZyBlbmNv
ZGVDb21wbGV4V2luZG93c0xhdGluMShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCwgVGV4dENvZGVjOjpVbmVuY29kYWJsZUhhbmRsaW5nIHVuZW5jb2RhYmxlKQogewogICAg
IFZlY3RvcjxjaGFyPiByZXN1bHQobGVuZ3RoKTsKICAgICBjaGFyKiBieXRlcyA9IHJlc3VsdC5k
YXRhKCk7CkBAIC0xNTksMTcgKzE1OSwxMyBAQCBzdGF0aWMgQ1N0cmluZyBlbmNvZGVDb21wbGV4
V2luZG93c0xhdGluCiAgICAgICAgICAgICAgICAgaWYgKHRhYmxlW2JdID09IGMpCiAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gZ290Qnl0ZTsKICAgICAgICAgICAgIC8vIE5vIHdheSB0byBlbmNv
ZGUgdGhpcyBjaGFyYWN0ZXIgd2l0aCBXaW5kb3dzIExhdGluLTEuCi0gICAgICAgICAgICBpZiAo
YWxsb3dFbnRpdGllcykgewotICAgICAgICAgICAgICAgIGNoYXIgZW50aXR5QnVmZmVyWzE2XTsK
LSAgICAgICAgICAgICAgICBzcHJpbnRmKGVudGl0eUJ1ZmZlciwgIiYjJXU7IiwgYyk7Ci0gICAg
ICAgICAgICAgICAgc2l6ZV90IGVudGl0eUxlbmd0aCA9IHN0cmxlbihlbnRpdHlCdWZmZXIpOwot
ICAgICAgICAgICAgICAgIHJlc3VsdC5ncm93KHJlc3VsdExlbmd0aCArIGVudGl0eUxlbmd0aCAr
IGxlbmd0aCAtIGkpOwotICAgICAgICAgICAgICAgIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsKLSAg
ICAgICAgICAgICAgICBtZW1jcHkoYnl0ZXMgKyByZXN1bHRMZW5ndGgsIGVudGl0eUJ1ZmZlciwg
ZW50aXR5TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gZW50aXR5TGVu
Z3RoOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYiA9ICc/JzsKKyAgICAgICAgICAgIGludCByZXBsTGVuOworICAgICAgICAgICAgY29uc3Qg
Y2hhciogcmVwbCA9IFRleHRDb2RlYzo6dW5lbmNvZGFibGVDaGFyUmVwbGFjZW1lbnQoYywgdW5l
bmNvZGFibGUsICZyZXBsTGVuKTsKKyAgICAgICAgICAgIHJlc3VsdC5ncm93KHJlc3VsdExlbmd0
aCArIHJlcGxMZW4gKyBsZW5ndGggLSBpKTsKKyAgICAgICAgICAgIGJ5dGVzID0gcmVzdWx0LmRh
dGEoKTsKKyAgICAgICAgICAgIG1lbWNweShieXRlcyArIHJlc3VsdExlbmd0aCwgcmVwbCwgcmVw
bExlbik7CisgICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gcmVwbExlbjsKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgZ290Qnl0ZToKICAgICAgICAgYnl0ZXNbcmVzdWx0
TGVuZ3RoKytdID0gYjsKQEAgLTE3OCw3ICsxNzQsNyBAQCBzdGF0aWMgQ1N0cmluZyBlbmNvZGVD
b21wbGV4V2luZG93c0xhdGluCiAgICAgcmV0dXJuIENTdHJpbmcoYnl0ZXMsIHJlc3VsdExlbmd0
aCk7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjplbmNvZGUoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcykKK0NTdHJpbmcgVGV4
dENvZGVjTGF0aW4xOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgdW5lbmNvZGFibGUpCiB7CiAgICAgewogICAgICAgICBj
aGFyKiBieXRlczsKQEAgLTE5Nyw3ICsxOTMsNyBAQCBDU3RyaW5nIFRleHRDb2RlY0xhdGluMTo6
ZW5jb2RlKGNvbnN0IFVDCiAgICAgfQogCiAgICAgLy8gSWYgaXQgd2Fzbid0IGFsbCBBU0NJSSwg
Y2FsbCB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG1vcmUtY29tcGxleCBjYXNlcy4KLSAgICBy
ZXR1cm4gZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoY2hhcmFjdGVycywgbGVuZ3RoLCBhbGxv
d0VudGl0aWVzKTsKKyAgICByZXR1cm4gZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoY2hhcmFj
dGVycywgbGVuZ3RoLCB1bmVuY29kYWJsZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmgJKHJldmlzaW9uIDMw
NjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKIAogICAgICAgICB2
aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1
c2ggPSBmYWxzZSk7Ci0gICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMgPSBmYWxzZSk7CisgICAgICAgIHZp
cnR1YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29k
YWJsZUhhbmRsaW5nIHVuZW5jb2RhYmxlID0gU1VCU1RJVFVURSk7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VU
RjE2LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRG
MTYuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEYxNi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBTdHJpbmcgVGV4
dENvZGVjVVRGMTY6OmRlY29kZShjb25zdCBjaGFyCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQo
YnVmZmVyKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZW5jb2RlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sKQorQ1N0cmluZyBUZXh0Q29kZWNVVEYx
Njo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29k
YWJsZUhhbmRsaW5nKQogewogICAgIGNoYXIqIGJ5dGVzOwogICAgIENTdHJpbmcgc3RyaW5nID0g
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGggKiAyLCBieXRlcyk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFRleHRDb2RlY1VURjE2KGJv
b2wgbGl0dGxlRW5kaWFuKSA6IG1fbGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbiksIG1faGF2ZUJ1
ZmZlcmVkQnl0ZShmYWxzZSkgeyB9CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNv
bnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoID0gZmFsc2UpOwotICAgICAgICB2
aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBh
bGxvd0VudGl0aWVzID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNv
bnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyB1bmVuY29kYWJs
ZSA9IFNVQlNUSVRVVEUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2xpdHRsZUVu
ZGlhbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZp
bmVkLmNwcAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjVXNlckRlZmluZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIFN0cmlu
ZyBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZGVjb2RlKGNvbnMKICAgICByZXR1cm4gU3RyaW5nOjph
ZG9wdChidWZmZXIpOwogfQogCi1zdGF0aWMgQ1N0cmluZyBlbmNvZGVDb21wbGV4VXNlckRlZmlu
ZWQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRp
dGllcykKK3N0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhVc2VyRGVmaW5lZChjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dENvZGVjOjpVbmVuY29kYWJsZUhhbmRs
aW5nIHVuZW5jb2RhYmxlKQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQobGVuZ3RoKTsKICAg
ICBjaGFyKiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CkBAIC03NiwyMyArNzYsMTkgQEAgc3RhdGlj
IENTdHJpbmcgZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKAogICAgICAgICAgICAgYnl0ZXNbcmVz
dWx0TGVuZ3RoKytdID0gc2lnbmVkQnl0ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAv
LyBObyB3YXkgdG8gZW5jb2RlIHRoaXMgY2hhcmFjdGVyIHdpdGggeC11c2VyLWRlZmluZWQuCi0g
ICAgICAgICAgICBpZiAoYWxsb3dFbnRpdGllcykgewotICAgICAgICAgICAgICAgIGNoYXIgZW50
aXR5QnVmZmVyWzE2XTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGVudGl0eUJ1ZmZlciwgIiYj
JXU7IiwgYyk7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGVudGl0eUxlbmd0aCA9IHN0cmxlbihl
bnRpdHlCdWZmZXIpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5ncm93KHJlc3VsdExlbmd0aCAr
IGVudGl0eUxlbmd0aCArIGxlbmd0aCAtIGkpOwotICAgICAgICAgICAgICAgIGJ5dGVzID0gcmVz
dWx0LmRhdGEoKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkoYnl0ZXMgKyByZXN1bHRMZW5ndGgs
IGVudGl0eUJ1ZmZlciwgZW50aXR5TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICByZXN1bHRMZW5n
dGggKz0gZW50aXR5TGVuZ3RoOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
Ynl0ZXNbcmVzdWx0TGVuZ3RoKytdID0gJz8nOworICAgICAgICAgICAgaW50IHJlcGxMZW47Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiByZXBsID0gVGV4dENvZGVjOjp1bmVuY29kYWJsZUNoYXJS
ZXBsYWNlbWVudChjLCB1bmVuY29kYWJsZSwgJnJlcGxMZW4pOworICAgICAgICAgICAgcmVzdWx0
Lmdyb3cocmVzdWx0TGVuZ3RoICsgcmVwbExlbiArIGxlbmd0aCAtIGkpOworICAgICAgICAgICAg
Ynl0ZXMgPSByZXN1bHQuZGF0YSgpOworICAgICAgICAgICAgbWVtY3B5KGJ5dGVzICsgcmVzdWx0
TGVuZ3RoLCByZXBsLCByZXBsTGVuKTsKKyAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSByZXBs
TGVuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIENTdHJpbmcoYnl0ZXMsIHJlc3Vs
dExlbmd0aCk7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjVXNlckRlZmluZWQ6OmVuY29kZShjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzKQor
Q1N0cmluZyBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIHVuZW5jb2RhYmxlKQogewog
ICAgIGNoYXIqIGJ5dGVzOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0
aWFsaXplZChsZW5ndGgsIGJ5dGVzKTsKQEAgLTEwOSw3ICsxMDUsNyBAQCBDU3RyaW5nIFRleHRD
b2RlY1VzZXJEZWZpbmVkOjplbmNvZGUoY29uCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAKICAg
ICAvLyBJZiBpdCB3YXNuJ3QgYWxsIEFTQ0lJLCBjYWxsIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRs
ZXMgbW9yZS1jb21wbGV4IGNhc2VzLgotICAgIHJldHVybiBlbmNvZGVDb21wbGV4VXNlckRlZmlu
ZWQoY2hhcmFjdGVycywgbGVuZ3RoLCBhbGxvd0VudGl0aWVzKTsKKyAgICByZXR1cm4gZW5jb2Rl
Q29tcGxleFVzZXJEZWZpbmVkKGNoYXJhY3RlcnMsIGxlbmd0aCwgdW5lbmNvZGFibGUpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjVXNlckRlZmluZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjVXNlckRlZmluZWQuaAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
Q29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVj
b2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoID0gZmFsc2UpOwotICAg
ICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
Ym9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5j
b2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyB1bmVu
Y29kYWJsZSA9IFNVQlNUSVRVVEUpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCShyZXZpc2lvbiAzMDY1
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw3ICs2Nyw3IEBAIFN0cmluZyBUZXh0RW5jb2Rpbmc6OmRlY29kZShjb25zdCBj
aGFyKiAKICAgICByZXR1cm4gVGV4dERlY29kZXIoKnRoaXMpLmRlY29kZShkYXRhLCBsZW5ndGgs
IHRydWUpOwogfQogCi1DU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMpIGNvbnN0CitDU3Ry
aW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoLCBUZXh0Q29kZWM6OlVuZW5jb2RhYmxlSGFuZGxpbmcgdW5lbmNvZGFibGUpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX25hbWUpCiAgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CkBAIC0xMDAs
MTEgKzEwMCwxMSBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVDaGFyCiAg
ICAgICAgIHNvdXJjZSA9IG5vcm1hbGl6ZWRDaGFyYWN0ZXJzLmRhdGEoKTsKICAgICAgICAgc291
cmNlTGVuZ3RoID0gbm9ybWFsaXplZExlbmd0aDsKICAgICB9Ci0gICAgcmV0dXJuIG5ld1RleHRD
b2RlYygqdGhpcyktPmVuY29kZShzb3VyY2UsIHNvdXJjZUxlbmd0aCwgYWxsb3dFbnRpdGllcyk7
CisgICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShzb3VyY2UsIHNvdXJjZUxl
bmd0aCwgdW5lbmNvZGFibGUpOwogI2VsaWYgVVNFKFFUNF9VTklDT0RFKQogICAgIFFTdHJpbmcg
c3RyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoKTsK
ICAgICBzdHIgPSBzdHIubm9ybWFsaXplZChRU3RyaW5nOjpOb3JtYWxpemF0aW9uRm9ybV9DKTsK
LSAgICByZXR1cm4gbmV3VGV4dENvZGVjKCp0aGlzKS0+ZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUNoYXIgKj4oc3RyLnV0ZjE2KCkpLCBzdHIubGVuZ3RoKCksIGFsbG93RW50aXRpZXMp
OworICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVQ2hhciAqPihzdHIudXRmMTYoKSksIHN0ci5sZW5ndGgoKSwgdW5lbmNvZGFibGUp
OwogI2VuZGlmCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rpbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmgJKHJl
dmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFRleHRFbmNvZGluZ19oCiAj
ZGVmaW5lIFRleHRFbmNvZGluZ19oCiAKKyNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRl
IDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3LDcg
KzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBUZXh0RW5jb2Rpbmcm
IGNsb3Nlc3Q4Qml0RXF1aXZhbGVudCgpIGNvbnN0OwogCiAgICAgICAgIFN0cmluZyBkZWNvZGUo
Y29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgpIGNvbnN0OwotICAgICAgICBDU3RyaW5nIGVuY29k
ZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcyA9IGZhbHNl
KSBjb25zdDsKKyAgICAgICAgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVu
Z3RoLCBUZXh0Q29kZWM6OlVuZW5jb2RhYmxlSGFuZGxpbmcgdW5lbmNvZGFibGUgPSBUZXh0Q29k
ZWM6OlNVQlNUSVRVVEUpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgY2hh
ciogbV9uYW1lOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFj
LmNwcAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRD
b2RlY01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsNyBAQCBTdHJpbmcgVGV4
dENvZGVjTWFjOjpkZWNvZGUoY29uc3QgY2hhciogCiAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsK
IH0KIAotQ1N0cmluZyBUZXh0Q29kZWNNYWM6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzKQorQ1N0cmluZyBUZXh0Q29kZWNN
YWM6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNv
ZGFibGVIYW5kbGluZyB1bmVuY29kYWJsZSkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJl
YWxseSB1c2UgVEVDIGhlcmUgaW5zdGVhZCBvZiBDRlN0cmluZyBmb3IgY29uc2lzdGVuY3kgd2l0
aCB0aGUgb3RoZXIgZGlyZWN0aW9uLgogCkBAIC0yODAsNyArMjgwLDcgQEAgQ1N0cmluZyBUZXh0
Q29kZWNNYWM6OmVuY29kZShjb25zdCBVQ2hhcgogICAgIENGSW5kZXggY2hhcmFjdGVyc0xlZnQg
PSBDRlN0cmluZ0dldExlbmd0aChjZnMpOwogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CiAgICAg
c2l6ZV90IHNpemUgPSAwOwotICAgIFVJbnQ4IGxvc3NCeXRlID0gYWxsb3dFbnRpdGllcyA/IDAg
OiAnPyc7CisgICAgVUludDggbG9zc0J5dGUgPSB1bmVuY29kYWJsZSA9PSBTVUJTVElUVVRFID8g
Jz8nIDogMDsKICAgICB3aGlsZSAoY2hhcmFjdGVyc0xlZnQgPiAwKSB7CiAgICAgICAgIENGUmFu
Z2UgcmFuZ2UgPSBDRlJhbmdlTWFrZShzdGFydFBvcywgY2hhcmFjdGVyc0xlZnQpOwogICAgICAg
ICBDRkluZGV4IGJ1ZmZlckxlbmd0aDsKQEAgLTMwMywxMSArMzAzLDEwIEBAIENTdHJpbmcgVGV4
dENvZGVjTWFjOjplbmNvZGUoY29uc3QgVUNoYXIKICAgICAgICAgICAgICAgICAgICAgKytjaGFy
YWN0ZXJzQ29udmVydGVkOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNoYXIgZW50aXR5QnVmZmVyWzE2XTsKLSAgICAgICAgICAgIHNwcmludGYoZW50aXR5
QnVmZmVyLCAiJiMldTsiLCBiYWRDaGFyKTsKLSAgICAgICAgICAgIHNpemVfdCBlbnRpdHlMZW5n
dGggPSBzdHJsZW4oZW50aXR5QnVmZmVyKTsKKyAgICAgICAgICAgIGludCBlbnRpdHlMZW5ndGg7
CisgICAgICAgICAgICBjb25zdCBjaGFyKiBlbnRpdHkgPSB1bmVuY29kYWJsZUNoYXJSZXBsYWNl
bWVudChiYWRDaGFyLCB1bmVuY29kYWJsZSwgJmVudGl0eUxlbmd0aCk7CiAgICAgICAgICAgICBy
ZXN1bHQuZ3JvdyhzaXplICsgZW50aXR5TGVuZ3RoKTsKLSAgICAgICAgICAgIG1lbWNweShyZXN1
bHQuZGF0YSgpICsgc2l6ZSwgZW50aXR5QnVmZmVyLCBlbnRpdHlMZW5ndGgpOworICAgICAgICAg
ICAgbWVtY3B5KHJlc3VsdC5kYXRhKCkgKyBzaXplLCBlbnRpdHksIGVudGl0eUxlbmd0aCk7CiAg
ICAgICAgICAgICBzaXplICs9IGVudGl0eUxlbmd0aDsKICAgICAgICAgfQogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmgJKHJldmlzaW9uIDMwNjUwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflRl
eHRDb2RlY01hYygpOwogCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
Kiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCA9IGZhbHNlKTsKLSAgICAgICAgdmlydHVhbCBD
U3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRp
dGllcyA9IGZhbHNlKTsKKyAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hh
ciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgdW5lbmNvZGFibGUgPSBTVUJT
VElUVVRFKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE9TU3RhdHVzIGRlY29kZShjb25zdCB1
bnNpZ25lZCBjaGFyKiBpbnB1dEJ1ZmZlciwgaW50IGlucHV0QnVmZmVyTGVuZ3RoLCBpbnQmIGlu
cHV0TGVuZ3RoLApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzA2OTQpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOC0wMi0yOCAgTWFydmlu
IERlY2tlciAgPG1hcnYuZGVja2VyQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggYnVnIDE1MTE5LCB1bmVuY29kYWJsZSBjaGFy
YWN0ZXJzIGluIFVSTHMgc2hvdWxkIGJlIGVudGl0eS1lc2NhcGVkLgorCisgICAgICAgICogaHR0
cC90ZXN0cy91cmkvZXNjYXBlZC1lbnRpdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3VyaS9lc2NhcGVkLWVudGl0eS5odG1sOiBBZGRlZC4KKwogMjAwOC0wMi0y
OSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFt
cGVkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS9lc2Nh
cGVkLWVudGl0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy91cmkvZXNjYXBlZC1lbnRpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy91cmkvZXNjYXBlZC1lbnRpdHktZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IGZvciBidWcgMTUxMTk6IFVucmVwcmVzZW50
YWJsZSBjaGFyYWN0ZXJzIGluIGEgVVJMJ3MgY2hhcmFjdGVyIHNldCBzaG91bGQgYmUgY29udmVy
dGVkIHRvIGVzY2FwZWQgZW50aXRpZXMuIFdlIHVzZSB0aGUgY2hhcmFjdGVyIFUrMDZERSAo254p
IHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIEJpZy01LgorCitOb3RlIHRoYXQgdGhpcyBleGFjdCBw
YWdlIHdvbid0IHdvcmsgaW4gSUUgb3IgRmlyZWZveC4gRmlyZWZveCBzZWVtcyB0byBhbHdheXMg
dXNlIFVURi04IGZvciBsb2NhbCBmaWxlcywgYW5kIElFIGFjdHVhbGx5IHByZXNlcnZlcyB0aGUg
VW5pY29kZSBpbiB0aGUgVVJMIHdoZW4gd2UgZ2V0IGl0IGZyb20gSlMsIHNvIHdlIGRvbid0IGtu
b3cgd2hhdCB3b3VsZCBnZXQgc2VudCBvdmVyIHRoZSB3aXJlLiBIb3dldmVyLCBib3RoIGJyb3dz
ZXJzIHdpbGwgc2VuZCAlMjYlMjMxNzU4JTNCIG92ZXIgSFRUUCBmb3IgdGhlIHF1ZXJ5LgorCisi
L3VyaS9pbnRlcmNlcHQvcHJpbnQvc2NyaXB0LmpzPyUyNiUyMzE3NTglM0IiIChubyB0YXJnZXQg
Y2hhcnNldCBzcGVjaWZpZWQsIHNob3VsZCBiZSBCaWc1KQorIi91cmkvaW50ZXJjZXB0L3ByaW50
L3NjcmlwdC5qcz8lMjYlMjMxNzU4JTNCIiAoQmlnNSBzcGVjaWZpZWQpCitTaG93IHRoZSBzb3Vy
Y2UgYXR0cmlidXRlIG9mIHRoZSBzY3JpcHRzLgorImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC91cmkv
aW50ZXJjZXB0L3ByaW50L3NjcmlwdC5qcz8lMjYlMjMxNzU4JTNCIgorImh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC91cmkvaW50ZXJjZXB0L3ByaW50L3NjcmlwdC5qcz8lMjYlMjMxNzU4JTNCIgorCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS9lc2NhcGVkLWVudGl0eS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2VzY2FwZWQtZW50aXR5Lmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS9lc2NhcGVkLWVudGl0
eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACis8aHRtbD4KKzxoZWFkPgorPG1l
dGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9
YmlnNSI+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHNjcmlwdD4KKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7Cis8L3NjcmlwdD4KKworPHA+VGVzdCBmb3IgPGEgaHJlZj0naHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMTknPmJ1ZyAxNTExOTwvYT46CitVbnJlcHJlc2VudGFi
bGUgY2hhcmFjdGVycyBpbiBhIFVSTCdzIGNoYXJhY3RlciBzZXQgc2hvdWxkIGJlIGNvbnZlcnRl
ZCB0bworZXNjYXBlZCBlbnRpdGllcy4gV2UgdXNlIHRoZSBjaGFyYWN0ZXIgVSswNkRFICgmI3g2
ZGU7KSB3aGljaCBkb2VzIG5vdCBleGlzdCBpbgorQmlnLTUuPC9wPgorCis8cD5Ob3RlIHRoYXQg
dGhpcyBleGFjdCBwYWdlIHdvbid0IHdvcmsgaW4gSUUgb3IgRmlyZWZveC4gRmlyZWZveCBzZWVt
cyB0bworYWx3YXlzIHVzZSBVVEYtOCBmb3IgbG9jYWwgZmlsZXMsIGFuZCBJRSBhY3R1YWxseSBw
cmVzZXJ2ZXMgdGhlIFVuaWNvZGUgaW4gdGhlCitVUkwgd2hlbiB3ZSBnZXQgaXQgZnJvbSBKUywg
c28gd2UgZG9uJ3Qga25vdyB3aGF0IHdvdWxkIGdldCBzZW50IG92ZXIgdGhlIHdpcmUuCitIb3dl
dmVyLCBib3RoIGJyb3dzZXJzIHdpbGwgc2VuZCA8dHQ+JTI2JTIzMTc1OCUzQjwvdHQ+IG92ZXIg
SFRUUCBmb3IgdGhlCitxdWVyeS48L3A+CisKKyI8c2NyaXB0IGlkPXNjcjEgc3JjPSJpbnRlcmNl
cHQvcHJpbnQvc2NyaXB0LmpzPyYjeDZERTsiPjwvc2NyaXB0PiIgKG5vIHRhcmdldCBjaGFyc2V0
IHNwZWNpZmllZCwgc2hvdWxkIGJlIEJpZzUpPGJyPgorIjxzY3JpcHQgaWQ9c2NyMiBjaGFyc2V0
PSJiaWc1IiBzcmM9ImludGVyY2VwdC9wcmludC9zY3JpcHQuanM/JiN4NkRFOyI+PC9zY3JpcHQ+
IiAoQmlnNSBzcGVjaWZpZWQpPGJyPgorCitTaG93IHRoZSBzb3VyY2UgYXR0cmlidXRlIG9mIHRo
ZSBzY3JpcHRzLjxicj4KKzxzY3JpcHQ+CisgdHJ5IHsKKyAgZG9jdW1lbnQud3JpdGUoJyInICsg
ZG9jdW1lbnQuc2NyaXB0c1sxXS5zcmMgKyAnIjxicj4nKTsKKyAgZG9jdW1lbnQud3JpdGUoJyIn
ICsgZG9jdW1lbnQuc2NyaXB0c1syXS5zcmMgKyAnIjxicj4nKTsKKyB9IGNhdGNoIChleCkgewor
ICBkb2N1bWVudC53cml0ZSgnIicgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NyMSIpLnNy
YyArICciPGJyPicpOworICBkb2N1bWVudC53cml0ZSgnIicgKyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgic2NyMiIpLnNyYyArICciPGJyPicpOworIH0KKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8
L2h0bWw+CisK
</data>
<flag name="review"
          id="8511"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19514</attachid>
            <date>2008-03-03 22:27:07 -0800</date>
            <delta_ts>2008-03-07 12:28:56 -0800</delta_ts>
            <desc>Revised patch x2</desc>
            <filename>encoding.diff</filename>
            <type>text/plain</type>
            <size>30058</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDczMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDgtMDMtMDMgIE1hcnZpbiBEZWNrZXIgIDxtYXJ2LmRlY2tlckBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IGJ1ZyAxNTExOTogVVJMIHF1ZXJ5IGNoYXJhY3RlcnMgdGhhdCBhcmUgdW5lbmNvZGFi
bGUgaW4gdGhlCisgICAgICAgIHJlcXVlc3QncyBjaGFyYWN0ZXIgc2V0IHNob3VsZCBiZSBjb252
ZXJ0ZWQgdG8gWE1MIGVudGl0aWVzIHdpdGgKKyAgICAgICAgbm9uLWFscGhhbnVtZXJpYyBjaGFy
YWN0ZXJzIGVzY2FwZWQuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy91cmkvZXNjYXBlZC1l
bnRpdHkuaHRtbAorCisgICAgICAgICogQ2hhbmdlTG9nOgorICAgICAgICAqIGh0bWwvRm9ybURh
dGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5n
KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQ6OmZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVJlbGF0aXZlU3RyaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OmxhdGlu
MSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnV0ZjgpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlYzo6dW5lbmNv
ZGFibGVDaGFyUmVwbGFjZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
Lmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENv
ZGVjSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVybEVzY2FwZWRFbnRpdHlDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpnYmtVcmxFc2NhcGVkRW50aXR5Q2FsbGFjayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6c2V0TmVl
ZHNHQktGYWxsYmFja3MpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dENvZGVjVVRGMTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVVRGMTY6OmVuY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5oOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y1VzZXJEZWZpbmVkOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
VXNlckRlZmluZWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OmVuY29kZSk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9U
ZXh0Q29kZWNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjTWFjOjplbmNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oOgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVz
dDo6c2VuZCk6CisKIDIwMDgtMDMtMDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBXaW5kb3dzIGJ1aWxkLWZpeC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCShyZXZp
c2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyBDU3RyaW5nIGZpeExpbmVCcmVha3MoY29uc3Qg
Q1N0cmkKIAogdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMp
CiB7Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShz
LmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgdHJ1ZSkpOworICAgIENTdHJpbmcgY3N0ciA9IGZp
eExpbmVCcmVha3MobV9lbmNvZGluZy5lbmNvZGUocy5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCks
IEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7CiAgICAgbV9saXN0LmFwcGVuZChjc3RyKTsKIH0K
IApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwNjUwKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw3ICsy
OTUsNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBIVE1MRm9ybUVsZW1lbnQ6OmZvCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGluZ3MgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVzIGNoYXJh
Y3RlcnMgeW91IGNhbid0IGVuY29kZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhl
IHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0LgogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
U3RyaW5nKGhlYWRlciwgIjsgZmlsZW5hbWU9XCIiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFN0cmluZyhoZWFkZXIsIGVuY29kaW5nLmVuY29kZShmaWxlbmFtZS5jaGFyYWN0ZXJz
KCksIGZpbGVuYW1lLmxlbmd0aCgpLCB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRTdHJpbmcoaGVhZGVyLCBlbmNvZGluZy5lbmNvZGUoZmlsZW5hbWUuY2hhcmFjdGVycygp
LCBmaWxlbmFtZS5sZW5ndGgoKSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcykpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmFwcGVuZCgnIicpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlz
aW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ5NywxMiArMTQ5NywxNCBAQCBzdGF0aWMgdm9pZCBlbmNvZGVSZWxhdGl2ZVN0cmluZyhj
b25zdCBTCiAgICAgfQogCiAgICAgaWYgKHBhdGhFbmQgPT0gLTEpIHsKLSAgICAgICAgQ1N0cmlu
ZyBkZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29kZShzLmRhdGEoKSwgcy5zaXplKCkpOworICAg
ICAgICBDU3RyaW5nIGRlY29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHMuZGF0YSgpLCBzLnNp
emUoKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICAgICAgb3V0cHV0
LnJlc2l6ZShkZWNvZGVkLmxlbmd0aCgpKTsKICAgICAgICAgbWVtY3B5KG91dHB1dC5kYXRhKCks
IGRlY29kZWQuZGF0YSgpLCBkZWNvZGVkLmxlbmd0aCgpKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBDU3RyaW5nIHBhdGhEZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29kZShzLmRhdGEoKSwgcGF0
aEVuZCk7Ci0gICAgICAgIENTdHJpbmcgb3RoZXJEZWNvZGVkID0gb3RoZXJFbmNvZGluZy5lbmNv
ZGUocy5kYXRhKCkgKyBwYXRoRW5kLCBzLnNpemUoKSAtIHBhdGhFbmQpOworICAgICAgICBDU3Ry
aW5nIHBhdGhEZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29kZShzLmRhdGEoKSwgcGF0aEVuZCwg
VVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICAgICAgLy8gVW5lbmNvZGFi
bGUgY2hhcmFjdGVycyBpbiBVUkxzIGFyZSByZXByZXNlbnRlZCBieSBjb252ZXJ0aW5nCisgICAg
ICAgIC8vIHRoZW0gdG8gWE1MIGVudGl0aWVzIGFuZCBlc2NhcGluZyBub24tYWxwaGFudW1lcmlj
IGNoYXJhY3RlcnMuCisgICAgICAgIENTdHJpbmcgb3RoZXJEZWNvZGVkID0gb3RoZXJFbmNvZGlu
Zy5lbmNvZGUocy5kYXRhKCkgKyBwYXRoRW5kLCBzLnNpemUoKSAtIHBhdGhFbmQsIFVSTEVuY29k
ZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CiAKICAgICAgICAgb3V0cHV0LnJlc2l6ZShwYXRo
RGVjb2RlZC5sZW5ndGgoKSArIG90aGVyRGVjb2RlZC5sZW5ndGgoKSk7CiAgICAgICAgIG1lbWNw
eShvdXRwdXQuZGF0YSgpLCBwYXRoRGVjb2RlZC5kYXRhKCksIHBhdGhEZWNvZGVkLmxlbmd0aCgp
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzAsMTIg
KzU3MCwxMiBAQCBWZWN0b3I8Y2hhcj4gU3RyaW5nOjphc2NpaSgpIGNvbnN0CiAKIENTdHJpbmcg
U3RyaW5nOjpsYXRpbjEoKSBjb25zdAogewotICAgIHJldHVybiBMYXRpbjFFbmNvZGluZygpLmVu
Y29kZShjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsKKyAgICByZXR1cm4gTGF0aW4xRW5jb2Rpbmco
KS5lbmNvZGUoY2hhcmFjdGVycygpLCBsZW5ndGgoKSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2Rh
Ymxlcyk7CiB9CiAgICAgCiBDU3RyaW5nIFN0cmluZzo6dXRmOCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFVURjhFbmNvZGluZygpLmVuY29kZShjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsKKyAgICBy
ZXR1cm4gVVRGOEVuY29kaW5nKCkuZW5jb2RlKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCksIFF1ZXN0
aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpOwogfQogCiBTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChj
b25zdCBjaGFyKiBzdHJpbmcsIHNpemVfdCBzaXplKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlYy5jcHAJKHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJU
ZXh0Q29kZWMuaCIKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDQgKzU0LDI0
IEBAIHZvaWQgVGV4dENvZGVjOjphcHBlbmRPbWl0dGluZ0JPTShWZWN0b3IKICAgICAgICAgdi5h
cHBlbmQoJmNoYXJhY3RlcnNbc3RhcnRdLCBsZW5ndGggLSBzdGFydCk7CiB9CiAKK2ludCBUZXh0
Q29kZWM6OnVuZW5jb2RhYmxlQ2hhclJlcGxhY2VtZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5l
bmNvZGFibGVIYW5kbGluZyB1bmVuY29kYWJsZSwgY2hhciByZXBsYWNlbWVudFszMl0pCit7Cisg
ICAgc3dpdGNoICh1bmVuY29kYWJsZSkgeworICAgIGNhc2UgUXVlc3Rpb25NYXJrc0ZvclVuZW5j
b2RhYmxlczoKKyAgICAgICAgcmVwbGFjZW1lbnRbMF0gPSAnPyc7CisgICAgICAgIHJlcGxhY2Vt
ZW50WzFdID0gMDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5j
b2RhYmxlczoKKyAgICAgICAgc25wcmludGYocmVwbGFjZW1lbnQsIDMyLCAiJiMldTsiLCBjb2Rl
UG9pbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVSTEVuY29kZWRFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlczoKKyAgICAgICAgc25wcmludGYocmVwbGFjZW1lbnQsIDMyLCAiJSUyNiUlMjMl
dSUlM0IiLCBjb2RlUG9pbnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmVwbGFjZW1lbnRbMF0gPSAwOworICAg
IH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4ocmVwbGFjZW1lbnQpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMu
aAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDEyICszOCwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFRleHRFbmNvZGluZzsKIAorICAgIC8vIFNwZWNp
ZmllcyB3aGF0IHdpbGwgaGFwcGVuIHdoZW4gYSBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQgdGhh
dCBpcworICAgIC8vIG5vdCBlbmNvZGFibGUgaW4gdGhlIGNoYXJhY3RlciBzZXQuCisgICAgZW51
bSBVbmVuY29kYWJsZUhhbmRsaW5nIHsKKyAgICAgICAgLy8gU3Vic3RpdHVlcyB0aGUgcmVwbGFj
ZW1lbnQgY2hhcmFjdGVyICI/Ii4KKyAgICAgICAgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxl
cywKKworICAgICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgYW4gWE1MIGVudGl0eS4g
Rm9yIGV4YW1wbGUsIFUrMDZERQorICAgICAgICAvLyB3b3VsZCBiZSAiJiMxNzU4OyIgKDB4NkRF
ID0gMTc1OCBpbiBvY3RhbCkuCisgICAgICAgIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLAorCisg
ICAgICAgIC8vIEVuY29kZXMgdGhlIGNoYXJhY3RlciBhcyBlbiBlbnRpdHkgYXMgYWJvdmUsIGJ1
dCBlc2NhcGVkCisgICAgICAgIC8vIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gVGhpcyBp
cyB1c2VkIGluIFVSTHMuCisgICAgICAgIC8vIEZvciBleGFtcGxlLCBVKzZERSB3b3VsZCBiZSAi
JTI2JTIzMTc1OCUzQiIuCisgICAgICAgIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cywKKyAgICB9OworCisKICAgICBjbGFzcyBUZXh0Q29kZWMgOiBOb25jb3B5YWJsZSB7CiAgICAg
cHVibGljOgogICAgICAgICB2aXJ0dWFsIH5UZXh0Q29kZWMoKTsKIAogICAgICAgICB2aXJ0dWFs
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2ggPSBm
YWxzZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2UpID0gMDsKKyAgICAgICAg
dmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5j
b2RhYmxlSGFuZGxpbmcpID0gMDsKKworICAgICAgICAvLyBGaWxscyBhIG51bGwtdGVybWluYXRl
ZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuCisgICAgICAgIC8vIHVuZW5jb2Rh
YmxlIGNoYXJhY3RlciBpbnRvIHRoZSBnaXZlbiByZXBsYWNlbWVudCBidWZmZXIuICBUaGUgbGVu
Z3RoCisgICAgICAgIC8vIG9mIHRoZSBzdHJpbmcgKG5vdCBpbmNsdWRpbmcgdGhlIG51bGwpIHdp
bGwgYmUgcmV0dXJuZWQuCisgICAgICAgIHN0YXRpYyBpbnQgdW5lbmNvZGFibGVDaGFyUmVwbGFj
ZW1lbnQodW5zaWduZWQgY29kZVBvaW50LCBVbmVuY29kYWJsZUhhbmRsaW5nIHVuZW5jb2RhYmxl
LCBjaGFyIHJlcGxhY2VtZW50WzMyXSk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0YXRp
YyB2b2lkIGFwcGVuZE9taXR0aW5nQk9NKFZlY3RvcjxVQ2hhcj4mLCBjb25zdCBVQ2hhciosIHNp
emVfdCBsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJ
KHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgc3RkOjptaW47CiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IHNpemVfdCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2
Mzg0OwotICAgIAorCiBzdGF0aWMgVUNvbnZlcnRlciogY2FjaGVkQ29udmVydGVySUNVOwogCiBz
dGF0aWMgYXV0b19wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNJQ1UoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCkBAIC0yNzgsNiArMjc4LDIyIEBAIHN0YXRpYyBV
Q2hhciBnZXRHYmtFc2NhcGUoVUNoYXIzMiBjb2RlUG8KICAgICB9CiB9CiAKKy8vIEludmFsaWQg
Y2hhcmFjdGVyIGhhbmRsZXIgd2hlbiB3cml0aW5nIGVzY2FwZWQgZW50aXRpZXMgZm9yIHVucmVw
cmVzZW50YWJsZQorLy8gY2hhcmFjdGVycy4gU2VlIHRoZSBkZWNsYXJhdGlvbiBvZiBUZXh0Q29k
ZWM6OmVuY29kZSBmb3IgbW9yZS4KK3N0YXRpYyB2b2lkIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFj
ayhjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFy
Z3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2Fs
bGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpCit7CisgICAgaWYgKHJlYXNvbiA9
PSBVQ05WX1VOQVNTSUdORUQpIHsKKyAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKKworICAg
ICAgICBjaGFyIGVudGl0eVszMl07CisgICAgICAgIGludCBlbnRpdHlMZW4gPSBUZXh0Q29kZWM6
OnVuZW5jb2RhYmxlQ2hhclJlcGxhY2VtZW50KGNvZGVQb2ludCwgVVJMRW5jb2RlZEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzLCBlbnRpdHkpOworICAgICAgICB1Y252X2NiRnJvbVVXcml0ZUJ5dGVz
KGZyb21VQXJncywgZW50aXR5LCBlbnRpdHlMZW4sIDAsIGVycik7CisgICAgfSBlbHNlCisgICAg
ICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVV
bml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKK30KKworLy8gU3Vic3RpdHV0
ZXMgc3BlY2lhbCBHQksgY2hhcmFjdGVycywgZXNjYXBpbmcgYWxsIG90aGVyIHVuYXNzaWduZWQg
ZW50aXRpZXMuCiBzdGF0aWMgdm9pZCBnYmtDYWxsYmFja0VzY2FwZShjb25zdCB2b2lkKiBjb250
ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBj
b2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJv
ckNvZGUqIGVycikgCiB7CkBAIC0yOTEsNiArMzA3LDIzIEBAIHN0YXRpYyB2b2lkIGdia0NhbGxi
YWNrRXNjYXBlKGNvbnN0IHZvaWQKICAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29u
dGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVy
cik7CiB9CiAKKy8vIENvbWJpbmVzIGJvdGggZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrIGFu
ZCBHQksgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbi4KK3N0YXRpYyB2b2lkIGdia1VybEVzY2FwZWRF
bnRpdHlDYWxsYWNrKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFy
Z3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNvZGVQb2ludCwg
VUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJyKSAKK3sKKyAg
ICBpZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCkgeworICAgICAgICBpZiAoVUNoYXIgb3V0
Q2hhciA9IGdldEdia0VzY2FwZShjb2RlUG9pbnQpKSB7CisgICAgICAgICAgICBjb25zdCBVQ2hh
ciogc291cmNlID0gJm91dENoYXI7CisgICAgICAgICAgICAqZXJyID0gVV9aRVJPX0VSUk9SOwor
ICAgICAgICAgICAgdWNudl9jYkZyb21VV3JpdGVVQ2hhcnMoZnJvbVVBcmdzLCAmc291cmNlLCBz
b3VyY2UgKyAxLCAwLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFjayhjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0
cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBj
b2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7Cit9CisKIHN0YXRpYyB2
b2lkIGdia0NhbGxiYWNrU3Vic3RpdHV0ZShjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVy
RnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMy
X3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY29k
ZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIp
IAogewpAQCAtMzA0LDcgKzMzNyw3IEBAIHN0YXRpYyB2b2lkIGdia0NhbGxiYWNrU3Vic3RpdHV0
ZShjb25zdCAKICAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFKGNvbnRleHQsIGZy
b21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOwogfQog
Ci1DU3RyaW5nIFRleHRDb2RlY0lDVTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMpCitDU3RyaW5nIFRleHRDb2RlY0lDVTo6
ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJs
ZUhhbmRsaW5nIHVuZW5jb2RhYmxlKQogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm4gIiI7CkBAIC0zMjIsMTQgKzM1NSwyMCBAQCBDU3RyaW5nIFRleHRDb2RlY0lDVTo6ZW5jb2Rl
KGNvbnN0IFVDaGFyCiAKICAgICBjb25zdCBVQ2hhciogc291cmNlID0gY29weS5jaGFyYWN0ZXJz
KCk7CiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZUxpbWl0ID0gc291cmNlICsgY29weS5sZW5ndGgo
KTsKLSAgICAKKwogICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogCi0gICAgaWYg
KGFsbG93RW50aXRpZXMpCi0gICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRl
cklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrRXNjYXBlIDogVUNOVl9GUk9N
X1VfQ0FMTEJBQ0tfRVNDQVBFLCBVQ05WX0VTQ0FQRV9YTUxfREVDLCAwLCAwLCAmZXJyKTsKLSAg
ICBlbHNlIHsKKyAgICBzd2l0Y2ggKHVuZW5jb2RhYmxlKSB7CisgICAgY2FzZSBRdWVzdGlvbk1h
cmtzRm9yVW5lbmNvZGFibGVzOgogICAgICAgICB1Y252X3NldFN1YnN0Q2hhcnMobV9jb252ZXJ0
ZXJJQ1UsICI/IiwgMSwgJmVycik7CiAgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2Nv
bnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrU3Vic3RpdHV0ZSA6
IFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUsIDAsIDAsIDAsICZlcnIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzOgorICAgICAgICB1Y252
X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXJJQ1UsIG1fbmVlZHNHQktGYWxsYmFja3MgPyBn
YmtDYWxsYmFja0VzY2FwZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRSwgVUNOVl9FU0NB
UEVfWE1MX0RFQywgMCwgMCwgJmVycik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVVJMRW5j
b2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzOgorICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJh
Y2sobV9jb252ZXJ0ZXJJQ1UsIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtVcmxFc2NhcGVkRW50
aXR5Q2FsbGFjayA6IHVybEVzY2FwZWRFbnRpdHlDYWxsYmFjaywgMCwgMCwgMCwgJmVycik7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCShyZXZpc2lvbiAzMDY1MCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
MTcgKzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+VGV4dENv
ZGVjSUNVKCk7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBz
aXplX3QgbGVuZ3RoLCBib29sIGZsdXNoID0gZmFsc2UpOwotICAgICAgICB2aXJ0dWFsIENTdHJp
bmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVz
ID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2b2lkIGNyZWF0ZUlDVUNvbnZlcnRlcigpIGNvbnN0OwogICAgICAgICB2b2lkIHJlbGVh
c2VJQ1VDb252ZXJ0ZXIoKSBjb25zdDsKICAgICAgICAgYm9vbCBuZWVkc0dCS0ZhbGxiYWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNHQktGYWxsYmFja3M7IH0KLSAgICAgICAgdm9pZCBzZXRO
ZWVkc0dCS0ZhbGxiYWNrcyhib29sIG5lZWRzRmFsbGJhY2tzKSB7IG1fbmVlZHNHQktGYWxsYmFj
a3MgPSBuZWVkc0ZhbGxiYWNrczsgfSAKKyAgICAgICAgdm9pZCBzZXROZWVkc0dCS0ZhbGxiYWNr
cyhib29sIG5lZWRzRmFsbGJhY2tzKSB7IG1fbmVlZHNHQktGYWxsYmFja3MgPSBuZWVkc0ZhbGxi
YWNrczsgfQogCiAgICAgICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwogICAgICAgICB1bnNp
Z25lZCBtX251bUJ1ZmZlcmVkQnl0ZXM7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJl
ZEJ5dGVzWzE2XTsgLy8gYmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBtdWx0aS1ieXRlIGNoYXJhY3Rl
ciAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGVzWzE2XTsgLy8g
YmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcgogICAgICAgICBtdXRh
YmxlIFVDb252ZXJ0ZXIqIG1fY29udmVydGVySUNVOwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9u
ZWVkc0dCS0ZhbGxiYWNrczsKICAgICB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0xhdGluMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0xhdGluMS5jcHAJKHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBA
QCBTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhCiAgICAgcmV0dXJuIFN0
cmluZzo6YWRvcHQoY2hhcmFjdGVycyk7CiB9CiAKLXN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBs
ZXhXaW5kb3dzTGF0aW4xKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBi
b29sIGFsbG93RW50aXRpZXMpCitzdGF0aWMgQ1N0cmluZyBlbmNvZGVDb21wbGV4V2luZG93c0xh
dGluMShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVI
YW5kbGluZyB1bmVuY29kYWJsZSkKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0KGxlbmd0aCk7
CiAgICAgY2hhciogYnl0ZXMgPSByZXN1bHQuZGF0YSgpOwpAQCAtMTU5LDE3ICsxNTksMTMgQEAg
c3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbgogICAgICAgICAgICAgICAg
IGlmICh0YWJsZVtiXSA9PSBjKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGdvdEJ5dGU7CiAg
ICAgICAgICAgICAvLyBObyB3YXkgdG8gZW5jb2RlIHRoaXMgY2hhcmFjdGVyIHdpdGggV2luZG93
cyBMYXRpbi0xLgotICAgICAgICAgICAgaWYgKGFsbG93RW50aXRpZXMpIHsKLSAgICAgICAgICAg
ICAgICBjaGFyIGVudGl0eUJ1ZmZlclsxNl07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihlbnRp
dHlCdWZmZXIsICImIyV1OyIsIGMpOwotICAgICAgICAgICAgICAgIHNpemVfdCBlbnRpdHlMZW5n
dGggPSBzdHJsZW4oZW50aXR5QnVmZmVyKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuZ3Jvdyhy
ZXN1bHRMZW5ndGggKyBlbnRpdHlMZW5ndGggKyBsZW5ndGggLSBpKTsKLSAgICAgICAgICAgICAg
ICBieXRlcyA9IHJlc3VsdC5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGJ5dGVzICsg
cmVzdWx0TGVuZ3RoLCBlbnRpdHlCdWZmZXIsIGVudGl0eUxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0TGVuZ3RoICs9IGVudGl0eUxlbmd0aDsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGIgPSAnPyc7CisgICAgICAgICAgICBjaGFy
IHJlcGxhY2VtZW50WzMyXTsKKyAgICAgICAgICAgIGludCByZXBsYWNlbWVudExlbiA9IFRleHRD
b2RlYzo6dW5lbmNvZGFibGVDaGFyUmVwbGFjZW1lbnQoYywgdW5lbmNvZGFibGUsIHJlcGxhY2Vt
ZW50KTsKKyAgICAgICAgICAgIHJlc3VsdC5ncm93KHJlc3VsdExlbmd0aCArIHJlcGxhY2VtZW50
TGVuICsgbGVuZ3RoIC0gaSk7CisgICAgICAgICAgICBieXRlcyA9IHJlc3VsdC5kYXRhKCk7Cisg
ICAgICAgICAgICBtZW1jcHkoYnl0ZXMgKyByZXN1bHRMZW5ndGgsIHJlcGxhY2VtZW50LCByZXBs
YWNlbWVudExlbik7CisgICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gcmVwbGFjZW1lbnRMZW47
CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgIGdvdEJ5dGU6CiAgICAgICAg
IGJ5dGVzW3Jlc3VsdExlbmd0aCsrXSA9IGI7CkBAIC0xNzgsNyArMTc0LDcgQEAgc3RhdGljIENT
dHJpbmcgZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbgogICAgIHJldHVybiBDU3RyaW5nKGJ5dGVz
LCByZXN1bHRMZW5ndGgpOwogfQogCi1DU3RyaW5nIFRleHRDb2RlY0xhdGluMTo6ZW5jb2RlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMp
CitDU3RyaW5nIFRleHRDb2RlY0xhdGluMTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIHVuZW5jb2RhYmxlKQogewogICAg
IHsKICAgICAgICAgY2hhciogYnl0ZXM7CkBAIC0xOTcsNyArMTkzLDcgQEAgQ1N0cmluZyBUZXh0
Q29kZWNMYXRpbjE6OmVuY29kZShjb25zdCBVQwogICAgIH0KIAogICAgIC8vIElmIGl0IHdhc24n
dCBhbGwgQVNDSUksIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBtb3JlLWNvbXBsZXgg
Y2FzZXMuCi0gICAgcmV0dXJuIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKGNoYXJhY3RlcnMs
IGxlbmd0aCwgYWxsb3dFbnRpdGllcyk7CisgICAgcmV0dXJuIGVuY29kZUNvbXBsZXhXaW5kb3dz
TGF0aW4xKGNoYXJhY3RlcnMsIGxlbmd0aCwgdW5lbmNvZGFibGUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5o
CShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRp
bjEuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7
CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVu
Z3RoLCBib29sIGZsdXNoID0gZmFsc2UpOwotICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2Rl
KGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2Up
OworICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxl
bmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwCShyZXZp
c2lvbiAzMDY1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBTdHJpbmcgVGV4dENvZGVjVVRGMTY6
OmRlY29kZShjb25zdCBjaGFyCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0K
IAotQ1N0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoLCBib29sKQorQ1N0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZW5jb2RlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5n
KQogewogICAgIGNoYXIqIGJ5dGVzOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3
VW5pbml0aWFsaXplZChsZW5ndGggKiAyLCBieXRlcyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGMTYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjVVRGMTYuaAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGMTYuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFRleHRDb2RlY1VURjE2KGJvb2wgbGl0dGxlRW5k
aWFuKSA6IG1fbGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbiksIG1faGF2ZUJ1ZmZlcmVkQnl0ZShm
YWxzZSkgeyB9CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBz
aXplX3QgbGVuZ3RoLCBib29sIGZsdXNoID0gZmFsc2UpOwotICAgICAgICB2aXJ0dWFsIENTdHJp
bmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVz
ID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBib29sIG1fbGl0dGxlRW5kaWFuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1VzZXJEZWZpbmVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCShyZXZpc2lvbiAzMDY1MCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDcgKzYyLDcgQEAgU3RyaW5nIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpkZWNvZGUoY29ucwog
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLXN0YXRpYyBDU3RyaW5nIGVu
Y29kZUNvbXBsZXhVc2VyRGVmaW5lZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzKQorc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFVz
ZXJEZWZpbmVkKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29k
YWJsZUhhbmRsaW5nIHVuZW5jb2RhYmxlKQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQobGVu
Z3RoKTsKICAgICBjaGFyKiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CkBAIC03NiwyMyArNzYsMTkg
QEAgc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKAogICAgICAgICAgICAg
Ynl0ZXNbcmVzdWx0TGVuZ3RoKytdID0gc2lnbmVkQnl0ZTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAvLyBObyB3YXkgdG8gZW5jb2RlIHRoaXMgY2hhcmFjdGVyIHdpdGggeC11c2VyLWRl
ZmluZWQuCi0gICAgICAgICAgICBpZiAoYWxsb3dFbnRpdGllcykgewotICAgICAgICAgICAgICAg
IGNoYXIgZW50aXR5QnVmZmVyWzE2XTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGVudGl0eUJ1
ZmZlciwgIiYjJXU7IiwgYyk7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGVudGl0eUxlbmd0aCA9
IHN0cmxlbihlbnRpdHlCdWZmZXIpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5ncm93KHJlc3Vs
dExlbmd0aCArIGVudGl0eUxlbmd0aCArIGxlbmd0aCAtIGkpOwotICAgICAgICAgICAgICAgIGJ5
dGVzID0gcmVzdWx0LmRhdGEoKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkoYnl0ZXMgKyByZXN1
bHRMZW5ndGgsIGVudGl0eUJ1ZmZlciwgZW50aXR5TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHRMZW5ndGggKz0gZW50aXR5TGVuZ3RoOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgYnl0ZXNbcmVzdWx0TGVuZ3RoKytdID0gJz8nOworICAgICAgICAgICAgY2hhciBy
ZXBsYWNlbWVudFszMl07CisgICAgICAgICAgICBpbnQgcmVwbGFjZW1lbnRMZW4gPSBUZXh0Q29k
ZWM6OnVuZW5jb2RhYmxlQ2hhclJlcGxhY2VtZW50KGMsIHVuZW5jb2RhYmxlLCByZXBsYWNlbWVu
dCk7CisgICAgICAgICAgICByZXN1bHQuZ3JvdyhyZXN1bHRMZW5ndGggKyByZXBsYWNlbWVudExl
biArIGxlbmd0aCAtIGkpOworICAgICAgICAgICAgYnl0ZXMgPSByZXN1bHQuZGF0YSgpOworICAg
ICAgICAgICAgbWVtY3B5KGJ5dGVzICsgcmVzdWx0TGVuZ3RoLCByZXBsYWNlbWVudCwgcmVwbGFj
ZW1lbnRMZW4pOworICAgICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IHJlcGxhY2VtZW50TGVuOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIENTdHJpbmcoYnl0ZXMsIHJlc3VsdExlbmd0
aCk7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjVXNlckRlZmluZWQ6OmVuY29kZShjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0VudGl0aWVzKQorQ1N0cmlu
ZyBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIHVuZW5jb2RhYmxlKQogewogICAgIGNo
YXIqIGJ5dGVzOwogICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ5dGVzKTsKQEAgLTEwOSw3ICsxMDUsNyBAQCBDU3RyaW5nIFRleHRDb2RlY1Vz
ZXJEZWZpbmVkOjplbmNvZGUoY29uCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAKICAgICAvLyBJ
ZiBpdCB3YXNuJ3QgYWxsIEFTQ0lJLCBjYWxsIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgbW9y
ZS1jb21wbGV4IGNhc2VzLgotICAgIHJldHVybiBlbmNvZGVDb21wbGV4VXNlckRlZmluZWQoY2hh
cmFjdGVycywgbGVuZ3RoLCBhbGxvd0VudGl0aWVzKTsKKyAgICByZXR1cm4gZW5jb2RlQ29tcGxl
eFVzZXJEZWZpbmVkKGNoYXJhY3RlcnMsIGxlbmd0aCwgdW5lbmNvZGFibGUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
VXNlckRlZmluZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjVXNlckRlZmluZWQuaAkocmV2aXNpb24gMzA2NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjVXNlckRlZmluZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNz
KFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNv
bnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoID0gZmFsc2UpOwotICAgICAgICB2
aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBh
bGxvd0VudGl0aWVzID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNv
bnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZy5jcHAJKHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgU3RyaW5nIFRl
eHRFbmNvZGluZzo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIHJldHVybiBUZXh0RGVjb2Rlcigq
dGhpcykuZGVjb2RlKGRhdGEsIGxlbmd0aCwgdHJ1ZSk7CiB9CiAKLUNTdHJpbmcgVGV4dEVuY29k
aW5nOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGJvb2wg
YWxsb3dFbnRpdGllcykgY29uc3QKK0NTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgdW5l
bmNvZGFibGUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25hbWUpCiAgICAgICAgIHJldHVybiBDU3Ry
aW5nKCk7CkBAIC0xMDAsMTEgKzEwMCwxMSBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2Rl
KGNvbnN0IFVDaGFyCiAgICAgICAgIHNvdXJjZSA9IG5vcm1hbGl6ZWRDaGFyYWN0ZXJzLmRhdGEo
KTsKICAgICAgICAgc291cmNlTGVuZ3RoID0gbm9ybWFsaXplZExlbmd0aDsKICAgICB9Ci0gICAg
cmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShzb3VyY2UsIHNvdXJjZUxlbmd0aCwg
YWxsb3dFbnRpdGllcyk7CisgICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShz
b3VyY2UsIHNvdXJjZUxlbmd0aCwgdW5lbmNvZGFibGUpOwogI2VsaWYgVVNFKFFUNF9VTklDT0RF
KQogICAgIFFTdHJpbmcgc3RyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihjaGFyYWN0
ZXJzKSwgbGVuZ3RoKTsKICAgICBzdHIgPSBzdHIubm9ybWFsaXplZChRU3RyaW5nOjpOb3JtYWxp
emF0aW9uRm9ybV9DKTsKLSAgICByZXR1cm4gbmV3VGV4dENvZGVjKCp0aGlzKS0+ZW5jb2RlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIgKj4oc3RyLnV0ZjE2KCkpLCBzdHIubGVuZ3RoKCks
IGFsbG93RW50aXRpZXMpOworICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhciAqPihzdHIudXRmMTYoKSksIHN0ci5sZW5ndGgo
KSwgdW5lbmNvZGFibGUpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nLmgJKHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFRl
eHRFbmNvZGluZ19oCiAjZGVmaW5lIFRleHRFbmNvZGluZ19oCiAKKyNpbmNsdWRlICJUZXh0Q29k
ZWMuaCIKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ3LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25z
dCBUZXh0RW5jb2RpbmcmIGNsb3Nlc3Q4Qml0RXF1aXZhbGVudCgpIGNvbnN0OwogCiAgICAgICAg
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgpIGNvbnN0OwotICAgICAg
ICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dF
bnRpdGllcyA9IGZhbHNlKSBjb25zdDsKKyAgICAgICAgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNo
YXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHAJKHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjYsNyArMjY2LDcgQEAgU3RyaW5nIFRleHRDb2RlY01hYzo6ZGVjb2RlKGNvbnN0IGNoYXIqIAog
ICAgIHJldHVybiByZXN1bHRTdHJpbmc7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjTWFjOjplbmNv
ZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRp
dGllcykKK0NTdHJpbmcgVGV4dENvZGVjTWFjOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgdW5lbmNvZGFibGUpCiB7CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFsbHkgdXNlIFRFQyBoZXJlIGluc3RlYWQgb2YgQ0ZT
dHJpbmcgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGRpcmVjdGlvbi4KIApAQCAtMjgw
LDcgKzI4MCw3IEBAIENTdHJpbmcgVGV4dENvZGVjTWFjOjplbmNvZGUoY29uc3QgVUNoYXIKICAg
ICBDRkluZGV4IGNoYXJhY3RlcnNMZWZ0ID0gQ0ZTdHJpbmdHZXRMZW5ndGgoY2ZzKTsKICAgICBW
ZWN0b3I8Y2hhcj4gcmVzdWx0OwogICAgIHNpemVfdCBzaXplID0gMDsKLSAgICBVSW50OCBsb3Nz
Qnl0ZSA9IGFsbG93RW50aXRpZXMgPyAwIDogJz8nOworICAgIFVJbnQ4IGxvc3NCeXRlID0gdW5l
bmNvZGFibGUgPT0gUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyA/ICc/JyA6IDA7CiAgICAg
d2hpbGUgKGNoYXJhY3RlcnNMZWZ0ID4gMCkgewogICAgICAgICBDRlJhbmdlIHJhbmdlID0gQ0ZS
YW5nZU1ha2Uoc3RhcnRQb3MsIGNoYXJhY3RlcnNMZWZ0KTsKICAgICAgICAgQ0ZJbmRleCBidWZm
ZXJMZW5ndGg7CkBAIC0zMDMsMTEgKzMwMywxMCBAQCBDU3RyaW5nIFRleHRDb2RlY01hYzo6ZW5j
b2RlKGNvbnN0IFVDaGFyCiAgICAgICAgICAgICAgICAgICAgICsrY2hhcmFjdGVyc0NvbnZlcnRl
ZDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFyIGVu
dGl0eUJ1ZmZlclsxNl07Ci0gICAgICAgICAgICBzcHJpbnRmKGVudGl0eUJ1ZmZlciwgIiYjJXU7
IiwgYmFkQ2hhcik7Ci0gICAgICAgICAgICBzaXplX3QgZW50aXR5TGVuZ3RoID0gc3RybGVuKGVu
dGl0eUJ1ZmZlcik7CisgICAgICAgICAgICBjaGFyIGVudGl0eVszMl07CisgICAgICAgICAgICBp
bnQgZW50aXR5TGVuZ3RoID0gdW5lbmNvZGFibGVDaGFyUmVwbGFjZW1lbnQoYmFkQ2hhciwgdW5l
bmNvZGFibGUsIGVudGl0eSk7CiAgICAgICAgICAgICByZXN1bHQuZ3JvdyhzaXplICsgZW50aXR5
TGVuZ3RoKTsKLSAgICAgICAgICAgIG1lbWNweShyZXN1bHQuZGF0YSgpICsgc2l6ZSwgZW50aXR5
QnVmZmVyLCBlbnRpdHlMZW5ndGgpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC5kYXRhKCkg
KyBzaXplLCBlbnRpdHksIGVudGl0eUxlbmd0aCk7CiAgICAgICAgICAgICBzaXplICs9IGVudGl0
eUxlbmd0aDsKICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1Rl
eHRDb2RlY01hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4
dENvZGVjTWFjLmgJKHJldmlzaW9uIDMwNjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9UZXh0Q29kZWNNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflRleHRDb2RlY01hYygpOwogCiAgICAgICAg
IHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBm
bHVzaCA9IGZhbHNlKTsKLSAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hh
ciosIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcyA9IGZhbHNlKTsKKyAgICAgICAg
dmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5j
b2RhYmxlSGFuZGxpbmcpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgT1NTdGF0dXMgZGVjb2Rl
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0QnVmZmVyLCBpbnQgaW5wdXRCdWZmZXJMZW5ndGgs
IGludCYgaW5wdXRMZW5ndGgsCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAz
MDY1MCkKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3QgU3RyaW5n
JiAKICAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2RpbmcoY2hhcnNldCk7CiAgICAgICAgIGlm
ICghbV9lbmNvZGluZy5pc1ZhbGlkKCkpIC8vIEZJWE1FOiByZXBvcnQgYW4gZXJyb3I/CiAgICAg
ICAgICAgICBtX2VuY29kaW5nID0gVVRGOEVuY29kaW5nKCk7Ci0gICAgICAgIHJlcXVlc3Quc2V0
SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShtX2VuY29kaW5nLmVuY29kZShib2R5LmNoYXJhY3Rl
cnMoKSwgYm9keS5sZW5ndGgoKSkpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3Jt
RGF0YTo6Y3JlYXRlKG1fZW5jb2RpbmcuZW5jb2RlKGJvZHkuY2hhcmFjdGVycygpLCBib2R5Lmxl
bmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykpKTsKICAgICB9CiAKICAgICBpZiAobV9y
ZXF1ZXN0SGVhZGVycy5zaXplKCkgPiAwKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzA3MzMpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAw
OC0wMy0wMyAgTWFydmluIERlY2tlciAgPG1hcnYuZGVja2VyQGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggYnVnIDE1MTE5LCB1
bmVuY29kYWJsZSBjaGFyYWN0ZXJzIGluIFVSTHMgc2hvdWxkIGJlIGVudGl0eS1lc2NhcGVkLgor
CisgICAgICAgICogaHR0cC90ZXN0cy91cmkvZXNjYXBlZC1lbnRpdHktZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3VyaS9lc2NhcGVkLWVudGl0eS5odG1sOiBBZGRl
ZC4KKwogMjAwOC0wMy0wMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy91cmkvZXNjYXBlZC1lbnRpdHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvdXJpL2VzY2FwZWQtZW50aXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2VzY2FwZWQtZW50aXR5LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBmb3IgYnVnIDE1MTE5OiBV
bnJlcHJlc2VudGFibGUgY2hhcmFjdGVycyBpbiBhIFVSTCdzIGNoYXJhY3RlciBzZXQgc2hvdWxk
IGJlIGNvbnZlcnRlZCB0byBlc2NhcGVkIGVudGl0aWVzLiBXZSB1c2UgdGhlIGNoYXJhY3RlciBV
KzA2REUgKNueKSB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBCaWctNS4KKworTm90ZSB0aGF0IHRo
aXMgZXhhY3QgcGFnZSB3b24ndCB3b3JrIGluIElFIG9yIEZpcmVmb3guIEZpcmVmb3ggc2VlbXMg
dG8gYWx3YXlzIHVzZSBVVEYtOCBmb3IgbG9jYWwgZmlsZXMsIGFuZCBJRSBhY3R1YWxseSBwcmVz
ZXJ2ZXMgdGhlIFVuaWNvZGUgaW4gdGhlIFVSTCB3aGVuIHdlIGdldCBpdCBmcm9tIEpTLCBzbyB3
ZSBkb24ndCBrbm93IHdoYXQgd291bGQgZ2V0IHNlbnQgb3ZlciB0aGUgd2lyZS4gSG93ZXZlciwg
Ym90aCBicm93c2VycyB3aWxsIHNlbmQgJTI2JTIzMTc1OCUzQiBvdmVyIEhUVFAgZm9yIHRoZSBx
dWVyeS4KKworIi91cmkvaW50ZXJjZXB0L3ByaW50L3NjcmlwdC5qcz8lMjYlMjMxNzU4JTNCIiAo
bm8gdGFyZ2V0IGNoYXJzZXQgc3BlY2lmaWVkLCBzaG91bGQgYmUgQmlnNSkKKyIvdXJpL2ludGVy
Y2VwdC9wcmludC9zY3JpcHQuanM/JTI2JTIzMTc1OCUzQiIgKEJpZzUgc3BlY2lmaWVkKQorU2hv
dyB0aGUgc291cmNlIGF0dHJpYnV0ZSBvZiB0aGUgc2NyaXB0cy4KKyJodHRwOi8vMTI3LjAuMC4x
OjgwMDAvdXJpL2ludGVyY2VwdC9wcmludC9zY3JpcHQuanM/JTI2JTIzMTc1OCUzQiIKKyJodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvdXJpL2ludGVyY2VwdC9wcmludC9zY3JpcHQuanM/JTI2JTIzMTc1
OCUzQiIKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy91cmkvZXNjYXBlZC1lbnRpdHku
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS9lc2NhcGVkLWVu
dGl0eS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy91cmkvZXNj
YXBlZC1lbnRpdHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorPGh0bWw+Cis8
aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s
OyBjaGFyc2V0PWJpZzUiPgorPC9oZWFkPgorPGJvZHk+CisKKzxzY3JpcHQ+CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+CisKKzxwPlRlc3QgZm9yIDxhIGhyZWY9J2h0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTE5Jz5idWcgMTUxMTk8L2E+OgorVW5y
ZXByZXNlbnRhYmxlIGNoYXJhY3RlcnMgaW4gYSBVUkwncyBjaGFyYWN0ZXIgc2V0IHNob3VsZCBi
ZSBjb252ZXJ0ZWQgdG8KK2VzY2FwZWQgZW50aXRpZXMuIFdlIHVzZSB0aGUgY2hhcmFjdGVyIFUr
MDZERSAoJiN4NmRlOykgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4KK0JpZy01LjwvcD4KKworPHA+
Tm90ZSB0aGF0IHRoaXMgZXhhY3QgcGFnZSB3b24ndCB3b3JrIGluIElFIG9yIEZpcmVmb3guIEZp
cmVmb3ggc2VlbXMgdG8KK2Fsd2F5cyB1c2UgVVRGLTggZm9yIGxvY2FsIGZpbGVzLCBhbmQgSUUg
YWN0dWFsbHkgcHJlc2VydmVzIHRoZSBVbmljb2RlIGluIHRoZQorVVJMIHdoZW4gd2UgZ2V0IGl0
IGZyb20gSlMsIHNvIHdlIGRvbid0IGtub3cgd2hhdCB3b3VsZCBnZXQgc2VudCBvdmVyIHRoZSB3
aXJlLgorSG93ZXZlciwgYm90aCBicm93c2VycyB3aWxsIHNlbmQgPHR0PiUyNiUyMzE3NTglM0I8
L3R0PiBvdmVyIEhUVFAgZm9yIHRoZQorcXVlcnkuPC9wPgorCisiPHNjcmlwdCBpZD1zY3IxIHNy
Yz0iaW50ZXJjZXB0L3ByaW50L3NjcmlwdC5qcz8mI3g2REU7Ij48L3NjcmlwdD4iIChubyB0YXJn
ZXQgY2hhcnNldCBzcGVjaWZpZWQsIHNob3VsZCBiZSBCaWc1KTxicj4KKyI8c2NyaXB0IGlkPXNj
cjIgY2hhcnNldD0iYmlnNSIgc3JjPSJpbnRlcmNlcHQvcHJpbnQvc2NyaXB0LmpzPyYjeDZERTsi
Pjwvc2NyaXB0PiIgKEJpZzUgc3BlY2lmaWVkKTxicj4KKworU2hvdyB0aGUgc291cmNlIGF0dHJp
YnV0ZSBvZiB0aGUgc2NyaXB0cy48YnI+Cis8c2NyaXB0PgorIHRyeSB7CisgIGRvY3VtZW50Lndy
aXRlKCciJyArIGRvY3VtZW50LnNjcmlwdHNbMV0uc3JjICsgJyI8YnI+Jyk7CisgIGRvY3VtZW50
LndyaXRlKCciJyArIGRvY3VtZW50LnNjcmlwdHNbMl0uc3JjICsgJyI8YnI+Jyk7CisgfSBjYXRj
aCAoZXgpIHsKKyAgZG9jdW1lbnQud3JpdGUoJyInICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InNjcjEiKS5zcmMgKyAnIjxicj4nKTsKKyAgZG9jdW1lbnQud3JpdGUoJyInICsgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInNjcjIiKS5zcmMgKyAnIjxicj4nKTsKKyB9Cis8L3NjcmlwdD4KKwor
PC9ib2R5PgorPC9odG1sPgorCg==
</data>
<flag name="review"
          id="8533"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>