<?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>8177</bug_id>
          
          <creation_ts>2006-04-04 06:36:38 -0700</creation_ts>
          <short_desc>Javascript search incredibly slow</short_desc>
          <delta_ts>2006-06-25 05:38:49 -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>DOM</component>
          <version>417.x</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew">akwb</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>38505</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew">akwb</who>
    <bug_when>2006-04-04 06:36:38 -0700</bug_when>
    <thetext>Hi,

This JavaScript function:

                        function selectd() {
                           for(var i=0;i&lt;document.fmain.user.options.length;i++) {
                              if (document.fmain.domain.options[i].value ==
                              document.fmain.user.options[document.fmain.user.selectedIndex].value) {
                                 document.fmain.domain.selectedIndex=i;
                              }
                           }
                        }
                        function selectu() {
                           for(var i=0;i&lt;document.fmain.domain.options.length;i++) {
                              if (document.fmain.user.options[i].value ==
                              document.fmain.domain.options[document.fmain.domain.selectedIndex].value) {
                                 document.fmain.user.selectedIndex=i;
                              }
                           }
                        }

Causes Safari to beachball for around 15 seconds before selecting the correct domain/username on a 1.5Ghz PowerBook, with 1.25GB or RAM runing Tiger. 

I can&apos;t give you a test case as this function is taken from WHM a script that requires root authentication on a server which naturally I can&apos;t put in a bug report. Basically there is a list of around 600 domains and a list of about 600 usernames, if the user clicks on the username it will search through the list of domains for the matching domain and vice-versa.

On the latest nightly the beachball spins for around 5-7 seconds, so there has been some improvement. However both FireFox and Opera select instantly, no noticable delay what-so-ever.

Andrew</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41007</commentid>
    <comment_count>1</comment_count>
      <attachid>8095</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-05-03 07:04:15 -0700</bug_when>
    <thetext>Created attachment 8095
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41011</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-05-03 07:10:31 -0700</bug_when>
    <thetext>I can confirm that this test case runs slower in Safari/WebKit than in Firefox, but not nearly as much (about 1 second in the latest nightly, about 5 seconds in 10.4.6, and that&apos;s a G4/867DP).

Reporter, do you see any important difference between my test case and yours? Also, could you please capture a sample of what happens during the freeze? Spin Control from Developer Tools would do it automatically, or you can use Activity Monitor if you don&apos;t have Developer Tools installed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41315</commentid>
    <comment_count>3</comment_count>
    <who name="Andrew">akwb</who>
    <bug_when>2006-05-05 06:32:46 -0700</bug_when>
    <thetext>Your test case does cause a beachball but for no where near as long as the original code. The format of the original code is:

 &lt;select size=&quot;7&quot; name=&quot;domain&quot; onChange=&quot;selectu();&quot;&gt;

			&lt;option value=&quot;lnj23jkn6&quot;&gt;1q1fhewsdax.com&lt;/option&gt;
			&lt;option value=&quot;wadsa266&quot;&gt;1tasda2122.co.uk&lt;/option&gt;

But there are 600+ option values, each of which is different and 9 characters long.

The other part of the script is like this:

&lt;select size=&quot;7&quot; name=&quot;user&quot; onChange=&quot;selectd();&quot;&gt;

			&lt;option value=&quot;lnj23jkn6&quot;&gt;lnj23jkn6&lt;/option&gt;
			&lt;option value=&quot;wadsa266&quot;&gt;wadsa266&lt;/option&gt;

But there are 600+ option values.

When selecting a value from the list with the code on the original page as described here Activity Monitor went from single figures for CPU usage up to 85% until the beach ball stopped.

I apologise for not having the skill to write a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45836</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-06-15 13:32:27 -0700</bug_when>
    <thetext>As a workaround, you can take most DOM accesses out of the loop - this makes the code run really fast. In my example, this suggestion corresponds to:

function selectd() {
   user = document.fmain.user;
   domain = document.fmain.domain;
   useroptions = document.fmain.user.options;
   domainoptions = document.fmain.domain.options;
   for (var i=0; i &lt; useroptions.length; i++) {
	  if (domainoptions[i].value == useroptions[user.selectedIndex].value) {
		 domain.selectedIndex=i;
	  }
   }
}

Speaking about a possible fix in WebCore, looks like the lengths of HTMLCollections need to be cached better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45844</commentid>
    <comment_count>5</comment_count>
    <who name="Andrew">akwb</who>
    <bug_when>2006-06-15 16:07:40 -0700</bug_when>
    <thetext>Alexey, thanks for your reply. Unfortunately this is not my code, it is code from a piece of software (WHM) that I am forced to use in my daily job. Therefore I can&apos;t change it. It would however seem to be a WebCore bug as the code as is runs instantly in Presto/Gecko!

Looking forward to your solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46080</commentid>
    <comment_count>6</comment_count>
      <attachid>8882</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-06-17 06:02:15 -0700</bug_when>
    <thetext>Created attachment 8882
proposed patch

Use shared CollectionInfos for HTMLOptionsCollection and HTMLNameCollection, too.

The test runs perfectly fast now. A test with 2000 options also runs fast (no visible delay, a nice change from tens of seconds), but it still takes several seconds to open, because the DOM version keeps changing, which defeats caching:
   for (var i=0; i &lt; 2000; i++)
	document.fmain.user.options[i] = new Option(&quot;User &quot; + i, i);

I couldn&apos;t understand why the other collections (images, applets, all etc.) were returned from Document, but were only shared for HTMLDocuments. I just did the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46288</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-19 11:14:46 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I couldn&apos;t understand why the other collections (images, applets, all etc.)
&gt; were returned from Document, but were only shared for HTMLDocuments. I just did
&gt; the same.

That&apos;s just a bug. We should fix that. In general, an XML document with XHTML elements in it should do almost everything the same as an HTML document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46299</commentid>
    <comment_count>8</comment_count>
      <attachid>8882</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-19 13:37:21 -0700</bug_when>
    <thetext>Comment on attachment 8882
proposed patch

m_CollectionInfo should be m_collectionInfo (both of them) and m_NameCollectionInfo should be m_nameCollectionInfo.

NUM_CACHEABLE_TYPES no longer seems to be a good name since now it&apos;s just the dividing line between ones that have no name and ones that have a name. Also no need for it to be all capitals -- macros are supposed to have all capital names, but that&apos;s not appropriate for enums or constants (I know, preexisting issue, not something you did).

+    HashMap&lt;String, HTMLCollection::CollectionInfo&gt;::iterator iter = map.find(name);
+    if (iter != map.end())
+        return &amp;iter-&gt;second;
+    
+    return &amp;map.add(name, HTMLCollection::CollectionInfo()).first-&gt;second;

I think it would be cool to just say:

    if (iter == map.end())
        iter = map.add(name, ...);

to collapse the two cases into one.

Is there goint to be trouble having lots of cached collections under different names, with no limit on the number? Could this lead to memory bloat?

Otherwise looks great.

review- just for the nitpicks above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46566</commentid>
    <comment_count>9</comment_count>
      <attachid>8951</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-06-21 11:44:38 -0700</bug_when>
    <thetext>Created attachment 8951
proposed patch

Addressed the comments. Also changed the HashMap to use AtomicStringImpl*.

Of course, one can create an example for which this patch increases memory requirements significantly, but this is not much different from the existing m_elementsById or m_selectedRadioButtons caches... It&apos;s hard for me to estimate whether this is a practical issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46570</commentid>
    <comment_count>10</comment_count>
      <attachid>8952</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-06-21 12:39:54 -0700</bug_when>
    <thetext>Created attachment 8952
proposed patch

Oops, broke the build with a last-minute change. Should be better now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46916</commentid>
    <comment_count>11</comment_count>
      <attachid>8952</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-23 21:33:16 -0700</bug_when>
    <thetext>Comment on attachment 8952
proposed patch

Really unfortunate to introduce HTMLCollection.h into Document.h, but I suppose unavoidable.

+    HTMLCollection::CollectionInfo* nameCollectionInfo(int type, const String&amp; name);

Can the above be an enum instead of int?

Nice patch, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46944</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-06-24 05:50:33 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Can the above be an enum instead of int?
Fixed.

Committed revision 15006.

Reporter, could you please use a nightly build to verify that this fixes the original issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46945</commentid>
    <comment_count>13</comment_count>
    <who name="Andrew">akwb</who>
    <bug_when>2006-06-24 06:22:40 -0700</bug_when>
    <thetext>I cannot test the proposed fix as the latest nightly (Jun 24) fails to launch for me. I will try again soon.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46946</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-06-24 06:28:32 -0700</bug_when>
    <thetext>Anyway, the latest nightly is r15004 at the moment, so the fix is not there yet :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46970</commentid>
    <comment_count>15</comment_count>
    <who name="Andrew">akwb</who>
    <bug_when>2006-06-24 08:33:30 -0700</bug_when>
    <thetext>I was too quick hehe! :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47060</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-06-24 15:25:12 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; the latest nightly (Jun 24) fails to launch for me. I will try again soon.

  BTW: many Safari enhancers, such as PithHelmet, make WebKit crash on launch now. This is extremely unfortunate, but there isn&apos;t much that we can do about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47103</commentid>
    <comment_count>17</comment_count>
    <who name="Andrew">akwb</who>
    <bug_when>2006-06-25 05:38:49 -0700</bug_when>
    <thetext>Thanks for the tip, I removed all the extras and WebKit launched. I&apos;m pleased to report this bug is resolved! Now all I have to do is wait for Safari to be released with this version of WebKit (how many months is that going to be, sigh!).

I appreciate your help and fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>8095</attachid>
            <date>2006-05-03 07:04:15 -0700</date>
            <delta_ts>2006-05-03 07:04:15 -0700</delta_ts>
            <desc>test case</desc>
            <filename>slowsearch.html</filename>
            <type>text/html</type>
            <size>691</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGJvZHkgb25sb2FkPSJsb2FkKCkiPgoKPGZvcm0gaWQ9Zm1haW4gbmFtZT1mbWFpbiBhY3Rpb249
IiMiPgo8c2VsZWN0IGlkPXVzZXIgbmFtZT11c2VyIG9uY2hhbmdlPSJqYXZhc2NyaXB0OnNlbGVj
dGQoKTtyZXR1cm4gZmFsc2U7Ij4KPC9zZWxlY3Q+Cgo8c2VsZWN0IGlkPWRvbWFpbiBuYW1lPWRv
bWFpbj4KPC9zZWxlY3Q+CjwvZm9ybT4KCjxzY3JpcHQ+CmZ1bmN0aW9uIHNlbGVjdGQoKSB7CiAg
IGZvcih2YXIgaT0wO2kgPCBkb2N1bWVudC5mbWFpbi51c2VyLm9wdGlvbnMubGVuZ3RoO2krKykg
ewoJICBpZiAoZG9jdW1lbnQuZm1haW4uZG9tYWluLm9wdGlvbnNbaV0udmFsdWUgPT0gZG9jdW1l
bnQuZm1haW4udXNlci5vcHRpb25zW2RvY3VtZW50LmZtYWluLnVzZXIuc2VsZWN0ZWRJbmRleF0u
dmFsdWUpIHsKCQkgZG9jdW1lbnQuZm1haW4uZG9tYWluLnNlbGVjdGVkSW5kZXg9aTsKCSAgfQog
ICB9Cn0KCmZ1bmN0aW9uIGxvYWQoKSB7CiAgIGZvcih2YXIgaT0wOyBpIDwgNjAwOyBpKyspCglk
b2N1bWVudC5mbWFpbi51c2VyLm9wdGlvbnNbaV0gPSBuZXcgT3B0aW9uKCJVc2VyICIgKyBpLCBp
KTsKCiAgIGZvcih2YXIgaT0wOyBpIDwgNjAwOyBpKyspCglkb2N1bWVudC5mbWFpbi5kb21haW4u
b3B0aW9uc1tpXSA9IG5ldyBPcHRpb24oIkRvbWFpbiAiICsgaSwgaSk7Cn0KPC9zY3JpcHQ+Cgo8
L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8882</attachid>
            <date>2006-06-17 06:02:15 -0700</date>
            <delta_ts>2006-06-21 11:44:38 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>8177r1_patch.txt</filename>
            <type>text/plain</type>
            <size>5189</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxNDgzOCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw4IEBAIHB1Ymxp
YzoKICAgICB9OwogCiAgICAgZW51bSB7Ci0gICAgICAgIE5VTV9DQUNIRUFCTEVfVFlQRVMgPSBO
T0RFX0NISUxEUkVOICsgMQorICAgICAgICBOVU1fQ0FDSEVBQkxFX1RZUEVTID0gTk9ERV9DSElM
RFJFTiArIDEsCisgICAgICAgIE5VTV9DT0xMRUNUSU9OX1RZUEVTID0gRE9DVU1FTlRfTkFNRURf
SVRFTVMgKyAxCiAgICAgfTsKIAogICAgIEhUTUxDb2xsZWN0aW9uKE5vZGUgKl9iYXNlLCBpbnQg
X3R5cGUpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDE0ODM4KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMs
MTkgQEAgYm9vbCBIVE1MRG9jdW1lbnQ6Omhhc0RvY0V4dHJhTmFtZWRJdGVtKAogICAgIHJldHVy
biBkb2NFeHRyYU5hbWVkSXRlbUNvdW50cy5nZXQobmFtZS5pbXBsKCkpICE9IDA7CiB9CiAKK0hU
TUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyogSFRNTERvY3VtZW50OjpuYW1lQ29sbGVjdGlv
bkluZm8oaW50IHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQodHlwZSA+
PSBIVE1MQ29sbGVjdGlvbjo6TlVNX0NBQ0hFQUJMRV9UWVBFUyk7CisgICAgQVNTRVJUKHR5cGUg
PCBIVE1MQ29sbGVjdGlvbjo6TlVNX0NPTExFQ1RJT05fVFlQRVMpOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8+JiBtYXAgPSBtX05hbWVDb2xsZWN0
aW9uSW5mb1t0eXBlIC0gSFRNTENvbGxlY3Rpb246Ok5VTV9DQUNIRUFCTEVfVFlQRVNdOworICAg
IAorICAgIEhhc2hNYXA8U3RyaW5nLCBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8+Ojpp
dGVyYXRvciBpdGVyID0gbWFwLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbWFwLmVuZCgp
KQorICAgICAgICByZXR1cm4gJml0ZXItPnNlY29uZDsKKyAgICAKKyAgICByZXR1cm4gJm1hcC5h
ZGQobmFtZSwgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKCkpLmZpcnN0LT5zZWNvbmQ7
Cit9CisKIGNvbnN0IGludCBQQVJTRU1PREVfSEFWRV9ET0NUWVBFICAgICAgICA9ICAgICAgICgx
PDwwKTsKIGNvbnN0IGludCBQQVJTRU1PREVfSEFWRV9QVUJMSUNfSUQgICAgICA9ICAgICAgICgx
PDwxKTsKIGNvbnN0IGludCBQQVJTRU1PREVfSEFWRV9TWVNURU1fSUQgICAgICA9ICAgICAgICgx
PDwyKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHJldmlzaW9uIDE0ODM4KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMiArNjgsMTQgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzRG9jRXh0cmFOYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKTsK
IAogICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyogY29sbGVjdGlvbkluZm8oaW50
IHR5cGUpCi0gICAgeyAKKyAgICB7CiAgICAgICAgIGlmICh0eXBlIDwgSFRNTENvbGxlY3Rpb246
Ok5VTV9DQUNIRUFCTEVfVFlQRVMpIAotICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbl9p
bmZvICsgdHlwZTsgCisgICAgICAgICAgICByZXR1cm4gbV9Db2xsZWN0aW9uSW5mbyArIHR5cGU7
IAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBIVE1MQ29sbGVjdGlvbjo6Q29sbGVj
dGlvbkluZm8qIG5hbWVDb2xsZWN0aW9uSW5mbyhpbnQgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgaW50PiBOYW1lQ291bnRNYXA7
CiAKIHByb3RlY3RlZDoKQEAgLTgxLDcgKzgzLDggQEAgcHJvdGVjdGVkOgogICAgIEhUTUxFbGVt
ZW50KiBodG1sRWxlbWVudDsKIAogcHJpdmF0ZToKLSAgICBIVE1MQ29sbGVjdGlvbjo6Q29sbGVj
dGlvbkluZm8gbV9jb2xsZWN0aW9uX2luZm9bSFRNTENvbGxlY3Rpb246Ok5VTV9DQUNIRUFCTEVf
VFlQRVNdOworICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyBtX0NvbGxlY3Rpb25J
bmZvW0hUTUxDb2xsZWN0aW9uOjpOVU1fQ0FDSEVBQkxFX1RZUEVTXTsKKyAgICBIYXNoTWFwPFN0
cmluZywgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvPiBtX05hbWVDb2xsZWN0aW9uSW5m
b1tIVE1MQ29sbGVjdGlvbjo6TlVNX0NPTExFQ1RJT05fVFlQRVMgLSBIVE1MQ29sbGVjdGlvbjo6
TlVNX0NBQ0hFQUJMRV9UWVBFU107CiAKICAgICBOYW1lQ291bnRNYXAgbmFtZWRJdGVtQ291bnRz
OwogICAgIE5hbWVDb3VudE1hcCBkb2NFeHRyYU5hbWVkSXRlbUNvdW50czsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNDgzOCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVDb2xsZWN0aW9uLmgiCiAK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT2Jq
ZWN0RWxlbWVudC5oIgogCkBAIC0zOCwxMSArMzgsMTUgQEAgSFRNTE5hbWVDb2xsZWN0aW9uOjpI
VE1MTmFtZUNvbGxlY3Rpb24oRAogICAgIDogSFRNTENvbGxlY3Rpb24oYmFzZSwgdHlwZSkKICAg
ICAsIG1fbmFtZShuYW1lKQogeworICAgIEFTU0VSVCghaW5mbyk7CisKKyAgICBpZiAoYmFzZS0+
aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgaW5mbyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCo+KGJhc2UpLT5uYW1lQ29sbGVjdGlvbkluZm8odHlwZSwgbmFtZSk7CiB9CiAKIE5vZGUqIEhU
TUxOYW1lQ29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0SXRlbShOb2RlKiBjdXJyZW50KSBjb25zdAog
ewotICAgIGFzc2VydChjdXJyZW50KTsKKyAgICBBU1NFUlQoY3VycmVudCk7CiAKICAgICBjdXJy
ZW50ID0gY3VycmVudC0+dHJhdmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0KCkpOwogCkBAIC03OCw3
ICs4Miw3IEBAIE5vZGUqIEhUTUxOYW1lQ29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0SXQKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4oZSktPmlz
RG9jTmFtZWRJdGVtKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
MCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChmb3VuZCkKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNDgzOCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6SFRN
TE9wdGlvbnNDb2xsZWN0aW9uKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QpCiAgICAgOiBIVE1M
Q29sbGVjdGlvbihzZWxlY3QsIFNFTEVDVF9PUFRJT05TKQogeworICAgIEFTU0VSVCghaW5mbyk7
CisKKyAgICBpbmZvID0gc2VsZWN0LT5jb2xsZWN0aW9uSW5mbygpOwogfQogCiB2b2lkIEhUTUxP
cHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKHVuc2lnbmVkLCBFeGNlcHRpb25Db2RlJiBlYykK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAxNDgzOCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIEhUTUxfSFRNTFNlbGVjdEVsZW1lbnRJbXBsX0gKIAogI2luY2x1ZGUgIkhU
TUxHZW5lcmljRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEyLDYgKzEx
Myw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgTm9kZSogbmFtZWRJdGVtKGNvbnN0IFN0cmlu
ZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSk7CiAKKyAgICBIVE1MQ29sbGVjdGlv
bjo6Q29sbGVjdGlvbkluZm8qIGNvbGxlY3Rpb25JbmZvKCkgeyByZXR1cm4gJm1fQ29sbGVjdGlv
bkluZm87IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHJlY2FsY0xpc3RJdGVtcygpOwogCkBAIC0x
MjAsNiArMTIzLDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zaXplOwogICAgIGJvb2wgbV9tdWx0
aXBsZTsKICAgICBib29sIG1fcmVjYWxjTGlzdEl0ZW1zOworICAgIAorICAgIEhUTUxDb2xsZWN0
aW9uOjpDb2xsZWN0aW9uSW5mbyBtX0NvbGxlY3Rpb25JbmZvOwogfTsKIAogfSAvL25hbWVzcGFj
ZQo=
</data>
<flag name="review"
          id="2592"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8951</attachid>
            <date>2006-06-21 11:44:38 -0700</date>
            <delta_ts>2006-06-21 12:39:54 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>8177r2_patch.txt</filename>
            <type>text/plain</type>
            <size>25832</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAxNDk0NCkKKysrIFdlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNyArMzkz
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogLSAoRE9NSFRNTENvbGxlY3Rpb24g
KiljaGlsZHJlbgogewotICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3IEhUTUxD
b2xsZWN0aW9uKFtzZWxmIF9IVE1MRWxlbWVudF0sIEhUTUxDb2xsZWN0aW9uOjpOT0RFX0NISUxE
UkVOKTsKKyAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IG5ldyBIVE1MQ29sbGVjdGlv
bihbc2VsZiBfSFRNTEVsZW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6Tm9kZUNoaWxkcmVuKTsKICAg
ICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0aW9uXTsK
IH0KIApAQCAtNDUzLDMxICs0NTMsMzEgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
LSAoRE9NSFRNTENvbGxlY3Rpb24gKilpbWFnZXMKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiAqY29s
bGVjdGlvbiA9IG5ldyBIVE1MQ29sbGVjdGlvbihbc2VsZiBfSFRNTERvY3VtZW50XSwgSFRNTENv
bGxlY3Rpb246OkRPQ19JTUFHRVMpOworICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0g
bmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF9IVE1MRG9jdW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6
RG9jSW1hZ2VzKTsKICAgICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0
aDpjb2xsZWN0aW9uXTsKIH0KIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKilhcHBsZXRzCiB7Ci0g
ICAgSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3NlbGYg
X0hUTUxEb2N1bWVudF0sIEhUTUxDb2xsZWN0aW9uOjpET0NfQVBQTEVUUyk7CisgICAgSFRNTENv
bGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3NlbGYgX0hUTUxEb2N1
bWVudF0sIEhUTUxDb2xsZWN0aW9uOjpEb2NBcHBsZXRzKTsKICAgICByZXR1cm4gW0RPTUhUTUxD
b2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0aW9uXTsKIH0KIAogLSAoRE9NSFRNTENv
bGxlY3Rpb24gKilsaW5rcwogewotICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3
IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF9IVE1MRG9jdW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6RE9D
X0xJTktTKTsKKyAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IG5ldyBIVE1MQ29sbGVj
dGlvbihbc2VsZiBfSFRNTERvY3VtZW50XSwgSFRNTENvbGxlY3Rpb246OkRvY0xpbmtzKTsKICAg
ICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0aW9uXTsK
IH0KIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKilmb3JtcwogewotICAgIEhUTUxDb2xsZWN0aW9u
ICpjb2xsZWN0aW9uID0gbmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF9IVE1MRG9jdW1lbnRdLCBI
VE1MQ29sbGVjdGlvbjo6RE9DX0ZPUk1TKTsKKyAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlv
biA9IG5ldyBIVE1MQ29sbGVjdGlvbihbc2VsZiBfSFRNTERvY3VtZW50XSwgSFRNTENvbGxlY3Rp
b246OkRvY0Zvcm1zKTsKICAgICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9u
V2l0aDpjb2xsZWN0aW9uXTsKIH0KIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKilhbmNob3JzCiB7
Ci0gICAgSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3Nl
bGYgX0hUTUxEb2N1bWVudF0sIEhUTUxDb2xsZWN0aW9uOjpET0NfQU5DSE9SUyk7CisgICAgSFRN
TENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3NlbGYgX0hUTUxE
b2N1bWVudF0sIEhUTUxDb2xsZWN0aW9uOjpEb2NBbmNob3JzKTsKICAgICByZXR1cm4gW0RPTUhU
TUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0aW9uXTsKIH0KIApAQCAtMjgzOCw3
ICsyODM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogLSAoRE9NSFRNTENvbGxl
Y3Rpb24gKilhcmVhcwogewotICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3IEhU
TUxDb2xsZWN0aW9uKFtzZWxmIF9tYXBFbGVtZW50XSwgSFRNTENvbGxlY3Rpb246Ok1BUF9BUkVB
Uyk7CisgICAgSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24o
W3NlbGYgX21hcEVsZW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6TWFwQXJlYXMpOwogICAgIHJldHVy
biBbRE9NSFRNTENvbGxlY3Rpb24gX2NvbGxlY3Rpb25XaXRoOmNvbGxlY3Rpb25dOwogfQogCkBA
IC0zMTA3LDcgKzMxMDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAtIChET01I
VE1MQ29sbGVjdGlvbiAqKXJvd3MKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9
IG5ldyBIVE1MQ29sbGVjdGlvbihbc2VsZiBfdGFibGVTZWN0aW9uRWxlbWVudF0sIEhUTUxDb2xs
ZWN0aW9uOjpUQUJMRV9ST1dTKTsKKyAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IG5l
dyBIVE1MQ29sbGVjdGlvbihbc2VsZiBfdGFibGVTZWN0aW9uRWxlbWVudF0sIEhUTUxDb2xsZWN0
aW9uOjpUYWJsZVJvd3MpOwogICAgIHJldHVybiBbRE9NSFRNTENvbGxlY3Rpb24gX2NvbGxlY3Rp
b25XaXRoOmNvbGxlY3Rpb25dOwogfQogCkBAIC0zMTc2LDEzICszMTc2LDEzIEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKIC0gKERPTUhUTUxDb2xsZWN0aW9uICopcm93cwogewotICAg
IEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF90
YWJsZUVsZW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6VEFCTEVfUk9XUyk7CisgICAgSFRNTENvbGxl
Y3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3NlbGYgX3RhYmxlRWxlbWVu
dF0sIEhUTUxDb2xsZWN0aW9uOjpUYWJsZVJvd3MpOwogICAgIHJldHVybiBbRE9NSFRNTENvbGxl
Y3Rpb24gX2NvbGxlY3Rpb25XaXRoOmNvbGxlY3Rpb25dOwogfQogCiAtIChET01IVE1MQ29sbGVj
dGlvbiAqKXRCb2RpZXMKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IG5ldyBI
VE1MQ29sbGVjdGlvbihbc2VsZiBfdGFibGVFbGVtZW50XSwgSFRNTENvbGxlY3Rpb246OlRBQkxF
X1RCT0RJRVMpOworICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3IEhUTUxDb2xs
ZWN0aW9uKFtzZWxmIF90YWJsZUVsZW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6VGFibGVUQm9kaWVz
KTsKICAgICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0
aW9uXTsKIH0KIApAQCAtMzQyOCw3ICszNDI4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKiljZWxscwogewotICAgIEhUTUxDb2xsZWN0aW9u
ICpjb2xsZWN0aW9uID0gbmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF90YWJsZVJvd0VsZW1lbnRd
LCBIVE1MQ29sbGVjdGlvbjo6VFJfQ0VMTFMpOworICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0
aW9uID0gbmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF90YWJsZVJvd0VsZW1lbnRdLCBIVE1MQ29s
bGVjdGlvbjo6VFJDZWxscyk7CiAgICAgcmV0dXJuIFtET01IVE1MQ29sbGVjdGlvbiBfY29sbGVj
dGlvbldpdGg6Y29sbGVjdGlvbl07CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE0OTQ0
KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYyLDU3
ICszMTYyLDcwIEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZVJhZGlvQnV0dG9uR3JvdXAoQXQKIAog
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmltYWdlcygpCiB7Ci0gICAgcmV0
dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RE9DX0lNQUdFUyk7
CisgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9j
SW1hZ2VzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFwcGxl
dHMoKQogewotICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rp
b246OkRPQ19BUFBMRVRTKTsKKyAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhU
TUxDb2xsZWN0aW9uOjpEb2NBcHBsZXRzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gRG9jdW1lbnQ6OmVtYmVkcygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0
aGlzLCBIVE1MQ29sbGVjdGlvbjo6RE9DX0VNQkVEUyk7CisgICAgcmV0dXJuIG5ldyBIVE1MQ29s
bGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jRW1iZWRzKTsKIH0KIAogUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6Om9iamVjdHMoKQogewotICAgIHJldHVybiBuZXcg
SFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRPQ19PQkpFQ1RTKTsKKyAgICBy
ZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NPYmplY3Rz
KTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OnNjcmlwdHMoKQog
ewotICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRP
Q19TQ1JJUFRTKTsKKyAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xs
ZWN0aW9uOjpEb2NTY3JpcHRzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9j
dW1lbnQ6OmxpbmtzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhU
TUxDb2xsZWN0aW9uOjpET0NfTElOS1MpOworICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24o
dGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0xpbmtzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gRG9jdW1lbnQ6OmZvcm1zKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0
aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpET0NfRk9STVMpOworICAgIHJldHVybiBuZXcgSFRN
TENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0Zvcm1zKTsKIH0KIAogUGFzc1Jl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFuY2hvcnMoKQogewotICAgIHJldHVybiBu
ZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRPQ19BTkNIT1JTKTsKKyAg
ICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NBbmNo
b3JzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFsbCgpCiB7
Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RE9D
X0FMTCk7CisgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlv
bjo6RG9jQWxsKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6Ondp
bmRvd05hbWVkSXRlbXMoY29uc3QgU3RyaW5nICZuYW1lKQogewotICAgIHJldHVybiBuZXcgSFRN
TE5hbWVDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpXSU5ET1dfTkFNRURfSVRFTVMs
IG5hbWUpOworICAgIHJldHVybiBuZXcgSFRNTE5hbWVDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xs
ZWN0aW9uOjpXaW5kb3dOYW1lZEl0ZW1zLCBuYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBTdHJpbmcgJm5hbWUp
CiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MTmFtZUNvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rp
b246OkRPQ1VNRU5UX05BTUVEX0lURU1TLCBuYW1lKTsKKyAgICByZXR1cm4gbmV3IEhUTUxOYW1l
Q29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jdW1lbnROYW1lZEl0ZW1zLCBuYW1l
KTsKK30KKworSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKiBEb2N1bWVudDo6bmFtZUNv
bGxlY3Rpb25JbmZvKGludCB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJU
KHR5cGUgPj0gSFRNTENvbGxlY3Rpb246OlVubmFtZWRDb2xsZWN0aW9uVHlwZXMpOworICAgIEFT
U0VSVCh0eXBlIDwgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25UeXBlcyk7CisgICAgSGFzaE1h
cDxTdHJpbmcsIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbz4mIG1hcCA9IG1fbmFtZUNv
bGxlY3Rpb25JbmZvW3R5cGUgLSBIVE1MQ29sbGVjdGlvbjo6VW5uYW1lZENvbGxlY3Rpb25UeXBl
c107CisgICAgCisgICAgSGFzaE1hcDxTdHJpbmcsIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9u
SW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtYXAuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciA9PSBt
YXAuZW5kKCkpCisgICAgICAgIGl0ZXIgPSBtYXAuYWRkKEF0b21pY1N0cmluZyhuYW1lKS5pbXBs
KCksIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbygpKS5maXJzdDsKKyAgICAKKyAgICBy
ZXR1cm4gJml0ZXItPnNlY29uZDsKIH0KIAogUGFzc1JlZlB0cjxOYW1lTm9kZUxpc3Q+IERvY3Vt
ZW50OjpnZXRFbGVtZW50c0J5TmFtZShjb25zdCBTdHJpbmcgJmVsZW1lbnROYW1lKQpJbmRleDog
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCShyZXZpc2lvbiAxNDk0NCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgog
I2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJr
ZXIuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgpA
QCAtNjYsNyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRXZlbnRMaXN0
ZW5lcjsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBGcmFtZVZpZXc7Ci0gICAgY2xhc3Mg
SFRNTENvbGxlY3Rpb247CiAgICAgY2xhc3MgSFRNTERvY3VtZW50OwogICAgIGNsYXNzIEhUTUxF
bGVtZW50OwogICAgIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKQEAgLTIwNSw2ICsyMDUsMTUgQEAg
cHVibGljOgogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHdpbmRvd05hbWVkSXRlbXMo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBkb2N1
bWVudE5hbWVkSXRlbXMoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAorICAgIEhUTUxDb2xsZWN0aW9u
OjpDb2xsZWN0aW9uSW5mbyogY29sbGVjdGlvbkluZm8oaW50IHR5cGUpCisgICAgeworICAgICAg
ICBpZiAodHlwZSA8IEhUTUxDb2xsZWN0aW9uOjpVbm5hbWVkQ29sbGVjdGlvblR5cGVzKSAKKyAg
ICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb25JbmZvICsgdHlwZTsgCisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyogbmFtZUNv
bGxlY3Rpb25JbmZvKGludCB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCiAgICAgLy8gRE9N
IG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogCiAgICAgdmlydHVhbCBT
dHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKQEAgLTc2OSw2ICs3NzgsOSBAQCBwcml2YXRlOgogICAg
IHR5cGVkZWYgSGFzaE1hcDxIVE1MRm9ybUVsZW1lbnQqLCBOYW1lVG9JbnB1dE1hcCo+IEZvcm1U
b0dyb3VwTWFwOwogICAgIEZvcm1Ub0dyb3VwTWFwIG1fc2VsZWN0ZWRSYWRpb0J1dHRvbnM7CiAg
ICAgCisgICAgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvIG1fY29sbGVjdGlvbkluZm9b
SFRNTENvbGxlY3Rpb246OlVubmFtZWRDb2xsZWN0aW9uVHlwZXNdOworICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nSW1wbCosIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbz4gbV9uYW1lQ29s
bGVjdGlvbkluZm9bSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25UeXBlcyAtIEhUTUxDb2xsZWN0
aW9uOjpVbm5hbWVkQ29sbGVjdGlvblR5cGVzXTsKKwogI2lmIFhQQVRIX1NVUFBPUlQKICAgICBS
ZWZQdHI8WFBhdGhFdmFsdWF0b3I+IG1feHBhdGhFdmFsdWF0b3I7CiAjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTQ5NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBAIEhUTUxDb2xs
ZWN0aW9uOjpIVE1MQ29sbGVjdGlvbihOb2RlICpfYmEKICAgICAgIGlkc0RvbmUoZmFsc2UpLAog
ICAgICAgbV9vd25zSW5mbyhmYWxzZSkKIHsKLSAgICBpZiAoX2Jhc2UtPmlzRG9jdW1lbnROb2Rl
KCkgJiYgX2Jhc2UtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGluZm8g
PSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihfYmFzZS0+ZG9jdW1lbnQoKSktPmNvbGxlY3Rp
b25JbmZvKHR5cGUpOworICAgIGlmIChfYmFzZS0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAg
aW5mbyA9IF9iYXNlLT5kb2N1bWVudCgpLT5jb2xsZWN0aW9uSW5mbyh0eXBlKTsKIH0KIAogSFRN
TENvbGxlY3Rpb246On5IVE1MQ29sbGVjdGlvbigpCkBAIC05OCw3ICs5OCw3IEBAIE5vZGUgKkhU
TUxDb2xsZWN0aW9uOjp0cmF2ZXJzZU5leHRJdGVtKE4KIHsKICAgICBhc3NlcnQoY3VycmVudCk7
CiAKLSAgICBpZiAodHlwZSA9PSBOT0RFX0NISUxEUkVOICYmIG1fYmFzZS5nZXQoKSAhPSBjdXJy
ZW50KQorICAgIGlmICh0eXBlID09IE5vZGVDaGlsZHJlbiAmJiBtX2Jhc2UuZ2V0KCkgIT0gY3Vy
cmVudCkKICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgZWxz
ZQogICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+dHJhdmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0
KCkpOwpAQCAtMTA5LDcxICsxMDksNzEgQEAgTm9kZSAqSFRNTENvbGxlY3Rpb246OnRyYXZlcnNl
TmV4dEl0ZW0oTgogICAgICAgICAgICAgYm9vbCBkZWVwID0gdHJ1ZTsKICAgICAgICAgICAgIEhU
TUxFbGVtZW50ICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4oY3VycmVudCk7CiAgICAg
ICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgY2FzZSBET0NfSU1BR0VTOgorICAg
ICAgICAgICAgY2FzZSBEb2NJbWFnZXM6CiAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2Fs
TmFtZShpbWdUYWcpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ19TQ1JJUFRTOgorICAgICAgICAg
ICAgY2FzZSBEb2NTY3JpcHRzOgogICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUo
c2NyaXB0VGFnKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6CisgICAgICAgICAgICBj
YXNlIERvY0Zvcm1zOgogICAgICAgICAgICAgICAgIGlmKGUtPmhhc0xvY2FsTmFtZShmb3JtVGFn
KSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBUQUJMRV9UQk9ESUVTOgorICAgICAgICAgICAgY2FzZSBU
YWJsZVRCb2RpZXM6CiAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZSh0Ym9keVRh
ZykpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBl
bHNlIGlmIChlLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpKQogICAgICAgICAgICAgICAgICAgICBk
ZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRS
X0NFTExTOgorICAgICAgICAgICAgY2FzZSBUUkNlbGxzOgogICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUodGRUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZSh0aFRhZykpCiAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5o
YXNMb2NhbE5hbWUodGFibGVUYWcpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRBQkxFX1JPV1M6Ci0g
ICAgICAgICAgICBjYXNlIFRTRUNUSU9OX1JPV1M6CisgICAgICAgICAgICBjYXNlIFRhYmxlUm93
czoKKyAgICAgICAgICAgIGNhc2UgVFNlY3Rpb25Sb3dzOgogICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUodHJUYWcpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKHRhYmxlVGFnKSkKICAg
ICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBTRUxFQ1RfT1BUSU9OUzoKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0
T3B0aW9uczoKICAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykp
CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgTUFQX0FSRUFTOgorICAgICAgICAgICAgY2FzZSBNYXBBcmVh
czoKICAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKGFyZWFUYWcpKQogICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIERPQ19BUFBMRVRTOiAgIC8vIGFsbCBPQkpFQ1QgYW5kIEFQUExFVCBlbGVt
ZW50cworICAgICAgICAgICAgY2FzZSBEb2NBcHBsZXRzOiAgIC8vIGFsbCBPQkpFQ1QgYW5kIEFQ
UExFVCBlbGVtZW50cwogICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUob2JqZWN0
VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoYXBwbGV0VGFnKSkKICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBE
T0NfRU1CRURTOiAgIC8vIGFsbCBFTUJFRCBlbGVtZW50cworICAgICAgICAgICAgY2FzZSBEb2NF
bWJlZHM6ICAgLy8gYWxsIEVNQkVEIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgaWYgKGUtPmhh
c0xvY2FsTmFtZShlbWJlZFRhZykpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX09CSkVDVFM6ICAg
Ly8gYWxsIE9CSkVDVCBlbGVtZW50cworICAgICAgICAgICAgY2FzZSBEb2NPYmplY3RzOiAgIC8v
IGFsbCBPQkpFQ1QgZWxlbWVudHMKICAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1l
KG9iamVjdFRhZykpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX0xJTktTOiAgICAgLy8gYWxsIEEg
X2FuZF8gQVJFQSBlbGVtZW50cyB3aXRoIGEgdmFsdWUgZm9yIGhyZWYKKyAgICAgICAgICAgIGNh
c2UgRG9jTGlua3M6ICAgICAvLyBhbGwgQSBfYW5kXyBBUkVBIGVsZW1lbnRzIHdpdGggYSB2YWx1
ZSBmb3IgaHJlZgogICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoYVRhZykgfHwg
ZS0+aGFzTG9jYWxOYW1lKGFyZWFUYWcpKQogICAgICAgICAgICAgICAgICAgICBpZiAoIWUtPmdl
dEF0dHJpYnV0ZShocmVmQXR0cikuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERP
Q19BTkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgbmFtZSBv
ciBhbiBpZCBhdHRyaWJ1dGUKKyAgICAgICAgICAgIGNhc2UgRG9jQW5jaG9yczogICAgICAvLyBh
bGwgQSBlbGVtZW50cyB3aXRoIGEgdmFsdWUgZm9yIG5hbWUgb3IgYW4gaWQgYXR0cmlidXRlCiAg
ICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShhVGFnKSkKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLmlzTnVsbCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBET0NfQUxMOgorICAgICAgICAgICAgY2FzZSBEb2NBbGw6CiAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBOT0RFX0NISUxEUkVOOgorICAgICAgICAgICAgY2FzZSBOb2RlQ2hpbGRyZW46CiAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2Nyw3ICsyNjcsNyBAQCBib29sIEhUTUxD
b2xsZWN0aW9uOjpjaGVja0Zvck5hbWVNYXRjaChOCiAgICAgICAgIGlmIChjaGVja05hbWUpIHsK
ICAgICAgICAgICAgIC8vIGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3Jtcywg
YXBwbGV0cywgb2JqZWN0cyBhbmQgZW1iZWRzCiAgICAgICAgICAgICAvLyBieSBuYW1lICh0aG91
Z2ggZXZlcnl0aGluZyBieSBpZCkKLSAgICAgICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYg
CisgICAgICAgICAgICBpZiAodHlwZSA9PSBEb2NBbGwgJiYgCiAgICAgICAgICAgICAgICAgIShl
LT5oYXNMb2NhbE5hbWUoaW1nVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoZm9ybVRhZykgfHwKICAg
ICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShhcHBsZXRUYWcpIHx8IGUtPmhhc0xvY2Fs
TmFtZShvYmplY3RUYWcpIHx8CiAgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoZW1i
ZWRUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpKQpAQCAtMjgwLDcgKzI4MCw3IEBA
IGJvb2wgSFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNoKE4KICAgICAgICAgaWYgKGNo
ZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMgb25seSBpbWFn
ZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAgICAgICAgICAgIC8vIGJ5
IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQotICAgICAgICAgICAgaWYgKHR5cGUgPT0g
RE9DX0FMTCAmJiAKKyAgICAgICAgICAgIGlmICh0eXBlID09IERvY0FsbCAmJiAKICAgICAgICAg
ICAgICAgICAhKGUtPmhhc0xvY2FsTmFtZShpbWdUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShmb3Jt
VGFnKSB8fAogICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGFwcGxldFRhZykgfHwg
ZS0+aGFzTG9jYWxOYW1lKG9iamVjdFRhZykgfHwKICAgICAgICAgICAgICAgICAgIGUtPmhhc0xv
Y2FsTmFtZShlbWJlZFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkpCkBAIC0zNDYs
NyArMzQ2LDcgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKCkgYwogICAg
ICAgICAgICAgaWRWZWN0b3ItPmFwcGVuZChuKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW5h
bWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwKLSAgICAgICAg
ICAgICYmICh0eXBlICE9IERPQ19BTEwgfHwgCisgICAgICAgICAgICAmJiAodHlwZSAhPSBEb2NB
bGwgfHwgCiAgICAgICAgICAgICAgICAgKGUtPmhhc0xvY2FsTmFtZShpbWdUYWcpIHx8IGUtPmhh
c0xvY2FsTmFtZShmb3JtVGFnKSB8fAogICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
YXBwbGV0VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSB8fAogICAgICAgICAgICAg
ICAgICBlLT5oYXNMb2NhbE5hbWUoZW1iZWRUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShpbnB1dFRh
ZykpKSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDE0OTQ0KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDMxICs0NCwz
MiBAQCBjbGFzcyBIVE1MQ29sbGVjdGlvbiA6IHB1YmxpYyBTaGFyZWQ8SFRNCiBwdWJsaWM6CiAg
ICAgZW51bSBUeXBlIHsKICAgICAgICAgLy8gZnJvbSBKU0hUTUxEb2N1bWVudAotICAgICAgICBE
T0NfSU1BR0VTID0gMCwgLy8gYWxsIElNRyBlbGVtZW50cyBpbiB0aGUgZG9jdW1lbnQKLSAgICAg
ICAgRE9DX0FQUExFVFMsICAgLy8gYWxsIE9CSkVDVCBhbmQgQVBQTEVUIGVsZW1lbnRzCi0gICAg
ICAgIERPQ19FTUJFRFMsICAgIC8vIGFsbCBFTUJFRCBlbGVtZW50cwotICAgICAgICBET0NfT0JK
RUNUUywgICAvLyBhbGwgT0JKRUNUIGVsZW1lbnRzCi0gICAgICAgIERPQ19GT1JNUywgICAgIC8v
IGFsbCBGT1JNUwotICAgICAgICBET0NfTElOS1MsICAgICAvLyBhbGwgQSBfYW5kXyBBUkVBIGVs
ZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgaHJlZgotICAgICAgICBET0NfQU5DSE9SUywgICAgICAv
LyBhbGwgQSBlbGVtZW50cyB3aXRoIGEgdmFsdWUgZm9yIG5hbWUKLSAgICAgICAgRE9DX1NDUklQ
VFMsICAgLy8gYWxsIFNDUklQVCBlbGVtZW50CisgICAgICAgIERvY0ltYWdlcyA9IDAsIC8vIGFs
bCBJTUcgZWxlbWVudHMgaW4gdGhlIGRvY3VtZW50CisgICAgICAgIERvY0FwcGxldHMsICAgLy8g
YWxsIE9CSkVDVCBhbmQgQVBQTEVUIGVsZW1lbnRzCisgICAgICAgIERvY0VtYmVkcywgICAgLy8g
YWxsIEVNQkVEIGVsZW1lbnRzCisgICAgICAgIERvY09iamVjdHMsICAgLy8gYWxsIE9CSkVDVCBl
bGVtZW50cworICAgICAgICBEb2NGb3JtcywgICAgIC8vIGFsbCBGT1JNUworICAgICAgICBEb2NM
aW5rcywgICAgIC8vIGFsbCBBIF9hbmRfIEFSRUEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBo
cmVmCisgICAgICAgIERvY0FuY2hvcnMsICAgICAgLy8gYWxsIEEgZWxlbWVudHMgd2l0aCBhIHZh
bHVlIGZvciBuYW1lCisgICAgICAgIERvY1NjcmlwdHMsICAgLy8gYWxsIFNDUklQVCBlbGVtZW50
CiAgICAgICAgIC8vIGZyb20gSFRNTFRhYmxlLCBIVE1MVGFibGVTZWN0aW9uLCBIVE1MVGFibGVS
b3cKLSAgICAgICAgVEFCTEVfUk9XUywgICAgLy8gYWxsIHJvd3MgaW4gdGhpcyB0YWJsZSBvciB0
YWJsZXNlY3Rpb24KLSAgICAgICAgVEFCTEVfVEJPRElFUywgLy8gYWxsIFRCT0RZIGVsZW1lbnRz
IGluIHRoaXMgdGFibGUKLSAgICAgICAgVFNFQ1RJT05fUk9XUywgLy8gYWxsIHJvd3MgZWxlbWVu
dHMgaW4gdGhpcyB0YWJsZSBzZWN0aW9uCi0gICAgICAgIFRSX0NFTExTLCAgICAgIC8vIGFsbCBD
RUxMUyBpbiB0aGlzIHJvdworICAgICAgICBUYWJsZVJvd3MsICAgIC8vIGFsbCByb3dzIGluIHRo
aXMgdGFibGUgb3IgdGFibGVzZWN0aW9uCisgICAgICAgIFRhYmxlVEJvZGllcywgLy8gYWxsIFRC
T0RZIGVsZW1lbnRzIGluIHRoaXMgdGFibGUKKyAgICAgICAgVFNlY3Rpb25Sb3dzLCAvLyBhbGwg
cm93cyBlbGVtZW50cyBpbiB0aGlzIHRhYmxlIHNlY3Rpb24KKyAgICAgICAgVFJDZWxscywgICAg
ICAvLyBhbGwgQ0VMTFMgaW4gdGhpcyByb3cKICAgICAgICAgLy8gZnJvbSBTRUxFQ1QKLSAgICAg
ICAgU0VMRUNUX09QVElPTlMsCisgICAgICAgIFNlbGVjdE9wdGlvbnMsCiAgICAgICAgIC8vIGZy
b20gSFRNTE1hcAotICAgICAgICBNQVBfQVJFQVMsCi0gICAgICAgIERPQ19BTEwsICAgICAgICAv
LyAiYWxsIiBlbGVtZW50cyAoSUUpCi0gICAgICAgIE5PREVfQ0hJTERSRU4sICAgLy8gZmlyc3Qt
bGV2ZWwgY2hpbGRyZW4gKElFKQotICAgICAgICBXSU5ET1dfTkFNRURfSVRFTVMsCi0gICAgICAg
IERPQ1VNRU5UX05BTUVEX0lURU1TCisgICAgICAgIE1hcEFyZWFzLAorICAgICAgICBEb2NBbGws
ICAgICAgICAvLyAiYWxsIiBlbGVtZW50cyAoSUUpCisgICAgICAgIE5vZGVDaGlsZHJlbiwgICAv
LyBmaXJzdC1sZXZlbCBjaGlsZHJlbiAoSUUpCisgICAgICAgIFdpbmRvd05hbWVkSXRlbXMsCisg
ICAgICAgIERvY3VtZW50TmFtZWRJdGVtcwogICAgIH07CiAKICAgICBlbnVtIHsKLSAgICAgICAg
TlVNX0NBQ0hFQUJMRV9UWVBFUyA9IE5PREVfQ0hJTERSRU4gKyAxCisgICAgICAgIFVubmFtZWRD
b2xsZWN0aW9uVHlwZXMgPSBOb2RlQ2hpbGRyZW4gKyAxLAorICAgICAgICBDb2xsZWN0aW9uVHlw
ZXMgPSBEb2N1bWVudE5hbWVkSXRlbXMgKyAxCiAgICAgfTsKIAogICAgIEhUTUxDb2xsZWN0aW9u
KE5vZGUgKl9iYXNlLCBpbnQgX3R5cGUpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAkocmV2aXNpb24g
MTQ5NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDEzICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZURvY0V4dHJhTmFtZWRJdGVt
KGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgYm9vbCBoYXNEb2NFeHRyYU5hbWVkSXRlbShjb25z
dCBTdHJpbmcmIG5hbWUpOwogCi0gICAgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKiBj
b2xsZWN0aW9uSW5mbyhpbnQgdHlwZSkKLSAgICB7IAotICAgICAgICBpZiAodHlwZSA8IEhUTUxD
b2xsZWN0aW9uOjpOVU1fQ0FDSEVBQkxFX1RZUEVTKSAKLSAgICAgICAgICAgIHJldHVybiBtX2Nv
bGxlY3Rpb25faW5mbyArIHR5cGU7IAotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIGludD4gTmFtZUNvdW50TWFwOwogCiBwcm90ZWN0
ZWQ6CkBAIC04MSw4ICs3NCw2IEBAIHByb3RlY3RlZDoKICAgICBIVE1MRWxlbWVudCogaHRtbEVs
ZW1lbnQ7CiAKIHByaXZhdGU6Ci0gICAgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvIG1f
Y29sbGVjdGlvbl9pbmZvW0hUTUxDb2xsZWN0aW9uOjpOVU1fQ0FDSEVBQkxFX1RZUEVTXTsKLQog
ICAgIE5hbWVDb3VudE1hcCBuYW1lZEl0ZW1Db3VudHM7CiAgICAgTmFtZUNvdW50TWFwIGRvY0V4
dHJhTmFtZWRJdGVtQ291bnRzOwogfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24g
MTQ5NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDcsNyArNjA3LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0Q2xhc3NOYW1lKGNvbnN0IFN0
cgogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MRWxlbWVudDo6Y2hpbGRyZW4oKQog
ewotICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246Ok5P
REVfQ0hJTERSRU4pOworICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENv
bGxlY3Rpb246Ok5vZGVDaGlsZHJlbik7CiB9CiAKIC8vIERPTSBTZWN0aW9uIDEuMS4xCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0OTQ0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lk
IEhUTUxNYXBFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAKIFBhc3NSZWZQdHI8SFRNTENv
bGxlY3Rpb24+IEhUTUxNYXBFbGVtZW50OjphcmVhcygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1M
Q29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6TUFQX0FSRUFTKTsKKyAgICByZXR1cm4g
bmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpNYXBBcmVhcyk7CiB9CiAK
IFN0cmluZyBIVE1MTWFwRWxlbWVudDo6bmFtZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTE5hbWVDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE5h
bWVDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTQ5NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE5h
bWVDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lQ29sbGVjdGlvbi5oIgogCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTERvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1l
bnQuaCIKIApAQCAtMzgsMTEgKzM4LDEzIEBAIEhUTUxOYW1lQ29sbGVjdGlvbjo6SFRNTE5hbWVD
b2xsZWN0aW9uKEQKICAgICA6IEhUTUxDb2xsZWN0aW9uKGJhc2UsIHR5cGUpCiAgICAgLCBtX25h
bWUobmFtZSkKIHsKKyAgICBBU1NFUlQoIWluZm8pOworICAgIGluZm8gPSBiYXNlLT5uYW1lQ29s
bGVjdGlvbkluZm8odHlwZSwgbmFtZSk7CiB9CiAKIE5vZGUqIEhUTUxOYW1lQ29sbGVjdGlvbjo6
dHJhdmVyc2VOZXh0SXRlbShOb2RlKiBjdXJyZW50KSBjb25zdAogewotICAgIGFzc2VydChjdXJy
ZW50KTsKKyAgICBBU1NFUlQoY3VycmVudCk7CiAKICAgICBjdXJyZW50ID0gY3VycmVudC0+dHJh
dmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0KCkpOwogCkBAIC01MSw3ICs1Myw3IEBAIE5vZGUqIEhU
TUxOYW1lQ29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0SXQKICAgICAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKICAgICAgICAgICAgIEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
Y3VycmVudCk7CiAgICAgICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgY2FzZSBX
SU5ET1dfTkFNRURfSVRFTVM6CisgICAgICAgICAgICBjYXNlIFdpbmRvd05hbWVkSXRlbXM6CiAg
ICAgICAgICAgICAgICAgLy8gZmluZCBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIGVtYmVk
cyBhbmQgb2JqZWN0cyBieSBuYW1lLCAKICAgICAgICAgICAgICAgICAvLyBidXQgYW55dGhpbmcg
YnkgaWQKICAgICAgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShpbWdUYWcpIHx8CkBAIC02
Miw3ICs2NCw3IEBAIE5vZGUqIEhUTUxOYW1lQ29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0SXQKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1f
bmFtZTsKICAgICAgICAgICAgICAgICBmb3VuZCB8PSBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9
PSBtX25hbWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ1VN
RU5UX05BTUVEX0lURU1TOgorICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5hbWVkSXRlbXM6CiAg
ICAgICAgICAgICAgICAgLy8gZmluZCBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBlbWJlZHMsIG9i
amVjdHMgYW5kIGlmcmFtZXMgYnkgbmFtZSwgCiAgICAgICAgICAgICAgICAgLy8gYnV0IG9ubHkg
YXBwbGV0cyBhbmQgb2JqZWN0IGJ5IGlkICh0aGlzIHN0cmFuZ2UgcnVsZSBtYXRjaGVzIElFKQog
ICAgICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKGltZ1RhZykgfHwKQEAgLTc4LDcgKzgw
LDcgQEAgTm9kZSogSFRNTE5hbWVDb2xsZWN0aW9uOjp0cmF2ZXJzZU5leHRJdAogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlKS0+aXNEb2NO
YW1lZEl0ZW0oKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZvdW5kKQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE0OTQ0KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5
LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6SFRN
TE9wdGlvbnNDb2xsZWN0aW9uKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QpCi0gICAgOiBIVE1M
Q29sbGVjdGlvbihzZWxlY3QsIFNFTEVDVF9PUFRJT05TKQorICAgIDogSFRNTENvbGxlY3Rpb24o
c2VsZWN0LCBTZWxlY3RPcHRpb25zKQogeworICAgIEFTU0VSVCghaW5mbyk7CisKKyAgICBpbmZv
ID0gc2VsZWN0LT5jb2xsZWN0aW9uSW5mbygpOwogfQogCiB2b2lkIEhUTUxPcHRpb25zQ29sbGVj
dGlvbjo6c2V0TGVuZ3RoKHVuc2lnbmVkLCBFeGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAxNDk0NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5l
IEhUTUxfSFRNTFNlbGVjdEVsZW1lbnRJbXBsX0gKIAogI2luY2x1ZGUgIkhUTUxHZW5lcmljRm9y
bUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTE1LDYgKzExNiw4IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgTm9kZSogbmFtZWRJdGVtKGNvbnN0IFN0cmluZyAmbmFtZSwgYm9v
bCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSk7CiAKKyAgICBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlv
bkluZm8qIGNvbGxlY3Rpb25JbmZvKCkgeyByZXR1cm4gJm1fY29sbGVjdGlvbkluZm87IH0KKwog
cHJpdmF0ZToKICAgICB2b2lkIHJlY2FsY0xpc3RJdGVtcygpOwogCkBAIC0xMjMsNiArMTI2LDgg
QEAgcHJpdmF0ZToKICAgICBpbnQgbV9zaXplOwogICAgIGJvb2wgbV9tdWx0aXBsZTsKICAgICBi
b29sIG1fcmVjYWxjTGlzdEl0ZW1zOworICAgIAorICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0
aW9uSW5mbyBtX2NvbGxlY3Rpb25JbmZvOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MVGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTQ5NDQpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMywxMiArNTEzLDEyIEBA
IGJvb2wgSFRNTFRhYmxlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXQKIAogUGFzc1JlZlB0cjxI
VE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6cm93cygpCiB7Ci0gICAgcmV0dXJuIG5l
dyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6VEFCTEVfUk9XUyk7CisgICAg
cmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6VGFibGVSb3dz
KTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6dEJv
ZGllcygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVj
dGlvbjo6VEFCTEVfVEJPRElFUyk7CisgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlz
LCBIVE1MQ29sbGVjdGlvbjo6VGFibGVUQm9kaWVzKTsKIH0KIAogU3RyaW5nIEhUTUxUYWJsZUVs
ZW1lbnQ6OmFsaWduKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5j
cHAJKHJldmlzaW9uIDE0OTQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBIVE1MVGFibGVSb3dF
bGVtZW50OjpkZWxldGVDZWxsKCBpbgogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1M
VGFibGVSb3dFbGVtZW50OjpjZWxscygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlv
bih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6VFJfQ0VMTFMpOworICAgIHJldHVybiBuZXcgSFRNTENv
bGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OlRSQ2VsbHMpOwogfQogCiB2b2lkIEhUTUxU
YWJsZVJvd0VsZW1lbnQ6OnNldENlbGxzKEhUTUxDb2xsZWN0aW9uICosIEV4Y2VwdGlvbkNvZGUm
IGVjKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNDk0NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50OjpzZXRWQWxpZ24oCiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50Ojpyb3dzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9u
KHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpUQUJMRV9ST1dTKTsKKyAgICByZXR1cm4gbmV3IEhUTUxD
b2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpUYWJsZVJvd3MpOwogfQogCiB9CkluZGV4
OiBXZWJDb3JlL2t3cS9XZWJDb3JlQVhPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
d3EvV2ViQ29yZUFYT2JqZWN0Lm1tCShyZXZpc2lvbiAxNDk0NCkKKysrIFdlYkNvcmUva3dxL1dl
YkNvcmVBWE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtODAzLDggKzgwMyw3IEBAIHN0YXRp
YyBJbnRSZWN0IGJvdW5kaW5nQm94UmVjdChSZW5kZXJPYmoKICAgICBpZiAobV9yZW5kZXJlci0+
aXNSZW5kZXJWaWV3KCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzogQCJBWExpbmtVSUVsZW1lbnRzIl0pIHsKICAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5
ICpsaW5rcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTogMzJdOwotICAgICAg
ICAgICAgSFRNTENvbGxlY3Rpb24gKmNvbGwgPSBuZXcgSFRNTENvbGxlY3Rpb24obV9yZW5kZXJl
ci0+ZG9jdW1lbnQoKSwgSFRNTENvbGxlY3Rpb246OkRPQ19MSU5LUyk7Ci0gICAgICAgICAgICBj
b2xsLT5yZWYoKTsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbCA9IG1f
cmVuZGVyZXItPmRvY3VtZW50KCktPmxpbmtzKCk7CiAgICAgICAgICAgICBOb2RlICpjdXJyID0g
Y29sbC0+Zmlyc3RJdGVtKCk7CiAgICAgICAgICAgICB3aGlsZSAoY3VycikgewogICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCAqb2JqID0gY3Vyci0+cmVuZGVyZXIoKTsKQEAgLTgxNiw3ICs4
MTUsNiBAQCBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGN1cnIgPSBjb2xsLT5uZXh0SXRlbSgpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY29sbC0+ZGVyZWYoKTsKICAgICAgICAgICAgIHJldHVy
biBsaW5rczsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBAIkFYTG9hZGVkIl0pCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDE0OTQ0KQorKysgV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3MCwxMyArMTA3MCw4IEBA
IGJvb2wgRnJhbWU6OmdvdG9BbmNob3IoY29uc3QgU3RyaW5nJiBuYW0KICAgICByZXR1cm4gZmFs
c2U7CiAKICAgTm9kZSAqbiA9IGQtPm1fZG9jLT5nZXRFbGVtZW50QnlJZChBdG9taWNTdHJpbmco
bmFtZSkpOwotICBpZiAoIW4pIHsKLSAgICBIVE1MQ29sbGVjdGlvbiAqYW5jaG9ycyA9Ci0gICAg
ICAgIG5ldyBIVE1MQ29sbGVjdGlvbihkLT5tX2RvYy5nZXQoKSwgSFRNTENvbGxlY3Rpb246OkRP
Q19BTkNIT1JTKTsKLSAgICBhbmNob3JzLT5yZWYoKTsKLSAgICBuID0gYW5jaG9ycy0+bmFtZWRJ
dGVtKG5hbWUsICFkLT5tX2RvYy0+aW5Db21wYXRNb2RlKCkpOwotICAgIGFuY2hvcnMtPmRlcmVm
KCk7Ci0gIH0KKyAgaWYgKCFuKQorICAgICAgbiA9IGQtPm1fZG9jLT5hbmNob3JzKCktPm5hbWVk
SXRlbShuYW1lLCAhZC0+bV9kb2MtPmluQ29tcGF0TW9kZSgpKTsKIAogICBkLT5tX2RvYy0+c2V0
Q1NTVGFyZ2V0KG4pOyAvLyBTZXR0aW5nIHRvIG51bGwgd2lsbCBjbGVhciB0aGUgY3VycmVudCB0
YXJnZXQuCiAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8952</attachid>
            <date>2006-06-21 12:39:54 -0700</date>
            <delta_ts>2006-06-23 21:33:16 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>8177r3_patch.txt</filename>
            <type>text/plain</type>
            <size>25901</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAxNDk0NCkKKysrIFdlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNyArMzkz
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogLSAoRE9NSFRNTENvbGxlY3Rpb24g
KiljaGlsZHJlbgogewotICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3IEhUTUxD
b2xsZWN0aW9uKFtzZWxmIF9IVE1MRWxlbWVudF0sIEhUTUxDb2xsZWN0aW9uOjpOT0RFX0NISUxE
UkVOKTsKKyAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IG5ldyBIVE1MQ29sbGVjdGlv
bihbc2VsZiBfSFRNTEVsZW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6Tm9kZUNoaWxkcmVuKTsKICAg
ICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0aW9uXTsK
IH0KIApAQCAtNDUzLDMxICs0NTMsMzEgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
LSAoRE9NSFRNTENvbGxlY3Rpb24gKilpbWFnZXMKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiAqY29s
bGVjdGlvbiA9IG5ldyBIVE1MQ29sbGVjdGlvbihbc2VsZiBfSFRNTERvY3VtZW50XSwgSFRNTENv
bGxlY3Rpb246OkRPQ19JTUFHRVMpOworICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0g
bmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF9IVE1MRG9jdW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6
RG9jSW1hZ2VzKTsKICAgICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0
aDpjb2xsZWN0aW9uXTsKIH0KIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKilhcHBsZXRzCiB7Ci0g
ICAgSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3NlbGYg
X0hUTUxEb2N1bWVudF0sIEhUTUxDb2xsZWN0aW9uOjpET0NfQVBQTEVUUyk7CisgICAgSFRNTENv
bGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3NlbGYgX0hUTUxEb2N1
bWVudF0sIEhUTUxDb2xsZWN0aW9uOjpEb2NBcHBsZXRzKTsKICAgICByZXR1cm4gW0RPTUhUTUxD
b2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0aW9uXTsKIH0KIAogLSAoRE9NSFRNTENv
bGxlY3Rpb24gKilsaW5rcwogewotICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3
IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF9IVE1MRG9jdW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6RE9D
X0xJTktTKTsKKyAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IG5ldyBIVE1MQ29sbGVj
dGlvbihbc2VsZiBfSFRNTERvY3VtZW50XSwgSFRNTENvbGxlY3Rpb246OkRvY0xpbmtzKTsKICAg
ICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0aW9uXTsK
IH0KIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKilmb3JtcwogewotICAgIEhUTUxDb2xsZWN0aW9u
ICpjb2xsZWN0aW9uID0gbmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF9IVE1MRG9jdW1lbnRdLCBI
VE1MQ29sbGVjdGlvbjo6RE9DX0ZPUk1TKTsKKyAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlv
biA9IG5ldyBIVE1MQ29sbGVjdGlvbihbc2VsZiBfSFRNTERvY3VtZW50XSwgSFRNTENvbGxlY3Rp
b246OkRvY0Zvcm1zKTsKICAgICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9u
V2l0aDpjb2xsZWN0aW9uXTsKIH0KIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKilhbmNob3JzCiB7
Ci0gICAgSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3Nl
bGYgX0hUTUxEb2N1bWVudF0sIEhUTUxDb2xsZWN0aW9uOjpET0NfQU5DSE9SUyk7CisgICAgSFRN
TENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3NlbGYgX0hUTUxE
b2N1bWVudF0sIEhUTUxDb2xsZWN0aW9uOjpEb2NBbmNob3JzKTsKICAgICByZXR1cm4gW0RPTUhU
TUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0aW9uXTsKIH0KIApAQCAtMjgzOCw3
ICsyODM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogLSAoRE9NSFRNTENvbGxl
Y3Rpb24gKilhcmVhcwogewotICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3IEhU
TUxDb2xsZWN0aW9uKFtzZWxmIF9tYXBFbGVtZW50XSwgSFRNTENvbGxlY3Rpb246Ok1BUF9BUkVB
Uyk7CisgICAgSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24o
W3NlbGYgX21hcEVsZW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6TWFwQXJlYXMpOwogICAgIHJldHVy
biBbRE9NSFRNTENvbGxlY3Rpb24gX2NvbGxlY3Rpb25XaXRoOmNvbGxlY3Rpb25dOwogfQogCkBA
IC0zMTA3LDcgKzMxMDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAtIChET01I
VE1MQ29sbGVjdGlvbiAqKXJvd3MKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9
IG5ldyBIVE1MQ29sbGVjdGlvbihbc2VsZiBfdGFibGVTZWN0aW9uRWxlbWVudF0sIEhUTUxDb2xs
ZWN0aW9uOjpUQUJMRV9ST1dTKTsKKyAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IG5l
dyBIVE1MQ29sbGVjdGlvbihbc2VsZiBfdGFibGVTZWN0aW9uRWxlbWVudF0sIEhUTUxDb2xsZWN0
aW9uOjpUYWJsZVJvd3MpOwogICAgIHJldHVybiBbRE9NSFRNTENvbGxlY3Rpb24gX2NvbGxlY3Rp
b25XaXRoOmNvbGxlY3Rpb25dOwogfQogCkBAIC0zMTc2LDEzICszMTc2LDEzIEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKIC0gKERPTUhUTUxDb2xsZWN0aW9uICopcm93cwogewotICAg
IEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF90
YWJsZUVsZW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6VEFCTEVfUk9XUyk7CisgICAgSFRNTENvbGxl
Y3Rpb24gKmNvbGxlY3Rpb24gPSBuZXcgSFRNTENvbGxlY3Rpb24oW3NlbGYgX3RhYmxlRWxlbWVu
dF0sIEhUTUxDb2xsZWN0aW9uOjpUYWJsZVJvd3MpOwogICAgIHJldHVybiBbRE9NSFRNTENvbGxl
Y3Rpb24gX2NvbGxlY3Rpb25XaXRoOmNvbGxlY3Rpb25dOwogfQogCiAtIChET01IVE1MQ29sbGVj
dGlvbiAqKXRCb2RpZXMKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IG5ldyBI
VE1MQ29sbGVjdGlvbihbc2VsZiBfdGFibGVFbGVtZW50XSwgSFRNTENvbGxlY3Rpb246OlRBQkxF
X1RCT0RJRVMpOworICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gbmV3IEhUTUxDb2xs
ZWN0aW9uKFtzZWxmIF90YWJsZUVsZW1lbnRdLCBIVE1MQ29sbGVjdGlvbjo6VGFibGVUQm9kaWVz
KTsKICAgICByZXR1cm4gW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uV2l0aDpjb2xsZWN0
aW9uXTsKIH0KIApAQCAtMzQyOCw3ICszNDI4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKiljZWxscwogewotICAgIEhUTUxDb2xsZWN0aW9u
ICpjb2xsZWN0aW9uID0gbmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF90YWJsZVJvd0VsZW1lbnRd
LCBIVE1MQ29sbGVjdGlvbjo6VFJfQ0VMTFMpOworICAgIEhUTUxDb2xsZWN0aW9uICpjb2xsZWN0
aW9uID0gbmV3IEhUTUxDb2xsZWN0aW9uKFtzZWxmIF90YWJsZVJvd0VsZW1lbnRdLCBIVE1MQ29s
bGVjdGlvbjo6VFJDZWxscyk7CiAgICAgcmV0dXJuIFtET01IVE1MQ29sbGVjdGlvbiBfY29sbGVj
dGlvbldpdGg6Y29sbGVjdGlvbl07CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE0OTQ0
KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYyLDU3
ICszMTYyLDcyIEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZVJhZGlvQnV0dG9uR3JvdXAoQXQKIAog
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmltYWdlcygpCiB7Ci0gICAgcmV0
dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RE9DX0lNQUdFUyk7
CisgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9j
SW1hZ2VzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFwcGxl
dHMoKQogewotICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rp
b246OkRPQ19BUFBMRVRTKTsKKyAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhU
TUxDb2xsZWN0aW9uOjpEb2NBcHBsZXRzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gRG9jdW1lbnQ6OmVtYmVkcygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0
aGlzLCBIVE1MQ29sbGVjdGlvbjo6RE9DX0VNQkVEUyk7CisgICAgcmV0dXJuIG5ldyBIVE1MQ29s
bGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jRW1iZWRzKTsKIH0KIAogUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6Om9iamVjdHMoKQogewotICAgIHJldHVybiBuZXcg
SFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRPQ19PQkpFQ1RTKTsKKyAgICBy
ZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NPYmplY3Rz
KTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OnNjcmlwdHMoKQog
ewotICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRP
Q19TQ1JJUFRTKTsKKyAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xs
ZWN0aW9uOjpEb2NTY3JpcHRzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9j
dW1lbnQ6OmxpbmtzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhU
TUxDb2xsZWN0aW9uOjpET0NfTElOS1MpOworICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24o
dGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0xpbmtzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gRG9jdW1lbnQ6OmZvcm1zKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0
aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpET0NfRk9STVMpOworICAgIHJldHVybiBuZXcgSFRN
TENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0Zvcm1zKTsKIH0KIAogUGFzc1Jl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFuY2hvcnMoKQogewotICAgIHJldHVybiBu
ZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRPQ19BTkNIT1JTKTsKKyAg
ICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NBbmNo
b3JzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFsbCgpCiB7
Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RE9D
X0FMTCk7CisgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlv
bjo6RG9jQWxsKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6Ondp
bmRvd05hbWVkSXRlbXMoY29uc3QgU3RyaW5nICZuYW1lKQogewotICAgIHJldHVybiBuZXcgSFRN
TE5hbWVDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpXSU5ET1dfTkFNRURfSVRFTVMs
IG5hbWUpOworICAgIHJldHVybiBuZXcgSFRNTE5hbWVDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xs
ZWN0aW9uOjpXaW5kb3dOYW1lZEl0ZW1zLCBuYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBTdHJpbmcgJm5hbWUp
CiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MTmFtZUNvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rp
b246OkRPQ1VNRU5UX05BTUVEX0lURU1TLCBuYW1lKTsKKyAgICByZXR1cm4gbmV3IEhUTUxOYW1l
Q29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jdW1lbnROYW1lZEl0ZW1zLCBuYW1l
KTsKK30KKworSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKiBEb2N1bWVudDo6bmFtZUNv
bGxlY3Rpb25JbmZvKGludCB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJU
KHR5cGUgPj0gSFRNTENvbGxlY3Rpb246OlVubmFtZWRDb2xsZWN0aW9uVHlwZXMpOworICAgIEFT
U0VSVCh0eXBlIDwgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25UeXBlcyk7CisgICAgSGFzaE1h
cDxBdG9taWNTdHJpbmdJbXBsKiwgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvPiYgbWFw
ID0gbV9uYW1lQ29sbGVjdGlvbkluZm9bdHlwZSAtIEhUTUxDb2xsZWN0aW9uOjpVbm5hbWVkQ29s
bGVjdGlvblR5cGVzXTsKKyAgICAKKyAgICBBdG9taWNTdHJpbmcgYXRvbWljTmFtZShuYW1lKTsK
KyAgICAKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBIVE1MQ29sbGVjdGlvbjo6Q29s
bGVjdGlvbkluZm8+OjppdGVyYXRvciBpdGVyID0gbWFwLmZpbmQoYXRvbWljTmFtZS5pbXBsKCkp
OworICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKKyAgICAgICAgaXRlciA9IG1hcC5hZGQoYXRv
bWljTmFtZS5pbXBsKCksIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbygpKS5maXJzdDsK
KyAgICAKKyAgICByZXR1cm4gJml0ZXItPnNlY29uZDsKIH0KIAogUGFzc1JlZlB0cjxOYW1lTm9k
ZUxpc3Q+IERvY3VtZW50OjpnZXRFbGVtZW50c0J5TmFtZShjb25zdCBTdHJpbmcgJmVsZW1lbnRO
YW1lKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxNDk0NCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEZXByZWNhdGVk
UHRyTGlzdC5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUg
IlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291
bnRlZFNldC5oPgpAQCAtNjYsNyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBGcmFtZVZpZXc7
Ci0gICAgY2xhc3MgSFRNTENvbGxlY3Rpb247CiAgICAgY2xhc3MgSFRNTERvY3VtZW50OwogICAg
IGNsYXNzIEhUTUxFbGVtZW50OwogICAgIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKQEAgLTIwNSw2
ICsyMDUsMTUgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHdpbmRv
d05hbWVkSXRlbXMoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBkb2N1bWVudE5hbWVkSXRlbXMoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAorICAgIEhU
TUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyogY29sbGVjdGlvbkluZm8oaW50IHR5cGUpCisg
ICAgeworICAgICAgICBpZiAodHlwZSA8IEhUTUxDb2xsZWN0aW9uOjpVbm5hbWVkQ29sbGVjdGlv
blR5cGVzKSAKKyAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb25JbmZvICsgdHlwZTsgCisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9u
SW5mbyogbmFtZUNvbGxlY3Rpb25JbmZvKGludCB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwor
CiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogCiAg
ICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKQEAgLTc2OSw2ICs3NzgsOSBAQCBw
cml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxIVE1MRm9ybUVsZW1lbnQqLCBOYW1lVG9JbnB1
dE1hcCo+IEZvcm1Ub0dyb3VwTWFwOwogICAgIEZvcm1Ub0dyb3VwTWFwIG1fc2VsZWN0ZWRSYWRp
b0J1dHRvbnM7CiAgICAgCisgICAgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvIG1fY29s
bGVjdGlvbkluZm9bSFRNTENvbGxlY3Rpb246OlVubmFtZWRDb2xsZWN0aW9uVHlwZXNdOworICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5m
bz4gbV9uYW1lQ29sbGVjdGlvbkluZm9bSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25UeXBlcyAt
IEhUTUxDb2xsZWN0aW9uOjpVbm5hbWVkQ29sbGVjdGlvblR5cGVzXTsKKwogI2lmIFhQQVRIX1NV
UFBPUlQKICAgICBSZWZQdHI8WFBhdGhFdmFsdWF0b3I+IG1feHBhdGhFdmFsdWF0b3I7CiAjZW5k
aWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTQ5NDQpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4
IEBAIEhUTUxDb2xsZWN0aW9uOjpIVE1MQ29sbGVjdGlvbihOb2RlICpfYmEKICAgICAgIGlkc0Rv
bmUoZmFsc2UpLAogICAgICAgbV9vd25zSW5mbyhmYWxzZSkKIHsKLSAgICBpZiAoX2Jhc2UtPmlz
RG9jdW1lbnROb2RlKCkgJiYgX2Jhc2UtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0g
ICAgICAgIGluZm8gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihfYmFzZS0+ZG9jdW1lbnQo
KSktPmNvbGxlY3Rpb25JbmZvKHR5cGUpOworICAgIGlmIChfYmFzZS0+aXNEb2N1bWVudE5vZGUo
KSkKKyAgICAgICAgaW5mbyA9IF9iYXNlLT5kb2N1bWVudCgpLT5jb2xsZWN0aW9uSW5mbyh0eXBl
KTsKIH0KIAogSFRNTENvbGxlY3Rpb246On5IVE1MQ29sbGVjdGlvbigpCkBAIC05OCw3ICs5OCw3
IEBAIE5vZGUgKkhUTUxDb2xsZWN0aW9uOjp0cmF2ZXJzZU5leHRJdGVtKE4KIHsKICAgICBhc3Nl
cnQoY3VycmVudCk7CiAKLSAgICBpZiAodHlwZSA9PSBOT0RFX0NISUxEUkVOICYmIG1fYmFzZS5n
ZXQoKSAhPSBjdXJyZW50KQorICAgIGlmICh0eXBlID09IE5vZGVDaGlsZHJlbiAmJiBtX2Jhc2Uu
Z2V0KCkgIT0gY3VycmVudCkKICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5n
KCk7CiAgICAgZWxzZQogICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+dHJhdmVyc2VOZXh0Tm9k
ZShtX2Jhc2UuZ2V0KCkpOwpAQCAtMTA5LDcxICsxMDksNzEgQEAgTm9kZSAqSFRNTENvbGxlY3Rp
b246OnRyYXZlcnNlTmV4dEl0ZW0oTgogICAgICAgICAgICAgYm9vbCBkZWVwID0gdHJ1ZTsKICAg
ICAgICAgICAgIEhUTUxFbGVtZW50ICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4oY3Vy
cmVudCk7CiAgICAgICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgY2FzZSBET0Nf
SU1BR0VTOgorICAgICAgICAgICAgY2FzZSBEb2NJbWFnZXM6CiAgICAgICAgICAgICAgICAgaWYg
KGUtPmhhc0xvY2FsTmFtZShpbWdUYWcpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ19TQ1JJUFRT
OgorICAgICAgICAgICAgY2FzZSBEb2NTY3JpcHRzOgogICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoc2NyaXB0VGFnKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6Cisg
ICAgICAgICAgICBjYXNlIERvY0Zvcm1zOgogICAgICAgICAgICAgICAgIGlmKGUtPmhhc0xvY2Fs
TmFtZShmb3JtVGFnKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUQUJMRV9UQk9ESUVTOgorICAgICAg
ICAgICAgY2FzZSBUYWJsZVRCb2RpZXM6CiAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2Fs
TmFtZSh0Ym9keVRhZykpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpKQogICAgICAgICAg
ICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFRSX0NFTExTOgorICAgICAgICAgICAgY2FzZSBUUkNlbGxzOgogICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUodGRUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZSh0aFRh
ZykpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBl
bHNlIGlmIChlLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpKQogICAgICAgICAgICAgICAgICAgICBk
ZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRB
QkxFX1JPV1M6Ci0gICAgICAgICAgICBjYXNlIFRTRUNUSU9OX1JPV1M6CisgICAgICAgICAgICBj
YXNlIFRhYmxlUm93czoKKyAgICAgICAgICAgIGNhc2UgVFNlY3Rpb25Sb3dzOgogICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUodHJUYWcpKQogICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKHRh
YmxlVGFnKSkKICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTRUxFQ1RfT1BUSU9OUzoKKyAgICAgICAgICAg
IGNhc2UgU2VsZWN0T3B0aW9uczoKICAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1l
KG9wdGlvblRhZykpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTUFQX0FSRUFTOgorICAgICAgICAgICAg
Y2FzZSBNYXBBcmVhczoKICAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKGFyZWFU
YWcpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ19BUFBMRVRTOiAgIC8vIGFsbCBPQkpFQ1QgYW5k
IEFQUExFVCBlbGVtZW50cworICAgICAgICAgICAgY2FzZSBEb2NBcHBsZXRzOiAgIC8vIGFsbCBP
QkpFQ1QgYW5kIEFQUExFVCBlbGVtZW50cwogICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUob2JqZWN0VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoYXBwbGV0VGFnKSkKICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBET0NfRU1CRURTOiAgIC8vIGFsbCBFTUJFRCBlbGVtZW50cworICAgICAgICAg
ICAgY2FzZSBEb2NFbWJlZHM6ICAgLy8gYWxsIEVNQkVEIGVsZW1lbnRzCiAgICAgICAgICAgICAg
ICAgaWYgKGUtPmhhc0xvY2FsTmFtZShlbWJlZFRhZykpCiAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9D
X09CSkVDVFM6ICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cworICAgICAgICAgICAgY2FzZSBEb2NP
YmplY3RzOiAgIC8vIGFsbCBPQkpFQ1QgZWxlbWVudHMKICAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKG9iamVjdFRhZykpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX0xJTktTOiAg
ICAgLy8gYWxsIEEgX2FuZF8gQVJFQSBlbGVtZW50cyB3aXRoIGEgdmFsdWUgZm9yIGhyZWYKKyAg
ICAgICAgICAgIGNhc2UgRG9jTGlua3M6ICAgICAvLyBhbGwgQSBfYW5kXyBBUkVBIGVsZW1lbnRz
IHdpdGggYSB2YWx1ZSBmb3IgaHJlZgogICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5h
bWUoYVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFyZWFUYWcpKQogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWUtPmdldEF0dHJpYnV0ZShocmVmQXR0cikuaXNOdWxsKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIERPQ19BTkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1
ZSBmb3IgbmFtZSBvciBhbiBpZCBhdHRyaWJ1dGUKKyAgICAgICAgICAgIGNhc2UgRG9jQW5jaG9y
czogICAgICAvLyBhbGwgQSBlbGVtZW50cyB3aXRoIGEgdmFsdWUgZm9yIG5hbWUgb3IgYW4gaWQg
YXR0cmlidXRlCiAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShhVGFnKSkKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLmlzTnVsbCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET0NfQUxMOgorICAgICAgICAgICAgY2FzZSBEb2NB
bGw6CiAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBOT0RFX0NISUxEUkVOOgorICAgICAgICAgICAgY2FzZSBOb2Rl
Q2hpbGRyZW46CiAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGRlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2Nyw3ICsyNjcsNyBA
QCBib29sIEhUTUxDb2xsZWN0aW9uOjpjaGVja0Zvck5hbWVNYXRjaChOCiAgICAgICAgIGlmIChj
aGVja05hbWUpIHsKICAgICAgICAgICAgIC8vIGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1h
Z2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0cyBhbmQgZW1iZWRzCiAgICAgICAgICAgICAvLyBi
eSBuYW1lICh0aG91Z2ggZXZlcnl0aGluZyBieSBpZCkKLSAgICAgICAgICAgIGlmICh0eXBlID09
IERPQ19BTEwgJiYgCisgICAgICAgICAgICBpZiAodHlwZSA9PSBEb2NBbGwgJiYgCiAgICAgICAg
ICAgICAgICAgIShlLT5oYXNMb2NhbE5hbWUoaW1nVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoZm9y
bVRhZykgfHwKICAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShhcHBsZXRUYWcpIHx8
IGUtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpIHx8CiAgICAgICAgICAgICAgICAgICBlLT5oYXNM
b2NhbE5hbWUoZW1iZWRUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpKQpAQCAtMjgw
LDcgKzI4MCw3IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNoKE4KICAg
ICAgICAgaWYgKGNoZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVy
bnMgb25seSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAgICAg
ICAgICAgIC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQotICAgICAgICAgICAg
aWYgKHR5cGUgPT0gRE9DX0FMTCAmJiAKKyAgICAgICAgICAgIGlmICh0eXBlID09IERvY0FsbCAm
JiAKICAgICAgICAgICAgICAgICAhKGUtPmhhc0xvY2FsTmFtZShpbWdUYWcpIHx8IGUtPmhhc0xv
Y2FsTmFtZShmb3JtVGFnKSB8fAogICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGFw
cGxldFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG9iamVjdFRhZykgfHwKICAgICAgICAgICAgICAg
ICAgIGUtPmhhc0xvY2FsTmFtZShlbWJlZFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGlucHV0VGFn
KSkpCkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNh
Y2hlKCkgYwogICAgICAgICAgICAgaWRWZWN0b3ItPmFwcGVuZChuKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJW
YWwKLSAgICAgICAgICAgICYmICh0eXBlICE9IERPQ19BTEwgfHwgCisgICAgICAgICAgICAmJiAo
dHlwZSAhPSBEb2NBbGwgfHwgCiAgICAgICAgICAgICAgICAgKGUtPmhhc0xvY2FsTmFtZShpbWdU
YWcpIHx8IGUtPmhhc0xvY2FsTmFtZShmb3JtVGFnKSB8fAogICAgICAgICAgICAgICAgICBlLT5o
YXNMb2NhbE5hbWUoYXBwbGV0VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSB8fAog
ICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoZW1iZWRUYWcpIHx8IGUtPmhhc0xvY2Fs
TmFtZShpbnB1dFRhZykpKSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDE0
OTQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDMxICs0NCwzMiBAQCBjbGFzcyBIVE1MQ29sbGVjdGlvbiA6IHB1YmxpYyBTaGFyZWQ8SFRN
CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsKICAgICAgICAgLy8gZnJvbSBKU0hUTUxEb2N1bWVu
dAotICAgICAgICBET0NfSU1BR0VTID0gMCwgLy8gYWxsIElNRyBlbGVtZW50cyBpbiB0aGUgZG9j
dW1lbnQKLSAgICAgICAgRE9DX0FQUExFVFMsICAgLy8gYWxsIE9CSkVDVCBhbmQgQVBQTEVUIGVs
ZW1lbnRzCi0gICAgICAgIERPQ19FTUJFRFMsICAgIC8vIGFsbCBFTUJFRCBlbGVtZW50cwotICAg
ICAgICBET0NfT0JKRUNUUywgICAvLyBhbGwgT0JKRUNUIGVsZW1lbnRzCi0gICAgICAgIERPQ19G
T1JNUywgICAgIC8vIGFsbCBGT1JNUwotICAgICAgICBET0NfTElOS1MsICAgICAvLyBhbGwgQSBf
YW5kXyBBUkVBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgaHJlZgotICAgICAgICBET0NfQU5D
SE9SUywgICAgICAvLyBhbGwgQSBlbGVtZW50cyB3aXRoIGEgdmFsdWUgZm9yIG5hbWUKLSAgICAg
ICAgRE9DX1NDUklQVFMsICAgLy8gYWxsIFNDUklQVCBlbGVtZW50CisgICAgICAgIERvY0ltYWdl
cyA9IDAsIC8vIGFsbCBJTUcgZWxlbWVudHMgaW4gdGhlIGRvY3VtZW50CisgICAgICAgIERvY0Fw
cGxldHMsICAgLy8gYWxsIE9CSkVDVCBhbmQgQVBQTEVUIGVsZW1lbnRzCisgICAgICAgIERvY0Vt
YmVkcywgICAgLy8gYWxsIEVNQkVEIGVsZW1lbnRzCisgICAgICAgIERvY09iamVjdHMsICAgLy8g
YWxsIE9CSkVDVCBlbGVtZW50cworICAgICAgICBEb2NGb3JtcywgICAgIC8vIGFsbCBGT1JNUwor
ICAgICAgICBEb2NMaW5rcywgICAgIC8vIGFsbCBBIF9hbmRfIEFSRUEgZWxlbWVudHMgd2l0aCBh
IHZhbHVlIGZvciBocmVmCisgICAgICAgIERvY0FuY2hvcnMsICAgICAgLy8gYWxsIEEgZWxlbWVu
dHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lCisgICAgICAgIERvY1NjcmlwdHMsICAgLy8gYWxsIFND
UklQVCBlbGVtZW50CiAgICAgICAgIC8vIGZyb20gSFRNTFRhYmxlLCBIVE1MVGFibGVTZWN0aW9u
LCBIVE1MVGFibGVSb3cKLSAgICAgICAgVEFCTEVfUk9XUywgICAgLy8gYWxsIHJvd3MgaW4gdGhp
cyB0YWJsZSBvciB0YWJsZXNlY3Rpb24KLSAgICAgICAgVEFCTEVfVEJPRElFUywgLy8gYWxsIFRC
T0RZIGVsZW1lbnRzIGluIHRoaXMgdGFibGUKLSAgICAgICAgVFNFQ1RJT05fUk9XUywgLy8gYWxs
IHJvd3MgZWxlbWVudHMgaW4gdGhpcyB0YWJsZSBzZWN0aW9uCi0gICAgICAgIFRSX0NFTExTLCAg
ICAgIC8vIGFsbCBDRUxMUyBpbiB0aGlzIHJvdworICAgICAgICBUYWJsZVJvd3MsICAgIC8vIGFs
bCByb3dzIGluIHRoaXMgdGFibGUgb3IgdGFibGVzZWN0aW9uCisgICAgICAgIFRhYmxlVEJvZGll
cywgLy8gYWxsIFRCT0RZIGVsZW1lbnRzIGluIHRoaXMgdGFibGUKKyAgICAgICAgVFNlY3Rpb25S
b3dzLCAvLyBhbGwgcm93cyBlbGVtZW50cyBpbiB0aGlzIHRhYmxlIHNlY3Rpb24KKyAgICAgICAg
VFJDZWxscywgICAgICAvLyBhbGwgQ0VMTFMgaW4gdGhpcyByb3cKICAgICAgICAgLy8gZnJvbSBT
RUxFQ1QKLSAgICAgICAgU0VMRUNUX09QVElPTlMsCisgICAgICAgIFNlbGVjdE9wdGlvbnMsCiAg
ICAgICAgIC8vIGZyb20gSFRNTE1hcAotICAgICAgICBNQVBfQVJFQVMsCi0gICAgICAgIERPQ19B
TEwsICAgICAgICAvLyAiYWxsIiBlbGVtZW50cyAoSUUpCi0gICAgICAgIE5PREVfQ0hJTERSRU4s
ICAgLy8gZmlyc3QtbGV2ZWwgY2hpbGRyZW4gKElFKQotICAgICAgICBXSU5ET1dfTkFNRURfSVRF
TVMsCi0gICAgICAgIERPQ1VNRU5UX05BTUVEX0lURU1TCisgICAgICAgIE1hcEFyZWFzLAorICAg
ICAgICBEb2NBbGwsICAgICAgICAvLyAiYWxsIiBlbGVtZW50cyAoSUUpCisgICAgICAgIE5vZGVD
aGlsZHJlbiwgICAvLyBmaXJzdC1sZXZlbCBjaGlsZHJlbiAoSUUpCisgICAgICAgIFdpbmRvd05h
bWVkSXRlbXMsCisgICAgICAgIERvY3VtZW50TmFtZWRJdGVtcwogICAgIH07CiAKICAgICBlbnVt
IHsKLSAgICAgICAgTlVNX0NBQ0hFQUJMRV9UWVBFUyA9IE5PREVfQ0hJTERSRU4gKyAxCisgICAg
ICAgIFVubmFtZWRDb2xsZWN0aW9uVHlwZXMgPSBOb2RlQ2hpbGRyZW4gKyAxLAorICAgICAgICBD
b2xsZWN0aW9uVHlwZXMgPSBEb2N1bWVudE5hbWVkSXRlbXMgKyAxCiAgICAgfTsKIAogICAgIEhU
TUxDb2xsZWN0aW9uKE5vZGUgKl9iYXNlLCBpbnQgX3R5cGUpOwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQu
aAkocmV2aXNpb24gMTQ5NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDEzICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZURvY0V4
dHJhTmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgYm9vbCBoYXNEb2NFeHRyYU5h
bWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgSFRNTENvbGxlY3Rpb246OkNvbGxl
Y3Rpb25JbmZvKiBjb2xsZWN0aW9uSW5mbyhpbnQgdHlwZSkKLSAgICB7IAotICAgICAgICBpZiAo
dHlwZSA8IEhUTUxDb2xsZWN0aW9uOjpOVU1fQ0FDSEVBQkxFX1RZUEVTKSAKLSAgICAgICAgICAg
IHJldHVybiBtX2NvbGxlY3Rpb25faW5mbyArIHR5cGU7IAotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIGludD4gTmFtZUNvdW50TWFw
OwogCiBwcm90ZWN0ZWQ6CkBAIC04MSw4ICs3NCw2IEBAIHByb3RlY3RlZDoKICAgICBIVE1MRWxl
bWVudCogaHRtbEVsZW1lbnQ7CiAKIHByaXZhdGU6Ci0gICAgSFRNTENvbGxlY3Rpb246OkNvbGxl
Y3Rpb25JbmZvIG1fY29sbGVjdGlvbl9pbmZvW0hUTUxDb2xsZWN0aW9uOjpOVU1fQ0FDSEVBQkxF
X1RZUEVTXTsKLQogICAgIE5hbWVDb3VudE1hcCBuYW1lZEl0ZW1Db3VudHM7CiAgICAgTmFtZUNv
dW50TWFwIGRvY0V4dHJhTmFtZWRJdGVtQ291bnRzOwogfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAkocmV2aXNpb24gMTQ5NDQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0Q2xhc3NO
YW1lKGNvbnN0IFN0cgogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MRWxlbWVudDo6
Y2hpbGRyZW4oKQogewotICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENv
bGxlY3Rpb246Ok5PREVfQ0hJTERSRU4pOworICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24o
dGhpcywgSFRNTENvbGxlY3Rpb246Ok5vZGVDaGlsZHJlbik7CiB9CiAKIC8vIERPTSBTZWN0aW9u
IDEuMS4xCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0OTQ0KQorKysg
V2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyAr
ODUsNyBAQCB2b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAKIFBhc3NS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxNYXBFbGVtZW50OjphcmVhcygpCiB7Ci0gICAgcmV0
dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6TUFQX0FSRUFTKTsK
KyAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpNYXBB
cmVhcyk7CiB9CiAKIFN0cmluZyBIVE1MTWFwRWxlbWVudDo6bmFtZSgpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTQ5NDQpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lQ29sbGVjdGlvbi5o
IgogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRN
TE9iamVjdEVsZW1lbnQuaCIKIApAQCAtMzgsMTEgKzM4LDEzIEBAIEhUTUxOYW1lQ29sbGVjdGlv
bjo6SFRNTE5hbWVDb2xsZWN0aW9uKEQKICAgICA6IEhUTUxDb2xsZWN0aW9uKGJhc2UsIHR5cGUp
CiAgICAgLCBtX25hbWUobmFtZSkKIHsKKyAgICBBU1NFUlQoIWluZm8pOworICAgIGluZm8gPSBi
YXNlLT5uYW1lQ29sbGVjdGlvbkluZm8odHlwZSwgbmFtZSk7CiB9CiAKIE5vZGUqIEhUTUxOYW1l
Q29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0SXRlbShOb2RlKiBjdXJyZW50KSBjb25zdAogewotICAg
IGFzc2VydChjdXJyZW50KTsKKyAgICBBU1NFUlQoY3VycmVudCk7CiAKICAgICBjdXJyZW50ID0g
Y3VycmVudC0+dHJhdmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0KCkpOwogCkBAIC01MSw3ICs1Myw3
IEBAIE5vZGUqIEhUTUxOYW1lQ29sbGVjdGlvbjo6dHJhdmVyc2VOZXh0SXQKICAgICAgICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIEVsZW1lbnQqIGUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oY3VycmVudCk7CiAgICAgICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAg
ICAgICAgY2FzZSBXSU5ET1dfTkFNRURfSVRFTVM6CisgICAgICAgICAgICBjYXNlIFdpbmRvd05h
bWVkSXRlbXM6CiAgICAgICAgICAgICAgICAgLy8gZmluZCBvbmx5IGltYWdlcywgZm9ybXMsIGFw
cGxldHMsIGVtYmVkcyBhbmQgb2JqZWN0cyBieSBuYW1lLCAKICAgICAgICAgICAgICAgICAvLyBi
dXQgYW55dGhpbmcgYnkgaWQKICAgICAgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShpbWdU
YWcpIHx8CkBAIC02Miw3ICs2NCw3IEBAIE5vZGUqIEhUTUxOYW1lQ29sbGVjdGlvbjo6dHJhdmVy
c2VOZXh0SXQKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlLT5nZXRBdHRyaWJ1dGUobmFt
ZUF0dHIpID09IG1fbmFtZTsKICAgICAgICAgICAgICAgICBmb3VuZCB8PSBlLT5nZXRBdHRyaWJ1
dGUoaWRBdHRyKSA9PSBtX25hbWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIERPQ1VNRU5UX05BTUVEX0lURU1TOgorICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5h
bWVkSXRlbXM6CiAgICAgICAgICAgICAgICAgLy8gZmluZCBpbWFnZXMsIGZvcm1zLCBhcHBsZXRz
LCBlbWJlZHMsIG9iamVjdHMgYW5kIGlmcmFtZXMgYnkgbmFtZSwgCiAgICAgICAgICAgICAgICAg
Ly8gYnV0IG9ubHkgYXBwbGV0cyBhbmQgb2JqZWN0IGJ5IGlkICh0aGlzIHN0cmFuZ2UgcnVsZSBt
YXRjaGVzIElFKQogICAgICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKGltZ1RhZykgfHwK
QEAgLTc4LDcgKzgwLDcgQEAgTm9kZSogSFRNTE5hbWVDb2xsZWN0aW9uOjp0cmF2ZXJzZU5leHRJ
dAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQq
PihlKS0+aXNEb2NOYW1lZEl0ZW0oKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICAgICAgICAg
IEFTU0VSVCgwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZvdW5kKQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE0OTQ0KQor
KysgV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDggKzI5LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEhUTUxPcHRpb25zQ29s
bGVjdGlvbjo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3Qp
Ci0gICAgOiBIVE1MQ29sbGVjdGlvbihzZWxlY3QsIFNFTEVDVF9PUFRJT05TKQorICAgIDogSFRN
TENvbGxlY3Rpb24oc2VsZWN0LCBTZWxlY3RPcHRpb25zKQogeworICAgIEFTU0VSVCghaW5mbyk7
CisKKyAgICBpbmZvID0gc2VsZWN0LT5jb2xsZWN0aW9uSW5mbygpOwogfQogCiB2b2lkIEhUTUxP
cHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKHVuc2lnbmVkLCBFeGNlcHRpb25Db2RlJiBlYykK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAxNDk0NCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIEhUTUxfSFRNTFNlbGVjdEVsZW1lbnRJbXBsX0gKIAogI2luY2x1ZGUgIkhU
TUxHZW5lcmljRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTE1LDYgKzEx
Niw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgTm9kZSogbmFtZWRJdGVtKGNvbnN0IFN0cmlu
ZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSk7CiAKKyAgICBIVE1MQ29sbGVjdGlv
bjo6Q29sbGVjdGlvbkluZm8qIGNvbGxlY3Rpb25JbmZvKCkgeyByZXR1cm4gJm1fY29sbGVjdGlv
bkluZm87IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHJlY2FsY0xpc3RJdGVtcygpOwogCkBAIC0x
MjMsNiArMTI2LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zaXplOwogICAgIGJvb2wgbV9tdWx0
aXBsZTsKICAgICBib29sIG1fcmVjYWxjTGlzdEl0ZW1zOworICAgIAorICAgIEhUTUxDb2xsZWN0
aW9uOjpDb2xsZWN0aW9uSW5mbyBtX2NvbGxlY3Rpb25JbmZvOwogfTsKIAogfSAvL25hbWVzcGFj
ZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTQ5NDQpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMywx
MiArNTEzLDEyIEBAIGJvb2wgSFRNTFRhYmxlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXQKIAog
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6cm93cygpCiB7Ci0g
ICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6VEFCTEVf
Uk9XUyk7CisgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlv
bjo6VGFibGVSb3dzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxl
RWxlbWVudDo6dEJvZGllcygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlz
LCBIVE1MQ29sbGVjdGlvbjo6VEFCTEVfVEJPRElFUyk7CisgICAgcmV0dXJuIG5ldyBIVE1MQ29s
bGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6VGFibGVUQm9kaWVzKTsKIH0KIAogU3RyaW5n
IEhUTUxUYWJsZUVsZW1lbnQ6OmFsaWduKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
VGFibGVSb3dFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxl
Um93RWxlbWVudC5jcHAJKHJldmlzaW9uIDE0OTQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZVJvd0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBI
VE1MVGFibGVSb3dFbGVtZW50OjpkZWxldGVDZWxsKCBpbgogCiBQYXNzUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBIVE1MVGFibGVSb3dFbGVtZW50OjpjZWxscygpCiB7Ci0gICAgcmV0dXJuIG5ldyBI
VE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6VFJfQ0VMTFMpOworICAgIHJldHVy
biBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OlRSQ2VsbHMpOwogfQog
CiB2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OnNldENlbGxzKEhUTUxDb2xsZWN0aW9uICosIEV4
Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNDk0NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9u
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpzZXRWQWxpZ24oCiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojpyb3dzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhU
TUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpUQUJMRV9ST1dTKTsKKyAgICByZXR1
cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpUYWJsZVJvd3MpOwog
fQogCiB9CkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlQVhPYmplY3QubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rd3EvV2ViQ29yZUFYT2JqZWN0Lm1tCShyZXZpc2lvbiAxNDk0NCkKKysrIFdl
YkNvcmUva3dxL1dlYkNvcmVBWE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtODAzLDggKzgw
Myw3IEBAIHN0YXRpYyBJbnRSZWN0IGJvdW5kaW5nQm94UmVjdChSZW5kZXJPYmoKICAgICBpZiAo
bV9yZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogQCJBWExpbmtVSUVsZW1lbnRzIl0pIHsKICAgICAgICAgICAgIE5T
TXV0YWJsZUFycmF5ICpsaW5rcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTog
MzJdOwotICAgICAgICAgICAgSFRNTENvbGxlY3Rpb24gKmNvbGwgPSBuZXcgSFRNTENvbGxlY3Rp
b24obV9yZW5kZXJlci0+ZG9jdW1lbnQoKSwgSFRNTENvbGxlY3Rpb246OkRPQ19MSU5LUyk7Ci0g
ICAgICAgICAgICBjb2xsLT5yZWYoKTsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gY29sbCA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCktPmxpbmtzKCk7CiAgICAgICAgICAgICBO
b2RlICpjdXJyID0gY29sbC0+Zmlyc3RJdGVtKCk7CiAgICAgICAgICAgICB3aGlsZSAoY3Vycikg
ewogICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCAqb2JqID0gY3Vyci0+cmVuZGVyZXIoKTsK
QEAgLTgxNiw3ICs4MTUsNiBAQCBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveFJlY3QoUmVuZGVy
T2JqCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGN1cnIgPSBjb2xsLT5uZXh0
SXRlbSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29sbC0+ZGVyZWYoKTsKICAgICAg
ICAgICAgIHJldHVybiBsaW5rczsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYTG9hZGVkIl0pCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDE0
OTQ0KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3MCwx
MyArMTA3MCw4IEBAIGJvb2wgRnJhbWU6OmdvdG9BbmNob3IoY29uc3QgU3RyaW5nJiBuYW0KICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgTm9kZSAqbiA9IGQtPm1fZG9jLT5nZXRFbGVtZW50QnlJZChB
dG9taWNTdHJpbmcobmFtZSkpOwotICBpZiAoIW4pIHsKLSAgICBIVE1MQ29sbGVjdGlvbiAqYW5j
aG9ycyA9Ci0gICAgICAgIG5ldyBIVE1MQ29sbGVjdGlvbihkLT5tX2RvYy5nZXQoKSwgSFRNTENv
bGxlY3Rpb246OkRPQ19BTkNIT1JTKTsKLSAgICBhbmNob3JzLT5yZWYoKTsKLSAgICBuID0gYW5j
aG9ycy0+bmFtZWRJdGVtKG5hbWUsICFkLT5tX2RvYy0+aW5Db21wYXRNb2RlKCkpOwotICAgIGFu
Y2hvcnMtPmRlcmVmKCk7Ci0gIH0KKyAgaWYgKCFuKQorICAgICAgbiA9IGQtPm1fZG9jLT5hbmNo
b3JzKCktPm5hbWVkSXRlbShuYW1lLCAhZC0+bV9kb2MtPmluQ29tcGF0TW9kZSgpKTsKIAogICBk
LT5tX2RvYy0+c2V0Q1NTVGFyZ2V0KG4pOyAvLyBTZXR0aW5nIHRvIG51bGwgd2lsbCBjbGVhciB0
aGUgY3VycmVudCB0YXJnZXQuCiAgIAo=
</data>
<flag name="review"
          id="2636"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>