<?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>3401</bug_id>
          
          <creation_ts>2005-06-09 17:53:10 -0700</creation_ts>
          <short_desc>WebKit does not support setting selection range on form controls</short_desc>
          <delta_ts>2005-07-03 07:41:45 -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>Forms</component>
          <version>412</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.3</op_sys>
          <bug_status>VERIFIED</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>
          
          <blocked>3654</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="douglas phillips">dphillips</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>11211</commentid>
    <comment_count>0</comment_count>
    <who name="douglas phillips">dphillips</who>
    <bug_when>2005-06-09 17:53:10 -0700</bug_when>
    <thetext>I have attached a screen shot for Mozilla Firefox which displays the partial text selection. Notice that in 
the text field I can programmatically select partial text. This is done with a call &quot;setSelectionRange&quot; 
method. For IE browser it starts with &quot;createTextRange&quot; call and ends with &quot;select&quot;. If Safari can provide 
the same feature, it would be great. As of today, we can only do a complete text selection and is less 
useful than partial text selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11212</commentid>
    <comment_count>1</comment_count>
      <attachid>2197</attachid>
    <who name="douglas phillips">dphillips</who>
    <bug_when>2005-06-09 17:55:30 -0700</bug_when>
    <thetext>Created attachment 2197
showing partial text selection in Firefox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12581</commentid>
    <comment_count>2</comment_count>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-18 22:43:07 -0700</bug_when>
    <thetext>Just to note, I&apos;m working on this. I actually got this implemented (along with selectionStart and 
selectionEnd) for textareas and was working on doing it for inputs as well (text, password, and search 
types), when I learned that the KWQfoo classes are mimicing the Qt interface, so I&apos;m going to need to re-
do part of my implementation.

Anyway, I&apos;ll hopefully have it done tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12762</commentid>
    <comment_count>3</comment_count>
      <attachid>2520</attachid>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-20 21:24:09 -0700</bug_when>
    <thetext>Created attachment 2520
A patch to fix this issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12783</commentid>
    <comment_count>4</comment_count>
      <attachid>2520</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-06-21 01:46:56 -0700</bug_when>
    <thetext>Comment on attachment 2520
A patch to fix this issue

Comments on the patch:

This does not match the coding style guidelines, the brace should be on a
separate line:

+static Value getInputSelectionStart(HTMLInputElementImpl &amp;input) {

This code looks wrong, the toULong call attempts to turn a property name into a
number, so it won&apos;t match &quot;selectionStart&quot;, rather it will match some arbitrary
integer. What you want to do to convert an identifier to a property int tag is
to use Lookup::findEntry. The Window object has an example of how to do it.
Right now, probably every input element appears to have the selectionStart and
selectionEnd properties, since the fallback goes to the special property
hashtable.

+      uint u = propertyName.toULong(&amp;ok);
+      if (u == InputSelectionStart || u == InputSelectionEnd) {

For the following, maybe a #error directive or assert of some kind would work
better:

+    // FIXME: I can&apos;t test Qt, so I&apos;m not going to bother
+    // trying to write the code for it

Wouldn&apos;t it be better to make no change at all for out of range values? What do
other browsers do when you give a negative selection start or end?

+    // The second MAX is a workaround for the unsigned aspect
+    // if range.location is larger, this will end up 0, instead of a huge
number

Besides these issues, the patch looks really good. Looking forward to the next
take.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12795</commentid>
    <comment_count>5</comment_count>
      <attachid>2532</attachid>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-21 08:23:34 -0700</bug_when>
    <thetext>Created attachment 2532
A revised patch

This fixes all the mentioned issues. In the case of the MAX comment, that was
actually just a misleading comment. I&apos;ve clarified the comment to better
explain the overflow situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12797</commentid>
    <comment_count>6</comment_count>
      <attachid>2532</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-21 09:02:57 -0700</bug_when>
    <thetext>Comment on attachment 2532
A revised patch

It&apos;s not great to have kjs_html.cpp be checking the type enum of the HTML input
element. Instead HTMLInputElementImpl needs a DOM API that indicates whether
things like selectionStart and selectionEnd are appropriate. A separate
&quot;canHaveSelection&quot; function that returns a boolean would be one appropriate way
to do it.

As far as layout tests are concerned, you can make a test that uses these new
methods easily, and even though it doesn&apos;t change layout, it would be good.

In fact, we should change DumpRenderTree so it can dump the selection of form
elements just as it dumps a selection within HTML today, and then you could
make some even-better tests.

There&apos;s no need to have a break after a return in a case statement and it&apos;s
generally considered bad style.

It looks like some of the indenting is done with tabs. All the indenting should
be using spaces. In particular, the code in RenderLineEdit looks like it&apos;s
indented with a tab, as does the declaration of setSelectionRange in
HTMLTextAreaElementImpl in the header.

We usually say &quot;unsigned&quot; rather than &quot;unsigned int&quot;
(QLineEdit::setSelectionStart).

The biggest lack here is tests, though. There are many different problems you
are fixing here and edge cases you are checking for. All of them should have
individual tests.

Looks good! Keep at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12819</commentid>
    <comment_count>7</comment_count>
      <attachid>2539</attachid>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-21 22:23:02 -0700</bug_when>
    <thetext>Created attachment 2539
the latest iteration of the patch

Ok, this patch should resolve all of the outstanding comments. It doesn&apos;t
include the tests, since I can&apos;t cvs add (anoncvs), so I&apos;ve added the tests as
a separate attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12820</commentid>
    <comment_count>8</comment_count>
      <attachid>2540</attachid>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-21 22:24:03 -0700</bug_when>
    <thetext>Created attachment 2540
testcases

And here&apos;s the testcases. This has 2 different tests with expected output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12828</commentid>
    <comment_count>9</comment_count>
      <attachid>2539</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-22 09:21:39 -0700</bug_when>
    <thetext>Comment on attachment 2539
the latest iteration of the patch

Looking good! Here are some more comments:

The code in HTMLInputElementImpl::setValue that casts m_render to
RenderLineEdit* doesn&apos;t seem to check m_type. I don&apos;t think it&apos;s good to have
this code assume that storesValueSeparateFromAttribute() implies it&apos;s a
RenderLineEdit * even if it&apos;s true, especially without a comment. But it&apos;s easy
to fix, because updateFromElement() is a function that exists in RenderObject
and there&apos;s no need to cast m_render to call updateFromElement() on it.

The new code in this patch omits spaces beteen class names and *, using syntax
like RenderTextArea*. We use a space. This is mentioned in our coding style
guidelines under &quot;Names&quot; as rule #9.

I know that you investigated using the real Qt API for QLineEdit, but I&apos;m still
not sure why you ended up adding KWQ-specific methods. It seems clear that
RenderLineEdit::selectionStart, for example, could just call selectionStart()
and then if that returned -1, call cursorPosition(). This patch errs too far on
the &quot;don&apos;t worry about Qt, just do something KWQ-specific&quot; side, I think, and
now that it&apos;s working, I think you should try a little harder to use the Qt API
except where there&apos;s a reason you can&apos;t. To give another example, you should
name the function setSelection as in Qt rather than setSelectionRange and have
the parameter types be int rather than long. The sole exception here might be
selectionEnd, since we might not want to require getting the selection text
just to compute the end point.

I still see some use of &quot;unsigned int&quot; where we customarily use &quot;unsigned&quot;.

I don&apos;t see the value in your &quot;just in case&quot; check for NULL in the
getCursorPositionAsIndex:inParagraph: code. Either we should allow NULL for the
parameters (in case someone is interested in only one or the other), or we
should assert if they are NULL. We shouldn&apos;t add dead code &quot;just in case&quot;. And
this change seems unrelated to the rest of the patch. Why not just leave it
out?

Do we know what the performance impact is of the new CRLF code? We might need
to test that.

Can we refactor setSelectionStart, setSelectionEnd, and setSelectionRange so
that we don&apos;t need so much duplicate code? Even better, lets just have
setSelectionRange (and name it setSelection to match Qt) and have the callers
do a tiny bit more of the work themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12829</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-22 09:26:19 -0700</bug_when>
    <thetext>Just looked at the test cases. They look really good, but they don&apos;t test everything in this patch. For 
example: we need a test that checks that the new properties are undefined on at least one other type of 
&lt;input&gt; element, and tests that would fail without the new CRLF handling you added to various text area 
methods. If I remove part of your patch, it&apos;s important that at least one test case fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12844</commentid>
    <comment_count>11</comment_count>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-22 10:48:02 -0700</bug_when>
    <thetext>updateFromElement() exists in RenderObject? When I searched for it I found individual implementations 
on the different types of RenderFoo classes. Besides, it only should be called when the value is stored 
separately from the attribute - I actually tried calling it at the end normally and it caused problems, I 
don&apos;t know why. But maybe I could just call it directly without the cast when the value is stored separate 
and see if it works.

As to omitting spaces, I just tried to copy similar calls I saw elsewhere, but I&apos;ll be happy to add spaces.

The reason I decided not to go with Qt was because it was a lot of work that was going nowhere. Qt&apos;s 
selection stuff is an index in a paragraph, not simply the range that both NSTextView and the javascript 
function wants. I would have ended up turning the NSTextView&apos;s range into paragraph/index-in-
paragraph positions, then turning them back into a range. And what&apos;s worse, the only way to turn them 
back into a range would be to ask for the length of every paragraph preceding the index, which would 
make KWQTextArea have to find each paragraph over and over (if you&apos;ve read Joel on Software, think 
Schlemiel the Painter&apos;s algorithm). I thought it would be far better to just preserve the range as-is 
throughout the entire code path, and let Qt deal with the paragraph stuff if this code ever ends up back 
in khtml.

The NULL check in getCursorPositionAsIndex:inParagraph: was because Qt documents the cursor stuff 
as not doing anything if one of the inputs is 0, so I figured I&apos;d simply not do anything rather than assert 
or return half of a useful value.

I don&apos;t know what the performance impact of the new crlf code is, but I can&apos;t imagine it&apos;s a hot path. 
The cursor stuff, AFAICT, is only used when updating the widget in some fashion (still not exactly sure 
how it&apos;s called), which doesn&apos;t seem like something that happens repeatedly. And the crlf handling stuff 
in the selection code obviously only affects calls to the new javascript properties/method, which again 
isn&apos;t a hot path.

I thought of refactoring the selection code to avoid duplicate code, but the implementations aren&apos;t quite 
the same. The KWQTextArea has to handle possible \r\n sequences before the selection, but the 
KWQTextFieldController doesn&apos;t. And the only other duplicate code is the stuff that checks the ranges 
for validity, and I don&apos;t see how that could really be factored out, especially since the maximum length 
is fetched differently between KWQLineEdit and KWQTextArea. I suppose I could write a function that 
takes a start, a length, and a maximum length and creates a valid range, but that doesn&apos;t seem terribly 
necessary, plus I don&apos;t quite know where it would go.

As for patches, yeah, I can test that selectionStart and selectionEnd are undefined on the button, but I 
can&apos;t test setSelectionRange because it&apos;s not undefined - I&apos;m not sure how I make a function itself 
undefined on certain varieties of input. However, I could iterate over the button and make sure it&apos;s not 
in the property list, because I successfully hid it from that. Also, I don&apos;t know how to test the new crlf 
stuff. The crlf (and just cr) handling in the cursor position functions, I really don&apos;t know how to test, and 
as for the selection, there&apos;s no way for me to get a carriage return into a textarea in javascript anymore. 
I&apos;m not even really sure if pasting it in by hand would work, and that would require manual interaction 
anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12845</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-22 11:08:40 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; updateFromElement() exists in RenderObject?

Yes.

&gt; As to omitting spaces, I just tried to copy similar calls I saw elsewhere, but I&apos;ll be happy to add 
spaces.

Excellent. Please do.

&gt; The reason I decided not to go with Qt was because it was a lot of work that was going nowhere. Qt&apos;s 
&gt; selection stuff is an index in a paragraph, not simply the range that both NSTextView and the 
javascript 
&gt; function wants.

Good point for QTextEdit.

Doesn&apos;t apply for QLineEdit.

QLineEdit::selectionStart, QLineEdit::setSelection, QLineEdit::cursorPosition, and 
QLineEdit::setCursorPosition are all positions within all the text, not within a paragraph, so for that 
class I&apos;d like you to write code that would work for both.

&gt; The NULL check in getCursorPositionAsIndex:inParagraph: was because Qt documents the cursor
&gt; stuff as not doing anything if one of the inputs is 0, so I figured I&apos;d simply not do anything rather
&gt; than assert or return half of a useful value.

Qt does not document the cursor stuff as &quot;not doing anything&quot;. It says that you&apos;re not allowed to pass 0, 
which is not the same thing. Lets just leave this method alone.

&gt; I don&apos;t know what the performance impact of the new crlf code is, but I can&apos;t imagine it&apos;s a hot path.

OK. Lets make a test.
 
&gt; The cursor stuff, AFAICT, is only used when updating the widget in some fashion (still not exactly
&gt; sure  how it&apos;s called), which doesn&apos;t seem like something that happens repeatedly. And the crlf
&gt; handling stuff  in the selection code obviously only affects calls to the new javascript properties
&gt; method, which again isn&apos;t a hot path.

We don&apos;t want to land a code change with no test, so if you can&apos;t figure out a way to test the &quot;\r\n&quot; 
changes to some methods, lets wait until we do have a way to test it other than code inspection.

&gt; I thought of refactoring the selection code to avoid duplicate code, but the implementations aren&apos;t
&gt; quite the same.

I think you misunderstood my suggestion. My suggestion was to refactor so that setSelectionStart, 
setSelectionEnd, and setSelectionRange, all within the same class, didn&apos;t contain so much duplicate 
code.

&gt; As for patches, yeah, I can test that selectionStart and selectionEnd are undefined on the button, but I 
&gt; can&apos;t test setSelectionRange because it&apos;s not undefined - I&apos;m not sure how I make a function itself 
&gt; undefined on certain varieties of input.

OK. I just want you to test what you&apos;ve actually done. No need to make a test for something you didn&apos;t 
do!

&gt; However, I could iterate over the button and make sure it&apos;s not in the property list, because I 
successfully hid it from that.

Great!

&gt; Also, I don&apos;t know how to test the new crlf stuff. The crlf (and just cr) handling in the cursor
&gt; position functions, I really don&apos;t know how to test, and as for the selection, there&apos;s no way
&gt; for me to get a carriage return into a textarea in javascript anymore. 
&gt; I&apos;m not even really sure if pasting it in by hand would work, and that would require manual
&gt; interaction anyway.

Then lets set these changes aside and discuss separately how to test them and whether to land them 
without tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12846</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-22 11:09:45 -0700</bug_when>
    <thetext>By &quot;these changes&quot; I mean the untestable CRLF changes that are independent of the rest of the patch. 
Ideally each patch fixes one bug, so landing these changes separately has other benefits as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12849</commentid>
    <comment_count>14</comment_count>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-22 12:37:33 -0700</bug_when>
    <thetext>Ok, I can finally test the crlf stuff, but it requires manual interaction. I could probably automate it using 
my new selection stuff, except the selection stuff is in the patch as well so it wouldn&apos;t work prior to the 
patch. I guess I could submit it as a separate patch once the selection stuff is in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12850</commentid>
    <comment_count>15</comment_count>
      <attachid>2549</attachid>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-22 12:51:28 -0700</bug_when>
    <thetext>Created attachment 2549
Slightly modified testcases

I added an extra check to make sure selectionStart and selectionEnd were
undefined. I was already looping over the property list of the button to make
sure they weren&apos;t listed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12855</commentid>
    <comment_count>16</comment_count>
      <attachid>2553</attachid>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-22 15:11:43 -0700</bug_when>
    <thetext>Created attachment 2553
Yet another patch

Ok, this should fix the outstanding comments. I removed the fix for the crlf
handling in cursor position, because I can&apos;t test that without the selection
stuff already in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12862</commentid>
    <comment_count>17</comment_count>
    <who name="Kevin Ballard">kevin</who>
    <bug_when>2005-06-22 15:21:01 -0700</bug_when>
    <thetext>The crlf fix for cursor position stuff now has its own bug, number 3654 (which is set dependent on this 
bug because its testcase requires selection manipulation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12881</commentid>
    <comment_count>18</comment_count>
      <attachid>2553</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-22 19:57:07 -0700</bug_when>
    <thetext>Comment on attachment 2553
Yet another patch

HTMLTextAreaElementImpl::setValue has an unnecessary cast in a call to
updateFromElement().

Otherwise looks great to me. We should remove that cast when landing this. r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>2197</attachid>
            <date>2005-06-09 17:55:30 -0700</date>
            <delta_ts>2005-06-09 17:55:30 -0700</delta_ts>
            <desc>showing partial text selection in Firefox</desc>
            <filename>safari-text-selection.png</filename>
            <type>image/png</type>
            <size>16330</size>
            <attacher name="douglas phillips">dphillips</attacher>
            
              <data encoding="base64">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
hHDPH4+NS3Y+dEkn+t1XfD0uHH3Yr0IId/3ha3HJp77863Z3/rbLjo6n9zhqYgjh1t99JTnDnkdf
+s+JR0XTY756aQhh8m+PTM6w1zGXRxN///URceFnvv77aOLmSw6PC/c+9g8hhL9NOCwu+dxxk0pl
r8+f8MfC1HXj/30xnv7CSVdGE9dfcHBcuN+3rgohXPfzg+KSA759dQjhz+ePjUsOPOXaaOKa8w5M
rvygcX8OIVw9/oC45ODTrqsse52776Gn33jFufvmlU/6wT7x9OHf+2sI4Q/f/1xe6irf4nXpmZ+J
p7/y/VvK70bc4vWb/x0TQjjmR5N/879jvvbjf4YQfv3dPePZvv6Tj86/l5y2R9TPeMm43ePCY8ff
HkK4+NTdQgjHnXdHCOGiU3YNIRz/szt8EEJXSWxR9ioT4PIUuYDqW7k1Qgi5D0Puw9CrT+/NB73X
t0/m4hX+eNCrl6/65L2vLLfu4gUL++QWrTs4hF693nzt3eSyAzY8buDHjgshvP/sRXHhChudEKeu
EMKgjU8YtPGJ8cMVNzlxxUTkKmzuGrzZMiHszSd+scrHv9Xugc2d9rOowzHqakzjtYd/Gv3LK3/1
wZ+8+mBlbT8v3X/uS/f9sNSzs+79QUh0NUZm3nNOKOhqjLLX83ef/fxdZ4dEV2OhqMMxausKia7G
6iT7GZMTm3/mp5t/5qchhMdvPq3UslHq2vJz5235ufNCCI/+tZ3632bfqJNxmRF7S/oZ9/tFnLq2
3f+CT+5/QVg6uiuy3YG/jIZ53X/NiWU2EaWuHQ++aMeDL0qmrp2+ePGoL05Ipq6dvzRh5y9dEkKY
csU3Qgh3X/GNEMIuh/1ql8N+lUxdow//9acO//WnDm8/dd1+2VdDCLsfNXH3KHJdmghhX/ndnl/5
XQjhnxOP2vPoS/c8OopcRyXy1mV7HXNZCOEfvzkiTl2f/trln/7670MIt/zqy/HPvb/xh+hfCOFv
Ew4PIXz22EmfPW5SCOGmiw/L26V9jr8i2db1+US3441Rn+M3r/zCN68MIdxwwSHxz/1Oumq/b121
JHX94qAQwv7fvnr/b18dpa4QwgEnX3PAydccePI1IYRrf3Zg/HPsqdeOPfXaeBNR6jpo3HVR5Lrq
p/unfE/G/YxR6jr09I96GCdFfY7f++uSyPWDfUIIh59505fPvOnLZ96Ucv1Hff+W6F8I4XeJEBab
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
hMyDD0/L5XKf2mX71sWtG6y3zpw5r5fKXs2w85FojNdyA1dpaWnJi1xRQ1f0oCWTiVq85s56vQl/
Z+LKbFjFRl3H9WVZAAAfXUlEQVSNkeU233zE5Mkz3374jieOXm/wNrtOnvyfdx954emHP7vpCTPm
3L9W/y3XLdbJWNtd7fR31OVX3b3rp7Ze1Nq2ygr9+vZe8hs9ZcyYeffcE0IYMmrUzpMnlymsVd7K
e0s0zy8a0H2CVy4XZ6zM9BlPvvveMt84u/zsA6MP0Pfee6e6vztL/SWd9wdlFRZ/FLx6hRBenvt+
yIW1hg0MIfTr27ulJdOrpWVxhSPrC/e88CM5b54O2mmHbRYuXNjS0nLnlPtfn/tGCOG2O/61/bZb
LF68eMvNN7n97n+n/4ysqNprdSzRGK+9Prfd4sWtS7N7fuSKSsq3eCWrt8ybJK8kr+Os8HCqPt52
V1XzyHLxg0dsPmKnR+fe9PwbD643+BMbrrJtS0vLky/d97UtL+tIk1WaQ075jkpfLZXWyeVX3z3t
qRfzxnVNGTNm/TXX3PaMMxbNmTPnscemjBmz8+TJRQvLV0jRlz6vbSzlWyLvbFB1hQM9PHjlQhS9
MiEvdYUQpj0+dastPrGk7avE34VpwkrhCavjCSy+TkRLS68Qwk33v7i4tfVbB2wVQujbt09LS0tL
S0uZa0kU7nmalo+iR9cR1//lo4+N+Mr1N/39jpo025Sp9lodSzTGa86z9w/b4JOFkWtpEguZTCa6
hUD6Fq/CN0nRt02pxFb+eCsN3KXqqoYtIh9+0LpK/zWHrrDWbY/9afGibP8V+v33rZc+/KB1/cHb
VP0G7uCutru2ouusYkNHHLRL4XcYr+/ff9szzug9aFDrW2+ttPLKT06eHEKYd889hYUVNWTm/XYU
ff/UsIp8IIHgVSR6Rc1dmUxmh0+OWtJi0dLyUctFJmQymVzpQV5l2oTqatGyLV47bDY8l1sy3a9f
n169ouDVWtF5uXBgRw2TYqGi3YhVj6mvYsc6fizxGK9eLS2ZTKalJSQavZa8eaJ3U7tjvKqTF63K
h4BSn4XVfVjW9pN1zPrH3nTfhZ/d/vDdNjvklocmHTXmjKnP3b3HiG9UGixq/hJXtLba1smiOXNa
33pr8Ztvts2fX76wAW/1omeDelc40C1bvMLyy/fPJWSz2ba2tvhR9F/Vn4X18877H/Rfrm/c4vXJ
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
0WoBAKAB/h88HUyw+xtSiQAAAABJRU5ErkJggg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2520</attachid>
            <date>2005-06-20 21:24:09 -0700</date>
            <delta_ts>2005-06-21 08:23:34 -0700</delta_ts>
            <desc>A patch to fix this issue</desc>
            <filename>SelectionPatch.txt</filename>
            <type>text/plain</type>
            <size>35322</size>
            <attacher name="Kevin Ballard">kevin</attacher>
            
              <data encoding="base64">SW5kZXg6IC4vV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xMTcKZGlmZiAtcCAtdSAtcjEuMTE3IC4vV2ViQ29yZS9raHRtbC9lY21h
L2tqc19odG1sLmNwcAotLS0gLi9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCTIwMDUv
MDYvMjAgMjE6NTk6MzcJMS4xMTcKKysrIC4vV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNw
cAkyMDA1LzA2LzIxIDA0OjE1OjE2CkBAIC04MzgsNiArODM4LDggQEAgY29uc3QgQ2xhc3NJbmZv
KiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzcwogICBtYXhMZW5ndGgJS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRNYXhMZW5ndGgJRG9udERlbGV0ZQogICBuYW1lCQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1
dE5hbWUJCURvbnREZWxldGUKICAgcmVhZE9ubHkJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRSZWFk
T25seQkJRG9udERlbGV0ZQorICBzZWxlY3Rpb25TdGFydAlLSlM6OkhUTUxFbGVtZW50OjpJbnB1
dFNlbGVjdGlvblN0YXJ0CURvbnREZWxldGUKKyAgc2VsZWN0aW9uRW5kCUtKUzo6SFRNTEVsZW1l
bnQ6OklucHV0U2VsZWN0aW9uRW5kCURvbnREZWxldGUKICAgc2l6ZQkJS0pTOjpIVE1MRWxlbWVu
dDo6SW5wdXRTaXplCQlEb250RGVsZXRlCiAgIHNyYwkJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRT
cmMJCURvbnREZWxldGUKICAgdGFiSW5kZXgJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRUYWJJbmRl
eAkJRG9udERlbGV0ZQpAQCAtODQ4LDggKzg1MCw5IEBAIGNvbnN0IENsYXNzSW5mbyogS0pTOjpI
VE1MRWxlbWVudDo6Y2xhc3MKICAgZm9jdXMJCUtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMJ
CURvbnREZWxldGV8RnVuY3Rpb24gMAogICBzZWxlY3QJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRT
ZWxlY3QJCURvbnREZWxldGV8RnVuY3Rpb24gMAogICBjbGljawkJS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRDbGljawkJRG9udERlbGV0ZXxGdW5jdGlvbiAwCisgIHNldFNlbGVjdGlvblJhbmdlCUtK
Uzo6SFRNTEVsZW1lbnQ6OklucHV0U2V0U2VsZWN0aW9uUmFuZ2UJRG9udERlbGV0ZXxGdW5jdGlv
biAyCiBAZW5kCi1AYmVnaW4gSFRNTFRleHRBcmVhRWxlbWVudFRhYmxlIDEzCitAYmVnaW4gSFRN
TFRleHRBcmVhRWxlbWVudFRhYmxlIDE3CiAgIGRlZmF1bHRWYWx1ZQlLSlM6OkhUTUxFbGVtZW50
OjpUZXh0QXJlYURlZmF1bHRWYWx1ZQlEb250RGVsZXRlCiAgIGZvcm0JCUtKUzo6SFRNTEVsZW1l
bnQ6OlRleHRBcmVhRm9ybQkJRG9udERlbGV0ZXxSZWFkT25seQogICBhY2Nlc3NLZXkJS0pTOjpI
VE1MRWxlbWVudDo6VGV4dEFyZWFBY2Nlc3NLZXkJRG9udERlbGV0ZQpAQCAtODU4LDEyICs4NjEs
MTUgQEAgY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzcwogICBuYW1lCQlL
SlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYU5hbWUJCURvbnREZWxldGUKICAgcmVhZE9ubHkJS0pT
OjpIVE1MRWxlbWVudDo6VGV4dEFyZWFSZWFkT25seQlEb250RGVsZXRlCiAgIHJvd3MJCUtKUzo6
SFRNTEVsZW1lbnQ6OlRleHRBcmVhUm93cwkJRG9udERlbGV0ZQorICBzZWxlY3Rpb25TdGFydAlL
SlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNlbGVjdGlvblN0YXJ0CURvbnREZWxldGUKKyAgc2Vs
ZWN0aW9uRW5kCUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0aW9uRW5kCURvbnREZWxl
dGUKICAgdGFiSW5kZXgJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFUYWJJbmRleAlEb250RGVs
ZXRlCiAgIHR5cGUJCUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhVHlwZQkJRG9udERlbGV0ZXxS
ZWFkT25seQogICB2YWx1ZQkJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFWYWx1ZQkJRG9udERl
bGV0ZQogICBibHVyCQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUJsdXIJCURvbnREZWxldGV8
RnVuY3Rpb24gMAogICBmb2N1cwkJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb2N1cwkJRG9u
dERlbGV0ZXxGdW5jdGlvbiAwCiAgIHNlbGVjdAlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNl
bGVjdAlEb250RGVsZXRlfEZ1bmN0aW9uIDAKKyAgc2V0U2VsZWN0aW9uUmFuZ2UJS0pTOjpIVE1M
RWxlbWVudDo6VGV4dEFyZWFTZXRTZWxlY3Rpb25SYW5nZQlEb250RGVsZXRlfEZ1bmN0aW9uIDIK
IEBlbmQKIEBiZWdpbiBIVE1MQnV0dG9uRWxlbWVudFRhYmxlIDcKICAgZm9ybQkJS0pTOjpIVE1M
RWxlbWVudDo6QnV0dG9uRm9ybQkJRG9udERlbGV0ZXxSZWFkT25seQpAQCAtMTMyMCw2ICsxMzI2
LDMwIEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmNhbGwoRXhlY1N0YXRlICoKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKK3N0YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0
KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkgeworICBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
dHlwZUVudW0gdHlwZSA9IGlucHV0LmlucHV0VHlwZSgpOworICBpZiAodHlwZSA9PSBIVE1MSW5w
dXRFbGVtZW50SW1wbDo6VEVYVCB8fCB0eXBlID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNT
V09SRAorI2lmIEFQUExFX0NIQU5HRVMKKyAgICAgIHx8IHR5cGUgPT0gSFRNTElucHV0RWxlbWVu
dEltcGw6OlNFQVJDSAorI2VuZGlmCisgICAgICApIHsKKyAgICByZXR1cm4gTnVtYmVyKGlucHV0
LnNlbGVjdGlvblN0YXJ0KCkpOworICB9CisgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworc3Rh
dGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1
dCkgeworICBIVE1MSW5wdXRFbGVtZW50SW1wbDo6dHlwZUVudW0gdHlwZSA9IGlucHV0LmlucHV0
VHlwZSgpOworICBpZiAodHlwZSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6VEVYVCB8fCB0eXBl
ID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNTV09SRAorI2lmIEFQUExFX0NIQU5HRVMKKyAg
ICAgIHx8IHR5cGUgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlNFQVJDSAorI2VuZGlmCisgICAg
ICApIHsKKyAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvbkVuZCgpKTsKKyAgfQorICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIEhUTUxFbGVt
ZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgp
KTsKQEAgLTE0ODgsNiArMTUxOCw4IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkKICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4gTnVtYmVyKGlu
cHV0Lm1heExlbmd0aCgpKTsKICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGlucHV0Lm5hbWUoKSk7CiAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgcmV0
dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7CisgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0
YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uU3RhcnQoaW5wdXQpOworICAgIGNhc2UgSW5w
dXRTZWxlY3Rpb25FbmQ6CSAgIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChpbnB1dCk7CiAg
ICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zaXplRE9N
KCkpOwogICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQu
c3JjKCkpOwogICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoaW5w
dXQudGFiSW5kZXgoKSk7CkBAIC0xNTA4LDYgKzE1NDAsOCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5CiAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5uYW1lKCkpOwogICAgIGNhc2UgVGV4dEFyZWFSZWFkT25s
eTogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLnJlYWRPbmx5KCkpOwogICAgIGNhc2Ug
VGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEucm93cygpKTsK
KyAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gTnVtYmVyKHRleHRhcmVh
LnNlbGVjdGlvblN0YXJ0KCkpOworICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHJl
dHVybiBOdW1iZXIodGV4dGFyZWEuc2VsZWN0aW9uRW5kKCkpOwogICAgIGNhc2UgVGV4dEFyZWFU
YWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEudGFiSW5kZXgoKSk7CiAgICAg
Y2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS50eXBl
KCkpOwogICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4
dGFyZWEudmFsdWUoKSk7CkBAIC0yMDUyLDYgKzIwODYsMjQgQEAgYm9vbCBLSlM6OkhUTUxFbGVt
ZW50OjpoYXNPd25Qcm9wZXJ0eShFeAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICBjYXNlIElEX0lOUFVUOiB7CisgICAgICBIVE1MSW5wdXRFbGVtZW50SW1w
bCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICAgIGJvb2wgb2s7CisgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2sp
OworICAgICAgaWYgKHUgPT0gSW5wdXRTZWxlY3Rpb25TdGFydCB8fCB1ID09IElucHV0U2VsZWN0
aW9uRW5kKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjp0eXBlRW51bSB0eXBlID0g
aW5wdXQuaW5wdXRUeXBlKCk7CisgICAgICAgIGlmICh0eXBlID09IEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpURVhUIHx8IHR5cGUgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlBBU1NXT1JECisjaWYg
QVBQTEVfQ0hBTkdFUworICAgICAgICAgICAgfHwgdHlwZSA9PSBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6U0VBUkNICisjZW5kaWYKKyAgICAgICAgICAgICkgeworICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsK
ICAgfQpAQCAtMjE3OSw2ICsyMjMxLDEwIEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlv
bjo6dHJ5Q2FsbCgKICAgICAgICAgaW5wdXQuY2xpY2soKTsKICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogICAgICAgfQorICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZSkgeworICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5n
ZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7CisgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgIH0KICAgICB9CiAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJRF9MQUJFTDogewpAQCAtMjIyNiw2ICsyMjgyLDEwIEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1l
bnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgdGV4dGFyZWEuc2VsZWN0KCk7CiAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2V0U2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgdGV4dGFy
ZWEuc2V0U2VsZWN0aW9uUmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50
MzIoZXhlYykpOworICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICB9CiAgICAgfQog
ICAgIGJyZWFrOwogICAgIGNhc2UgSURfQTogewpAQCAtMjU2NCw2ICsyNjI0LDggQEAgdm9pZCBI
VE1MRWxlbWVudDo6cHV0VmFsdWUoRXhlY1N0YXRlICpleAogICAgICAgY2FzZSBJbnB1dE1heExl
bmd0aDogICAgICAgeyBpbnB1dC5zZXRNYXhMZW5ndGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQogICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1l
KHN0cik7IHJldHVybjsgfQogICAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1
dC5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgIGNh
c2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHsgaW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvbkVuZDog
ICAgeyBpbnB1dC5zZXRTZWxlY3Rpb25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQogICAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHN0cik7
IHJldHVybjsgfQogICAgICAgY2FzZSBJbnB1dFNyYzogICAgICAgICAgICAgeyBpbnB1dC5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9CiAgICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7IGlu
cHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KQEAgLTI1ODQs
NiArMjY0Niw4IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXgKICAg
ICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KICAgICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHsgdGV4dGFy
ZWEuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICBj
YXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRleHRhcmVhLnNldFJvd3ModmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvblN0YXJ0
OiAgeyB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICB7IHRleHRhcmVhLnNl
dFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICBjYXNl
IFRleHRBcmVhVGFiSW5kZXg6ICAgICAgICB7IHRleHRhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRv
SW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICAgIC8vIHJlYWQtb25seTogdHlwZQogICAgICAg
Y2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRWYWx1ZShzdHIpOyBy
ZXR1cm47IH0KSW5kZXg6IC4vV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjQ2CmRpZmYgLXAgLXUgLXIxLjQ2IC4vV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19odG1sLmgKLS0tIC4vV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmgJMjAwNS8w
Ni8yMCAyMTo1OTozNwkxLjQ2CisrKyAuL1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oCTIw
MDUvMDYvMjEgMDQ6MTU6MTYKQEAgLTEwMyw5ICsxMDMsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICAgICAgIElucHV0Rm9jdXMsIElucHV0TWF4TGVuZ3RoLCBJbnB1dERlZmF1bHRDaGVja2Vk
LCBJbnB1dERpc2FibGVkLAogICAgICAgICAgICBJbnB1dENoZWNrZWQsIElucHV0Rm9ybSwgSW5w
dXRBY2Nlc3NLZXksIElucHV0QWxpZ24sIElucHV0QWx0LAogICAgICAgICAgICBJbnB1dE5hbWUs
IElucHV0U3JjLCBJbnB1dFVzZU1hcCwgSW5wdXRTZWxlY3QsIElucHV0Q2xpY2ssCi0gICAgICAg
ICAgIFRleHRBcmVhQWNjZXNzS2V5LCBUZXh0QXJlYU5hbWUsIFRleHRBcmVhRGVmYXVsdFZhbHVl
LCBUZXh0QXJlYVNlbGVjdCwKKwkJICAgSW5wdXRTZWxlY3Rpb25TdGFydCwgSW5wdXRTZWxlY3Rp
b25FbmQsIElucHV0U2V0U2VsZWN0aW9uUmFuZ2UsCisgICAgICAgICAgIFRleHRBcmVhQWNjZXNz
S2V5LCBUZXh0QXJlYU5hbWUsIFRleHRBcmVhRGVmYXVsdFZhbHVlLCBUZXh0QXJlYVNlbGVjdCwg
VGV4dEFyZWFTZXRTZWxlY3Rpb25SYW5nZSwKICAgICAgICAgICAgVGV4dEFyZWFDb2xzLCBUZXh0
QXJlYURpc2FibGVkLCBUZXh0QXJlYUZvcm0sIFRleHRBcmVhVHlwZSwKICAgICAgICAgICAgVGV4
dEFyZWFUYWJJbmRleCwgVGV4dEFyZWFSZWFkT25seSwgVGV4dEFyZWFSb3dzLCBUZXh0QXJlYVZh
bHVlLAorICAgICAgICAgICBUZXh0QXJlYVNlbGVjdGlvblN0YXJ0LCBUZXh0QXJlYVNlbGVjdGlv
bkVuZCwKICAgICAgICAgICAgVGV4dEFyZWFCbHVyLCBUZXh0QXJlYUZvY3VzLCBCdXR0b25CbHVy
LCBCdXR0b25Gb2N1cywgQnV0dG9uRm9ybSwgQnV0dG9uVGFiSW5kZXgsIEJ1dHRvbk5hbWUsCiAg
ICAgICAgICAgIEJ1dHRvbkRpc2FibGVkLCBCdXR0b25BY2Nlc3NLZXksIEJ1dHRvblR5cGUsIEJ1
dHRvblZhbHVlLCBMYWJlbEh0bWxGb3IsCiAgICAgICAgICAgIExhYmVsRm9ybSwgTGFiZWxGb2N1
cywgTGFiZWxBY2Nlc3NLZXksIEZpZWxkU2V0Rm9ybSwgTGVnZW5kRm9ybSwgTGVnZW5kQWNjZXNz
S2V5LApJbmRleDogLi9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBs
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjcKZGlmZiAtcCAtdSAtcjEuMTY3IC4vV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCi0tLSAuL1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2Zvcm1pbXBsLmNwcAkyMDA1LzA2LzIwIDA1OjUyOjE2CTEuMTY3CisrKyAuL1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMDA1LzA2LzIxIDA0OjE1OjMxCkBAIC0x
NTA4LDYgKzE1MDgsNzYgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6cmVzdG9yZVN0YXRl
KAogICAgIH0KIH0KIAorbG9uZyBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2VsZWN0aW9uU3RhcnQo
KQoreworCWlmICghbV9yZW5kZXIpIHJldHVybiAwOworCQorCXN3aXRjaCAobV90eXBlKSB7CisJ
CWNhc2UgUEFTU1dPUkQ6CisjaWYgQVBQTEVfQ0hBTkdFUworCQljYXNlIFNFQVJDSDoKKyNlbmRp
ZgorCQljYXNlIFRFWFQ6CisJCQlyZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQqPiht
X3JlbmRlciktPnNlbGVjdGlvblN0YXJ0KCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJy
ZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworbG9uZyBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2Vs
ZWN0aW9uRW5kKCkKK3sKKwlpZiAoIW1fcmVuZGVyKSByZXR1cm4gMDsKKwkKKwlzd2l0Y2ggKG1f
dHlwZSkgeworCQljYXNlIFBBU1NXT1JEOgorI2lmIEFQUExFX0NIQU5HRVMKKwkJY2FzZSBTRUFS
Q0g6CisjZW5kaWYKKwkJY2FzZSBURVhUOgorCQkJcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckxp
bmVFZGl0Kj4obV9yZW5kZXIpLT5zZWxlY3Rpb25FbmQoKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpzZXRTZWxlY3Rpb25TdGFydChsb25nIHN0YXJ0KQoreworCWlmICghbV9yZW5kZXIpIHJl
dHVybjsKKwkKKwlzd2l0Y2ggKG1fdHlwZSkgeworCQljYXNlIFBBU1NXT1JEOgorI2lmIEFQUExF
X0NIQU5HRVMKKwkJY2FzZSBTRUFSQ0g6CisjZW5kaWYKKwkJY2FzZSBURVhUOgorCQkJc3RhdGlj
X2Nhc3Q8UmVuZGVyTGluZUVkaXQqPihtX3JlbmRlciktPnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0
KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCit2b2lkIEhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25FbmQobG9uZyBlbmQpCit7CisJaWYgKCFtX3Jl
bmRlcikgcmV0dXJuOworCQorCXN3aXRjaCAobV90eXBlKSB7CisJCWNhc2UgUEFTU1dPUkQ6Cisj
aWYgQVBQTEVfQ0hBTkdFUworCQljYXNlIFNFQVJDSDoKKyNlbmRpZgorCQljYXNlIFRFWFQ6CisJ
CQlzdGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uRW5k
KGVuZCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK30KKwogdm9pZCBI
VE1MSW5wdXRFbGVtZW50SW1wbDo6c2VsZWN0KCAgKQogewogICAgIGlmKCFtX3JlbmRlcikgcmV0
dXJuOwpAQCAtMTUzOCw2ICsxNjA4LDIzIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNl
bGVjdCggICkKICAgICB9CiB9CiAKK3ZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFNlbGVj
dGlvblJhbmdlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKQoreworCWlmICghbV9yZW5kZXIpIHJldHVy
bjsKKwkKKwlzd2l0Y2ggKG1fdHlwZSkgeworCQljYXNlIFBBU1NXT1JEOgorI2lmIEFQUExFX0NI
QU5HRVMKKwkJY2FzZSBTRUFSQ0g6CisjZW5kaWYKKwkJY2FzZSBURVhUOgorCQkJc3RhdGljX2Nh
c3Q8UmVuZGVyTGluZUVkaXQqPihtX3JlbmRlciktPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBl
bmQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKIHZvaWQgSFRN
TElucHV0RWxlbWVudEltcGw6OmNsaWNrKGJvb2wgc2VuZE1vdXNlRXZlbnRzKQogewogICAgIHN3
aXRjaCAoaW5wdXRUeXBlKCkpIHsKQEAgLTMzODAsMTIgKzM0NjcsNDQgQEAgdm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6cmVzdG9yZVN0YQogICAgIC8vIHRoZSBjbG9zZSgpIGluIHRoZSBy
ZW5kZXJ0cmVlIHdpbGwgdGFrZSBjYXJlIG9mIHRyYW5zZmVycmluZyBkZWZhdWx0dmFsdWUgdG8g
J3ZhbHVlJwogfQogCitsb25nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZWxlY3Rpb25TdGFy
dCgpCit7CisgICAgaWYgKG1fcmVuZGVyKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dEFyZWEqPihtX3JlbmRlciktPnNlbGVjdGlvblN0YXJ0KCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2xvbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNlbGVjdGlvbkVuZCgpCit7Cisg
ICAgaWYgKG1fcmVuZGVyKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFy
ZWEqPihtX3JlbmRlciktPnNlbGVjdGlvbkVuZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25TdGFydChsb25nIHN0YXJ0KQor
eworICAgIGlmIChtX3JlbmRlcikKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEq
PihtX3JlbmRlciktPnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKK30KKwordm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uRW5kKGxvbmcgZW5kKQoreworICAgIGlmICht
X3JlbmRlcikKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihtX3JlbmRlcikt
PnNldFNlbGVjdGlvbkVuZChlbmQpOworfQorCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBs
OjpzZWxlY3QoICApCiB7CiAgICAgaWYgKG1fcmVuZGVyKQogICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJUZXh0QXJlYSo+KG1fcmVuZGVyKS0+c2VsZWN0KCk7CiB9CiAKK3ZvaWQgSFRNTFRleHRB
cmVhRWxlbWVudEltcGw6OnNldFNlbGVjdGlvblJhbmdlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKQor
eworICAgIGlmIChtX3JlbmRlcikKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEq
PihtX3JlbmRlciktPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOworfQorCiB2b2lkIEhU
TUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpjaGlsZHJlbkNoYW5nZWQoKQogewogICAgIHNldFZhbHVl
KGRlZmF1bHRWYWx1ZSgpKTsKQEAgLTM0ODMsNiArMzYwMiw5IEBAIERPTVN0cmluZyBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6dmFsdWUKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNl
dFZhbHVlKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7CiAgICAgbV92YWx1ZSA9IHZhbHVlLnN0
cmluZygpOworCS8vIE5vdyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSBsaW5lIGVuZGluZ3MgdG8gXG4g
dG8gbWF0Y2ggS1dRVGV4dEFyZWEKKwltX3ZhbHVlLnJlcGxhY2UoUVN0cmluZygiXHJcbiIpLCAi
XG4iKTsKKwltX3ZhbHVlLnJlcGxhY2UoJ1xyJywgJ1xuJyk7CiAgICAgbV92YWx1ZUlzVmFsaWQg
PSB0cnVlOwogICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKICAgICBzZXRDaGFu
Z2VkKHRydWUpOwpJbmRleDogLi9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3Jt
aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc0CmRpZmYgLXAgLXUgLXIxLjc0IC4vV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAotLS0gLi9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9mb3JtaW1wbC5oCTIwMDUvMDYvMjAgMDU6NTI6MTYJMS43NAorKysgLi9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTIwMDUvMDYvMjEgMDQ6MTU6MzEKQEAgLTM1Nyw3ICsz
NTcsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUVN0cmluZyBzdGF0ZSgpOwogICAgIHZpcnR1
YWwgdm9pZCByZXN0b3JlU3RhdGUoUVN0cmluZ0xpc3QgJik7CiAKKyAgICBsb25nIHNlbGVjdGlv
blN0YXJ0KCk7CisgICAgbG9uZyBzZWxlY3Rpb25FbmQoKTsKKyAgICB2b2lkIHNldFNlbGVjdGlv
blN0YXJ0KGxvbmcpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGxvbmcpOworCiAgICAgdm9p
ZCBzZWxlY3QoKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGxvbmcsIGxvbmcpOwogICAg
IAogICAgIHZpcnR1YWwgdm9pZCBjbGljayhib29sIHNlbmRNb3VzZUV2ZW50cyA9IGZhbHNlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7
CkBAIC03MjIsNyArNzI4LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFFTdHJpbmcgc3RhdGUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKFFTdHJpbmdMaXN0ICYpOwogCisgICAg
bG9uZyBzZWxlY3Rpb25TdGFydCgpOworICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7CisKKyAgICB2
b2lkIHNldFNlbGVjdGlvblN0YXJ0KGxvbmcpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGxv
bmcpOworCiAgICAgdm9pZCBzZWxlY3QgKCAgKTsKKwl2b2lkIHNldFNlbGVjdGlvblJhbmdlKGxv
bmcsIGxvbmcpOwogCiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRy
KTsKSW5kZXg6IC4vV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJf
Zm9ybS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA3CmRpZmYgLXAgLXUgLXIxLjEwNyAu
L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAotLS0gLi9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJMjAwNS8wNi8yMCAwNToyNDoyNgkxLjEwNwor
KysgLi9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJMjAwNS8wNi8yMSAw
NDoxNTo0MQpAQCAtNzE4LDExICs3MTgsMzYgQEAgdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2xvdFRl
eHRDaGFuZ2VkKGNvbgogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVGcm9tUmVuZGVyZXIobmV3VGV4
dCk7CiB9CiAKK2xvbmcgUmVuZGVyTGluZUVkaXQ6OnNlbGVjdGlvblN0YXJ0KCkKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8S0xpbmVFZGl0Kj4obV93aWRnZXQpLT5zZWxlY3Rpb25TdGFydCgp
OworfQorCitsb25nIFJlbmRlckxpbmVFZGl0OjpzZWxlY3Rpb25FbmQoKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxLTGluZUVkaXQqPihtX3dpZGdldCktPnNlbGVjdGlvbkVuZCgpOworfQor
Cit2b2lkIFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25TdGFydChsb25nIHN0YXJ0KQorewor
ICAgIHN0YXRpY19jYXN0PEtMaW5lRWRpdCo+KG1fd2lkZ2V0KS0+c2V0U2VsZWN0aW9uU3RhcnQo
c3RhcnQpOworfQorCit2b2lkIFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25FbmQobG9uZyBl
bmQpCit7CisgICAgc3RhdGljX2Nhc3Q8S0xpbmVFZGl0Kj4obV93aWRnZXQpLT5zZXRTZWxlY3Rp
b25FbmQoZW5kKTsKK30KKwogdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2VsZWN0KCkKIHsKICAgICBz
dGF0aWNfY2FzdDxLTGluZUVkaXQqPihtX3dpZGdldCktPnNlbGVjdEFsbCgpOwogfQogCit2b2lk
IFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25SYW5nZShsb25nIHN0YXJ0LCBsb25nIGVuZCkK
K3sKKyAgICBzdGF0aWNfY2FzdDxLTGluZUVkaXQqPihtX3dpZGdldCktPnNldFNlbGVjdGlvblJh
bmdlKHN0YXJ0LCBlbmQtc3RhcnQpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVu
ZGVyRmllbGRzZXQ6OlJlbmRlckZpZWxkc2V0KEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICpl
bGVtZW50KQpAQCAtMTY0MSw5ICsxNjY2LDY0IEBAIHZvaWQgUmVuZGVyVGV4dEFyZWE6OnNsb3RU
ZXh0Q2hhbmdlZCgpCiAgICAgbV9kaXJ0eSA9IHRydWU7CiB9CiAKK2xvbmcgUmVuZGVyVGV4dEFy
ZWE6OnNlbGVjdGlvblN0YXJ0KCkKK3sKKyAgICBRVGV4dEVkaXQgKnRleHRFZGl0ID0gc3RhdGlj
X2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KTsKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgcmV0
dXJuIHRleHRFZGl0LT5zZWxlY3Rpb25TdGFydCgpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogSSBj
YW4ndCB0ZXN0IFF0LCBzbyBJJ20gbm90IGdvaW5nIHRvIGJvdGhlcgorICAgIC8vIHRyeWluZyB0
byB3cml0ZSB0aGUgY29kZSBmb3IgaXQKKyNlbmRpZgorfQorCitsb25nIFJlbmRlclRleHRBcmVh
OjpzZWxlY3Rpb25FbmQoKQoreworICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBzdGF0aWNfY2Fz
dDxRVGV4dEVkaXQgKj4obV93aWRnZXQpOworI2lmIEFQUExFX0NIQU5HRVMKKyAgICByZXR1cm4g
dGV4dEVkaXQtPnNlbGVjdGlvbkVuZCgpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogSSBjYW4ndCB0
ZXN0IFF0LCBzbyBJJ20gbm90IGdvaW5nIHRvIGJvdGhlcgorICAgIC8vIHRyeWluZyB0byB3cml0
ZSB0aGUgY29kZSBmb3IgaXQKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlclRleHRBcmVhOjpzZXRT
ZWxlY3Rpb25TdGFydChsb25nIHN0YXJ0KQoreworICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBz
dGF0aWNfY2FzdDxRVGV4dEVkaXQgKj4obV93aWRnZXQpOworI2lmIEFQUExFX0NIQU5HRVMKKyAg
ICB0ZXh0RWRpdC0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOworI2Vsc2UKKyAgICAvLyBGSVhN
RTogSSBjYW4ndCB0ZXN0IFF0LCBzbyBJJ20gbm90IGdvaW5nIHRvIGJvdGhlcgorICAgIC8vIHRy
eWluZyB0byB3cml0ZSB0aGUgY29kZSBmb3IgaXQKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlclRl
eHRBcmVhOjpzZXRTZWxlY3Rpb25FbmQobG9uZyBlbmQpCit7CisgICAgUVRleHRFZGl0ICp0ZXh0
RWRpdCA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCAqPihtX3dpZGdldCk7CisjaWYgQVBQTEVfQ0hB
TkdFUworICAgIHRleHRFZGl0LT5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKKyNlbHNlCisgICAgLy8g
RklYTUU6IEkgY2FuJ3QgdGVzdCBRdCwgc28gSSdtIG5vdCBnb2luZyB0byBib3RoZXIKKyAgICAv
LyB0cnlpbmcgdG8gd3JpdGUgdGhlIGNvZGUgZm9yIGl0CisjZW5kaWYKK30KKwogdm9pZCBSZW5k
ZXJUZXh0QXJlYTo6c2VsZWN0KCkKIHsKICAgICBzdGF0aWNfY2FzdDxRVGV4dEVkaXQgKj4obV93
aWRnZXQpLT5zZWxlY3RBbGwoKTsKK30KKwordm9pZCBSZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0
aW9uUmFuZ2UobG9uZyBzdGFydCwgbG9uZyBlbmQpCit7CisgICAgUVRleHRFZGl0ICp0ZXh0RWRp
dCA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCAqPihtX3dpZGdldCk7CisjaWYgQVBQTEVfQ0hBTkdF
UworICAgIHRleHRFZGl0LT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLXN0YXJ0KTsKKyNl
bHNlCisgICAgLy8gRklYTUU6IEkgY2FuJ3QgdGVzdCBRdCwgc28gSSdtIG5vdCBnb2luZyB0byBi
b3RoZXIKKyAgICAvLyB0cnlpbmcgdG8gd3JpdGUgdGhlIGNvZGUgZm9yIGl0CisjZW5kaWYKIH0K
IAogdm9pZCBSZW5kZXJUZXh0QXJlYTo6c2xvdFNlbGVjdGlvbkNoYW5nZWQoKQpJbmRleDogLi9X
ZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjUxCmRpZmYgLXAgLXUgLXIxLjUxIC4vV2ViQ29yZS9raHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2Zvcm0uaAotLS0gLi9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJf
Zm9ybS5oCTIwMDUvMDYvMjAgMDU6MjQ6MjYJMS41MQorKysgLi9XZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfZm9ybS5oCTIwMDUvMDYvMjEgMDQ6MTU6NDEKQEAgLTI0OCw3ICsyNDgsMTMg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSAqKTsKIAorICAgIGxvbmcgc2VsZWN0aW9u
U3RhcnQoKTsKKyAgICBsb25nIHNlbGVjdGlvbkVuZCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9u
U3RhcnQobG9uZyk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQobG9uZyk7CisgICAgCiAgICAg
dm9pZCBzZWxlY3QoKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGxvbmcsIGxvbmcpOwog
CiAgICAgS0xpbmVFZGl0ICp3aWRnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxLTGlu
ZUVkaXQqPihtX3dpZGdldCk7IH0KICAgICBET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsKiBlbGVt
ZW50KCkgY29uc3QKQEAgLTQ2OSw3ICs0NzUsMTMgQEAgcHVibGljOgogCiAgICAgUVN0cmluZyB0
ZXh0KCk7CiAKKwlsb25nIHNlbGVjdGlvblN0YXJ0KCk7CisJbG9uZyBzZWxlY3Rpb25FbmQoKTsK
Kwl2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGxvbmcpOworCXZvaWQgc2V0U2VsZWN0aW9uRW5kKGxv
bmcpOworCQogICAgIHZvaWQgc2VsZWN0KCk7CisJdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShsb25n
LCBsb25nKTsKIAogI2lmIEFQUExFX0NIQU5HRVMKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUlu
dHJpbnNpY01hcmdpbnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiAuL1dlYkNvcmUv
a3dxL0tXUUxpbmVFZGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUUxpbmVFZGl0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzIKZGlmZiAtcCAtdSAt
cjEuMzIgLi9XZWJDb3JlL2t3cS9LV1FMaW5lRWRpdC5oCi0tLSAuL1dlYkNvcmUva3dxL0tXUUxp
bmVFZGl0LmgJMjAwNS8wNi8yMCAwNToyNDoyNgkxLjMyCisrKyAuL1dlYkNvcmUva3dxL0tXUUxp
bmVFZGl0LmgJMjAwNS8wNi8yMSAwNDoxNTo1NwpAQCAtNjUsNyArNjUsMTMgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRXcml0aW5nRGlyZWN0aW9uKFFQYWludGVyOjpUZXh0RGlyZWN0aW9uKTsK
ICAgICAKKyAgICBsb25nIHNlbGVjdGlvblN0YXJ0KCk7CisgICAgbG9uZyBzZWxlY3Rpb25FbmQo
KTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGxvbmcpOworICAgIHZvaWQgc2V0U2VsZWN0
aW9uRW5kKGxvbmcpOworICAgIAogICAgIHZvaWQgc2VsZWN0QWxsKCk7CisgICAgdm9pZCBzZXRT
ZWxlY3Rpb25SYW5nZShsb25nLCBsb25nKTsKICAgICBib29sIGhhc1NlbGVjdGVkVGV4dCgpIGNv
bnN0OwogICAgIAogICAgIFFTaXplIHNpemVGb3JDaGFyYWN0ZXJXaWR0aChpbnQgbnVtQ2hhcmFj
dGVycykgY29uc3Q7CkluZGV4OiAuL1dlYkNvcmUva3dxL0tXUUxpbmVFZGl0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FMaW5lRWRpdC5tbSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS42NgpkaWZmIC1wIC11IC1yMS42NiAuL1dlYkNvcmUva3dxL0tXUUxp
bmVFZGl0Lm1tCi0tLSAuL1dlYkNvcmUva3dxL0tXUUxpbmVFZGl0Lm1tCTIwMDUvMDYvMjAgMDU6
MjQ6MjYJMS42NgorKysgLi9XZWJDb3JlL2t3cS9LV1FMaW5lRWRpdC5tbQkyMDA1LzA2LzIxIDA0
OjE1OjU3CkBAIC0xNzIsNiArMTcyLDQxIEBAIGludCBRTGluZUVkaXQ6Om1heExlbmd0aCgpIGNv
bnN0CiAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXIgbWF4aW11bUxlbmd0aF07CiB9CiAKK2xvbmcg
UUxpbmVFZGl0OjpzZWxlY3Rpb25TdGFydCgpCit7CisgICAgcmV0dXJuIFttX2NvbnRyb2xsZXIg
c2VsZWN0ZWRSYW5nZV0ubG9jYXRpb247Cit9CisKK2xvbmcgUUxpbmVFZGl0OjpzZWxlY3Rpb25F
bmQoKQoreworICAgIHJldHVybiBOU01heFJhbmdlKFttX2NvbnRyb2xsZXIgc2VsZWN0ZWRSYW5n
ZV0pOworfQorCit2b2lkIFFMaW5lRWRpdDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkK
K3sKKyAgICBOU1JhbmdlIHJhbmdlID0gW21fY29udHJvbGxlciBzZWxlY3RlZFJhbmdlXTsKKyAg
ICB1bnNpZ25lZCBpbnQgb2xkTG9jYXRpb24gPSByYW5nZS5sb2NhdGlvbjsKKyAgICByYW5nZS5s
b2NhdGlvbiA9IE1BWChzdGFydCwgMCk7CisgICAgLy8gVGhlIHNlY29uZCBNQVggaXMgYSB3b3Jr
YXJvdW5kIGZvciB0aGUgdW5zaWduZWQgYXNwZWN0CisgICAgLy8gaWYgcmFuZ2UubG9jYXRpb24g
aXMgbGFyZ2VyLCB0aGlzIHdpbGwgZW5kIHVwIDAsIGluc3RlYWQgb2YgYSBodWdlIG51bWJlcgor
ICAgIHJhbmdlLmxlbmd0aCA9IE1BWChNQVgocmFuZ2UubGVuZ3RoICsgb2xkTG9jYXRpb24sIHJh
bmdlLmxvY2F0aW9uKSAtIHJhbmdlLmxvY2F0aW9uLCAwKTsKKyAgICByYW5nZS5sZW5ndGggPSBN
SU4ocmFuZ2UubGVuZ3RoLCBbW21fY29udHJvbGxlciBzdHJpbmddIGxlbmd0aF0gLSByYW5nZS5s
b2NhdGlvbik7CisgICAgW21fY29udHJvbGxlciBzZXRTZWxlY3RlZFJhbmdlOnJhbmdlXTsKK30K
Kwordm9pZCBRTGluZUVkaXQ6OnNldFNlbGVjdGlvbkVuZChsb25nIGVuZCkKK3sKKyAgICBOU1Jh
bmdlIHJhbmdlID0gW21fY29udHJvbGxlciBzZWxlY3RlZFJhbmdlXTsKKyAgICBlbmQgPSBNQVgo
ZW5kLCAwKTsKKyAgICBpZiAoKHVuc2lnbmVkIGludCllbmQgPj0gcmFuZ2UubG9jYXRpb24pIHsK
KyAgICAgICAgcmFuZ2UubGVuZ3RoID0gTUlOKGVuZCAtIHJhbmdlLmxvY2F0aW9uLCBbW21fY29u
dHJvbGxlciBzdHJpbmddIGxlbmd0aF0gLSByYW5nZS5sb2NhdGlvbik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmFuZ2UubG9jYXRpb24gPSBlbmQ7CisgICAgICAgIHJhbmdlLmxlbmd0aCA9IDA7
CisgICAgfQorICAgIFttX2NvbnRyb2xsZXIgc2V0U2VsZWN0ZWRSYW5nZTpyYW5nZV07Cit9CisK
IHZvaWQgUUxpbmVFZGl0OjpzZWxlY3RBbGwoKQogewogICAgIGlmICghaGFzRm9jdXMoKSkgewpA
QCAtMTg0LDYgKzIxOSwxMSBAQCB2b2lkIFFMaW5lRWRpdDo6c2VsZWN0QWxsKCkKICAgICAgICAg
W3RleHRGaWVsZCBzZWxlY3RUZXh0Om5pbF07CiAgICAgICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElP
TlM7CiAgICAgfQorfQorCit2b2lkIFFMaW5lRWRpdDo6c2V0U2VsZWN0aW9uUmFuZ2UobG9uZyBz
dGFydCwgbG9uZyBsZW5ndGgpCit7CisgICAgW21fY29udHJvbGxlciBzZXRTZWxlY3RlZFJhbmdl
Ok5TTWFrZVJhbmdlKHN0YXJ0LCBsZW5ndGgpXTsKIH0KIAogYm9vbCBRTGluZUVkaXQ6Omhhc1Nl
bGVjdGVkVGV4dCgpIGNvbnN0CkluZGV4OiAuL1dlYkNvcmUva3dxL0tXUVRleHRBcmVhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVRleHRBcmVhLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEgLi9XZWJDb3JlL2t3cS9L
V1FUZXh0QXJlYS5oCi0tLSAuL1dlYkNvcmUva3dxL0tXUVRleHRBcmVhLmgJMjAwNS8wNi8yMCAw
NToyNDoyNgkxLjIxCisrKyAuL1dlYkNvcmUva3dxL0tXUVRleHRBcmVhLmgJMjAwNS8wNi8yMSAw
NDoxNTo1NwpAQCAtNjcsNiArNjcsOCBAQCBjbGFzcyBRVGV4dEVkaXQ7CiAtIChCT09MKXdvcmRX
cmFwOwogCiAtICh2b2lkKXNlbGVjdEFsbDsKKy0gKHZvaWQpc2V0U2VsZWN0ZWRSYW5nZTooTlNS
YW5nZSlhUmFuZ2U7CistIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2U7CiAtIChCT09MKWhhc1NlbGVj
dGlvbjsKIAogLSAoTlNTaXplKXNpemVXaXRoQ29sdW1uczooaW50KWNvbHVtbnMgcm93czooaW50
KXJvd3M7CkluZGV4OiAuL1dlYkNvcmUva3dxL0tXUVRleHRBcmVhLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FUZXh0QXJlYS5tbSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS44MgpkaWZmIC1wIC11IC1yMS44MiAuL1dlYkNvcmUva3dxL0tXUVRleHRBcmVh
Lm1tCi0tLSAuL1dlYkNvcmUva3dxL0tXUVRleHRBcmVhLm1tCTIwMDUvMDYvMjAgMDU6MjQ6MjcJ
MS44MgorKysgLi9XZWJDb3JlL2t3cS9LV1FUZXh0QXJlYS5tbQkyMDA1LzA2LzIxIDA0OjE1OjU3
CkBAIC0yODgsNiArMjg4LDYzIEBAIGNvbnN0IGZsb2F0IExhcmdlTnVtYmVyRm9yVGV4dCA9IDEu
MGU3OwogICAgIFt0ZXh0VmlldyBzZWxlY3RBbGw6bmlsXTsKIH0KIAorLSAodm9pZClzZXRTZWxl
Y3RlZFJhbmdlOihOU1JhbmdlKWFSYW5nZQoreworICAgIC8vIE9rLCB0aGUgc2VsZWN0aW9uIGhh
cyB0byBtYXRjaCB1cCB3aXRoIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgLXRleHQKKyAgICAvLyBh
bmQgc2luY2UgLXRleHQgdHJhbnNsYXRlcyBcclxuIHRvIFxuLCB3ZSBoYXZlIHRvIG1vZGlmeSBv
dXIgc2VsZWN0aW9uCisgICAgLy8gaWYgYSBcclxuIHNlcXVlbmNlIGlzIGFueXdoZXJlIGluIG9y
IGJlZm9yZSB0aGUgc2VsZWN0aW9uCisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKyAgICBO
U1JhbmdlIGZvdW5kUmFuZ2UsIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgYVJhbmdlLmxv
Y2F0aW9uKTsKKyAgICBOU1N0cmluZyAqdGV4dCA9IFt0ZXh0VmlldyBzdHJpbmddOworICAgIHdo
aWxlIChmb3VuZFJhbmdlID0gW3RleHQgcmFuZ2VPZlN0cmluZzpAIlxyXG4iIG9wdGlvbnM6TlNM
aXRlcmFsU2VhcmNoIHJhbmdlOnNlYXJjaFJhbmdlXSwKKyAgICAgICAgICAgZm91bmRSYW5nZS5s
b2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHNlYXJj
aFJhbmdlLmxvY2F0aW9uID0gTlNNYXhSYW5nZShmb3VuZFJhbmdlKTsKKyAgICAgICAgaWYgKHNl
YXJjaFJhbmdlLmxvY2F0aW9uID49IGFSYW5nZS5sb2NhdGlvbikgYnJlYWs7CisgICAgICAgIHNl
YXJjaFJhbmdlLmxlbmd0aCA9IGFSYW5nZS5sb2NhdGlvbiAtIHNlYXJjaFJhbmdlLmxvY2F0aW9u
OworICAgIH0KKyAgICBhUmFuZ2UubG9jYXRpb24gKz0gY291bnQ7CisgICAgY291bnQgPSAwOwor
ICAgIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoYVJhbmdlLmxvY2F0aW9uLCBhUmFuZ2UubGVu
Z3RoKTsKKyAgICB3aGlsZSAoZm91bmRSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxu
IiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpzZWFyY2hSYW5nZV0sCisgICAgICAgICAg
IGZvdW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgICAgICBjb3VudCsrOwor
ICAgICAgICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZm91bmRSYW5nZSk7Cisg
ICAgICAgIGlmIChzZWFyY2hSYW5nZS5sb2NhdGlvbiA+PSBOU01heFJhbmdlKGFSYW5nZSkpIGJy
ZWFrOworICAgICAgICBzZWFyY2hSYW5nZS5sZW5ndGggPSBOU01heFJhbmdlKGFSYW5nZSkgLSBz
ZWFyY2hSYW5nZS5sb2NhdGlvbjsKKyAgICB9CisgICAgYVJhbmdlLmxlbmd0aCArPSBjb3VudDsK
KyAgICBbdGV4dFZpZXcgc2V0U2VsZWN0ZWRSYW5nZTphUmFuZ2VdOworfQorCistIChOU1Jhbmdl
KXNlbGVjdGVkUmFuZ2UKK3sKKyAgICAvLyBTYW1lIGlzc3VlIGFzIHdpdGggLXNldFNlbGVjdGVk
UmFuZ2U6IHJlZ2FyZGluZyBcclxuIHNlcXVlbmNlcworICAgIE5TUmFuZ2UgYVJhbmdlID0gW3Rl
eHRWaWV3IHNlbGVjdGVkUmFuZ2VdOworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7CisgICAg
TlNSYW5nZSBmb3VuZFJhbmdlLCBzZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIGFSYW5nZS5s
b2NhdGlvbik7CisgICAgTlNTdHJpbmcgKnRleHQgPSBbdGV4dFZpZXcgc3RyaW5nXTsKKyAgICB3
aGlsZSAoZm91bmRSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxuIiBvcHRpb25zOk5T
TGl0ZXJhbFNlYXJjaCByYW5nZTpzZWFyY2hSYW5nZV0sCisgICAgICAgICAgIGZvdW5kUmFuZ2Uu
bG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgICAgICBjb3VudCsrOworICAgICAgICBzZWFy
Y2hSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZm91bmRSYW5nZSk7CisgICAgICAgIGlmIChz
ZWFyY2hSYW5nZS5sb2NhdGlvbiA+PSBhUmFuZ2UubG9jYXRpb24pIGJyZWFrOworICAgICAgICBz
ZWFyY2hSYW5nZS5sZW5ndGggPSBhUmFuZ2UubG9jYXRpb24gLSBzZWFyY2hSYW5nZS5sb2NhdGlv
bjsKKyAgICB9CisgICAgYVJhbmdlLmxvY2F0aW9uIC09IGNvdW50OworICAgIGNvdW50ID0gMDsK
KyAgICBzZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKGFSYW5nZS5sb2NhdGlvbiwgYVJhbmdlLmxl
bmd0aCk7CisgICAgd2hpbGUgKGZvdW5kUmFuZ2UgPSBbdGV4dCByYW5nZU9mU3RyaW5nOkAiXHJc
biIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2VdLAorICAgICAgICAg
ICBmb3VuZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsKKyAgICAgICAgY291bnQrKzsK
KyAgICAgICAgc2VhcmNoUmFuZ2UubG9jYXRpb24gPSBOU01heFJhbmdlKGZvdW5kUmFuZ2UpOwor
ICAgICAgICBpZiAoc2VhcmNoUmFuZ2UubG9jYXRpb24gPj0gTlNNYXhSYW5nZShhUmFuZ2UpKSBi
cmVhazsKKyAgICAgICAgc2VhcmNoUmFuZ2UubGVuZ3RoID0gTlNNYXhSYW5nZShhUmFuZ2UpIC0g
c2VhcmNoUmFuZ2UubG9jYXRpb247CisgICAgfQorICAgIGFSYW5nZS5sZW5ndGggLT0gY291bnQ7
CisgICAgcmV0dXJuIGFSYW5nZTsKK30KKwogLSAoQk9PTCloYXNTZWxlY3Rpb24KIHsKICAgICBy
ZXR1cm4gW3RleHRWaWV3IHNlbGVjdGVkUmFuZ2VdLmxlbmd0aCA+IDA7CkBAIC0zODMsNiArNDQw
LDEwIEBAIGNvbnN0IGZsb2F0IExhcmdlTnVtYmVyRm9yVGV4dCA9IDEuMGU3OwogCiAtICh2b2lk
KWdldEN1cnNvclBvc2l0aW9uQXNJbmRleDooaW50ICopaW5kZXggaW5QYXJhZ3JhcGg6KGludCAq
KXBhcmFncmFwaAogeworICAgIGlmIChwYXJhZ3JhcGggPT0gTlVMTCB8fCBpbmRleCA9PSBOVUxM
KSB7CisgICAgICAgIC8vIEp1c3QgaW4gY2FzZQorICAgICAgICByZXR1cm47CisgICAgfQogICAg
IE5TU3RyaW5nICp0ZXh0ID0gW3RleHRWaWV3IHN0cmluZ107CiAgICAgTlNSYW5nZSBzZWxlY3Rl
ZFJhbmdlID0gW3RleHRWaWV3IHNlbGVjdGVkUmFuZ2VdOwogICAgIApAQCAtMzkzLDY0ICs0NTQs
NjkgQEAgY29uc3QgZmxvYXQgTGFyZ2VOdW1iZXJGb3JUZXh0ID0gMS4wZTc7CiAgICAgfQogICAg
IAogICAgIGludCBwYXJhZ3JhcGhTb0ZhciA9IDA7Ci0gICAgTlNSYW5nZSBzZWFyY2hSYW5nZSA9
IE5TTWFrZVJhbmdlKDAsIFt0ZXh0IGxlbmd0aF0pOworICAgIGludCBwYXJhZ3JhcGhTdGFydCA9
IDA7CisgICAgCisgICAgTlNTY2FubmVyICpzY2FubmVyID0gW05TU2Nhbm5lciBzY2FubmVyV2l0
aFN0cmluZzp0ZXh0XTsKKyAgICBbc2Nhbm5lciBzZXRDaGFyYWN0ZXJzVG9CZVNraXBwZWQ6bmls
XTsKKyAgICBOU0NoYXJhY3RlclNldCAqbmV3bGluZVNldCA9IFtOU0NoYXJhY3RlclNldCBjaGFy
YWN0ZXJTZXRXaXRoQ2hhcmFjdGVyc0luU3RyaW5nOkAiXHJcbiJdOwogCiAgICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgLy8gRklYTUU6IERvZXNuJ3Qgd29yayBmb3IgQ1Itc2VwYXJhdGVkIG9y
IENSTEYtc2VwYXJhdGVkIHRleHQuCi0JTlNSYW5nZSBuZXdsaW5lUmFuZ2UgPSBbdGV4dCByYW5n
ZU9mU3RyaW5nOkAiXG4iIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOnNlYXJjaFJhbmdl
XTsKLQlpZiAobmV3bGluZVJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgc2VsZWN0ZWRS
YW5nZS5sb2NhdGlvbiA8PSBuZXdsaW5lUmFuZ2UubG9jYXRpb24pIHsKLQkgICAgYnJlYWs7Ci0J
fQorICAgICAgICBbc2Nhbm5lciBzY2FuVXBUb0NoYXJhY3RlcnNGcm9tU2V0Om5ld2xpbmVTZXQg
aW50b1N0cmluZzpOVUxMXTsKICAgICAgICAgCi0JcGFyYWdyYXBoU29GYXIrKzsKLQotICAgICAg
ICB1bnNpZ25lZCBhZHZhbmNlID0gbmV3bGluZVJhbmdlLmxvY2F0aW9uICsgMSAtIHNlYXJjaFJh
bmdlLmxvY2F0aW9uOwotCi0Jc2VhcmNoUmFuZ2UubGVuZ3RoIC09IGFkdmFuY2U7Ci0Jc2VhcmNo
UmFuZ2UubG9jYXRpb24gKz0gYWR2YW5jZTsKKyAgICAgICAgaWYgKFtzY2FubmVyIGlzQXRFbmRd
IHx8IHNlbGVjdGVkUmFuZ2UubG9jYXRpb24gPD0gW3NjYW5uZXIgc2NhbkxvY2F0aW9uXSkgewor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBhcmFncmFw
aFNvRmFyKys7CisgICAgICAgIAorICAgICAgICB1bmljaGFyIGMgPSBbdGV4dCBjaGFyYWN0ZXJB
dEluZGV4OltzY2FubmVyIHNjYW5Mb2NhdGlvbl1dOworICAgICAgICBbc2Nhbm5lciBzZXRTY2Fu
TG9jYXRpb246W3NjYW5uZXIgc2NhbkxvY2F0aW9uXSsxXTsgLy8gc2tpcCBvdmVyIHRoZSBmb3Vu
ZCBjaGFyCisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIFtzY2FubmVyIHNj
YW5TdHJpbmc6QCJcbiIgaW50b1N0cmluZzpOVUxMXTsgLy8gZ2V0IHRoZSBlbnRpcmUgY3JsZiBp
ZiBpdCBpcyBvbmUKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcGFyYWdyYXBoU3RhcnQg
PSBbc2Nhbm5lciBzY2FuTG9jYXRpb25dOwogICAgIH0KIAogICAgICpwYXJhZ3JhcGggPSBwYXJh
Z3JhcGhTb0ZhcjsKLSAgICAqaW5kZXggPSBzZWxlY3RlZFJhbmdlLmxvY2F0aW9uIC0gc2VhcmNo
UmFuZ2UubG9jYXRpb247CisgICAgLy8gSXQgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGl0IG1pZ2h0
IGJlIHBvc3NpYmxlIGZvciB0aGUgc2VsZWN0aW9uCisgICAgLy8gdG8gYmUgYmV0d2VlbiB0aGUg
Y3IgYW5kIGxmIGlmIHRoZXJlJ3MgYSBjcmxmIHNlcXVlbmNlCisgICAgLy8gdGhhdCB3b3VsZCBy
ZXN1bHQgaW4gYSAtMSBpbmRleCB3aGVuIGl0IHNob3VsZCBiZSAwLiBMZXRzIGhhbmRsZSB0aGF0
CisgICAgKmluZGV4ID0gTUFYKHNlbGVjdGVkUmFuZ2UubG9jYXRpb24gLSBwYXJhZ3JhcGhTdGFy
dCwgMCk7CiB9CiAKIHN0YXRpYyBOU1JhbmdlIFJhbmdlT2ZQYXJhZ3JhcGgoTlNTdHJpbmcgKnRl
eHQsIGludCBwYXJhZ3JhcGgpCiB7CiAgICAgaW50IHBhcmFncmFwaFNvRmFyID0gMDsKLSAgICBO
U1JhbmdlIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgW3RleHQgbGVuZ3RoXSk7CisgICAg
aW50IHBhcmFncmFwaFN0YXJ0ID0gMDsKKyAgICAKKyAgICBOU1NjYW5uZXIgKnNjYW5uZXIgPSBb
TlNTY2FubmVyIHNjYW5uZXJXaXRoU3RyaW5nOnRleHRdOworICAgIFtzY2FubmVyIHNldENoYXJh
Y3RlcnNUb0JlU2tpcHBlZDpuaWxdOworICAgIE5TQ2hhcmFjdGVyU2V0ICpuZXdsaW5lU2V0ID0g
W05TQ2hhcmFjdGVyU2V0IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJpbmc6QCJcclxu
Il07CiAKLSAgICBOU1JhbmdlIG5ld2xpbmVSYW5nZTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICAvLyBGSVhNRTogRG9lc24ndCB3b3JrIGZvciBDUi1zZXBhcmF0ZWQgb3IgQ1JMRi1zZXBh
cmF0ZWQgdGV4dC4KLQluZXdsaW5lUmFuZ2UgPSBbdGV4dCByYW5nZU9mU3RyaW5nOkAiXG4iIG9w
dGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOnNlYXJjaFJhbmdlXTsKLQlpZiAobmV3bGluZVJh
bmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKLQkgICAgYnJlYWs7Ci0JfQotCi0JaWYgKHBh
cmFncmFwaFNvRmFyID09IHBhcmFncmFwaCkgewotCSAgICBicmVhazsKLQl9Ci0KLQlwYXJhZ3Jh
cGhTb0ZhcisrOwotCi0gICAgICAgIHVuc2lnbmVkIGFkdmFuY2UgPSBuZXdsaW5lUmFuZ2UubG9j
YXRpb24gKyAxIC0gc2VhcmNoUmFuZ2UubG9jYXRpb247Ci0JaWYgKHNlYXJjaFJhbmdlLmxlbmd0
aCA8PSBhZHZhbmNlKSB7Ci0JICAgIHNlYXJjaFJhbmdlLmxvY2F0aW9uID0gTlNOb3RGb3VuZDsK
LQkgICAgc2VhcmNoUmFuZ2UubGVuZ3RoID0gMDsKLQkgICAgYnJlYWs7Ci0JfQorICAgICAgICBb
c2Nhbm5lciBzY2FuVXBUb0NoYXJhY3RlcnNGcm9tU2V0Om5ld2xpbmVTZXQgaW50b1N0cmluZzpO
VUxMXTsKKyAgICAgICAgCisgICAgICAgIGlmIChbc2Nhbm5lciBpc0F0RW5kXSB8fCBwYXJhZ3Jh
cGhTb0ZhciA9PSBwYXJhZ3JhcGgpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBwYXJhZ3JhcGhTb0ZhcisrOworICAgICAgICAKKyAgICAgICAgdW5p
Y2hhciBjID0gW3RleHQgY2hhcmFjdGVyQXRJbmRleDpbc2Nhbm5lciBzY2FuTG9jYXRpb25dXTsK
KyAgICAgICAgW3NjYW5uZXIgc2V0U2NhbkxvY2F0aW9uOltzY2FubmVyIHNjYW5Mb2NhdGlvbl0r
MV07IC8vIHNraXAgb3ZlciB0aGUgZm91bmQgY2hhcgorICAgICAgICBpZiAoYyA9PSAnXHInKSB7
CisgICAgICAgICAgICBbc2Nhbm5lciBzY2FuU3RyaW5nOkAiXG4iIGludG9TdHJpbmc6TlVMTF07
IC8vIGdldCB0aGUgZW50aXJlIGNybGYgaWYgaXQgaXMgb25lCisgICAgICAgIH0KICAgICAgICAg
Ci0Jc2VhcmNoUmFuZ2UubGVuZ3RoIC09IGFkdmFuY2U7Ci0Jc2VhcmNoUmFuZ2UubG9jYXRpb24g
Kz0gYWR2YW5jZTsKKyAgICAgICAgcGFyYWdyYXBoU3RhcnQgPSBbc2Nhbm5lciBzY2FuTG9jYXRp
b25dOwogICAgIH0KIAogICAgIGlmIChwYXJhZ3JhcGhTb0ZhciA8IHBhcmFncmFwaCkgewogICAg
ICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgfQotICAgIGlmIChz
ZWFyY2hSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8IG5ld2xpbmVSYW5nZS5sb2NhdGlv
biA9PSBOU05vdEZvdW5kKSB7Ci0gICAgICAgIHJldHVybiBzZWFyY2hSYW5nZTsKICAgICB9Ci0g
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKHNlYXJjaFJhbmdlLmxvY2F0aW9uLCBuZXdsaW5lUmFuZ2Uu
bG9jYXRpb24gLSBzZWFyY2hSYW5nZS5sb2NhdGlvbik7CisgICAgCisgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBbc2Nhbm5lciBzY2FuTG9jYXRpb25dKTsKIH0KIAogLSAo
dm9pZClzZXRDdXJzb3JQb3NpdGlvblRvSW5kZXg6KGludClpbmRleCBpblBhcmFncmFwaDooaW50
KXBhcmFncmFwaApAQCAtNDU4LDE0ICs1MjQsMTQgQEAgc3RhdGljIE5TUmFuZ2UgUmFuZ2VPZlBh
cmFncmFwaChOU1N0cmluZwogICAgIE5TU3RyaW5nICp0ZXh0ID0gW3RleHRWaWV3IHN0cmluZ107
CiAgICAgTlNSYW5nZSByYW5nZSA9IFJhbmdlT2ZQYXJhZ3JhcGgodGV4dCwgcGFyYWdyYXBoKTsK
ICAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgewotCVt0ZXh0VmlldyBzZXRT
ZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKFt0ZXh0IGxlbmd0aF0sIDApXTsKKyAgICAgICAgW3Rl
eHRWaWV3IHNldFNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoW3RleHQgbGVuZ3RoXSwgMCldOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgICAgIGluZGV4
ID0gMDsKICAgICAgICAgfSBlbHNlIGlmICgodW5zaWduZWQpaW5kZXggPiByYW5nZS5sZW5ndGgp
IHsKICAgICAgICAgICAgIGluZGV4ID0gcmFuZ2UubGVuZ3RoOwogICAgICAgICB9Ci0JW3RleHRW
aWV3IHNldFNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UocmFuZ2UubG9jYXRpb24gKyBpbmRleCwg
MCldOworICAgICAgICBbdGV4dFZpZXcgc2V0U2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZShyYW5n
ZS5sb2NhdGlvbiArIGluZGV4LCAwKV07CiAgICAgfQogfQogCkluZGV4OiAuL1dlYkNvcmUva3dx
L0tXUVRleHRFZGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dx
L0tXUVRleHRFZGl0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAtcCAtdSAtcjEu
MjQgLi9XZWJDb3JlL2t3cS9LV1FUZXh0RWRpdC5oCi0tLSAuL1dlYkNvcmUva3dxL0tXUVRleHRF
ZGl0LmgJMjAwNS8wNi8yMCAwNToyNDoyNwkxLjI0CisrKyAuL1dlYkNvcmUva3dxL0tXUVRleHRF
ZGl0LmgJMjAwNS8wNi8yMSAwNDoxNTo1NwpAQCAtNzQsOCArNzQsMTQgQEAgY2xhc3MgUVRleHRF
ZGl0IDogcHVibGljIFFTY3JvbGxWaWV3CiAgICAgdm9pZCBzZXRTY3JvbGxCYXJNb2RlcyhTY3Jv
bGxCYXJNb2RlIGhNb2RlLCBTY3JvbGxCYXJNb2RlIHZNb2RlKTsKIAogICAgIHZvaWQgc2V0V3Jp
dGluZ0RpcmVjdGlvbihRUGFpbnRlcjo6VGV4dERpcmVjdGlvbik7Ci0gICAgCisJCisJbG9uZyBz
ZWxlY3Rpb25TdGFydCgpOworCWxvbmcgc2VsZWN0aW9uRW5kKCk7CisJdm9pZCBzZXRTZWxlY3Rp
b25TdGFydChsb25nKTsKKwl2b2lkIHNldFNlbGVjdGlvbkVuZChsb25nKTsKKwkKICAgICB2b2lk
IHNlbGVjdEFsbCgpOworCXZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UobG9uZywgbG9uZyk7CiAKICAg
ICBRU2l6ZSBzaXplV2l0aENvbHVtbnNBbmRSb3dzKGludCBudW1Db2x1bW5zLCBpbnQgbnVtUm93
cykgY29uc3Q7CiAKSW5kZXg6IC4vV2ViQ29yZS9rd3EvS1dRVGV4dEVkaXQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVRleHRFZGl0Lm1tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjQ1CmRpZmYgLXAgLXUgLXIxLjQ1IC4vV2ViQ29yZS9rd3EvS1dRVGV4
dEVkaXQubW0KLS0tIC4vV2ViQ29yZS9rd3EvS1dRVGV4dEVkaXQubW0JMjAwNS8wNi8yMCAwNToy
NDoyNwkxLjQ1CisrKyAuL1dlYkNvcmUva3dxL0tXUVRleHRFZGl0Lm1tCTIwMDUvMDYvMjEgMDQ6
MTU6NTcKQEAgLTgyLDEwICs4MiwxMCBAQCB2b2lkIFFUZXh0RWRpdDo6Z2V0Q3Vyc29yUG9zaXRp
b24oaW50ICpwCiB7CiAgICAgS1dRVGV4dEFyZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICop
Z2V0VmlldygpOwogICAgIGlmIChpbmRleCkKLQkqaW5kZXggPSAwOworICAgICAgICAqaW5kZXgg
PSAwOwogICAgIGlmIChwYXJhZ3JhcGgpCi0JKnBhcmFncmFwaCA9IDA7Ci0KKyAgICAgICAgKnBh
cmFncmFwaCA9IDA7CisgICAgCiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgW3RleHRW
aWV3IGdldEN1cnNvclBvc2l0aW9uQXNJbmRleDppbmRleCBpblBhcmFncmFwaDpwYXJhZ3JhcGhd
OwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CkBAIC0xODYsNiArMTg2LDYzIEBAIHZvaWQg
UVRleHRFZGl0OjpzZXREaXNhYmxlZChib29sIGZsYWcpCiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBU
SU9OUzsKIH0KIAorbG9uZyBRVGV4dEVkaXQ6OnNlbGVjdGlvblN0YXJ0KCkKK3sKKyAgICBLV1FU
ZXh0QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3KCk7CisgICAgCisgICAg
S1dRX0JMT0NLX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIFt0ZXh0VmlldyBzZWxlY3RlZFJhbmdl
XS5sb2NhdGlvbjsKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworICAgIAorICAgIHJldHVy
biAwOworfQorCitsb25nIFFUZXh0RWRpdDo6c2VsZWN0aW9uRW5kKCkKK3sKKyAgICBLV1FUZXh0
QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3KCk7CisgICAgCisgICAgS1dR
X0JMT0NLX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIE5TTWF4UmFuZ2UoW3RleHRWaWV3IHNlbGVj
dGVkUmFuZ2VdKTsKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworICAgIAorICAgIHJldHVy
biAwOworfQorCit2b2lkIFFUZXh0RWRpdDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkK
K3sKKyAgICBLV1FUZXh0QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3KCk7
CisgICAgCisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CisgICAgTlNSYW5nZSByYW5nZSA9IFt0
ZXh0VmlldyBzZWxlY3RlZFJhbmdlXTsKKyAgICB1bnNpZ25lZCBpbnQgb2xkTG9jYXRpb24gPSBy
YW5nZS5sb2NhdGlvbjsKKyAgICByYW5nZS5sb2NhdGlvbiA9IE1BWChzdGFydCwgMCk7CisgICAg
Ly8gVGhlIHNlY29uZCBNQVggaXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgdW5zaWduZWQgYXNwZWN0
CisgICAgLy8gaWYgcmFuZ2UubG9jYXRpb24gaXMgbGFyZ2VyLCB0aGlzIHdpbGwgZW5kIHVwIDAs
IGluc3RlYWQgb2YgYSBodWdlIG51bWJlcgorICAgIHJhbmdlLmxlbmd0aCA9IE1BWChNQVgocmFu
Z2UubGVuZ3RoICsgb2xkTG9jYXRpb24sIHJhbmdlLmxvY2F0aW9uKSAtIHJhbmdlLmxvY2F0aW9u
LCAwKTsKKyAgICByYW5nZS5sZW5ndGggPSBNSU4ocmFuZ2UubGVuZ3RoLCBbW3RleHRWaWV3IHRl
eHRdIGxlbmd0aF0gLSByYW5nZS5sb2NhdGlvbik7CisgICAgCisgICAgW3RleHRWaWV3IHNldFNl
bGVjdGVkUmFuZ2U6cmFuZ2VdOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Cit9CisKK3Zv
aWQgUVRleHRFZGl0OjpzZXRTZWxlY3Rpb25FbmQobG9uZyBlbmQpCit7CisgICAgS1dRVGV4dEFy
ZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOworICAgIAorICAgIEtXUV9C
TE9DS19FWENFUFRJT05TOworICAgIE5TUmFuZ2UgcmFuZ2UgPSBbdGV4dFZpZXcgc2VsZWN0ZWRS
YW5nZV07CisgICAgZW5kID0gTUFYKGVuZCwgMCk7CisgICAgaWYgKCh1bnNpZ25lZCBpbnQpZW5k
ID49IHJhbmdlLmxvY2F0aW9uKSB7CisgICAgICAgIHJhbmdlLmxlbmd0aCA9IE1JTihlbmQgLSBy
YW5nZS5sb2NhdGlvbiwgW1t0ZXh0VmlldyB0ZXh0XSBsZW5ndGhdIC0gcmFuZ2UubG9jYXRpb24p
OworICAgIH0gZWxzZSB7CisgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gZW5kOworICAgICAgICBy
YW5nZS5sZW5ndGggPSAwOworICAgIH0KKyAgICAKKyAgICBbdGV4dFZpZXcgc2V0U2VsZWN0ZWRS
YW5nZTpyYW5nZV07CisgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKK30KKwogYm9vbCBRVGV4
dEVkaXQ6Omhhc1NlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAgS1dRVGV4dEFyZWEgKnRleHRW
aWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOwpAQCAtMjAzLDYgKzI2MCwxNyBAQCB2b2lk
IFFUZXh0RWRpdDo6c2VsZWN0QWxsKCkKIAogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogICAg
IFt0ZXh0VmlldyBzZWxlY3RBbGxdOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Cit9CisK
K3ZvaWQgUVRleHRFZGl0OjpzZXRTZWxlY3Rpb25SYW5nZShsb25nIHN0YXJ0LCBsb25nIGxlbmd0
aCkKK3sKKyAgICBLV1FUZXh0QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3
KCk7CisKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKKyAgICBOU1JhbmdlIHJhbmdlID0gTlNN
YWtlUmFuZ2UoTUFYKHN0YXJ0LCAwKSwgbGVuZ3RoKTsKKyAgICByYW5nZS5sZW5ndGggPSBNSU4o
cmFuZ2UubGVuZ3RoLCBbW3RleHRWaWV3IHRleHRdIGxlbmd0aF0gLSByYW5nZS5sb2NhdGlvbik7
CisgICAgW3RleHRWaWV3IHNldFNlbGVjdGVkUmFuZ2U6cmFuZ2VdOwogICAgIEtXUV9VTkJMT0NL
X0VYQ0VQVElPTlM7CiB9CiAKSW5kZXg6IC4vV2ViQ29yZS9rd3EvS1dRVGV4dEZpZWxkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVRleHRGaWVsZC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRpZmYgLXAgLXUgLXIxLjIxIC4vV2ViQ29yZS9rd3Ev
S1dRVGV4dEZpZWxkLmgKLS0tIC4vV2ViQ29yZS9rd3EvS1dRVGV4dEZpZWxkLmgJMjAwNS8wNi8y
MCAwNToyNDoyNwkxLjIxCisrKyAuL1dlYkNvcmUva3dxL0tXUVRleHRGaWVsZC5oCTIwMDUvMDYv
MjEgMDQ6MTU6NTcKQEAgLTU2LDYgKzU2LDkgQEAgY2xhc3MgUUxpbmVFZGl0OwogLSAodm9pZClz
ZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjooTlNXcml0aW5nRGlyZWN0aW9uKWRpcmVjdGlvbjsKIC0g
KE5TV3JpdGluZ0RpcmVjdGlvbiliYXNlV3JpdGluZ0RpcmVjdGlvbjsKIAorLSAoTlNSYW5nZSlz
ZWxlY3RlZFJhbmdlOworLSAodm9pZClzZXRTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJhbmdlOwor
CiAtIChOU1N0cmluZyAqKXN0cmluZzsKIAogQGVuZApJbmRleDogLi9XZWJDb3JlL2t3cS9LV1FU
ZXh0RmllbGQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tX
UVRleHRGaWVsZC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43OApkaWZmIC1wIC11IC1yMS43
OCAuL1dlYkNvcmUva3dxL0tXUVRleHRGaWVsZC5tbQotLS0gLi9XZWJDb3JlL2t3cS9LV1FUZXh0
RmllbGQubW0JMjAwNS8wNi8yMCAwNToyNDoyNwkxLjc4CisrKyAuL1dlYkNvcmUva3dxL0tXUVRl
eHRGaWVsZC5tbQkyMDA1LzA2LzIxIDA0OjE1OjU4CkBAIC0zNTcsNyArMzU3LDcgQEAKIC0gKE5T
UmFuZ2Upc2VsZWN0ZWRSYW5nZQogewogICAgIE5TVGV4dCAqZWRpdG9yID0gW2ZpZWxkIF9LV1Ff
Y3VycmVudEVkaXRvcl07Ci0gICAgcmV0dXJuIGVkaXRvciA/IFtlZGl0b3Igc2VsZWN0ZWRSYW5n
ZV0gOiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4gZWRpdG9yID8gW2Vk
aXRvciBzZWxlY3RlZFJhbmdlXSA6IGxhc3RTZWxlY3RlZFJhbmdlOwogfQogCiAtICh2b2lkKXNl
dFNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKQEAgLTM2NSw5ICszNjUsMzAgQEAKICAgICAv
LyBSYW5nZSBjaGVjayBqdXN0IGluIGNhc2UgdGhlIHNhdmVkIHJhbmdlIGhhcyBnb3R0ZW4gb3V0
IG9mIHN5bmMuCiAgICAgLy8gRXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc2VlIHRoaXMgaW4gdGVzdGlu
Zywgd2UgcmVhbGx5IGRvbid0IHdhbnQKICAgICAvLyBhbiBleGNlcHRpb24gaW4gdGhpcyBjYXNl
LCBzbyB3ZSBwcm90ZWN0IG91cnNlbHZlcy4KLSAgICBOU1RleHQgKmVkaXRvciA9IFtmaWVsZCBf
S1dRX2N1cnJlbnRFZGl0b3JdOyAgICAKLSAgICBpZiAoTlNNYXhSYW5nZShyYW5nZSkgPD0gW1tl
ZGl0b3Igc3RyaW5nXSBsZW5ndGhdKSB7CisgICAgTlNUZXh0ICplZGl0b3IgPSBbZmllbGQgX0tX
UV9jdXJyZW50RWRpdG9yXTsKKyAgICBpZiAoZWRpdG9yKSB7IC8vIGlmIHdlIGhhdmUgbm8gZm9j
dXMsIHdlIGRvbid0IGhhdmUgYSBjdXJyZW50IGVkaXRvcgorICAgICAgICB1bnNpZ25lZCBpbnQg
bGVuID0gW1tlZGl0b3Igc3RyaW5nXSBsZW5ndGhdOworICAgICAgICBpZiAoTlNNYXhSYW5nZShy
YW5nZSkgPiBsZW4pIHsKKyAgICAgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiA+IGxlbikgewor
ICAgICAgICAgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gbGVuOworICAgICAgICAgICAgICAgIHJh
bmdlLmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJh
bmdlLmxlbmd0aCA9IGxlbiAtIHJhbmdlLmxvY2F0aW9uOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAgICAgICAgIFtlZGl0b3Igc2V0U2VsZWN0ZWRSYW5nZTpyYW5nZV07CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gc2V0IHRoZSBsYXN0U2F2ZWRSYW5nZSwgc28gaXQgd2lsbCBiZSB1c2Vk
IHdoZW4gZ2l2ZW4gZm9jdXMKKyAgICAgICAgdW5zaWduZWQgaW50IGxlbiA9IFtbZmllbGQgc3Ry
aW5nVmFsdWVdIGxlbmd0aF07CisgICAgICAgIGlmIChOU01heFJhbmdlKHJhbmdlKSA+IGxlbikg
eworICAgICAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uID4gbGVuKSB7CisgICAgICAgICAgICAg
ICAgcmFuZ2UubG9jYXRpb24gPSBsZW47CisgICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoID0g
MDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoID0g
bGVuIC0gcmFuZ2UubG9jYXRpb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
bGFzdFNlbGVjdGVkUmFuZ2UgPSByYW5nZTsKICAgICB9CiB9CiAK
</data>
<flag name="review"
          id="62"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2532</attachid>
            <date>2005-06-21 08:23:34 -0700</date>
            <delta_ts>2005-06-21 22:23:02 -0700</delta_ts>
            <desc>A revised patch</desc>
            <filename>SelectionPatch.txt</filename>
            <type>text/plain</type>
            <size>39623</size>
            <attacher name="Kevin Ballard">kevin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDI4OQpkaWZmIC1wIC11IC1yMS40Mjg5
IENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTIwMDUvMDYvMjEgMDg6MjU6MjMJMS40Mjg5CisrKyBD
aGFuZ2VMb2cJMjAwNS8wNi8yMSAxNToyMDoxMwpAQCAtMSwzICsxLDgxIEBACisyMDA1LTA2LTIw
ICBLZXZpbiBCYWxsYXJkICA8a2V2aW5Ac2Iub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgY2FzZXMgYWRkZWQ6IChOT05FKSBJJ20gbm90
IGNoYW5naW5nIGxheW91dCwgc28gSSBkb24ndCBrbm93IGhvdworICAgICAgICB0byB3cml0ZSBh
bnkgdGVzdCBjYXNlcyBmb3IgdGhpcworCisgICAgICAgIC0gRml4ZXMgYnVnIDxodHRwOi8vYnVn
emlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDE+LgorICAgICAgICAgIEFs
c28gZml4ZXMgaXNzdWUgd2hlcmUgc2V0dGluZyB0ZXh0IG9mIGEgdGV4dGFyZWEgaW4gY29kZSBh
bmQgdGhlbgorICAgICAgICAgIHJldHJpZXZpbmcgaXQgd291bGQgbGVhdmUgdGhlIFxyXG4gc2Vx
dWVuY2VzIGluIHRoZSB0ZXh0LCBkZXNwaXRlCisgICAgICAgICAgdGhlIHRleHRhcmVhIHRyYW5z
bGF0aW5nIHRvIFxuIGluIGFsbCBvdGhlciBjYXNlcy4KKyAgICAgICAgICBBZGRpdGlvbmFsbHks
IG1ha2VzIHRoZSBjdXJzb3IgbWV0aG9kcyBpbiBLV1FUZXh0QXJlYSBiZQorICAgICAgICAgIGxp
bmUgZW5kaW5nLWFnbm9zdGljLgorCisgICAgICAgICoga2h0bWwvZWNtYS9ranNfaHRtbC5jcHA6
CisgICAgICAgIChLSlM6OmdldElucHV0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoS0pTOjpn
ZXRJbnB1dFNlbGVjdGlvbkVuZCk6CisgICAgICAgIChLSlM6OktKUzo6SFRNTEVsZW1lbnQ6Omdl
dFZhbHVlUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpLSlM6OkhUTUxFbGVtZW50OjpoYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChLSlM6OktKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2Fs
bCk6CisgICAgICAgIChLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSk6CisgICAgICAgICoga2h0
bWwvZWNtYS9ranNfaHRtbC5oOgorICAgICAgICAoS0pTOjpIVE1MRWxlbWVudDo6KToKKyAgICAg
ICAgKiBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwOgorICAgICAgICAoRE9NOjpIVE1MSW5w
dXRFbGVtZW50SW1wbDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NOjpIVE1MSW5wdXRF
bGVtZW50SW1wbDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKERPTTo6SFRNTElucHV0RWxlbWVu
dEltcGw6OnNldFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKERPTTo6SFRNTElucHV0RWxlbWVu
dEltcGw6OnNldFNlbGVjdGlvbkVuZCk6CisgICAgICAgIChET006OkhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpzZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgIChET006OkhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsOjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChET006OkhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsOjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAoRE9NOjpIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbDo6c2V0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NOjpIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbDo6c2V0U2VsZWN0aW9uRW5kKToKKyAgICAgICAgKERPTTo6SFRNTFRleHRBcmVhRWxl
bWVudEltcGw6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKERPTTo6SFRNTFRleHRBcmVh
RWxlbWVudEltcGw6OnNldFZhbHVlKToKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfZm9ybWlt
cGwuaDoKKyAgICAgICAgKiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwOgorICAgICAg
ICAoUmVuZGVyTGluZUVkaXQ6OnNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFJlbmRlckxpbmVF
ZGl0OjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAoUmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlv
blN0YXJ0KToKKyAgICAgICAgKFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25FbmQpOgorICAg
ICAgICAoUmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKFJlbmRl
clRleHRBcmVhOjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChSZW5kZXJUZXh0QXJlYTo6c2Vs
ZWN0aW9uRW5kKToKKyAgICAgICAgKFJlbmRlclRleHRBcmVhOjpzZXRTZWxlY3Rpb25TdGFydCk6
CisgICAgICAgIChSZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFJl
bmRlclRleHRBcmVhOjpzZWxlY3QpOgorICAgICAgICAoUmVuZGVyVGV4dEFyZWE6OnNldFNlbGVj
dGlvblJhbmdlKToKKyAgICAgICAgKiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaDoKKyAg
ICAgICAgKiBrd3EvS1dRTGluZUVkaXQuaDoKKyAgICAgICAgKiBrd3EvS1dRTGluZUVkaXQubW06
CisgICAgICAgIChRTGluZUVkaXQ6OnNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFFMaW5lRWRp
dDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFFMaW5lRWRpdDo6c2V0U2VsZWN0aW9uU3RhcnQp
OgorICAgICAgICAoUUxpbmVFZGl0OjpzZXRTZWxlY3Rpb25FbmQpOgorICAgICAgICAoUUxpbmVF
ZGl0OjpzZWxlY3RBbGwpOgorICAgICAgICAoUUxpbmVFZGl0OjpzZXRTZWxlY3Rpb25SYW5nZSk6
CisgICAgICAgICoga3dxL0tXUVRleHRBcmVhLmg6CisgICAgICAgICoga3dxL0tXUVRleHRBcmVh
Lm1tOgorICAgICAgICAoLVtLV1FUZXh0QXJlYSBzZXRTZWxlY3RlZFJhbmdlOl0pOgorICAgICAg
ICAoLVtLV1FUZXh0QXJlYSBzZWxlY3RlZFJhbmdlXSk6CisgICAgICAgICgtW0tXUVRleHRBcmVh
IGdldEN1cnNvclBvc2l0aW9uQXNJbmRleDppblBhcmFncmFwaDpdKToKKyAgICAgICAgKFJhbmdl
T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoLVtLV1FUZXh0QXJlYSBzZXRDdXJzb3JQb3NpdGlvblRv
SW5kZXg6aW5QYXJhZ3JhcGg6XSk6CisgICAgICAgICoga3dxL0tXUVRleHRFZGl0Lmg6CisgICAg
ICAgICoga3dxL0tXUVRleHRFZGl0Lm1tOgorICAgICAgICAoUVRleHRFZGl0OjpnZXRDdXJzb3JQ
b3NpdGlvbik6CisgICAgICAgIChRVGV4dEVkaXQ6OnNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAg
KFFUZXh0RWRpdDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFFUZXh0RWRpdDo6c2V0U2VsZWN0
aW9uU3RhcnQpOgorICAgICAgICAoUVRleHRFZGl0OjpzZXRTZWxlY3Rpb25FbmQpOgorICAgICAg
ICAoUVRleHRFZGl0OjpzZWxlY3RBbGwpOgorICAgICAgICAoUVRleHRFZGl0OjpzZXRTZWxlY3Rp
b25SYW5nZSk6CisgICAgICAgICoga3dxL0tXUVRleHRGaWVsZC5oOgorICAgICAgICAqIGt3cS9L
V1FUZXh0RmllbGQubW06CisgICAgICAgICgtW0tXUVRleHRGaWVsZENvbnRyb2xsZXIgc2VsZWN0
ZWRSYW5nZV0pOgorICAgICAgICAoLVtLV1FUZXh0RmllbGRDb250cm9sbGVyIHNldFNlbGVjdGVk
UmFuZ2U6XSk6CisKIDIwMDUtMDYtMjAgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbihmaXJzdCBwYXNzKSBhbmQgSHlhdHQuCklu
ZGV4OiAuL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjExNwpkaWZmIC1wIC11IC1yMS4xMTcgLi9raHRtbC9lY21hL2tqc19odG1sLmNwcAotLS0g
Li9raHRtbC9lY21hL2tqc19odG1sLmNwcAkyMDA1LzA2LzIwIDIxOjU5OjM3CTEuMTE3CisrKyAu
L2todG1sL2VjbWEva2pzX2h0bWwuY3BwCTIwMDUvMDYvMjEgMTU6MjA6MzUKQEAgLTgzOCw2ICs4
MzgsOCBAQCBjb25zdCBDbGFzc0luZm8qIEtKUzo6SFRNTEVsZW1lbnQ6OmNsYXNzCiAgIG1heExl
bmd0aAlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dE1heExlbmd0aAlEb250RGVsZXRlCiAgIG5hbWUJ
CUtKUzo6SFRNTEVsZW1lbnQ6OklucHV0TmFtZQkJRG9udERlbGV0ZQogICByZWFkT25seQlLSlM6
OkhUTUxFbGVtZW50OjpJbnB1dFJlYWRPbmx5CQlEb250RGVsZXRlCisgIHNlbGVjdGlvblN0YXJ0
CUtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2VsZWN0aW9uU3RhcnQJRG9udERlbGV0ZQorICBzZWxl
Y3Rpb25FbmQJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3Rpb25FbmQJRG9udERlbGV0ZQog
ICBzaXplCQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNpemUJCURvbnREZWxldGUKICAgc3JjCQlL
SlM6OkhUTUxFbGVtZW50OjpJbnB1dFNyYwkJRG9udERlbGV0ZQogICB0YWJJbmRleAlLSlM6OkhU
TUxFbGVtZW50OjpJbnB1dFRhYkluZGV4CQlEb250RGVsZXRlCkBAIC04NDgsOCArODUwLDkgQEAg
Y29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzcwogICBmb2N1cwkJS0pTOjpI
VE1MRWxlbWVudDo6SW5wdXRGb2N1cwkJRG9udERlbGV0ZXxGdW5jdGlvbiAwCiAgIHNlbGVjdAlL
SlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVjdAkJRG9udERlbGV0ZXxGdW5jdGlvbiAwCiAgIGNs
aWNrCQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dENsaWNrCQlEb250RGVsZXRlfEZ1bmN0aW9uIDAK
KyAgc2V0U2VsZWN0aW9uUmFuZ2UJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZXRTZWxlY3Rpb25S
YW5nZQlEb250RGVsZXRlfEZ1bmN0aW9uIDIKIEBlbmQKLUBiZWdpbiBIVE1MVGV4dEFyZWFFbGVt
ZW50VGFibGUgMTMKK0BiZWdpbiBIVE1MVGV4dEFyZWFFbGVtZW50VGFibGUgMTcKICAgZGVmYXVs
dFZhbHVlCUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhRGVmYXVsdFZhbHVlCURvbnREZWxldGUK
ICAgZm9ybQkJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb3JtCQlEb250RGVsZXRlfFJlYWRP
bmx5CiAgIGFjY2Vzc0tleQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUFjY2Vzc0tleQlEb250
RGVsZXRlCkBAIC04NTgsMTIgKzg2MSwxNSBAQCBjb25zdCBDbGFzc0luZm8qIEtKUzo6SFRNTEVs
ZW1lbnQ6OmNsYXNzCiAgIG5hbWUJCUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhTmFtZQkJRG9u
dERlbGV0ZQogICByZWFkT25seQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVJlYWRPbmx5CURv
bnREZWxldGUKICAgcm93cwkJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFSb3dzCQlEb250RGVs
ZXRlCisgIHNlbGVjdGlvblN0YXJ0CUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0aW9u
U3RhcnQJRG9udERlbGV0ZQorICBzZWxlY3Rpb25FbmQJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFy
ZWFTZWxlY3Rpb25FbmQJRG9udERlbGV0ZQogICB0YWJJbmRleAlLSlM6OkhUTUxFbGVtZW50OjpU
ZXh0QXJlYVRhYkluZGV4CURvbnREZWxldGUKICAgdHlwZQkJS0pTOjpIVE1MRWxlbWVudDo6VGV4
dEFyZWFUeXBlCQlEb250RGVsZXRlfFJlYWRPbmx5CiAgIHZhbHVlCQlLSlM6OkhUTUxFbGVtZW50
OjpUZXh0QXJlYVZhbHVlCQlEb250RGVsZXRlCiAgIGJsdXIJCUtKUzo6SFRNTEVsZW1lbnQ6OlRl
eHRBcmVhQmx1cgkJRG9udERlbGV0ZXxGdW5jdGlvbiAwCiAgIGZvY3VzCQlLSlM6OkhUTUxFbGVt
ZW50OjpUZXh0QXJlYUZvY3VzCQlEb250RGVsZXRlfEZ1bmN0aW9uIDAKICAgc2VsZWN0CUtKUzo6
SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0CURvbnREZWxldGV8RnVuY3Rpb24gMAorICBzZXRT
ZWxlY3Rpb25SYW5nZQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNldFNlbGVjdGlvblJhbmdl
CURvbnREZWxldGV8RnVuY3Rpb24gMgogQGVuZAogQGJlZ2luIEhUTUxCdXR0b25FbGVtZW50VGFi
bGUgNwogICBmb3JtCQlLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25Gb3JtCQlEb250RGVsZXRlfFJl
YWRPbmx5CkBAIC0xMzIwLDYgKzEzMjYsMzIgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Y2Fs
bChFeGVjU3RhdGUgKgogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAorc3RhdGljIFZhbHVl
IGdldElucHV0U2VsZWN0aW9uU3RhcnQoSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0KQorewor
ICBIVE1MSW5wdXRFbGVtZW50SW1wbDo6dHlwZUVudW0gdHlwZSA9IGlucHV0LmlucHV0VHlwZSgp
OworICBpZiAodHlwZSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6VEVYVCB8fCB0eXBlID09IEhU
TUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNTV09SRAorI2lmIEFQUExFX0NIQU5HRVMKKyAgICAgIHx8
IHR5cGUgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlNFQVJDSAorI2VuZGlmCisgICAgICApIHsK
KyAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvblN0YXJ0KCkpOworICB9CisgIHJldHVy
biBVbmRlZmluZWQoKTsKK30KKworc3RhdGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uRW5kKEhU
TUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgSFRNTElucHV0RWxlbWVudEltcGw6OnR5
cGVFbnVtIHR5cGUgPSBpbnB1dC5pbnB1dFR5cGUoKTsKKyAgaWYgKHR5cGUgPT0gSFRNTElucHV0
RWxlbWVudEltcGw6OlRFWFQgfHwgdHlwZSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6UEFTU1dP
UkQKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgICB8fCB0eXBlID09IEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpTRUFSQ0gKKyNlbmRpZgorICAgICAgKSB7CisgICAgcmV0dXJuIE51bWJlcihpbnB1dC5z
ZWxlY3Rpb25FbmQoKSk7CisgIH0KKyAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCiBWYWx1ZSBL
SlM6OkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CkBAIC0xNDg4LDYgKzE1MjAsOCBAQCBWYWx1ZSBL
SlM6OkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5CiAgICAgY2FzZSBJbnB1dE1heExlbmd0
aDogICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgoKSk7CiAgICAgY2FzZSBJbnB1
dE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOwogICAgIGNhc2Ug
SW5wdXRSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LnJlYWRPbmx5KCkpOwor
ICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvblN0
YXJ0KGlucHV0KTsKKyAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOgkgICByZXR1cm4gZ2V0SW5w
dXRTZWxlY3Rpb25FbmQoaW5wdXQpOwogICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoaW5wdXQuc2l6ZURPTSgpKTsKICAgICBjYXNlIElucHV0U3JjOiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnNyYygpKTsKICAgICBjYXNlIElucHV0VGFiSW5kZXg6
ICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkpOwpAQCAtMTUwOCw2ICsxNTQy
LDggQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eQogICAgIGNhc2Ug
VGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEubmFtZSgpKTsK
ICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJl
YS5yZWFkT25seSgpKTsKICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICByZXR1cm4g
TnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7CisgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvblN0YXJ0
OiAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCgpKTsKKyAgICBjYXNlIFRl
eHRBcmVhU2VsZWN0aW9uRW5kOiAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnNlbGVjdGlvbkVu
ZCgpKTsKICAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRl
eHRhcmVhLnRhYkluZGV4KCkpOwogICAgIGNhc2UgVGV4dEFyZWFUeXBlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVlKCkpOwpAQCAtMjA1Miw2ICsyMDg4
LDI2IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6aGFzT3duUHJvcGVydHkoRXgKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBJRF9JTlBVVDogewor
ICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0g
Y2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7CisgICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5
ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7CisgICAgICBpZiAoZW50
cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT52YWx1ZSA9PSBJbnB1dFNlbGVjdGlvblN0YXJ0IHx8
IGVudHJ5LT52YWx1ZSA9PSBJbnB1dFNlbGVjdGlvbkVuZCkgeworICAgICAgICAgIEhUTUxJbnB1
dEVsZW1lbnRJbXBsOjp0eXBlRW51bSB0eXBlID0gaW5wdXQuaW5wdXRUeXBlKCk7CisgICAgICAg
ICAgaWYgKHR5cGUgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlRFWFQgfHwgdHlwZSA9PSBIVE1M
SW5wdXRFbGVtZW50SW1wbDo6UEFTU1dPUkQKKyAgI2lmIEFQUExFX0NIQU5HRVMKKyAgICAgICAg
ICAgICAgfHwgdHlwZSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6U0VBUkNICisgICNlbmRpZgor
ICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFr
OwogICB9CkBAIC0yMTc5LDYgKzIyMzUsMTAgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0
aW9uOjp0cnlDYWxsKAogICAgICAgICBpbnB1dC5jbGljaygpOwogICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiAgICAgICB9CisgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dFNldFNlbGVjdGlvblJhbmdlKSB7CisgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJh
bmdlKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKKyAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgfQogICAgIH0KICAgICBicmVhazsKICAgICBj
YXNlIElEX0xBQkVMOiB7CkBAIC0yMjI2LDYgKzIyODYsMTAgQEAgVmFsdWUgS0pTOjpIVE1MRWxl
bWVudEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICB0ZXh0YXJlYS5zZWxlY3QoKTsKICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgfQorICAgICAgZWxzZSBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZXRTZWxlY3Rpb25SYW5nZSkgeworICAgICAgICB0ZXh0
YXJlYS5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9J
bnQzMihleGVjKSk7CisgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgIH0KICAgICB9
CiAgICAgYnJlYWs7CiAgICAgY2FzZSBJRF9BOiB7CkBAIC0yNTY0LDYgKzI2MjgsOCBAQCB2b2lk
IEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4CiAgICAgICBjYXNlIElucHV0TWF4
TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CiAgICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7IGlucHV0LnNldE5h
bWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlu
cHV0LnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAg
Y2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgeyBpbnB1dC5zZXRTZWxlY3Rpb25TdGFydCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5k
OiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9CiAgICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0LnNldFNpemUoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICB7IGlucHV0LnNl
dFNyYyhzdHIpOyByZXR1cm47IH0KICAgICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHsg
aW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQpAQCAtMjU4
NCw2ICsyNjUwLDggQEAgdm9pZCBIVE1MRWxlbWVudDo6cHV0VmFsdWUoRXhlY1N0YXRlICpleAog
ICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQogICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0
YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KICAgICAg
IGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3Rh
cnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFyZWEu
c2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICAgIGNh
c2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCiAgICAg
ICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQpJbmRleDogLi9raHRtbC9lY21hL2tqc19odG1sLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjQ2CmRpZmYgLXAgLXUgLXIxLjQ2IC4va2h0bWwvZWNtYS9ranNfaHRtbC5o
Ci0tLSAuL2todG1sL2VjbWEva2pzX2h0bWwuaAkyMDA1LzA2LzIwIDIxOjU5OjM3CTEuNDYKKysr
IC4va2h0bWwvZWNtYS9ranNfaHRtbC5oCTIwMDUvMDYvMjEgMTU6MjA6MzUKQEAgLTEwMyw5ICsx
MDMsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgIElucHV0Rm9jdXMsIElucHV0TWF4
TGVuZ3RoLCBJbnB1dERlZmF1bHRDaGVja2VkLCBJbnB1dERpc2FibGVkLAogICAgICAgICAgICBJ
bnB1dENoZWNrZWQsIElucHV0Rm9ybSwgSW5wdXRBY2Nlc3NLZXksIElucHV0QWxpZ24sIElucHV0
QWx0LAogICAgICAgICAgICBJbnB1dE5hbWUsIElucHV0U3JjLCBJbnB1dFVzZU1hcCwgSW5wdXRT
ZWxlY3QsIElucHV0Q2xpY2ssCi0gICAgICAgICAgIFRleHRBcmVhQWNjZXNzS2V5LCBUZXh0QXJl
YU5hbWUsIFRleHRBcmVhRGVmYXVsdFZhbHVlLCBUZXh0QXJlYVNlbGVjdCwKKwkJICAgSW5wdXRT
ZWxlY3Rpb25TdGFydCwgSW5wdXRTZWxlY3Rpb25FbmQsIElucHV0U2V0U2VsZWN0aW9uUmFuZ2Us
CisgICAgICAgICAgIFRleHRBcmVhQWNjZXNzS2V5LCBUZXh0QXJlYU5hbWUsIFRleHRBcmVhRGVm
YXVsdFZhbHVlLCBUZXh0QXJlYVNlbGVjdCwgVGV4dEFyZWFTZXRTZWxlY3Rpb25SYW5nZSwKICAg
ICAgICAgICAgVGV4dEFyZWFDb2xzLCBUZXh0QXJlYURpc2FibGVkLCBUZXh0QXJlYUZvcm0sIFRl
eHRBcmVhVHlwZSwKICAgICAgICAgICAgVGV4dEFyZWFUYWJJbmRleCwgVGV4dEFyZWFSZWFkT25s
eSwgVGV4dEFyZWFSb3dzLCBUZXh0QXJlYVZhbHVlLAorICAgICAgICAgICBUZXh0QXJlYVNlbGVj
dGlvblN0YXJ0LCBUZXh0QXJlYVNlbGVjdGlvbkVuZCwKICAgICAgICAgICAgVGV4dEFyZWFCbHVy
LCBUZXh0QXJlYUZvY3VzLCBCdXR0b25CbHVyLCBCdXR0b25Gb2N1cywgQnV0dG9uRm9ybSwgQnV0
dG9uVGFiSW5kZXgsIEJ1dHRvbk5hbWUsCiAgICAgICAgICAgIEJ1dHRvbkRpc2FibGVkLCBCdXR0
b25BY2Nlc3NLZXksIEJ1dHRvblR5cGUsIEJ1dHRvblZhbHVlLCBMYWJlbEh0bWxGb3IsCiAgICAg
ICAgICAgIExhYmVsRm9ybSwgTGFiZWxGb2N1cywgTGFiZWxBY2Nlc3NLZXksIEZpZWxkU2V0Rm9y
bSwgTGVnZW5kRm9ybSwgTGVnZW5kQWNjZXNzS2V5LApJbmRleDogLi9raHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTY3CmRpZmYg
LXAgLXUgLXIxLjE2NyAuL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAKLS0tIC4va2h0bWwv
aHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMDA1LzA2LzIwIDA1OjUyOjE2CTEuMTY3CisrKyAuL2to
dG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJMjAwNS8wNi8yMSAxNToyMDozOApAQCAtMTUwOCw2
ICsxNTA4LDc2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnJlc3RvcmVTdGF0ZSgKICAg
ICB9CiB9CiAKK2xvbmcgSFRNTElucHV0RWxlbWVudEltcGw6OnNlbGVjdGlvblN0YXJ0KCkKK3sK
KwlpZiAoIW1fcmVuZGVyKSByZXR1cm4gMDsKKwkKKwlzd2l0Y2ggKG1fdHlwZSkgeworCQljYXNl
IFBBU1NXT1JEOgorI2lmIEFQUExFX0NIQU5HRVMKKwkJY2FzZSBTRUFSQ0g6CisjZW5kaWYKKwkJ
Y2FzZSBURVhUOgorCQkJcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckxpbmVFZGl0Kj4obV9yZW5k
ZXIpLT5zZWxlY3Rpb25TdGFydCgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsK
Kwl9CisJcmV0dXJuIDA7Cit9CisKK2xvbmcgSFRNTElucHV0RWxlbWVudEltcGw6OnNlbGVjdGlv
bkVuZCgpCit7CisJaWYgKCFtX3JlbmRlcikgcmV0dXJuIDA7CisJCisJc3dpdGNoIChtX3R5cGUp
IHsKKwkJY2FzZSBQQVNTV09SRDoKKyNpZiBBUFBMRV9DSEFOR0VTCisJCWNhc2UgU0VBUkNIOgor
I2VuZGlmCisJCWNhc2UgVEVYVDoKKwkJCXJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRp
dCo+KG1fcmVuZGVyKS0+c2VsZWN0aW9uRW5kKCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ
CWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKwlpZiAoIW1fcmVuZGVyKSByZXR1cm47
CisJCisJc3dpdGNoIChtX3R5cGUpIHsKKwkJY2FzZSBQQVNTV09SRDoKKyNpZiBBUFBMRV9DSEFO
R0VTCisJCWNhc2UgU0VBUkNIOgorI2VuZGlmCisJCWNhc2UgVEVYVDoKKwkJCXN0YXRpY19jYXN0
PFJlbmRlckxpbmVFZGl0Kj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rpb25TdGFydChzdGFydCk7CisJ
CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK30KKwordm9pZCBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uRW5kKGxvbmcgZW5kKQoreworCWlmICghbV9yZW5kZXIp
IHJldHVybjsKKwkKKwlzd2l0Y2ggKG1fdHlwZSkgeworCQljYXNlIFBBU1NXT1JEOgorI2lmIEFQ
UExFX0NIQU5HRVMKKwkJY2FzZSBTRUFSQ0g6CisjZW5kaWYKKwkJY2FzZSBURVhUOgorCQkJc3Rh
dGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQqPihtX3JlbmRlciktPnNldFNlbGVjdGlvbkVuZChlbmQp
OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKIHZvaWQgSFRNTElu
cHV0RWxlbWVudEltcGw6OnNlbGVjdCggICkKIHsKICAgICBpZighbV9yZW5kZXIpIHJldHVybjsK
QEAgLTE1MzgsNiArMTYwOCwyMyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZWxlY3Qo
ICApCiAgICAgfQogfQogCit2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25S
YW5nZShsb25nIHN0YXJ0LCBsb25nIGVuZCkKK3sKKwlpZiAoIW1fcmVuZGVyKSByZXR1cm47CisJ
CisJc3dpdGNoIChtX3R5cGUpIHsKKwkJY2FzZSBQQVNTV09SRDoKKyNpZiBBUFBMRV9DSEFOR0VT
CisJCWNhc2UgU0VBUkNIOgorI2VuZGlmCisJCWNhc2UgVEVYVDoKKwkJCXN0YXRpY19jYXN0PFJl
bmRlckxpbmVFZGl0Kj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsK
KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCiB2b2lkIEhUTUxJbnB1
dEVsZW1lbnRJbXBsOjpjbGljayhib29sIHNlbmRNb3VzZUV2ZW50cykKIHsKICAgICBzd2l0Y2gg
KGlucHV0VHlwZSgpKSB7CkBAIC0zMzgwLDEyICszNDY3LDQ0IEBAIHZvaWQgSFRNTFRleHRBcmVh
RWxlbWVudEltcGw6OnJlc3RvcmVTdGEKICAgICAvLyB0aGUgY2xvc2UoKSBpbiB0aGUgcmVuZGVy
dHJlZSB3aWxsIHRha2UgY2FyZSBvZiB0cmFuc2ZlcnJpbmcgZGVmYXVsdHZhbHVlIHRvICd2YWx1
ZScKIH0KIAorbG9uZyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0aW9uU3RhcnQoKQor
eworICAgIGlmIChtX3JlbmRlcikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRl
eHRBcmVhKj4obV9yZW5kZXIpLT5zZWxlY3Rpb25TdGFydCgpOworICAgIHJldHVybiAwOworfQor
Citsb25nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZWxlY3Rpb25FbmQoKQoreworICAgIGlm
IChtX3JlbmRlcikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhKj4o
bV9yZW5kZXIpLT5zZWxlY3Rpb25FbmQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKyAg
ICBpZiAobV9yZW5kZXIpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhKj4obV9y
ZW5kZXIpLT5zZXRTZWxlY3Rpb25TdGFydChzdGFydCk7Cit9CisKK3ZvaWQgSFRNTFRleHRBcmVh
RWxlbWVudEltcGw6OnNldFNlbGVjdGlvbkVuZChsb25nIGVuZCkKK3sKKyAgICBpZiAobV9yZW5k
ZXIpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhKj4obV9yZW5kZXIpLT5zZXRT
ZWxlY3Rpb25FbmQoZW5kKTsKK30KKwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2Vs
ZWN0KCAgKQogewogICAgIGlmIChtX3JlbmRlcikKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dEFyZWEqPihtX3JlbmRlciktPnNlbGVjdCgpOwogfQogCit2b2lkIEhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25SYW5nZShsb25nIHN0YXJ0LCBsb25nIGVuZCkKK3sKKyAg
ICBpZiAobV9yZW5kZXIpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhKj4obV9y
ZW5kZXIpLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsKK30KKwogdm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6Y2hpbGRyZW5DaGFuZ2VkKCkKIHsKICAgICBzZXRWYWx1ZShkZWZh
dWx0VmFsdWUoKSk7CkBAIC0zNDgzLDYgKzM2MDIsOSBAQCBET01TdHJpbmcgSFRNTFRleHRBcmVh
RWxlbWVudEltcGw6OnZhbHVlCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRWYWx1
ZShjb25zdCBET01TdHJpbmcgJnZhbHVlKQogewogICAgIG1fdmFsdWUgPSB2YWx1ZS5zdHJpbmco
KTsKKwkvLyBOb3cgd2UgbmVlZCB0byB0cmFuc2xhdGUgbGluZSBlbmRpbmdzIHRvIFxuIHRvIG1h
dGNoIEtXUVRleHRBcmVhCisJbV92YWx1ZS5yZXBsYWNlKFFTdHJpbmcoIlxyXG4iKSwgIlxuIik7
CisJbV92YWx1ZS5yZXBsYWNlKCdccicsICdcbicpOwogICAgIG1fdmFsdWVJc1ZhbGlkID0gdHJ1
ZTsKICAgICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gZmFsc2U7CiAgICAgc2V0Q2hhbmdlZCh0
cnVlKTsKSW5kZXg6IC4va2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNzQKZGlmZiAtcCAtdSAtcjEuNzQgLi9raHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuaAotLS0gLi9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkyMDA1LzA2LzIwIDA1
OjUyOjE2CTEuNzQKKysrIC4va2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgJMjAwNS8wNi8yMSAx
NToyMDozOApAQCAtMzU3LDcgKzM1NywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBRU3RyaW5n
IHN0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVTdGF0ZShRU3RyaW5nTGlzdCAmKTsK
IAorICAgIGxvbmcgc2VsZWN0aW9uU3RhcnQoKTsKKyAgICBsb25nIHNlbGVjdGlvbkVuZCgpOwor
ICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQobG9uZyk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25F
bmQobG9uZyk7CisKICAgICB2b2lkIHNlbGVjdCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFu
Z2UobG9uZywgbG9uZyk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNsaWNrKGJvb2wgc2VuZE1v
dXNlRXZlbnRzID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9v
bCBzZW5kVG9BbnlFbGVtZW50KTsKQEAgLTcyMiw3ICs3MjgsMTQgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgUVN0cmluZyBzdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU3RhdGUoUVN0
cmluZ0xpc3QgJik7CiAKKyAgICBsb25nIHNlbGVjdGlvblN0YXJ0KCk7CisgICAgbG9uZyBzZWxl
Y3Rpb25FbmQoKTsKKworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQobG9uZyk7CisgICAgdm9p
ZCBzZXRTZWxlY3Rpb25FbmQobG9uZyk7CisKICAgICB2b2lkIHNlbGVjdCAoICApOworCXZvaWQg
c2V0U2VsZWN0aW9uUmFuZ2UobG9uZywgbG9uZyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRy
ZW5DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpJbmRleDogLi9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zv
cm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfZm9ybS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA3CmRpZmYgLXAg
LXUgLXIxLjEwNyAuL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKLS0tIC4va2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkyMDA1LzA2LzIwIDA1OjI0OjI2CTEuMTA3CisrKyAu
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJMjAwNS8wNi8yMSAxNToyMDo0MApAQCAt
NzE4LDExICs3MTgsNzEgQEAgdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2xvdFRleHRDaGFuZ2VkKGNv
bgogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVGcm9tUmVuZGVyZXIobmV3VGV4dCk7CiB9CiAKK2xv
bmcgUmVuZGVyTGluZUVkaXQ6OnNlbGVjdGlvblN0YXJ0KCkKK3sKKyAgICBLTGluZUVkaXQgKmxp
bmVFZGl0ID0gc3RhdGljX2Nhc3Q8S0xpbmVFZGl0Kj4obV93aWRnZXQpOworI2lmIEFQUExFX0NI
QU5HRVMKKwlyZXR1cm4gbGluZUVkaXQtPnNlbGVjdGlvblN0YXJ0KCk7CisjZWxzZQorCS8vIEZJ
WE1FOiBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgUXQsIHNvIEknbGwKKwkvLyBsZWF2ZSB0aGlzIGFs
b25lIGZvciBub3cKKyNlcnJvciBVbmltcGxlbWVudGVkIG1ldGhvZAorI2VuZGlmCit9CisKK2xv
bmcgUmVuZGVyTGluZUVkaXQ6OnNlbGVjdGlvbkVuZCgpCit7CisgICAgS0xpbmVFZGl0ICpsaW5l
RWRpdCA9IHN0YXRpY19jYXN0PEtMaW5lRWRpdCo+KG1fd2lkZ2V0KTsKKyNpZiBBUFBMRV9DSEFO
R0VTCisJcmV0dXJuIGxpbmVFZGl0LT5zZWxlY3Rpb25FbmQoKTsKKyNlbHNlCisJLy8gRklYTUU6
IEkgaGF2ZSBubyB3YXkgdG8gdGVzdCBRdCwgc28gSSdsbAorCS8vIGxlYXZlIHRoaXMgYWxvbmUg
Zm9yIG5vdworI2Vycm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9kCisjZW5kaWYKK30KKwordm9pZCBS
ZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKyAgICBLTGlu
ZUVkaXQgKmxpbmVFZGl0ID0gc3RhdGljX2Nhc3Q8S0xpbmVFZGl0Kj4obV93aWRnZXQpOworI2lm
IEFQUExFX0NIQU5HRVMKKwlsaW5lRWRpdC0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOworI2Vs
c2UKKwkvLyBGSVhNRTogSSBoYXZlIG5vIHdheSB0byB0ZXN0IFF0LCBzbyBJJ2xsCisJLy8gbGVh
dmUgdGhpcyBhbG9uZSBmb3Igbm93CisjZXJyb3IgVW5pbXBsZW1lbnRlZCBtZXRob2QKKyNlbmRp
ZgorfQorCit2b2lkIFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25FbmQobG9uZyBlbmQpCit7
CisgICAgS0xpbmVFZGl0ICpsaW5lRWRpdCA9IHN0YXRpY19jYXN0PEtMaW5lRWRpdCo+KG1fd2lk
Z2V0KTsKKyNpZiBBUFBMRV9DSEFOR0VTCisJbGluZUVkaXQtPnNldFNlbGVjdGlvbkVuZChlbmQp
OworI2Vsc2UKKwkvLyBGSVhNRTogSSBoYXZlIG5vIHdheSB0byB0ZXN0IFF0LCBzbyBJJ2xsCisJ
Ly8gbGVhdmUgdGhpcyBhbG9uZSBmb3Igbm93CisjZXJyb3IgVW5pbXBsZW1lbnRlZCBtZXRob2QK
KyNlbmRpZgorfQorCiB2b2lkIFJlbmRlckxpbmVFZGl0OjpzZWxlY3QoKQogewogICAgIHN0YXRp
Y19jYXN0PEtMaW5lRWRpdCo+KG1fd2lkZ2V0KS0+c2VsZWN0QWxsKCk7CiB9CiAKK3ZvaWQgUmVu
ZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlvblJhbmdlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKQorewor
ICAgIEtMaW5lRWRpdCAqbGluZUVkaXQgPSBzdGF0aWNfY2FzdDxLTGluZUVkaXQqPihtX3dpZGdl
dCk7CisjaWYgQVBQTEVfQ0hBTkdFUworCWxpbmVFZGl0LT5zZXRTZWxlY3Rpb25SYW5nZShzdGFy
dCwgZW5kLXN0YXJ0KTsKKyNlbHNlCisJLy8gRklYTUU6IEkgaGF2ZSBubyB3YXkgdG8gdGVzdCBR
dCwgc28gSSdsbAorCS8vIGxlYXZlIHRoaXMgYWxvbmUgZm9yIG5vdworI2Vycm9yIFVuaW1wbGVt
ZW50ZWQgbWV0aG9kCisjZW5kaWYKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlbmRl
ckZpZWxkc2V0OjpSZW5kZXJGaWVsZHNldChIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqZWxl
bWVudCkKQEAgLTE2NDEsOSArMTcwMSw2OSBAQCB2b2lkIFJlbmRlclRleHRBcmVhOjpzbG90VGV4
dENoYW5nZWQoKQogICAgIG1fZGlydHkgPSB0cnVlOwogfQogCitsb25nIFJlbmRlclRleHRBcmVh
OjpzZWxlY3Rpb25TdGFydCgpCit7CisgICAgUVRleHRFZGl0ICp0ZXh0RWRpdCA9IHN0YXRpY19j
YXN0PFFUZXh0RWRpdCAqPihtX3dpZGdldCk7CisjaWYgQVBQTEVfQ0hBTkdFUworICAgIHJldHVy
biB0ZXh0RWRpdC0+c2VsZWN0aW9uU3RhcnQoKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEkgaGF2
ZSBubyB3YXkgdG8gdGVzdCBRdCwgc28gSSdsbAorCS8vIGxlYXZlIHRoaXMgYWxvbmUgZm9yIG5v
dworI2Vycm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9kCisjZW5kaWYKK30KKworbG9uZyBSZW5kZXJU
ZXh0QXJlYTo6c2VsZWN0aW9uRW5kKCkKK3sKKyAgICBRVGV4dEVkaXQgKnRleHRFZGl0ID0gc3Rh
dGljX2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KTsKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAg
cmV0dXJuIHRleHRFZGl0LT5zZWxlY3Rpb25FbmQoKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEkg
aGF2ZSBubyB3YXkgdG8gdGVzdCBRdCwgc28gSSdsbAorCS8vIGxlYXZlIHRoaXMgYWxvbmUgZm9y
IG5vdworI2Vycm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9kCisjZW5kaWYKK30KKwordm9pZCBSZW5k
ZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKyAgICBRVGV4dEVk
aXQgKnRleHRFZGl0ID0gc3RhdGljX2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KTsKKyNpZiBB
UFBMRV9DSEFOR0VTCisgICAgdGV4dEVkaXQtPnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKKyNl
bHNlCisgICAgLy8gRklYTUU6IEkgaGF2ZSBubyB3YXkgdG8gdGVzdCBRdCwgc28gSSdsbAorCS8v
IGxlYXZlIHRoaXMgYWxvbmUgZm9yIG5vdworI2Vycm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9kCisj
ZW5kaWYKK30KKwordm9pZCBSZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uRW5kKGxvbmcgZW5k
KQoreworICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBzdGF0aWNfY2FzdDxRVGV4dEVkaXQgKj4o
bV93aWRnZXQpOworI2lmIEFQUExFX0NIQU5HRVMKKyAgICB0ZXh0RWRpdC0+c2V0U2VsZWN0aW9u
RW5kKGVuZCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgUXQs
IHNvIEknbGwKKwkvLyBsZWF2ZSB0aGlzIGFsb25lIGZvciBub3cKKyNlcnJvciBVbmltcGxlbWVu
dGVkIG1ldGhvZAorI2VuZGlmCit9CisKIHZvaWQgUmVuZGVyVGV4dEFyZWE6OnNlbGVjdCgpCiB7
CiAgICAgc3RhdGljX2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KS0+c2VsZWN0QWxsKCk7Cit9
CisKK3ZvaWQgUmVuZGVyVGV4dEFyZWE6OnNldFNlbGVjdGlvblJhbmdlKGxvbmcgc3RhcnQsIGxv
bmcgZW5kKQoreworICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBzdGF0aWNfY2FzdDxRVGV4dEVk
aXQgKj4obV93aWRnZXQpOworI2lmIEFQUExFX0NIQU5HRVMKKyAgICB0ZXh0RWRpdC0+c2V0U2Vs
ZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZC1zdGFydCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBJIGhh
dmUgbm8gd2F5IHRvIHRlc3QgUXQsIHNvIEknbGwKKwkvLyBsZWF2ZSB0aGlzIGFsb25lIGZvciBu
b3cKKyNlcnJvciBVbmltcGxlbWVudGVkIG1ldGhvZAorI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVy
VGV4dEFyZWE6OnNsb3RTZWxlY3Rpb25DaGFuZ2VkKCkKSW5kZXg6IC4va2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9mb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTEKZGlm
ZiAtcCAtdSAtcjEuNTEgLi9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAotLS0gLi9raHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAkyMDA1LzA2LzIwIDA1OjI0OjI2CTEuNTEKKysrIC4v
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgJMjAwNS8wNi8yMSAxNToyMDo0MApAQCAtMjQ4
LDcgKzI0OCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlICopOwogCisgICAgbG9u
ZyBzZWxlY3Rpb25TdGFydCgpOworICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7CisgICAgdm9pZCBz
ZXRTZWxlY3Rpb25TdGFydChsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChsb25nKTsK
KyAgICAKICAgICB2b2lkIHNlbGVjdCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UobG9u
ZywgbG9uZyk7CiAKICAgICBLTGluZUVkaXQgKndpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEtMaW5lRWRpdCo+KG1fd2lkZ2V0KTsgfQogICAgIERPTTo6SFRNTElucHV0RWxlbWVu
dEltcGwqIGVsZW1lbnQoKSBjb25zdApAQCAtNDY5LDcgKzQ3NSwxMyBAQCBwdWJsaWM6CiAKICAg
ICBRU3RyaW5nIHRleHQoKTsKIAorCWxvbmcgc2VsZWN0aW9uU3RhcnQoKTsKKwlsb25nIHNlbGVj
dGlvbkVuZCgpOworCXZvaWQgc2V0U2VsZWN0aW9uU3RhcnQobG9uZyk7CisJdm9pZCBzZXRTZWxl
Y3Rpb25FbmQobG9uZyk7CisJCiAgICAgdm9pZCBzZWxlY3QoKTsKKwl2b2lkIHNldFNlbGVjdGlv
blJhbmdlKGxvbmcsIGxvbmcpOwogCiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgIHZpcnR1YWwgYm9v
bCBjYW5IYXZlSW50cmluc2ljTWFyZ2lucygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6
IGt3cS9LV1FMaW5lRWRpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2t3cS9LV1FMaW5lRWRpdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMyCmRpZmYgLXAgLXUg
LXIxLjMyIGt3cS9LV1FMaW5lRWRpdC5oCi0tLSBrd3EvS1dRTGluZUVkaXQuaAkyMDA1LzA2LzIw
IDA1OjI0OjI2CTEuMzIKKysrIGt3cS9LV1FMaW5lRWRpdC5oCTIwMDUvMDYvMjEgMTU6MjA6NDQK
QEAgLTY1LDcgKzY1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0V3JpdGluZ0RpcmVjdGlv
bihRUGFpbnRlcjo6VGV4dERpcmVjdGlvbik7CiAgICAgCisgICAgbG9uZyBzZWxlY3Rpb25TdGFy
dCgpOworICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFy
dChsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChsb25nKTsKKyAgICAKICAgICB2b2lk
IHNlbGVjdEFsbCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UobG9uZywgbG9uZyk7CiAg
ICAgYm9vbCBoYXNTZWxlY3RlZFRleHQoKSBjb25zdDsKICAgICAKICAgICBRU2l6ZSBzaXplRm9y
Q2hhcmFjdGVyV2lkdGgoaW50IG51bUNoYXJhY3RlcnMpIGNvbnN0OwpJbmRleDoga3dxL0tXUUxp
bmVFZGl0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FM
aW5lRWRpdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NgpkaWZmIC1wIC11IC1yMS42NiBr
d3EvS1dRTGluZUVkaXQubW0KLS0tIGt3cS9LV1FMaW5lRWRpdC5tbQkyMDA1LzA2LzIwIDA1OjI0
OjI2CTEuNjYKKysrIGt3cS9LV1FMaW5lRWRpdC5tbQkyMDA1LzA2LzIxIDE1OjIwOjQ1CkBAIC0x
NzIsNiArMTcyLDQxIEBAIGludCBRTGluZUVkaXQ6Om1heExlbmd0aCgpIGNvbnN0CiAgICAgcmV0
dXJuIFttX2NvbnRyb2xsZXIgbWF4aW11bUxlbmd0aF07CiB9CiAKK2xvbmcgUUxpbmVFZGl0Ojpz
ZWxlY3Rpb25TdGFydCgpCit7CisgICAgcmV0dXJuIFttX2NvbnRyb2xsZXIgc2VsZWN0ZWRSYW5n
ZV0ubG9jYXRpb247Cit9CisKK2xvbmcgUUxpbmVFZGl0OjpzZWxlY3Rpb25FbmQoKQoreworICAg
IHJldHVybiBOU01heFJhbmdlKFttX2NvbnRyb2xsZXIgc2VsZWN0ZWRSYW5nZV0pOworfQorCit2
b2lkIFFMaW5lRWRpdDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKyAgICBOU1Jh
bmdlIHJhbmdlID0gW21fY29udHJvbGxlciBzZWxlY3RlZFJhbmdlXTsKKyAgICB1bnNpZ25lZCBp
bnQgb2xkTG9jYXRpb24gPSByYW5nZS5sb2NhdGlvbjsKKyAgICByYW5nZS5sb2NhdGlvbiA9IE1B
WChzdGFydCwgMCk7CisgICAgLy8gVGhlIHNlY29uZCBNQVggaXMgYSB3b3JrYXJvdW5kIGZvciB0
aGUgdW5zaWduZWQgYXNwZWN0CisgICAgLy8gaWYgcmFuZ2UubG9jYXRpb24gaXMgbGFyZ2VyLCB0
aGlzIHdpbGwgZW5kIHVwIDAsIGluc3RlYWQgb2YgYSBodWdlIG51bWJlcgorICAgIHJhbmdlLmxl
bmd0aCA9IE1BWChNQVgocmFuZ2UubGVuZ3RoICsgb2xkTG9jYXRpb24sIHJhbmdlLmxvY2F0aW9u
KSAtIHJhbmdlLmxvY2F0aW9uLCAwKTsKKyAgICByYW5nZS5sZW5ndGggPSBNSU4ocmFuZ2UubGVu
Z3RoLCBbW21fY29udHJvbGxlciBzdHJpbmddIGxlbmd0aF0gLSByYW5nZS5sb2NhdGlvbik7Cisg
ICAgW21fY29udHJvbGxlciBzZXRTZWxlY3RlZFJhbmdlOnJhbmdlXTsKK30KKwordm9pZCBRTGlu
ZUVkaXQ6OnNldFNlbGVjdGlvbkVuZChsb25nIGVuZCkKK3sKKyAgICBOU1JhbmdlIHJhbmdlID0g
W21fY29udHJvbGxlciBzZWxlY3RlZFJhbmdlXTsKKyAgICBlbmQgPSBNQVgoZW5kLCAwKTsKKyAg
ICBpZiAoKHVuc2lnbmVkIGludCllbmQgPj0gcmFuZ2UubG9jYXRpb24pIHsKKyAgICAgICAgcmFu
Z2UubGVuZ3RoID0gTUlOKGVuZCAtIHJhbmdlLmxvY2F0aW9uLCBbW21fY29udHJvbGxlciBzdHJp
bmddIGxlbmd0aF0gLSByYW5nZS5sb2NhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmFu
Z2UubG9jYXRpb24gPSBlbmQ7CisgICAgICAgIHJhbmdlLmxlbmd0aCA9IDA7CisgICAgfQorICAg
IFttX2NvbnRyb2xsZXIgc2V0U2VsZWN0ZWRSYW5nZTpyYW5nZV07Cit9CisKIHZvaWQgUUxpbmVF
ZGl0OjpzZWxlY3RBbGwoKQogewogICAgIGlmICghaGFzRm9jdXMoKSkgewpAQCAtMTg0LDYgKzIx
OSwxMSBAQCB2b2lkIFFMaW5lRWRpdDo6c2VsZWN0QWxsKCkKICAgICAgICAgW3RleHRGaWVsZCBz
ZWxlY3RUZXh0Om5pbF07CiAgICAgICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiAgICAgfQor
fQorCit2b2lkIFFMaW5lRWRpdDo6c2V0U2VsZWN0aW9uUmFuZ2UobG9uZyBzdGFydCwgbG9uZyBs
ZW5ndGgpCit7CisgICAgW21fY29udHJvbGxlciBzZXRTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdl
KHN0YXJ0LCBsZW5ndGgpXTsKIH0KIAogYm9vbCBRTGluZUVkaXQ6Omhhc1NlbGVjdGVkVGV4dCgp
IGNvbnN0CkluZGV4OiBrd3EvS1dRVGV4dEFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEFyZWEuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
MQpkaWZmIC1wIC11IC1yMS4yMSBrd3EvS1dRVGV4dEFyZWEuaAotLS0ga3dxL0tXUVRleHRBcmVh
LmgJMjAwNS8wNi8yMCAwNToyNDoyNgkxLjIxCisrKyBrd3EvS1dRVGV4dEFyZWEuaAkyMDA1LzA2
LzIxIDE1OjIwOjQ1CkBAIC02Nyw2ICs2Nyw4IEBAIGNsYXNzIFFUZXh0RWRpdDsKIC0gKEJPT0wp
d29yZFdyYXA7CiAKIC0gKHZvaWQpc2VsZWN0QWxsOworLSAodm9pZClzZXRTZWxlY3RlZFJhbmdl
OihOU1JhbmdlKWFSYW5nZTsKKy0gKE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZTsKIC0gKEJPT0wpaGFz
U2VsZWN0aW9uOwogCiAtIChOU1NpemUpc2l6ZVdpdGhDb2x1bW5zOihpbnQpY29sdW1ucyByb3dz
OihpbnQpcm93czsKSW5kZXg6IGt3cS9LV1FUZXh0QXJlYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEFyZWEubW0sdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuODIKZGlmZiAtcCAtdSAtcjEuODIga3dxL0tXUVRleHRBcmVhLm1tCi0tLSBrd3EvS1dR
VGV4dEFyZWEubW0JMjAwNS8wNi8yMCAwNToyNDoyNwkxLjgyCisrKyBrd3EvS1dRVGV4dEFyZWEu
bW0JMjAwNS8wNi8yMSAxNToyMDo0NQpAQCAtMjg4LDYgKzI4OCw2MyBAQCBjb25zdCBmbG9hdCBM
YXJnZU51bWJlckZvclRleHQgPSAxLjBlNzsKICAgICBbdGV4dFZpZXcgc2VsZWN0QWxsOm5pbF07
CiB9CiAKKy0gKHZvaWQpc2V0U2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlhUmFuZ2UKK3sKKyAgICAv
LyBPaywgdGhlIHNlbGVjdGlvbiBoYXMgdG8gbWF0Y2ggdXAgd2l0aCB0aGUgc3RyaW5nIHJldHVy
bmVkIGJ5IC10ZXh0CisgICAgLy8gYW5kIHNpbmNlIC10ZXh0IHRyYW5zbGF0ZXMgXHJcbiB0byBc
biwgd2UgaGF2ZSB0byBtb2RpZnkgb3VyIHNlbGVjdGlvbgorICAgIC8vIGlmIGEgXHJcbiBzZXF1
ZW5jZSBpcyBhbnl3aGVyZSBpbiBvciBiZWZvcmUgdGhlIHNlbGVjdGlvbgorICAgIHVuc2lnbmVk
IGludCBjb3VudCA9IDA7CisgICAgTlNSYW5nZSBmb3VuZFJhbmdlLCBzZWFyY2hSYW5nZSA9IE5T
TWFrZVJhbmdlKDAsIGFSYW5nZS5sb2NhdGlvbik7CisgICAgTlNTdHJpbmcgKnRleHQgPSBbdGV4
dFZpZXcgc3RyaW5nXTsKKyAgICB3aGlsZSAoZm91bmRSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZTdHJp
bmc6QCJcclxuIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpzZWFyY2hSYW5nZV0sCisg
ICAgICAgICAgIGZvdW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgICAgICBj
b3VudCsrOworICAgICAgICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZm91bmRS
YW5nZSk7CisgICAgICAgIGlmIChzZWFyY2hSYW5nZS5sb2NhdGlvbiA+PSBhUmFuZ2UubG9jYXRp
b24pIGJyZWFrOworICAgICAgICBzZWFyY2hSYW5nZS5sZW5ndGggPSBhUmFuZ2UubG9jYXRpb24g
LSBzZWFyY2hSYW5nZS5sb2NhdGlvbjsKKyAgICB9CisgICAgYVJhbmdlLmxvY2F0aW9uICs9IGNv
dW50OworICAgIGNvdW50ID0gMDsKKyAgICBzZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKGFSYW5n
ZS5sb2NhdGlvbiwgYVJhbmdlLmxlbmd0aCk7CisgICAgd2hpbGUgKGZvdW5kUmFuZ2UgPSBbdGV4
dCByYW5nZU9mU3RyaW5nOkAiXHJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2Vh
cmNoUmFuZ2VdLAorICAgICAgICAgICBmb3VuZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQp
IHsKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgc2VhcmNoUmFuZ2UubG9jYXRpb24gPSBOU01h
eFJhbmdlKGZvdW5kUmFuZ2UpOworICAgICAgICBpZiAoc2VhcmNoUmFuZ2UubG9jYXRpb24gPj0g
TlNNYXhSYW5nZShhUmFuZ2UpKSBicmVhazsKKyAgICAgICAgc2VhcmNoUmFuZ2UubGVuZ3RoID0g
TlNNYXhSYW5nZShhUmFuZ2UpIC0gc2VhcmNoUmFuZ2UubG9jYXRpb247CisgICAgfQorICAgIGFS
YW5nZS5sZW5ndGggKz0gY291bnQ7CisgICAgW3RleHRWaWV3IHNldFNlbGVjdGVkUmFuZ2U6YVJh
bmdlXTsKK30KKworLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCit7CisgICAgLy8gU2FtZSBpc3N1
ZSBhcyB3aXRoIC1zZXRTZWxlY3RlZFJhbmdlOiByZWdhcmRpbmcgXHJcbiBzZXF1ZW5jZXMKKyAg
ICBOU1JhbmdlIGFSYW5nZSA9IFt0ZXh0VmlldyBzZWxlY3RlZFJhbmdlXTsKKyAgICB1bnNpZ25l
ZCBpbnQgY291bnQgPSAwOworICAgIE5TUmFuZ2UgZm91bmRSYW5nZSwgc2VhcmNoUmFuZ2UgPSBO
U01ha2VSYW5nZSgwLCBhUmFuZ2UubG9jYXRpb24pOworICAgIE5TU3RyaW5nICp0ZXh0ID0gW3Rl
eHRWaWV3IHN0cmluZ107CisgICAgd2hpbGUgKGZvdW5kUmFuZ2UgPSBbdGV4dCByYW5nZU9mU3Ry
aW5nOkAiXHJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2VdLAor
ICAgICAgICAgICBmb3VuZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsKKyAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgc2VhcmNoUmFuZ2UubG9jYXRpb24gPSBOU01heFJhbmdlKGZvdW5k
UmFuZ2UpOworICAgICAgICBpZiAoc2VhcmNoUmFuZ2UubG9jYXRpb24gPj0gYVJhbmdlLmxvY2F0
aW9uKSBicmVhazsKKyAgICAgICAgc2VhcmNoUmFuZ2UubGVuZ3RoID0gYVJhbmdlLmxvY2F0aW9u
IC0gc2VhcmNoUmFuZ2UubG9jYXRpb247CisgICAgfQorICAgIGFSYW5nZS5sb2NhdGlvbiAtPSBj
b3VudDsKKyAgICBjb3VudCA9IDA7CisgICAgc2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZShhUmFu
Z2UubG9jYXRpb24sIGFSYW5nZS5sZW5ndGgpOworICAgIHdoaWxlIChmb3VuZFJhbmdlID0gW3Rl
eHQgcmFuZ2VPZlN0cmluZzpAIlxyXG4iIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOnNl
YXJjaFJhbmdlXSwKKyAgICAgICAgICAgZm91bmRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5k
KSB7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHNlYXJjaFJhbmdlLmxvY2F0aW9uID0gTlNN
YXhSYW5nZShmb3VuZFJhbmdlKTsKKyAgICAgICAgaWYgKHNlYXJjaFJhbmdlLmxvY2F0aW9uID49
IE5TTWF4UmFuZ2UoYVJhbmdlKSkgYnJlYWs7CisgICAgICAgIHNlYXJjaFJhbmdlLmxlbmd0aCA9
IE5TTWF4UmFuZ2UoYVJhbmdlKSAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uOworICAgIH0KKyAgICBh
UmFuZ2UubGVuZ3RoIC09IGNvdW50OworICAgIHJldHVybiBhUmFuZ2U7Cit9CisKIC0gKEJPT0wp
aGFzU2VsZWN0aW9uCiB7CiAgICAgcmV0dXJuIFt0ZXh0VmlldyBzZWxlY3RlZFJhbmdlXS5sZW5n
dGggPiAwOwpAQCAtMzgzLDYgKzQ0MCwxMCBAQCBjb25zdCBmbG9hdCBMYXJnZU51bWJlckZvclRl
eHQgPSAxLjBlNzsKIAogLSAodm9pZClnZXRDdXJzb3JQb3NpdGlvbkFzSW5kZXg6KGludCAqKWlu
ZGV4IGluUGFyYWdyYXBoOihpbnQgKilwYXJhZ3JhcGgKIHsKKyAgICBpZiAocGFyYWdyYXBoID09
IE5VTEwgfHwgaW5kZXggPT0gTlVMTCkgeworICAgICAgICAvLyBKdXN0IGluIGNhc2UKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICBOU1N0cmluZyAqdGV4dCA9IFt0ZXh0VmlldyBzdHJpbmdd
OwogICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFt0ZXh0VmlldyBzZWxlY3RlZFJhbmdlXTsK
ICAgICAKQEAgLTM5Myw2NCArNDU0LDY5IEBAIGNvbnN0IGZsb2F0IExhcmdlTnVtYmVyRm9yVGV4
dCA9IDEuMGU3OwogICAgIH0KICAgICAKICAgICBpbnQgcGFyYWdyYXBoU29GYXIgPSAwOwotICAg
IE5TUmFuZ2Ugc2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBbdGV4dCBsZW5ndGhdKTsKKyAg
ICBpbnQgcGFyYWdyYXBoU3RhcnQgPSAwOworICAgIAorICAgIE5TU2Nhbm5lciAqc2Nhbm5lciA9
IFtOU1NjYW5uZXIgc2Nhbm5lcldpdGhTdHJpbmc6dGV4dF07CisgICAgW3NjYW5uZXIgc2V0Q2hh
cmFjdGVyc1RvQmVTa2lwcGVkOm5pbF07CisgICAgTlNDaGFyYWN0ZXJTZXQgKm5ld2xpbmVTZXQg
PSBbTlNDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0V2l0aENoYXJhY3RlcnNJblN0cmluZzpAIlxy
XG4iXTsKIAogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEb2Vzbid0IHdv
cmsgZm9yIENSLXNlcGFyYXRlZCBvciBDUkxGLXNlcGFyYXRlZCB0ZXh0LgotCU5TUmFuZ2UgbmV3
bGluZVJhbmdlID0gW3RleHQgcmFuZ2VPZlN0cmluZzpAIlxuIiBvcHRpb25zOk5TTGl0ZXJhbFNl
YXJjaCByYW5nZTpzZWFyY2hSYW5nZV07Ci0JaWYgKG5ld2xpbmVSYW5nZS5sb2NhdGlvbiA9PSBO
U05vdEZvdW5kIHx8IHNlbGVjdGVkUmFuZ2UubG9jYXRpb24gPD0gbmV3bGluZVJhbmdlLmxvY2F0
aW9uKSB7Ci0JICAgIGJyZWFrOwotCX0KKyAgICAgICAgW3NjYW5uZXIgc2NhblVwVG9DaGFyYWN0
ZXJzRnJvbVNldDpuZXdsaW5lU2V0IGludG9TdHJpbmc6TlVMTF07CiAgICAgICAgIAotCXBhcmFn
cmFwaFNvRmFyKys7Ci0KLSAgICAgICAgdW5zaWduZWQgYWR2YW5jZSA9IG5ld2xpbmVSYW5nZS5s
b2NhdGlvbiArIDEgLSBzZWFyY2hSYW5nZS5sb2NhdGlvbjsKLQotCXNlYXJjaFJhbmdlLmxlbmd0
aCAtPSBhZHZhbmNlOwotCXNlYXJjaFJhbmdlLmxvY2F0aW9uICs9IGFkdmFuY2U7CisgICAgICAg
IGlmIChbc2Nhbm5lciBpc0F0RW5kXSB8fCBzZWxlY3RlZFJhbmdlLmxvY2F0aW9uIDw9IFtzY2Fu
bmVyIHNjYW5Mb2NhdGlvbl0pIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBwYXJhZ3JhcGhTb0ZhcisrOworICAgICAgICAKKyAgICAgICAgdW5pY2hh
ciBjID0gW3RleHQgY2hhcmFjdGVyQXRJbmRleDpbc2Nhbm5lciBzY2FuTG9jYXRpb25dXTsKKyAg
ICAgICAgW3NjYW5uZXIgc2V0U2NhbkxvY2F0aW9uOltzY2FubmVyIHNjYW5Mb2NhdGlvbl0rMV07
IC8vIHNraXAgb3ZlciB0aGUgZm91bmQgY2hhcgorICAgICAgICBpZiAoYyA9PSAnXHInKSB7Cisg
ICAgICAgICAgICBbc2Nhbm5lciBzY2FuU3RyaW5nOkAiXG4iIGludG9TdHJpbmc6TlVMTF07IC8v
IGdldCB0aGUgZW50aXJlIGNybGYgaWYgaXQgaXMgb25lCisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHBhcmFncmFwaFN0YXJ0ID0gW3NjYW5uZXIgc2NhbkxvY2F0aW9uXTsKICAgICB9CiAK
ICAgICAqcGFyYWdyYXBoID0gcGFyYWdyYXBoU29GYXI7Ci0gICAgKmluZGV4ID0gc2VsZWN0ZWRS
YW5nZS5sb2NhdGlvbiAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uOworICAgIC8vIEl0IHNob3VsZG4n
dCBoYXBwZW4sIGJ1dCBpdCBtaWdodCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNlbGVjdGlvbgorICAg
IC8vIHRvIGJlIGJldHdlZW4gdGhlIGNyIGFuZCBsZiBpZiB0aGVyZSdzIGEgY3JsZiBzZXF1ZW5j
ZQorICAgIC8vIHRoYXQgd291bGQgcmVzdWx0IGluIGEgLTEgaW5kZXggd2hlbiBpdCBzaG91bGQg
YmUgMC4gTGV0cyBoYW5kbGUgdGhhdAorICAgICppbmRleCA9IE1BWChzZWxlY3RlZFJhbmdlLmxv
Y2F0aW9uIC0gcGFyYWdyYXBoU3RhcnQsIDApOwogfQogCiBzdGF0aWMgTlNSYW5nZSBSYW5nZU9m
UGFyYWdyYXBoKE5TU3RyaW5nICp0ZXh0LCBpbnQgcGFyYWdyYXBoKQogewogICAgIGludCBwYXJh
Z3JhcGhTb0ZhciA9IDA7Ci0gICAgTlNSYW5nZSBzZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKDAs
IFt0ZXh0IGxlbmd0aF0pOworICAgIGludCBwYXJhZ3JhcGhTdGFydCA9IDA7CisgICAgCisgICAg
TlNTY2FubmVyICpzY2FubmVyID0gW05TU2Nhbm5lciBzY2FubmVyV2l0aFN0cmluZzp0ZXh0XTsK
KyAgICBbc2Nhbm5lciBzZXRDaGFyYWN0ZXJzVG9CZVNraXBwZWQ6bmlsXTsKKyAgICBOU0NoYXJh
Y3RlclNldCAqbmV3bGluZVNldCA9IFtOU0NoYXJhY3RlclNldCBjaGFyYWN0ZXJTZXRXaXRoQ2hh
cmFjdGVyc0luU3RyaW5nOkAiXHJcbiJdOwogCi0gICAgTlNSYW5nZSBuZXdsaW5lUmFuZ2U7CiAg
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgLy8gRklYTUU6IERvZXNuJ3Qgd29yayBmb3IgQ1It
c2VwYXJhdGVkIG9yIENSTEYtc2VwYXJhdGVkIHRleHQuCi0JbmV3bGluZVJhbmdlID0gW3RleHQg
cmFuZ2VPZlN0cmluZzpAIlxuIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpzZWFyY2hS
YW5nZV07Ci0JaWYgKG5ld2xpbmVSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSB7Ci0JICAg
IGJyZWFrOwotCX0KLQotCWlmIChwYXJhZ3JhcGhTb0ZhciA9PSBwYXJhZ3JhcGgpIHsKLQkgICAg
YnJlYWs7Ci0JfQotCi0JcGFyYWdyYXBoU29GYXIrKzsKLQotICAgICAgICB1bnNpZ25lZCBhZHZh
bmNlID0gbmV3bGluZVJhbmdlLmxvY2F0aW9uICsgMSAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uOwot
CWlmIChzZWFyY2hSYW5nZS5sZW5ndGggPD0gYWR2YW5jZSkgewotCSAgICBzZWFyY2hSYW5nZS5s
b2NhdGlvbiA9IE5TTm90Rm91bmQ7Ci0JICAgIHNlYXJjaFJhbmdlLmxlbmd0aCA9IDA7Ci0JICAg
IGJyZWFrOwotCX0KKyAgICAgICAgW3NjYW5uZXIgc2NhblVwVG9DaGFyYWN0ZXJzRnJvbVNldDpu
ZXdsaW5lU2V0IGludG9TdHJpbmc6TlVMTF07CisgICAgICAgIAorICAgICAgICBpZiAoW3NjYW5u
ZXIgaXNBdEVuZF0gfHwgcGFyYWdyYXBoU29GYXIgPT0gcGFyYWdyYXBoKSB7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcGFyYWdyYXBoU29GYXIrKzsK
KyAgICAgICAgCisgICAgICAgIHVuaWNoYXIgYyA9IFt0ZXh0IGNoYXJhY3RlckF0SW5kZXg6W3Nj
YW5uZXIgc2NhbkxvY2F0aW9uXV07CisgICAgICAgIFtzY2FubmVyIHNldFNjYW5Mb2NhdGlvbjpb
c2Nhbm5lciBzY2FuTG9jYXRpb25dKzFdOyAvLyBza2lwIG92ZXIgdGhlIGZvdW5kIGNoYXIKKyAg
ICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgW3NjYW5uZXIgc2NhblN0cmluZzpA
IlxuIiBpbnRvU3RyaW5nOk5VTExdOyAvLyBnZXQgdGhlIGVudGlyZSBjcmxmIGlmIGl0IGlzIG9u
ZQorICAgICAgICB9CiAgICAgICAgIAotCXNlYXJjaFJhbmdlLmxlbmd0aCAtPSBhZHZhbmNlOwot
CXNlYXJjaFJhbmdlLmxvY2F0aW9uICs9IGFkdmFuY2U7CisgICAgICAgIHBhcmFncmFwaFN0YXJ0
ID0gW3NjYW5uZXIgc2NhbkxvY2F0aW9uXTsKICAgICB9CiAKICAgICBpZiAocGFyYWdyYXBoU29G
YXIgPCBwYXJhZ3JhcGgpIHsKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQs
IDApOwotICAgIH0KLSAgICBpZiAoc2VhcmNoUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8
fCBuZXdsaW5lUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgewotICAgICAgICByZXR1cm4g
c2VhcmNoUmFuZ2U7CiAgICAgfQotICAgIHJldHVybiBOU01ha2VSYW5nZShzZWFyY2hSYW5nZS5s
b2NhdGlvbiwgbmV3bGluZVJhbmdlLmxvY2F0aW9uIC0gc2VhcmNoUmFuZ2UubG9jYXRpb24pOwor
ICAgIAorICAgIHJldHVybiBOU01ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgW3NjYW5uZXIgc2Nh
bkxvY2F0aW9uXSk7CiB9CiAKIC0gKHZvaWQpc2V0Q3Vyc29yUG9zaXRpb25Ub0luZGV4OihpbnQp
aW5kZXggaW5QYXJhZ3JhcGg6KGludClwYXJhZ3JhcGgKQEAgLTQ1OCwxNCArNTI0LDE0IEBAIHN0
YXRpYyBOU1JhbmdlIFJhbmdlT2ZQYXJhZ3JhcGgoTlNTdHJpbmcKICAgICBOU1N0cmluZyAqdGV4
dCA9IFt0ZXh0VmlldyBzdHJpbmddOwogICAgIE5TUmFuZ2UgcmFuZ2UgPSBSYW5nZU9mUGFyYWdy
YXBoKHRleHQsIHBhcmFncmFwaCk7CiAgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91
bmQpIHsKLQlbdGV4dFZpZXcgc2V0U2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZShbdGV4dCBsZW5n
dGhdLCAwKV07CisgICAgICAgIFt0ZXh0VmlldyBzZXRTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdl
KFt0ZXh0IGxlbmd0aF0sIDApXTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaW5kZXggPCAw
KSB7CiAgICAgICAgICAgICBpbmRleCA9IDA7CiAgICAgICAgIH0gZWxzZSBpZiAoKHVuc2lnbmVk
KWluZGV4ID4gcmFuZ2UubGVuZ3RoKSB7CiAgICAgICAgICAgICBpbmRleCA9IHJhbmdlLmxlbmd0
aDsKICAgICAgICAgfQotCVt0ZXh0VmlldyBzZXRTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKHJh
bmdlLmxvY2F0aW9uICsgaW5kZXgsIDApXTsKKyAgICAgICAgW3RleHRWaWV3IHNldFNlbGVjdGVk
UmFuZ2U6TlNNYWtlUmFuZ2UocmFuZ2UubG9jYXRpb24gKyBpbmRleCwgMCldOwogICAgIH0KIH0K
IApJbmRleDoga3dxL0tXUVRleHRFZGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva3dxL0tXUVRleHRFZGl0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQKZGlm
ZiAtcCAtdSAtcjEuMjQga3dxL0tXUVRleHRFZGl0LmgKLS0tIGt3cS9LV1FUZXh0RWRpdC5oCTIw
MDUvMDYvMjAgMDU6MjQ6MjcJMS4yNAorKysga3dxL0tXUVRleHRFZGl0LmgJMjAwNS8wNi8yMSAx
NToyMDo0NQpAQCAtNzQsOCArNzQsMTQgQEAgY2xhc3MgUVRleHRFZGl0IDogcHVibGljIFFTY3Jv
bGxWaWV3CiAgICAgdm9pZCBzZXRTY3JvbGxCYXJNb2RlcyhTY3JvbGxCYXJNb2RlIGhNb2RlLCBT
Y3JvbGxCYXJNb2RlIHZNb2RlKTsKIAogICAgIHZvaWQgc2V0V3JpdGluZ0RpcmVjdGlvbihRUGFp
bnRlcjo6VGV4dERpcmVjdGlvbik7Ci0gICAgCisJCisJbG9uZyBzZWxlY3Rpb25TdGFydCgpOwor
CWxvbmcgc2VsZWN0aW9uRW5kKCk7CisJdm9pZCBzZXRTZWxlY3Rpb25TdGFydChsb25nKTsKKwl2
b2lkIHNldFNlbGVjdGlvbkVuZChsb25nKTsKKwkKICAgICB2b2lkIHNlbGVjdEFsbCgpOworCXZv
aWQgc2V0U2VsZWN0aW9uUmFuZ2UobG9uZywgbG9uZyk7CiAKICAgICBRU2l6ZSBzaXplV2l0aENv
bHVtbnNBbmRSb3dzKGludCBudW1Db2x1bW5zLCBpbnQgbnVtUm93cykgY29uc3Q7CiAKSW5kZXg6
IGt3cS9LV1FUZXh0RWRpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvS1dRVGV4dEVkaXQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDUKZGlmZiAtcCAt
dSAtcjEuNDUga3dxL0tXUVRleHRFZGl0Lm1tCi0tLSBrd3EvS1dRVGV4dEVkaXQubW0JMjAwNS8w
Ni8yMCAwNToyNDoyNwkxLjQ1CisrKyBrd3EvS1dRVGV4dEVkaXQubW0JMjAwNS8wNi8yMSAxNToy
MDo0NQpAQCAtODIsMTAgKzgyLDEwIEBAIHZvaWQgUVRleHRFZGl0OjpnZXRDdXJzb3JQb3NpdGlv
bihpbnQgKnAKIHsKICAgICBLV1FUZXh0QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKiln
ZXRWaWV3KCk7CiAgICAgaWYgKGluZGV4KQotCSppbmRleCA9IDA7CisgICAgICAgICppbmRleCA9
IDA7CiAgICAgaWYgKHBhcmFncmFwaCkKLQkqcGFyYWdyYXBoID0gMDsKLQorICAgICAgICAqcGFy
YWdyYXBoID0gMDsKKyAgICAKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKICAgICBbdGV4dFZp
ZXcgZ2V0Q3Vyc29yUG9zaXRpb25Bc0luZGV4OmluZGV4IGluUGFyYWdyYXBoOnBhcmFncmFwaF07
CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKQEAgLTE4Niw2ICsxODYsNjQgQEAgdm9pZCBR
VGV4dEVkaXQ6OnNldERpc2FibGVkKGJvb2wgZmxhZykKICAgICBLV1FfVU5CTE9DS19FWENFUFRJ
T05TOwogfQogCitsb25nIFFUZXh0RWRpdDo6c2VsZWN0aW9uU3RhcnQoKQoreworICAgIEtXUVRl
eHRBcmVhICp0ZXh0VmlldyA9IChLV1FUZXh0QXJlYSAqKWdldFZpZXcoKTsKKyAgICAKKyAgICBL
V1FfQkxPQ0tfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gW3RleHRWaWV3IHNlbGVjdGVkUmFuZ2Vd
LmxvY2F0aW9uOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJu
IDA7Cit9CisKK2xvbmcgUVRleHRFZGl0OjpzZWxlY3Rpb25FbmQoKQoreworICAgIEtXUVRleHRB
cmVhICp0ZXh0VmlldyA9IChLV1FUZXh0QXJlYSAqKWdldFZpZXcoKTsKKyAgICAKKyAgICBLV1Ff
QkxPQ0tfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gTlNNYXhSYW5nZShbdGV4dFZpZXcgc2VsZWN0
ZWRSYW5nZV0pOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgUVRleHRFZGl0OjpzZXRTZWxlY3Rpb25TdGFydChsb25nIHN0YXJ0KQor
eworICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9IChLV1FUZXh0QXJlYSAqKWdldFZpZXcoKTsK
KyAgICAKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKKyAgICBOU1JhbmdlIHJhbmdlID0gW3Rl
eHRWaWV3IHNlbGVjdGVkUmFuZ2VdOworICAgIHVuc2lnbmVkIGludCBvbGRMb2NhdGlvbiA9IHJh
bmdlLmxvY2F0aW9uOworICAgIHJhbmdlLmxvY2F0aW9uID0gTUFYKHN0YXJ0LCAwKTsKKyAgICAv
LyBUaGUgc2Vjb25kIE1BWCBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSB1bnNpZ25lZCBhc3BlY3QK
KyAgICAvLyBpZiBzdGFydCBpcyBsYXJnZXIgdGhhbiBOU01heFJhbmdlKHJhbmdlKSwgdGhlIHNl
Y29uZCBNQVgKKwkvLyB3aWxsIHByZXZlbnQgaXQgZnJvbSB0dXJuaW5nIHJhbmdlLmxlbmd0aCBp
bnRvIGEgaHVnZSBudW1iZXIKKyAgICByYW5nZS5sZW5ndGggPSBNQVgoTUFYKHJhbmdlLmxlbmd0
aCArIG9sZExvY2F0aW9uLCByYW5nZS5sb2NhdGlvbikgLSByYW5nZS5sb2NhdGlvbiwgMCk7Cisg
ICAgcmFuZ2UubGVuZ3RoID0gTUlOKHJhbmdlLmxlbmd0aCwgW1t0ZXh0VmlldyB0ZXh0XSBsZW5n
dGhdIC0gcmFuZ2UubG9jYXRpb24pOworICAgIAorICAgIFt0ZXh0VmlldyBzZXRTZWxlY3RlZFJh
bmdlOnJhbmdlXTsKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworfQorCit2b2lkIFFUZXh0
RWRpdDo6c2V0U2VsZWN0aW9uRW5kKGxvbmcgZW5kKQoreworICAgIEtXUVRleHRBcmVhICp0ZXh0
VmlldyA9IChLV1FUZXh0QXJlYSAqKWdldFZpZXcoKTsKKyAgICAKKyAgICBLV1FfQkxPQ0tfRVhD
RVBUSU9OUzsKKyAgICBOU1JhbmdlIHJhbmdlID0gW3RleHRWaWV3IHNlbGVjdGVkUmFuZ2VdOwor
ICAgIGVuZCA9IE1BWChlbmQsIDApOworICAgIGlmICgodW5zaWduZWQgaW50KWVuZCA+PSByYW5n
ZS5sb2NhdGlvbikgeworICAgICAgICByYW5nZS5sZW5ndGggPSBNSU4oZW5kIC0gcmFuZ2UubG9j
YXRpb24sIFtbdGV4dFZpZXcgdGV4dF0gbGVuZ3RoXSAtIHJhbmdlLmxvY2F0aW9uKTsKKyAgICB9
IGVsc2UgeworICAgICAgICByYW5nZS5sb2NhdGlvbiA9IGVuZDsKKyAgICAgICAgcmFuZ2UubGVu
Z3RoID0gMDsKKyAgICB9CisgICAgCisgICAgW3RleHRWaWV3IHNldFNlbGVjdGVkUmFuZ2U6cmFu
Z2VdOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Cit9CisKIGJvb2wgUVRleHRFZGl0Ojpo
YXNTZWxlY3RlZFRleHQoKSBjb25zdAogewogICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9IChL
V1FUZXh0QXJlYSAqKWdldFZpZXcoKTsKQEAgLTIwMyw2ICsyNjEsMTcgQEAgdm9pZCBRVGV4dEVk
aXQ6OnNlbGVjdEFsbCgpCiAKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKICAgICBbdGV4dFZp
ZXcgc2VsZWN0QWxsXTsKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworfQorCit2b2lkIFFU
ZXh0RWRpdDo6c2V0U2VsZWN0aW9uUmFuZ2UobG9uZyBzdGFydCwgbG9uZyBsZW5ndGgpCit7Cisg
ICAgS1dRVGV4dEFyZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOworCisg
ICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CisgICAgTlNSYW5nZSByYW5nZSA9IE5TTWFrZVJhbmdl
KE1BWChzdGFydCwgMCksIGxlbmd0aCk7CisgICAgcmFuZ2UubGVuZ3RoID0gTUlOKHJhbmdlLmxl
bmd0aCwgW1t0ZXh0VmlldyB0ZXh0XSBsZW5ndGhdIC0gcmFuZ2UubG9jYXRpb24pOworICAgIFt0
ZXh0VmlldyBzZXRTZWxlY3RlZFJhbmdlOnJhbmdlXTsKICAgICBLV1FfVU5CTE9DS19FWENFUFRJ
T05TOwogfQogCkluZGV4OiBrd3EvS1dRVGV4dEZpZWxkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVRleHRGaWVsZC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjIxCmRpZmYgLXAgLXUgLXIxLjIxIGt3cS9LV1FUZXh0RmllbGQuaAotLS0ga3dxL0tXUVRl
eHRGaWVsZC5oCTIwMDUvMDYvMjAgMDU6MjQ6MjcJMS4yMQorKysga3dxL0tXUVRleHRGaWVsZC5o
CTIwMDUvMDYvMjEgMTU6MjA6NDUKQEAgLTU2LDYgKzU2LDkgQEAgY2xhc3MgUUxpbmVFZGl0Owog
LSAodm9pZClzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjooTlNXcml0aW5nRGlyZWN0aW9uKWRpcmVj
dGlvbjsKIC0gKE5TV3JpdGluZ0RpcmVjdGlvbiliYXNlV3JpdGluZ0RpcmVjdGlvbjsKIAorLSAo
TlNSYW5nZSlzZWxlY3RlZFJhbmdlOworLSAodm9pZClzZXRTZWxlY3RlZFJhbmdlOihOU1Jhbmdl
KXJhbmdlOworCiAtIChOU1N0cmluZyAqKXN0cmluZzsKIAogQGVuZApJbmRleDoga3dxL0tXUVRl
eHRGaWVsZC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dR
VGV4dEZpZWxkLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc4CmRpZmYgLXAgLXUgLXIxLjc4
IGt3cS9LV1FUZXh0RmllbGQubW0KLS0tIGt3cS9LV1FUZXh0RmllbGQubW0JMjAwNS8wNi8yMCAw
NToyNDoyNwkxLjc4CisrKyBrd3EvS1dRVGV4dEZpZWxkLm1tCTIwMDUvMDYvMjEgMTU6MjA6NDUK
QEAgLTM1Nyw3ICszNTcsNyBAQAogLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCiB7CiAgICAgTlNU
ZXh0ICplZGl0b3IgPSBbZmllbGQgX0tXUV9jdXJyZW50RWRpdG9yXTsKLSAgICByZXR1cm4gZWRp
dG9yID8gW2VkaXRvciBzZWxlY3RlZFJhbmdlXSA6IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OworICAgIHJldHVybiBlZGl0b3IgPyBbZWRpdG9yIHNlbGVjdGVkUmFuZ2VdIDogbGFzdFNlbGVj
dGVkUmFuZ2U7CiB9CiAKIC0gKHZvaWQpc2V0U2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlyYW5nZQpA
QCAtMzY1LDkgKzM2NSwzMCBAQAogICAgIC8vIFJhbmdlIGNoZWNrIGp1c3QgaW4gY2FzZSB0aGUg
c2F2ZWQgcmFuZ2UgaGFzIGdvdHRlbiBvdXQgb2Ygc3luYy4KICAgICAvLyBFdmVuIHRob3VnaCB3
ZSBkb24ndCBzZWUgdGhpcyBpbiB0ZXN0aW5nLCB3ZSByZWFsbHkgZG9uJ3Qgd2FudAogICAgIC8v
IGFuIGV4Y2VwdGlvbiBpbiB0aGlzIGNhc2UsIHNvIHdlIHByb3RlY3Qgb3Vyc2VsdmVzLgotICAg
IE5TVGV4dCAqZWRpdG9yID0gW2ZpZWxkIF9LV1FfY3VycmVudEVkaXRvcl07ICAgIAotICAgIGlm
IChOU01heFJhbmdlKHJhbmdlKSA8PSBbW2VkaXRvciBzdHJpbmddIGxlbmd0aF0pIHsKKyAgICBO
U1RleHQgKmVkaXRvciA9IFtmaWVsZCBfS1dRX2N1cnJlbnRFZGl0b3JdOworICAgIGlmIChlZGl0
b3IpIHsgLy8gaWYgd2UgaGF2ZSBubyBmb2N1cywgd2UgZG9uJ3QgaGF2ZSBhIGN1cnJlbnQgZWRp
dG9yCisgICAgICAgIHVuc2lnbmVkIGludCBsZW4gPSBbW2VkaXRvciBzdHJpbmddIGxlbmd0aF07
CisgICAgICAgIGlmIChOU01heFJhbmdlKHJhbmdlKSA+IGxlbikgeworICAgICAgICAgICAgaWYg
KHJhbmdlLmxvY2F0aW9uID4gbGVuKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UubG9jYXRpb24g
PSBsZW47CisgICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoID0gbGVuIC0gcmFuZ2UubG9jYXRp
b247CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgW2VkaXRvciBzZXRTZWxlY3Rl
ZFJhbmdlOnJhbmdlXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBzZXQgdGhlIGxhc3RTYXZl
ZFJhbmdlLCBzbyBpdCB3aWxsIGJlIHVzZWQgd2hlbiBnaXZlbiBmb2N1cworICAgICAgICB1bnNp
Z25lZCBpbnQgbGVuID0gW1tmaWVsZCBzdHJpbmdWYWx1ZV0gbGVuZ3RoXTsKKyAgICAgICAgaWYg
KE5TTWF4UmFuZ2UocmFuZ2UpID4gbGVuKSB7CisgICAgICAgICAgICBpZiAocmFuZ2UubG9jYXRp
b24gPiBsZW4pIHsKKyAgICAgICAgICAgICAgICByYW5nZS5sb2NhdGlvbiA9IGxlbjsKKyAgICAg
ICAgICAgICAgICByYW5nZS5sZW5ndGggPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICByYW5nZS5sZW5ndGggPSBsZW4gLSByYW5nZS5sb2NhdGlvbjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBsYXN0U2VsZWN0ZWRSYW5nZSA9IHJhbmdlOwogICAg
IH0KIH0KIAo=
</data>
<flag name="review"
          id="64"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2539</attachid>
            <date>2005-06-21 22:23:02 -0700</date>
            <delta_ts>2005-06-22 15:11:43 -0700</delta_ts>
            <desc>the latest iteration of the patch</desc>
            <filename>SelectionPatch.txt</filename>
            <type>text/plain</type>
            <size>43510</size>
            <attacher name="Kevin Ballard">kevin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDI5NwpkaWZmIC1wIC11IC1yMS40Mjk3
IENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTIwMDUvMDYvMjIgMDQ6Mzg6NTAJMS40Mjk3CisrKyBD
aGFuZ2VMb2cJMjAwNS8wNi8yMiAwNToxNzo0MApAQCAtMSwzICsxLDg5IEBACisyMDA1LTA2LTIy
ICBLZXZpbiBCYWxsYXJkICA8a2V2aW5Ac2Iub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgY2FzZXMgYWRkZWQ6CisgICAgICAgICogY3Js
Zi5odG1sCisgICAgICAgICogdGV4dC1zZWxlY3Rpb24uaHRtbAorICAgICAgICBCb3RoIG9mIHRo
ZXNlIGFyZSBhdHRhY2hlZCB0byB0aGUgYnVnIHNlcGFyYXRlbHkgZnJvbSB0aGUgcGF0Y2gsCisg
ICAgICAgIGJlY2F1c2UgSSBjYW4ndCBjdnMgYWRkLgorICAgICAgICBSZXZpZXdlcjogZmVlbCBm
cmVlIHRvIHJlbW92ZSB0aGlzIGNvbW1lbnQgYW5kIHR3ZWFrIHRoZSB0ZXN0IGNhc2VzIGFkZGVk
CisgICAgICAgIGxpbmVzIHRvIHJlZmxlY3Qgd2hlcmV2ZXIgeW91IHBsYWNlIHRoZXNlIGNhc2Vz
IGluIHRoZSBoaWVyYXJjaHkKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAtIEZpeGVzIGJ1
ZyA8aHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDAxPi4K
KyAgICAgICAgICBBbHNvIGZpeGVzIGlzc3VlIHdoZXJlIHNldHRpbmcgdGV4dCBvZiBhIHRleHRh
cmVhIGluIGNvZGUgYW5kIHRoZW4KKyAgICAgICAgICByZXRyaWV2aW5nIGl0IHdvdWxkIGxlYXZl
IHRoZSBcclxuIHNlcXVlbmNlcyBpbiB0aGUgdGV4dCwgZGVzcGl0ZQorICAgICAgICAgIHRoZSB0
ZXh0YXJlYSB0cmFuc2xhdGluZyB0byBcbiBpbiBhbGwgb3RoZXIgY2FzZXMuCisgICAgICAgICAg
QWRkaXRpb25hbGx5LCBtYWtlcyB0aGUgY3Vyc29yIG1ldGhvZHMgaW4gS1dRVGV4dEFyZWEgYmUK
KyAgICAgICAgICBsaW5lIGVuZGluZy1hZ25vc3RpYy4KKworICAgICAgICAqIGtodG1sL2VjbWEv
a2pzX2h0bWwuY3BwOgorICAgICAgICAoS0pTOjpnZXRJbnB1dFNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKEtKUzo6Z2V0SW5wdXRTZWxlY3Rpb25FbmQpOgorICAgICAgICAoS0pTOjpLSlM6OkhU
TUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6S0pTOjpIVE1MRWxl
bWVudDo6aGFzT3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpLSlM6OkhUTUxFbGVtZW50RnVu
Y3Rpb246OnRyeUNhbGwpOgorICAgICAgICAoS0pTOjpIVE1MRWxlbWVudDo6cHV0VmFsdWUpOgor
ICAgICAgICAqIGtodG1sL2VjbWEva2pzX2h0bWwuaDoKKyAgICAgICAgKEtKUzo6SFRNTEVsZW1l
bnQ6Oik6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcDoKKyAgICAgICAg
KERPTTo6SFRNTElucHV0RWxlbWVudEltcGw6OmNhbkhhdmVTZWxlY3Rpb24pOgorICAgICAgICAo
RE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9N
OjpIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKERPTTo6SFRN
TElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKERPTTo6SFRN
TElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlvbkVuZCk6CisgICAgICAgIChET006OkhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgIChET006OkhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpzZXRWYWx1ZSk6CisgICAgICAgIChET006OkhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsOjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChET006OkhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsOjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAoRE9NOjpIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbDo6c2V0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NOjpIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uRW5kKToKKyAgICAgICAgKERPTTo6SFRNTFRleHRBcmVh
RWxlbWVudEltcGw6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKERPTTo6SFRNTFRleHRB
cmVhRWxlbWVudEltcGw6OnNldFZhbHVlKToKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfZm9y
bWltcGwuaDoKKyAgICAgICAgKiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwOgorICAg
ICAgICAoUmVuZGVyTGluZUVkaXQ6OnNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFJlbmRlckxp
bmVFZGl0OjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAoUmVuZGVyTGluZUVkaXQ6OnNldFNlbGVj
dGlvblN0YXJ0KToKKyAgICAgICAgKFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25FbmQpOgor
ICAgICAgICAoUmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKFJl
bmRlclRleHRBcmVhOjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChSZW5kZXJUZXh0QXJlYTo6
c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFJlbmRlclRleHRBcmVhOjpzZXRTZWxlY3Rpb25TdGFy
dCk6CisgICAgICAgIChSZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uRW5kKToKKyAgICAgICAg
KFJlbmRlclRleHRBcmVhOjpzZWxlY3QpOgorICAgICAgICAoUmVuZGVyVGV4dEFyZWE6OnNldFNl
bGVjdGlvblJhbmdlKToKKyAgICAgICAgKiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaDoK
KyAgICAgICAgKiBrd3EvS1dRTGluZUVkaXQuaDoKKyAgICAgICAgKiBrd3EvS1dRTGluZUVkaXQu
bW06CisgICAgICAgIChRTGluZUVkaXQ6OnNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFFMaW5l
RWRpdDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFFMaW5lRWRpdDo6c2V0U2VsZWN0aW9uU3Rh
cnQpOgorICAgICAgICAoUUxpbmVFZGl0OjpzZXRTZWxlY3Rpb25FbmQpOgorICAgICAgICAoUUxp
bmVFZGl0OjpzZWxlY3RBbGwpOgorICAgICAgICAoUUxpbmVFZGl0OjpzZXRTZWxlY3Rpb25SYW5n
ZSk6CisgICAgICAgICoga3dxL0tXUVRleHRBcmVhLmg6CisgICAgICAgICoga3dxL0tXUVRleHRB
cmVhLm1tOgorICAgICAgICAoLVtLV1FUZXh0QXJlYSBzZXRTZWxlY3RlZFJhbmdlOl0pOgorICAg
ICAgICAoLVtLV1FUZXh0QXJlYSBzZWxlY3RlZFJhbmdlXSk6CisgICAgICAgICgtW0tXUVRleHRB
cmVhIGdldEN1cnNvclBvc2l0aW9uQXNJbmRleDppblBhcmFncmFwaDpdKToKKyAgICAgICAgKFJh
bmdlT2ZQYXJhZ3JhcGgpOgorICAgICAgICAoLVtLV1FUZXh0QXJlYSBzZXRDdXJzb3JQb3NpdGlv
blRvSW5kZXg6aW5QYXJhZ3JhcGg6XSk6CisgICAgICAgICoga3dxL0tXUVRleHRFZGl0Lmg6Cisg
ICAgICAgICoga3dxL0tXUVRleHRFZGl0Lm1tOgorICAgICAgICAoUVRleHRFZGl0OjpnZXRDdXJz
b3JQb3NpdGlvbik6CisgICAgICAgIChRVGV4dEVkaXQ6OnNlbGVjdGlvblN0YXJ0KToKKyAgICAg
ICAgKFFUZXh0RWRpdDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFFUZXh0RWRpdDo6c2V0U2Vs
ZWN0aW9uU3RhcnQpOgorICAgICAgICAoUVRleHRFZGl0OjpzZXRTZWxlY3Rpb25FbmQpOgorICAg
ICAgICAoUVRleHRFZGl0OjpzZWxlY3RBbGwpOgorICAgICAgICAoUVRleHRFZGl0OjpzZXRTZWxl
Y3Rpb25SYW5nZSk6CisgICAgICAgICoga3dxL0tXUVRleHRGaWVsZC5oOgorICAgICAgICAqIGt3
cS9LV1FUZXh0RmllbGQubW06CisgICAgICAgICgtW0tXUVRleHRGaWVsZENvbnRyb2xsZXIgc2Vs
ZWN0ZWRSYW5nZV0pOgorICAgICAgICAoLVtLV1FUZXh0RmllbGRDb250cm9sbGVyIHNldFNlbGVj
dGVkUmFuZ2U6XSk6CisKIDIwMDUtMDYtMjEgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxl
LmNvbT4KIAogICAgICAgICBQYXRjaCBmcm9tIEtldmluQmFsbGFyZCA8a2V2aW5Ac2Iub3JnPiwg
cmV2aWV3ZWQgYnkgbWUuCkluZGV4OiAuL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjExOApkaWZmIC1wIC11IC1yMS4xMTggLi9raHRtbC9lY21h
L2tqc19odG1sLmNwcAotLS0gLi9raHRtbC9lY21hL2tqc19odG1sLmNwcAkyMDA1LzA2LzIyIDAw
OjQ4OjQ0CTEuMTE4CisrKyAuL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCTIwMDUvMDYvMjIgMDU6
MTg6MzAKQEAgLTgzOCw2ICs4MzgsOCBAQCBjb25zdCBDbGFzc0luZm8qIEtKUzo6SFRNTEVsZW1l
bnQ6OmNsYXNzCiAgIG1heExlbmd0aAlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dE1heExlbmd0aAlE
b250RGVsZXRlCiAgIG5hbWUJCUtKUzo6SFRNTEVsZW1lbnQ6OklucHV0TmFtZQkJRG9udERlbGV0
ZQogICByZWFkT25seQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFJlYWRPbmx5CQlEb250RGVsZXRl
CisgIHNlbGVjdGlvblN0YXJ0CUtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2VsZWN0aW9uU3RhcnQJ
RG9udERlbGV0ZQorICBzZWxlY3Rpb25FbmQJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3Rp
b25FbmQJRG9udERlbGV0ZQogICBzaXplCQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNpemUJCURv
bnREZWxldGUKICAgc3JjCQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNyYwkJRG9udERlbGV0ZQog
ICB0YWJJbmRleAlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFRhYkluZGV4CQlEb250RGVsZXRlCkBA
IC04NDgsOCArODUwLDkgQEAgY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFz
cwogICBmb2N1cwkJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1cwkJRG9udERlbGV0ZXxGdW5j
dGlvbiAwCiAgIHNlbGVjdAlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVjdAkJRG9udERlbGV0
ZXxGdW5jdGlvbiAwCiAgIGNsaWNrCQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dENsaWNrCQlEb250
RGVsZXRlfEZ1bmN0aW9uIDAKKyAgc2V0U2VsZWN0aW9uUmFuZ2UJS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZQlEb250RGVsZXRlfEZ1bmN0aW9uIDIKIEBlbmQKLUBiZWdp
biBIVE1MVGV4dEFyZWFFbGVtZW50VGFibGUgMTMKK0BiZWdpbiBIVE1MVGV4dEFyZWFFbGVtZW50
VGFibGUgMTcKICAgZGVmYXVsdFZhbHVlCUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhRGVmYXVs
dFZhbHVlCURvbnREZWxldGUKICAgZm9ybQkJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb3Jt
CQlEb250RGVsZXRlfFJlYWRPbmx5CiAgIGFjY2Vzc0tleQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0
QXJlYUFjY2Vzc0tleQlEb250RGVsZXRlCkBAIC04NTgsMTIgKzg2MSwxNSBAQCBjb25zdCBDbGFz
c0luZm8qIEtKUzo6SFRNTEVsZW1lbnQ6OmNsYXNzCiAgIG5hbWUJCUtKUzo6SFRNTEVsZW1lbnQ6
OlRleHRBcmVhTmFtZQkJRG9udERlbGV0ZQogICByZWFkT25seQlLSlM6OkhUTUxFbGVtZW50OjpU
ZXh0QXJlYVJlYWRPbmx5CURvbnREZWxldGUKICAgcm93cwkJS0pTOjpIVE1MRWxlbWVudDo6VGV4
dEFyZWFSb3dzCQlEb250RGVsZXRlCisgIHNlbGVjdGlvblN0YXJ0CUtKUzo6SFRNTEVsZW1lbnQ6
OlRleHRBcmVhU2VsZWN0aW9uU3RhcnQJRG9udERlbGV0ZQorICBzZWxlY3Rpb25FbmQJS0pTOjpI
VE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3Rpb25FbmQJRG9udERlbGV0ZQogICB0YWJJbmRleAlL
SlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVRhYkluZGV4CURvbnREZWxldGUKICAgdHlwZQkJS0pT
OjpIVE1MRWxlbWVudDo6VGV4dEFyZWFUeXBlCQlEb250RGVsZXRlfFJlYWRPbmx5CiAgIHZhbHVl
CQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVZhbHVlCQlEb250RGVsZXRlCiAgIGJsdXIJCUtK
Uzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cgkJRG9udERlbGV0ZXxGdW5jdGlvbiAwCiAgIGZv
Y3VzCQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzCQlEb250RGVsZXRlfEZ1bmN0aW9u
IDAKICAgc2VsZWN0CUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0CURvbnREZWxldGV8
RnVuY3Rpb24gMAorICBzZXRTZWxlY3Rpb25SYW5nZQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJl
YVNldFNlbGVjdGlvblJhbmdlCURvbnREZWxldGV8RnVuY3Rpb24gMgogQGVuZAogQGJlZ2luIEhU
TUxCdXR0b25FbGVtZW50VGFibGUgNwogICBmb3JtCQlLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25G
b3JtCQlEb250RGVsZXRlfFJlYWRPbmx5CkBAIC0xMzIwLDYgKzEzMjYsMjIgQEAgVmFsdWUgS0pT
OjpIVE1MRWxlbWVudDo6Y2FsbChFeGVjU3RhdGUgKgogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAorc3RhdGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uU3RhcnQoSFRNTElucHV0RWxlbWVu
dEltcGwgJmlucHV0KQoreworICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKSB7CisgICAg
cmV0dXJuIE51bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKKyAgfQorICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlvbkVuZChIVE1MSW5w
dXRFbGVtZW50SW1wbCAmaW5wdXQpCit7CisgIGlmIChpbnB1dC5jYW5IYXZlU2VsZWN0aW9uKCkp
IHsKKyAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvbkVuZCgpKTsKKyAgfQorICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIEhUTUxFbGVtZW50
SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsK
QEAgLTE0ODgsNiArMTUxMCw4IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkKICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0
Lm1heExlbmd0aCgpKTsKICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGlucHV0Lm5hbWUoKSk7CiAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgcmV0dXJu
IEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7CisgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0
OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uU3RhcnQoaW5wdXQpOworICAgIGNhc2UgSW5wdXRT
ZWxlY3Rpb25FbmQ6ICAgIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChpbnB1dCk7CiAgICAg
Y2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zaXplRE9NKCkp
OwogICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc3Jj
KCkpOwogICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQu
dGFiSW5kZXgoKSk7CkBAIC0xNTA4LDYgKzE1MzIsOCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5CiAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0ZXh0YXJlYS5uYW1lKCkpOwogICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTog
ICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLnJlYWRPbmx5KCkpOwogICAgIGNhc2UgVGV4
dEFyZWFSb3dzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEucm93cygpKTsKKyAg
ICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnNl
bGVjdGlvblN0YXJ0KCkpOworICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHJldHVy
biBOdW1iZXIodGV4dGFyZWEuc2VsZWN0aW9uRW5kKCkpOwogICAgIGNhc2UgVGV4dEFyZWFUYWJJ
bmRleDogICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEudGFiSW5kZXgoKSk7CiAgICAgY2Fz
ZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS50eXBlKCkp
OwogICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFy
ZWEudmFsdWUoKSk7CkBAIC0yMDUyLDYgKzIwNzgsMjIgQEAgYm9vbCBLSlM6OkhUTUxFbGVtZW50
OjpoYXNQcm9wZXJ0eShFeGVjUwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGJyZWFrOwog
ICAgIH0KKyAgICBjYXNlIElEX0lOUFVUOiB7CisgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAm
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsK
KyAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwg
cHJvcGVydHlOYW1lKTsKKyAgICAgIGlmIChlbnRyeSkgeworICAgICAgICBzd2l0Y2goZW50cnkt
PnZhbHVlKSB7CisgICAgICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OgorICAgICAgICAg
IGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6CisgICAgICAgICAgY2FzZSBJbnB1dFNldFNlbGVjdGlv
blJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKTsKKyAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CiAgIH0KQEAg
LTIxNzksNiArMjIyMSwxMCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNh
bGwoCiAgICAgICAgIGlucHV0LmNsaWNrKCk7CiAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
ICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2V0
U2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoYXJnc1sw
XS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykpOworICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgICB9CiAgICAgfQogICAgIGJyZWFrOwogICAgIGNhc2UgSURfTEFC
RUw6IHsKQEAgLTIyMjYsNiArMjI3MiwxMCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rp
b246OnRyeUNhbGwoCiAgICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOwogICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiAgICAgICB9CisgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpUZXh0QXJlYVNldFNlbGVjdGlvblJhbmdlKSB7CisgICAgICAgIHRleHRhcmVhLnNldFNl
bGVjdGlvblJhbmdlKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMp
KTsKKyAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgfQogICAgIH0KICAgICBicmVh
azsKICAgICBjYXNlIElEX0E6IHsKQEAgLTI1NjQsNiArMjYxNCw4IEBAIHZvaWQgSFRNTEVsZW1l
bnQ6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXgKICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAg
ICAgIHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
ICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHsgaW5wdXQuc2V0TmFtZShzdHIpOyBy
ZXR1cm47IH0KICAgICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHsgaW5wdXQuc2V0UmVh
ZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICBjYXNlIElucHV0
U2VsZWN0aW9uU3RhcnQ6ICB7IGlucHV0LnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHsgaW5w
dXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICAg
IGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHsgaW5wdXQuc2V0U2l6ZShzdHIpOyByZXR1cm47
IH0KICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0U3JjKHN0cik7
IHJldHVybjsgfQogICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgeyBpbnB1dC5zZXRU
YWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CkBAIC0yNTg0LDYgKzI2MzYs
OCBAQCB2b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4CiAgICAgICBjYXNl
IFRleHRBcmVhTmFtZTogICAgICAgICAgICB7IHRleHRhcmVhLnNldE5hbWUoc3RyKTsgcmV0dXJu
OyB9CiAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICB7IHRleHRhcmVhLnNldFJl
YWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQogICAgICAgY2FzZSBUZXh0
QXJlYVJvd3M6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRSb3dzKHZhbHVlLnRvSW50MzIoZXhl
YykpOyByZXR1cm47IH0KKyAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25TdGFydDogIHsgdGV4
dGFyZWEuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvbkVuZDogICAgeyB0ZXh0YXJlYS5zZXRTZWxlY3Rp
b25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgICAgY2FzZSBUZXh0QXJl
YVRhYkluZGV4OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAvLyByZWFkLW9ubHk6IHR5cGUKICAgICAgIGNhc2UgVGV4
dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFyZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9
CkluZGV4OiAuL2todG1sL2VjbWEva2pzX2h0bWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNDcKZGlmZiAtcCAtdSAtcjEuNDcgLi9raHRtbC9lY21hL2tqc19odG1sLmgKLS0tIC4va2h0
bWwvZWNtYS9ranNfaHRtbC5oCTIwMDUvMDYvMjIgMDA6NDg6NDQJMS40NworKysgLi9raHRtbC9l
Y21hL2tqc19odG1sLmgJMjAwNS8wNi8yMiAwNToxODozMwpAQCAtMTAzLDkgKzEwMywxMSBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgSW5wdXRGb2N1cywgSW5wdXRNYXhMZW5ndGgsIElu
cHV0RGVmYXVsdENoZWNrZWQsIElucHV0RGlzYWJsZWQsCiAgICAgICAgICAgIElucHV0Q2hlY2tl
ZCwgSW5wdXRGb3JtLCBJbnB1dEFjY2Vzc0tleSwgSW5wdXRBbGlnbiwgSW5wdXRBbHQsCiAgICAg
ICAgICAgIElucHV0TmFtZSwgSW5wdXRTcmMsIElucHV0VXNlTWFwLCBJbnB1dFNlbGVjdCwgSW5w
dXRDbGljaywKLSAgICAgICAgICAgVGV4dEFyZWFBY2Nlc3NLZXksIFRleHRBcmVhTmFtZSwgVGV4
dEFyZWFEZWZhdWx0VmFsdWUsIFRleHRBcmVhU2VsZWN0LAorICAgICAgICAgICBJbnB1dFNlbGVj
dGlvblN0YXJ0LCBJbnB1dFNlbGVjdGlvbkVuZCwgSW5wdXRTZXRTZWxlY3Rpb25SYW5nZSwKKyAg
ICAgICAgICAgVGV4dEFyZWFBY2Nlc3NLZXksIFRleHRBcmVhTmFtZSwgVGV4dEFyZWFEZWZhdWx0
VmFsdWUsIFRleHRBcmVhU2VsZWN0LCBUZXh0QXJlYVNldFNlbGVjdGlvblJhbmdlLAogICAgICAg
ICAgICBUZXh0QXJlYUNvbHMsIFRleHRBcmVhRGlzYWJsZWQsIFRleHRBcmVhRm9ybSwgVGV4dEFy
ZWFUeXBlLAogICAgICAgICAgICBUZXh0QXJlYVRhYkluZGV4LCBUZXh0QXJlYVJlYWRPbmx5LCBU
ZXh0QXJlYVJvd3MsIFRleHRBcmVhVmFsdWUsCisgICAgICAgICAgIFRleHRBcmVhU2VsZWN0aW9u
U3RhcnQsIFRleHRBcmVhU2VsZWN0aW9uRW5kLAogICAgICAgICAgICBUZXh0QXJlYUJsdXIsIFRl
eHRBcmVhRm9jdXMsIEJ1dHRvbkJsdXIsIEJ1dHRvbkZvY3VzLCBCdXR0b25Gb3JtLCBCdXR0b25U
YWJJbmRleCwgQnV0dG9uTmFtZSwKICAgICAgICAgICAgQnV0dG9uRGlzYWJsZWQsIEJ1dHRvbkFj
Y2Vzc0tleSwgQnV0dG9uVHlwZSwgQnV0dG9uVmFsdWUsIExhYmVsSHRtbEZvciwKICAgICAgICAg
ICAgTGFiZWxGb3JtLCBMYWJlbEZvY3VzLCBMYWJlbEFjY2Vzc0tleSwgRmllbGRTZXRGb3JtLCBM
ZWdlbmRGb3JtLCBMZWdlbmRBY2Nlc3NLZXksCkluZGV4OiAuL2todG1sL2h0bWwvaHRtbF9mb3Jt
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2Zvcm1pbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjcKZGlmZiAtcCAt
dSAtcjEuMTY3IC4va2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAotLS0gLi9raHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuY3BwCTIwMDUvMDYvMjAgMDU6NTI6MTYJMS4xNjcKKysrIC4va2h0bWwv
aHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMDA1LzA2LzIyIDA1OjE4OjM2CkBAIC0xNTA4LDYgKzE1
MDgsODkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6cmVzdG9yZVN0YXRlKAogICAgIH0K
IH0KIAorYm9vbCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6Y2FuSGF2ZVNlbGVjdGlvbigpCit7Cisg
ICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBURVhUOgorICAgICAgICBjYXNlIFBB
U1NXT1JEOgorI2lmIEFQUExFX0NIQU5HRVMKKyAgICAgICAgY2FzZSBTRUFSQ0g6CisjZW5kaWYK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworbG9uZyBIVE1MSW5wdXRFbGVt
ZW50SW1wbDo6c2VsZWN0aW9uU3RhcnQoKQoreworICAgIGlmICghbV9yZW5kZXIpIHJldHVybiAw
OworICAgIAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgUEFTU1dPUkQ6Cisj
aWYgQVBQTEVfQ0hBTkdFUworICAgICAgICBjYXNlIFNFQVJDSDoKKyNlbmRpZgorICAgICAgICBj
YXNlIFRFWFQ6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQq
PihtX3JlbmRlciktPnNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2xvbmcgSFRNTElucHV0RWxl
bWVudEltcGw6OnNlbGVjdGlvbkVuZCgpCit7CisgICAgaWYgKCFtX3JlbmRlcikgcmV0dXJuIDA7
CisgICAgCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBQQVNTV09SRDoKKyNp
ZiBBUFBMRV9DSEFOR0VTCisgICAgICAgIGNhc2UgU0VBUkNIOgorI2VuZGlmCisgICAgICAgIGNh
c2UgVEVYVDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCo+
KG1fcmVuZGVyKS0+c2VsZWN0aW9uRW5kKCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVu
dEltcGw6OnNldFNlbGVjdGlvblN0YXJ0KGxvbmcgc3RhcnQpCit7CisgICAgaWYgKCFtX3JlbmRl
cikgcmV0dXJuOworICAgIAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgUEFT
U1dPUkQ6CisjaWYgQVBQTEVfQ0hBTkdFUworICAgICAgICBjYXNlIFNFQVJDSDoKKyNlbmRpZgor
ICAgICAgICBjYXNlIFRFWFQ6CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRp
dCo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlvbkVuZChsb25nIGVuZCkKK3sKKyAg
ICBpZiAoIW1fcmVuZGVyKSByZXR1cm47CisgICAgCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICAgICAgY2FzZSBQQVNTV09SRDoKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgICAgIGNhc2UgU0VB
UkNIOgorI2VuZGlmCisgICAgICAgIGNhc2UgVEVYVDoKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlckxpbmVFZGl0Kj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZWxlY3QoICApCiB7CiAgICAgaWYo
IW1fcmVuZGVyKSByZXR1cm47CkBAIC0xNTM4LDYgKzE2MjEsMjMgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6c2VsZWN0KCAgKQogICAgIH0KIH0KIAordm9pZCBIVE1MSW5wdXRFbGVtZW50
SW1wbDo6c2V0U2VsZWN0aW9uUmFuZ2UobG9uZyBzdGFydCwgbG9uZyBlbmQpCit7CisgICAgaWYg
KCFtX3JlbmRlcikgcmV0dXJuOworICAgIAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAg
IGNhc2UgUEFTU1dPUkQ6CisjaWYgQVBQTEVfQ0hBTkdFUworICAgICAgICBjYXNlIFNFQVJDSDoK
KyNlbmRpZgorICAgICAgICBjYXNlIFRFWFQ6CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJMaW5lRWRpdCo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwogdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6Y2xpY2soYm9vbCBzZW5kTW91
c2VFdmVudHMpCiB7CiAgICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgewpAQCAtMjA5NCwxMyArMjE5
NCwxNSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb25zCiB7CiAgICAg
aWYgKG1fdHlwZSA9PSBGSUxFKSByZXR1cm47CiAKKyAgICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVy
ID0gZmFsc2U7CiAgICAgaWYgKHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkpIHsK
ICAgICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICBpZiAobV9yZW5kZXIpCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCo+KG1fcmVuZGVyKS0+dXBkYXRlRnJvbUVs
ZW1lbnQoKTsKICAgICAgICAgc2V0Q2hhbmdlZCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNl
dEF0dHJpYnV0ZShBVFRSX1ZBTFVFLCB2YWx1ZSk7CiAgICAgfQotICAgIG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIgPSBmYWxzZTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0VmFs
dWVGcm9tUmVuZGVyZXIoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKQEAgLTMzODAsMTIgKzM0ODIs
NDQgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6cmVzdG9yZVN0YQogICAgIC8vIHRo
ZSBjbG9zZSgpIGluIHRoZSByZW5kZXJ0cmVlIHdpbGwgdGFrZSBjYXJlIG9mIHRyYW5zZmVycmlu
ZyBkZWZhdWx0dmFsdWUgdG8gJ3ZhbHVlJwogfQogCitsb25nIEhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsOjpzZWxlY3Rpb25TdGFydCgpCit7CisgICAgaWYgKG1fcmVuZGVyKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihtX3JlbmRlciktPnNlbGVjdGlvblN0YXJ0
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2xvbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNl
bGVjdGlvbkVuZCgpCit7CisgICAgaWYgKG1fcmVuZGVyKQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihtX3JlbmRlciktPnNlbGVjdGlvbkVuZCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25T
dGFydChsb25nIHN0YXJ0KQoreworICAgIGlmIChtX3JlbmRlcikKKyAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dEFyZWEqPihtX3JlbmRlciktPnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsK
K30KKwordm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uRW5kKGxvbmcg
ZW5kKQoreworICAgIGlmIChtX3JlbmRlcikKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dEFyZWEqPihtX3JlbmRlciktPnNldFNlbGVjdGlvbkVuZChlbmQpOworfQorCiB2b2lkIEhUTUxU
ZXh0QXJlYUVsZW1lbnRJbXBsOjpzZWxlY3QoICApCiB7CiAgICAgaWYgKG1fcmVuZGVyKQogICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSo+KG1fcmVuZGVyKS0+c2VsZWN0KCk7CiB9
CiAKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFNlbGVjdGlvblJhbmdlKGxvbmcg
c3RhcnQsIGxvbmcgZW5kKQoreworICAgIGlmIChtX3JlbmRlcikKKyAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dEFyZWEqPihtX3JlbmRlciktPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBl
bmQpOworfQorCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpjaGlsZHJlbkNoYW5nZWQo
KQogewogICAgIHNldFZhbHVlKGRlZmF1bHRWYWx1ZSgpKTsKQEAgLTM0ODMsOCArMzYxNywxMCBA
QCBET01TdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnZhbHVlCiB2b2lkIEhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb25zdCBET01TdHJpbmcgJnZhbHVlKQogewogICAg
IG1fdmFsdWUgPSB2YWx1ZS5zdHJpbmcoKTsKLSAgICBtX3ZhbHVlSXNWYWxpZCA9IHRydWU7CiAg
ICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOworICAgIGlmIChtX3JlbmRlcikKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihtX3JlbmRlciktPnVwZGF0ZUZyb21F
bGVtZW50KCk7CisgICAgbV92YWx1ZUlzVmFsaWQgPSBmYWxzZTsgLy8gZm9yY2UgdGhlIG5leHQg
YWNjZXNzIHRvIGZldGNoIGZyb20gdGhlIHJlbmRlcmVyCiAgICAgc2V0Q2hhbmdlZCh0cnVlKTsK
IH0KIApJbmRleDogLi9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS43NApkaWZmIC1wIC11IC1yMS43NCAuL2todG1sL2h0bWwvaHRtbF9m
b3JtaW1wbC5oCi0tLSAuL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTIwMDUvMDYvMjAgMDU6
NTI6MTYJMS43NAorKysgLi9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkyMDA1LzA2LzIyIDA1
OjE4OjM3CkBAIC0zNTcsNyArMzU3LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFFTdHJpbmcg
c3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKFFTdHJpbmdMaXN0ICYpOwog
CisgICAgYm9vbCBjYW5IYXZlU2VsZWN0aW9uKCk7CisKKyAgICBsb25nIHNlbGVjdGlvblN0YXJ0
KCk7CisgICAgbG9uZyBzZWxlY3Rpb25FbmQoKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0
KGxvbmcpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGxvbmcpOworCiAgICAgdm9pZCBzZWxl
Y3QoKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGxvbmcsIGxvbmcpOwogICAgIAogICAg
IHZpcnR1YWwgdm9pZCBjbGljayhib29sIHNlbmRNb3VzZUV2ZW50cyA9IGZhbHNlKTsKICAgICB2
aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CkBAIC03
MjIsNyArNzMwLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFFTdHJpbmcgc3RhdGUoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKFFTdHJpbmdMaXN0ICYpOwogCisgICAgbG9uZyBz
ZWxlY3Rpb25TdGFydCgpOworICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7CisKKyAgICB2b2lkIHNl
dFNlbGVjdGlvblN0YXJ0KGxvbmcpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGxvbmcpOwor
CiAgICAgdm9pZCBzZWxlY3QgKCAgKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGxvbmcs
IGxvbmcpOwogCiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsK
SW5kZXg6IC4va2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEwNwpkaWZmIC1wIC11IC1yMS4xMDcgLi9raHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCi0tLSAuL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5j
cHAJMjAwNS8wNi8yMCAwNToyNDoyNgkxLjEwNworKysgLi9raHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2Zvcm0uY3BwCTIwMDUvMDYvMjIgMDU6MTg6NDAKQEAgLTcxOCwxMSArNzE4LDcxIEBAIHZvaWQg
UmVuZGVyTGluZUVkaXQ6OnNsb3RUZXh0Q2hhbmdlZChjb24KICAgICBlbGVtZW50KCktPnNldFZh
bHVlRnJvbVJlbmRlcmVyKG5ld1RleHQpOwogfQogCitsb25nIFJlbmRlckxpbmVFZGl0OjpzZWxl
Y3Rpb25TdGFydCgpCit7CisgICAgS0xpbmVFZGl0ICpsaW5lRWRpdCA9IHN0YXRpY19jYXN0PEtM
aW5lRWRpdCo+KG1fd2lkZ2V0KTsKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgcmV0dXJuIGxpbmVF
ZGl0LT5zZWxlY3Rpb25TdGFydCgpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogSSBoYXZlIG5vIHdh
eSB0byB0ZXN0IFF0LCBzbyBJJ2xsCisgICAgLy8gbGVhdmUgdGhpcyBhbG9uZSBmb3Igbm93Cisj
ZXJyb3IgVW5pbXBsZW1lbnRlZCBtZXRob2QKKyNlbmRpZgorfQorCitsb25nIFJlbmRlckxpbmVF
ZGl0OjpzZWxlY3Rpb25FbmQoKQoreworICAgIEtMaW5lRWRpdCAqbGluZUVkaXQgPSBzdGF0aWNf
Y2FzdDxLTGluZUVkaXQqPihtX3dpZGdldCk7CisjaWYgQVBQTEVfQ0hBTkdFUworICAgIHJldHVy
biBsaW5lRWRpdC0+c2VsZWN0aW9uRW5kKCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBJIGhhdmUg
bm8gd2F5IHRvIHRlc3QgUXQsIHNvIEknbGwKKyAgICAvLyBsZWF2ZSB0aGlzIGFsb25lIGZvciBu
b3cKKyNlcnJvciBVbmltcGxlbWVudGVkIG1ldGhvZAorI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVy
TGluZUVkaXQ6OnNldFNlbGVjdGlvblN0YXJ0KGxvbmcgc3RhcnQpCit7CisgICAgS0xpbmVFZGl0
ICpsaW5lRWRpdCA9IHN0YXRpY19jYXN0PEtMaW5lRWRpdCo+KG1fd2lkZ2V0KTsKKyNpZiBBUFBM
RV9DSEFOR0VTCisgICAgbGluZUVkaXQtPnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKKyNlbHNl
CisgICAgLy8gRklYTUU6IEkgaGF2ZSBubyB3YXkgdG8gdGVzdCBRdCwgc28gSSdsbAorICAgIC8v
IGxlYXZlIHRoaXMgYWxvbmUgZm9yIG5vdworI2Vycm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9kCisj
ZW5kaWYKK30KKwordm9pZCBSZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0aW9uRW5kKGxvbmcgZW5k
KQoreworICAgIEtMaW5lRWRpdCAqbGluZUVkaXQgPSBzdGF0aWNfY2FzdDxLTGluZUVkaXQqPiht
X3dpZGdldCk7CisjaWYgQVBQTEVfQ0hBTkdFUworICAgIGxpbmVFZGl0LT5zZXRTZWxlY3Rpb25F
bmQoZW5kKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEkgaGF2ZSBubyB3YXkgdG8gdGVzdCBRdCwg
c28gSSdsbAorICAgIC8vIGxlYXZlIHRoaXMgYWxvbmUgZm9yIG5vdworI2Vycm9yIFVuaW1wbGVt
ZW50ZWQgbWV0aG9kCisjZW5kaWYKK30KKwogdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2VsZWN0KCkK
IHsKICAgICBzdGF0aWNfY2FzdDxLTGluZUVkaXQqPihtX3dpZGdldCktPnNlbGVjdEFsbCgpOwog
fQogCit2b2lkIFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25SYW5nZShsb25nIHN0YXJ0LCBs
b25nIGVuZCkKK3sKKyAgICBLTGluZUVkaXQgKmxpbmVFZGl0ID0gc3RhdGljX2Nhc3Q8S0xpbmVF
ZGl0Kj4obV93aWRnZXQpOworI2lmIEFQUExFX0NIQU5HRVMKKyAgICBsaW5lRWRpdC0+c2V0U2Vs
ZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZC1zdGFydCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBJIGhh
dmUgbm8gd2F5IHRvIHRlc3QgUXQsIHNvIEknbGwKKyAgICAvLyBsZWF2ZSB0aGlzIGFsb25lIGZv
ciBub3cKKyNlcnJvciBVbmltcGxlbWVudGVkIG1ldGhvZAorI2VuZGlmCit9CisKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBSZW5kZXJGaWVsZHNldDo6UmVuZGVyRmllbGRzZXQoSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwgKmVsZW1lbnQpCkBAIC0xNjQxLDkgKzE3MDEsNjkgQEAgdm9pZCBS
ZW5kZXJUZXh0QXJlYTo6c2xvdFRleHRDaGFuZ2VkKCkKICAgICBtX2RpcnR5ID0gdHJ1ZTsKIH0K
IAorbG9uZyBSZW5kZXJUZXh0QXJlYTo6c2VsZWN0aW9uU3RhcnQoKQoreworICAgIFFUZXh0RWRp
dCAqdGV4dEVkaXQgPSBzdGF0aWNfY2FzdDxRVGV4dEVkaXQgKj4obV93aWRnZXQpOworI2lmIEFQ
UExFX0NIQU5HRVMKKyAgICByZXR1cm4gdGV4dEVkaXQtPnNlbGVjdGlvblN0YXJ0KCk7CisjZWxz
ZQorICAgIC8vIEZJWE1FOiBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgUXQsIHNvIEknbGwKKyAgICAv
LyBsZWF2ZSB0aGlzIGFsb25lIGZvciBub3cKKyNlcnJvciBVbmltcGxlbWVudGVkIG1ldGhvZAor
I2VuZGlmCit9CisKK2xvbmcgUmVuZGVyVGV4dEFyZWE6OnNlbGVjdGlvbkVuZCgpCit7CisgICAg
UVRleHRFZGl0ICp0ZXh0RWRpdCA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCAqPihtX3dpZGdldCk7
CisjaWYgQVBQTEVfQ0hBTkdFUworICAgIHJldHVybiB0ZXh0RWRpdC0+c2VsZWN0aW9uRW5kKCk7
CisjZWxzZQorICAgIC8vIEZJWE1FOiBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgUXQsIHNvIEknbGwK
KyAgICAvLyBsZWF2ZSB0aGlzIGFsb25lIGZvciBub3cKKyNlcnJvciBVbmltcGxlbWVudGVkIG1l
dGhvZAorI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyVGV4dEFyZWE6OnNldFNlbGVjdGlvblN0YXJ0
KGxvbmcgc3RhcnQpCit7CisgICAgUVRleHRFZGl0ICp0ZXh0RWRpdCA9IHN0YXRpY19jYXN0PFFU
ZXh0RWRpdCAqPihtX3dpZGdldCk7CisjaWYgQVBQTEVfQ0hBTkdFUworICAgIHRleHRFZGl0LT5z
ZXRTZWxlY3Rpb25TdGFydChzdGFydCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBJIGhhdmUgbm8g
d2F5IHRvIHRlc3QgUXQsIHNvIEknbGwKKyAgICAvLyBsZWF2ZSB0aGlzIGFsb25lIGZvciBub3cK
KyNlcnJvciBVbmltcGxlbWVudGVkIG1ldGhvZAorI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyVGV4
dEFyZWE6OnNldFNlbGVjdGlvbkVuZChsb25nIGVuZCkKK3sKKyAgICBRVGV4dEVkaXQgKnRleHRF
ZGl0ID0gc3RhdGljX2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KTsKKyNpZiBBUFBMRV9DSEFO
R0VTCisgICAgdGV4dEVkaXQtPnNldFNlbGVjdGlvbkVuZChlbmQpOworI2Vsc2UKKyAgICAvLyBG
SVhNRTogSSBoYXZlIG5vIHdheSB0byB0ZXN0IFF0LCBzbyBJJ2xsCisgICAgLy8gbGVhdmUgdGhp
cyBhbG9uZSBmb3Igbm93CisjZXJyb3IgVW5pbXBsZW1lbnRlZCBtZXRob2QKKyNlbmRpZgorfQor
CiB2b2lkIFJlbmRlclRleHRBcmVhOjpzZWxlY3QoKQogewogICAgIHN0YXRpY19jYXN0PFFUZXh0
RWRpdCAqPihtX3dpZGdldCktPnNlbGVjdEFsbCgpOworfQorCit2b2lkIFJlbmRlclRleHRBcmVh
OjpzZXRTZWxlY3Rpb25SYW5nZShsb25nIHN0YXJ0LCBsb25nIGVuZCkKK3sKKyAgICBRVGV4dEVk
aXQgKnRleHRFZGl0ID0gc3RhdGljX2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KTsKKyNpZiBB
UFBMRV9DSEFOR0VTCisgICAgdGV4dEVkaXQtPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQt
c3RhcnQpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogSSBoYXZlIG5vIHdheSB0byB0ZXN0IFF0LCBz
byBJJ2xsCisgICAgLy8gbGVhdmUgdGhpcyBhbG9uZSBmb3Igbm93CisjZXJyb3IgVW5pbXBsZW1l
bnRlZCBtZXRob2QKKyNlbmRpZgogfQogCiB2b2lkIFJlbmRlclRleHRBcmVhOjpzbG90U2VsZWN0
aW9uQ2hhbmdlZCgpCkluZGV4OiAuL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJf
Zm9ybS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUxCmRpZmYgLXAgLXUgLXIxLjUxIC4va2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgKLS0tIC4va2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9m
b3JtLmgJMjAwNS8wNi8yMCAwNToyNDoyNgkxLjUxCisrKyAuL2todG1sL3JlbmRlcmluZy9yZW5k
ZXJfZm9ybS5oCTIwMDUvMDYvMjIgMDU6MTg6NDAKQEAgLTI0OCw3ICsyNDgsMTMgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTdHlsZShSZW5kZXJTdHlsZSAqKTsKIAorICAgIGxvbmcgc2VsZWN0aW9uU3RhcnQoKTsK
KyAgICBsb25nIHNlbGVjdGlvbkVuZCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQobG9u
Zyk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQobG9uZyk7CisgICAgCiAgICAgdm9pZCBzZWxl
Y3QoKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGxvbmcsIGxvbmcpOwogCiAgICAgS0xp
bmVFZGl0ICp3aWRnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxLTGluZUVkaXQqPiht
X3dpZGdldCk7IH0KICAgICBET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsKiBlbGVtZW50KCkgY29u
c3QKQEAgLTQ2OSw4ICs0NzUsMTQgQEAgcHVibGljOgogCiAgICAgUVN0cmluZyB0ZXh0KCk7CiAK
KyAgICBsb25nIHNlbGVjdGlvblN0YXJ0KCk7CisgICAgbG9uZyBzZWxlY3Rpb25FbmQoKTsKKyAg
ICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGxvbmcpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5k
KGxvbmcpOworICAgIAogICAgIHZvaWQgc2VsZWN0KCk7Ci0KKyAgICB2b2lkIHNldFNlbGVjdGlv
blJhbmdlKGxvbmcsIGxvbmcpOworICAgIAogI2lmIEFQUExFX0NIQU5HRVMKICAgICB2aXJ0dWFs
IGJvb2wgY2FuSGF2ZUludHJpbnNpY01hcmdpbnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAj
ZW5kaWYKSW5kZXg6IGt3cS9LV1FMaW5lRWRpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9LV1FMaW5lRWRpdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMy
CmRpZmYgLXAgLXUgLXIxLjMyIGt3cS9LV1FMaW5lRWRpdC5oCi0tLSBrd3EvS1dRTGluZUVkaXQu
aAkyMDA1LzA2LzIwIDA1OjI0OjI2CTEuMzIKKysrIGt3cS9LV1FMaW5lRWRpdC5oCTIwMDUvMDYv
MjIgMDU6MTg6NDYKQEAgLTY1LDcgKzY1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0V3Jp
dGluZ0RpcmVjdGlvbihRUGFpbnRlcjo6VGV4dERpcmVjdGlvbik7CiAgICAgCisgICAgbG9uZyBz
ZWxlY3Rpb25TdGFydCgpOworICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7CisgICAgdm9pZCBzZXRT
ZWxlY3Rpb25TdGFydChsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChsb25nKTsKKyAg
ICAKICAgICB2b2lkIHNlbGVjdEFsbCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UobG9u
ZywgbG9uZyk7CiAgICAgYm9vbCBoYXNTZWxlY3RlZFRleHQoKSBjb25zdDsKICAgICAKICAgICBR
U2l6ZSBzaXplRm9yQ2hhcmFjdGVyV2lkdGgoaW50IG51bUNoYXJhY3RlcnMpIGNvbnN0OwpJbmRl
eDoga3dxL0tXUUxpbmVFZGl0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9LV1FMaW5lRWRpdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NgpkaWZmIC1w
IC11IC1yMS42NiBrd3EvS1dRTGluZUVkaXQubW0KLS0tIGt3cS9LV1FMaW5lRWRpdC5tbQkyMDA1
LzA2LzIwIDA1OjI0OjI2CTEuNjYKKysrIGt3cS9LV1FMaW5lRWRpdC5tbQkyMDA1LzA2LzIyIDA1
OjE4OjQ3CkBAIC0xNzIsNiArMTcyLDg5IEBAIGludCBRTGluZUVkaXQ6Om1heExlbmd0aCgpIGNv
bnN0CiAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXIgbWF4aW11bUxlbmd0aF07CiB9CiAKK2xvbmcg
UUxpbmVFZGl0OjpzZWxlY3Rpb25TdGFydCgpCit7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7
CisgICAgTlNSYW5nZSByYW5nZSA9IFttX2NvbnRyb2xsZXIgc2VsZWN0ZWRSYW5nZV07CisgICAg
aWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiByYW5nZS5sb2NhdGlvbjsKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworICAg
IHJldHVybiAwOworfQorCitsb25nIFFMaW5lRWRpdDo6c2VsZWN0aW9uRW5kKCkKK3sKKyAgICBL
V1FfQkxPQ0tfRVhDRVBUSU9OUzsKKyAgICBOU1JhbmdlIHJhbmdlID0gW21fY29udHJvbGxlciBz
ZWxlY3RlZFJhbmdlXTsKKyAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5TTWF4UmFuZ2UocmFuZ2UpOworICAgIEtXUV9V
TkJMT0NLX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUUxpbmVFZGl0Ojpz
ZXRTZWxlY3Rpb25TdGFydChsb25nIHN0YXJ0KQoreworICAgIEtXUV9CTE9DS19FWENFUFRJT05T
OworICAgIE5TUmFuZ2UgcmFuZ2UgPSBbbV9jb250cm9sbGVyIHNlbGVjdGVkUmFuZ2VdOworICAg
IGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSB7CisgICAgICAgIHJhbmdlLmxvY2F0
aW9uID0gMDsKKyAgICAgICAgcmFuZ2UubGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgLy8g
Y29lcmNlIHN0YXJ0IHRvIGEgdmFsaWQgdmFsdWUKKyAgICBsb25nIG1heExlbmd0aCA9IFtbbV9j
b250cm9sbGVyIHN0cmluZ10gbGVuZ3RoXTsKKyAgICBsb25nIG5ld1N0YXJ0ID0gc3RhcnQ7Cisg
ICAgaWYgKG5ld1N0YXJ0IDwgMCkKKyAgICAgICAgbmV3U3RhcnQgPSAwOworICAgIGlmIChuZXdT
dGFydCA+IG1heExlbmd0aCkKKyAgICAgICAgbmV3U3RhcnQgPSBtYXhMZW5ndGg7CisgICAgCisg
ICAgaWYgKCh1bnNpZ25lZCluZXdTdGFydCA8IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3Ro
KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGV4cGFuZGluZyBvciBjb250cmFjdGluZywgYnV0IG5v
dCBjb2xsYXBzaW5nIHRoZSBzZWxlY3Rpb24KKyAgICAgICAgcmFuZ2UubGVuZ3RoICs9IHJhbmdl
LmxvY2F0aW9uIC0gbmV3U3RhcnQ7CisgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gbmV3U3RhcnQ7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gb2ssIHdlJ3JlIGNvbGxhcHNpbmcgdGhlIHNlbGVj
dGlvbgorICAgICAgICByYW5nZS5sb2NhdGlvbiA9IG5ld1N0YXJ0OworICAgICAgICByYW5nZS5s
ZW5ndGggPSAwOworICAgIH0KKyAgICAKKyAgICBbbV9jb250cm9sbGVyIHNldFNlbGVjdGVkUmFu
Z2U6cmFuZ2VdOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgUUxpbmVF
ZGl0OjpzZXRTZWxlY3Rpb25FbmQobG9uZyBlbmQpCit7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElP
TlM7CisgICAgTlNSYW5nZSByYW5nZSA9IFttX2NvbnRyb2xsZXIgc2VsZWN0ZWRSYW5nZV07Cisg
ICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICAgICAgcmFuZ2UubG9j
YXRpb24gPSAwOworICAgICAgICByYW5nZS5sZW5ndGggPSAwOworICAgIH0KKyAgICAKKyAgICAv
LyBjb2VyY2UgZW5kIHRvIGEgdmFsaWQgdmFsdWUKKyAgICBsb25nIG1heExlbmd0aCA9IFtbbV9j
b250cm9sbGVyIHN0cmluZ10gbGVuZ3RoXTsKKyAgICBsb25nIG5ld0VuZCA9IGVuZDsKKyAgICBp
ZiAobmV3RW5kIDwgMCkKKyAgICAgICAgbmV3RW5kID0gMDsKKyAgICBpZiAobmV3RW5kID4gbWF4
TGVuZ3RoKQorICAgICAgICBuZXdFbmQgPSBtYXhMZW5ndGg7CisgICAgCisgICAgaWYgKCh1bnNp
Z25lZCluZXdFbmQgPj0gcmFuZ2UubG9jYXRpb24pIHsKKyAgICAgICAgLy8gSWYgd2UncmUganVz
dCBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIGxlbmd0aCwgYnV0IG5vdCBsb2NhdGlvbi4uCisgICAg
ICAgIHJhbmdlLmxlbmd0aCA9IG5ld0VuZCAtIHJhbmdlLmxvY2F0aW9uOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIG9rLCB3ZSd2ZSBjb2xsYXBzZWQgdGhlIHNlbGVjdGlvbiBhbmQgYXJlIG1v
dmluZyBpdAorICAgICAgICByYW5nZS5sb2NhdGlvbiA9IG5ld0VuZDsKKyAgICAgICAgcmFuZ2Uu
bGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgW21fY29udHJvbGxlciBzZXRTZWxlY3RlZFJh
bmdlOnJhbmdlXTsKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworfQorCiB2b2lkIFFMaW5l
RWRpdDo6c2VsZWN0QWxsKCkKIHsKICAgICBpZiAoIWhhc0ZvY3VzKCkpIHsKQEAgLTE4NCw2ICsy
NjcsMzAgQEAgdm9pZCBRTGluZUVkaXQ6OnNlbGVjdEFsbCgpCiAgICAgICAgIFt0ZXh0RmllbGQg
c2VsZWN0VGV4dDpuaWxdOwogICAgICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogICAgIH0K
K30KKwordm9pZCBRTGluZUVkaXQ6OnNldFNlbGVjdGlvblJhbmdlKGxvbmcgc3RhcnQsIGxvbmcg
bGVuZ3RoKQoreworICAgIEtXUV9CTE9DS19FWENFUFRJT05TOworICAgIGxvbmcgbmV3U3RhcnQg
PSBzdGFydDsKKyAgICBsb25nIG5ld0xlbmd0aCA9IGxlbmd0aDsKKyAgICBpZiAobmV3U3RhcnQg
PCAwKSB7CisgICAgICAgIC8vIHRydW5jYXRlIHRoZSBsZW5ndGggYnkgdGhlIG5lZ2F0aXZlIHN0
YXJ0CisgICAgICAgIG5ld0xlbmd0aCA9IGxlbmd0aCArIG5ld1N0YXJ0OworICAgICAgICBuZXdT
dGFydCA9IDA7CisgICAgfQorICAgIGlmIChuZXdMZW5ndGggPCAwKSB7CisgICAgICAgIG5ld0xl
bmd0aCA9IDA7CisgICAgfQorICAgIGludCBtYXhsZW4gPSBbW21fY29udHJvbGxlciBzdHJpbmdd
IGxlbmd0aF07CisgICAgaWYgKG5ld1N0YXJ0ID4gbWF4bGVuKSB7CisgICAgICAgIG5ld1N0YXJ0
ID0gbWF4bGVuOworICAgIH0KKyAgICBpZiAobmV3U3RhcnQgKyBuZXdMZW5ndGggPiBtYXhsZW4p
IHsKKyAgICAgICAgbmV3TGVuZ3RoID0gbWF4bGVuIC0gbmV3U3RhcnQ7CisgICAgfQorICAgIFtt
X2NvbnRyb2xsZXIgc2V0U2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZShuZXdTdGFydCwgbmV3TGVu
Z3RoKV07CisgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAogYm9vbCBRTGluZUVkaXQ6
Omhhc1NlbGVjdGVkVGV4dCgpIGNvbnN0CkluZGV4OiBrd3EvS1dRVGV4dEFyZWEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEFyZWEuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC1wIC11IC1yMS4yMSBrd3EvS1dRVGV4dEFyZWEuaAot
LS0ga3dxL0tXUVRleHRBcmVhLmgJMjAwNS8wNi8yMCAwNToyNDoyNgkxLjIxCisrKyBrd3EvS1dR
VGV4dEFyZWEuaAkyMDA1LzA2LzIyIDA1OjE4OjQ3CkBAIC02Nyw2ICs2Nyw4IEBAIGNsYXNzIFFU
ZXh0RWRpdDsKIC0gKEJPT0wpd29yZFdyYXA7CiAKIC0gKHZvaWQpc2VsZWN0QWxsOworLSAodm9p
ZClzZXRTZWxlY3RlZFJhbmdlOihOU1JhbmdlKWFSYW5nZTsKKy0gKE5TUmFuZ2Upc2VsZWN0ZWRS
YW5nZTsKIC0gKEJPT0wpaGFzU2VsZWN0aW9uOwogCiAtIChOU1NpemUpc2l6ZVdpdGhDb2x1bW5z
OihpbnQpY29sdW1ucyByb3dzOihpbnQpcm93czsKSW5kZXg6IGt3cS9LV1FUZXh0QXJlYS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEFyZWEubW0s
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtcCAtdSAtcjEuODIga3dxL0tXUVRleHRB
cmVhLm1tCi0tLSBrd3EvS1dRVGV4dEFyZWEubW0JMjAwNS8wNi8yMCAwNToyNDoyNwkxLjgyCisr
KyBrd3EvS1dRVGV4dEFyZWEubW0JMjAwNS8wNi8yMiAwNToxODo0NwpAQCAtMjg4LDYgKzI4OCw2
NiBAQCBjb25zdCBmbG9hdCBMYXJnZU51bWJlckZvclRleHQgPSAxLjBlNzsKICAgICBbdGV4dFZp
ZXcgc2VsZWN0QWxsOm5pbF07CiB9CiAKKy0gKHZvaWQpc2V0U2VsZWN0ZWRSYW5nZTooTlNSYW5n
ZSlhUmFuZ2UKK3sKKyAgICBOU1N0cmluZyAqdGV4dCA9IFt0ZXh0VmlldyBzdHJpbmddOworICAg
IC8vIE9rLCB0aGUgc2VsZWN0aW9uIGhhcyB0byBtYXRjaCB1cCB3aXRoIHRoZSBzdHJpbmcgcmV0
dXJuZWQgYnkgLXRleHQKKyAgICAvLyBhbmQgc2luY2UgLXRleHQgdHJhbnNsYXRlcyBcclxuIHRv
IFxuLCB3ZSBoYXZlIHRvIG1vZGlmeSBvdXIgc2VsZWN0aW9uCisgICAgLy8gaWYgYSBcclxuIHNl
cXVlbmNlIGlzIGFueXdoZXJlIGluIG9yIGJlZm9yZSB0aGUgc2VsZWN0aW9uCisgICAgdW5zaWdu
ZWQgaW50IGNvdW50ID0gMDsKKyAgICBOU1JhbmdlIGZvdW5kUmFuZ2UsIHNlYXJjaFJhbmdlID0g
TlNNYWtlUmFuZ2UoMCwgYVJhbmdlLmxvY2F0aW9uKTsKKyAgICB3aGlsZSAoZm91bmRSYW5nZSA9
IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxuIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5n
ZTpzZWFyY2hSYW5nZV0sCisgICAgICAgICAgIGZvdW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RG
b3VuZCkgeworICAgICAgICBjb3VudCsrOworICAgICAgICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9
IE5TTWF4UmFuZ2UoZm91bmRSYW5nZSk7CisgICAgICAgIGlmIChzZWFyY2hSYW5nZS5sb2NhdGlv
biA+PSBhUmFuZ2UubG9jYXRpb24pIGJyZWFrOworICAgICAgICBzZWFyY2hSYW5nZS5sZW5ndGgg
PSBhUmFuZ2UubG9jYXRpb24gLSBzZWFyY2hSYW5nZS5sb2NhdGlvbjsKKyAgICB9CisgICAgYVJh
bmdlLmxvY2F0aW9uICs9IGNvdW50OworICAgIGNvdW50ID0gMDsKKyAgICBzZWFyY2hSYW5nZSA9
IE5TTWFrZVJhbmdlKGFSYW5nZS5sb2NhdGlvbiwgYVJhbmdlLmxlbmd0aCk7CisgICAgd2hpbGUg
KGZvdW5kUmFuZ2UgPSBbdGV4dCByYW5nZU9mU3RyaW5nOkAiXHJcbiIgb3B0aW9uczpOU0xpdGVy
YWxTZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2VdLAorICAgICAgICAgICBmb3VuZFJhbmdlLmxvY2F0
aW9uICE9IE5TTm90Rm91bmQpIHsKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgc2VhcmNoUmFu
Z2UubG9jYXRpb24gPSBOU01heFJhbmdlKGZvdW5kUmFuZ2UpOworICAgICAgICBpZiAoc2VhcmNo
UmFuZ2UubG9jYXRpb24gPj0gTlNNYXhSYW5nZShhUmFuZ2UpKSBicmVhazsKKyAgICAgICAgc2Vh
cmNoUmFuZ2UubGVuZ3RoID0gTlNNYXhSYW5nZShhUmFuZ2UpIC0gc2VhcmNoUmFuZ2UubG9jYXRp
b247CisgICAgfQorICAgIGFSYW5nZS5sZW5ndGggKz0gY291bnQ7CisgICAgW3RleHRWaWV3IHNl
dFNlbGVjdGVkUmFuZ2U6YVJhbmdlXTsKK30KKworLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCit7
CisgICAgTlNSYW5nZSBhUmFuZ2UgPSBbdGV4dFZpZXcgc2VsZWN0ZWRSYW5nZV07CisgICAgaWYg
KGFSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSB7CisgICAgICAgIHJldHVybiBhUmFuZ2U7
CisgICAgfQorICAgIC8vIFNhbWUgaXNzdWUgYXMgd2l0aCAtc2V0U2VsZWN0ZWRSYW5nZTogcmVn
YXJkaW5nIFxyXG4gc2VxdWVuY2VzCisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKyAgICBO
U1JhbmdlIGZvdW5kUmFuZ2UsIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgYVJhbmdlLmxv
Y2F0aW9uKTsKKyAgICBOU1N0cmluZyAqdGV4dCA9IFt0ZXh0VmlldyBzdHJpbmddOworICAgIHdo
aWxlIChmb3VuZFJhbmdlID0gW3RleHQgcmFuZ2VPZlN0cmluZzpAIlxyXG4iIG9wdGlvbnM6TlNM
aXRlcmFsU2VhcmNoIHJhbmdlOnNlYXJjaFJhbmdlXSwKKyAgICAgICAgICAgZm91bmRSYW5nZS5s
b2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHNlYXJj
aFJhbmdlLmxvY2F0aW9uID0gTlNNYXhSYW5nZShmb3VuZFJhbmdlKTsKKyAgICAgICAgaWYgKHNl
YXJjaFJhbmdlLmxvY2F0aW9uID49IGFSYW5nZS5sb2NhdGlvbikgYnJlYWs7CisgICAgICAgIHNl
YXJjaFJhbmdlLmxlbmd0aCA9IGFSYW5nZS5sb2NhdGlvbiAtIHNlYXJjaFJhbmdlLmxvY2F0aW9u
OworICAgIH0KKyAgICBhUmFuZ2UubG9jYXRpb24gLT0gY291bnQ7CisgICAgY291bnQgPSAwOwor
ICAgIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoYVJhbmdlLmxvY2F0aW9uLCBhUmFuZ2UubGVu
Z3RoKTsKKyAgICB3aGlsZSAoZm91bmRSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxu
IiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpzZWFyY2hSYW5nZV0sCisgICAgICAgICAg
IGZvdW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgICAgICBjb3VudCsrOwor
ICAgICAgICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZm91bmRSYW5nZSk7Cisg
ICAgICAgIGlmIChzZWFyY2hSYW5nZS5sb2NhdGlvbiA+PSBOU01heFJhbmdlKGFSYW5nZSkpIGJy
ZWFrOworICAgICAgICBzZWFyY2hSYW5nZS5sZW5ndGggPSBOU01heFJhbmdlKGFSYW5nZSkgLSBz
ZWFyY2hSYW5nZS5sb2NhdGlvbjsKKyAgICB9CisgICAgYVJhbmdlLmxlbmd0aCAtPSBjb3VudDsK
KyAgICByZXR1cm4gYVJhbmdlOworfQorCiAtIChCT09MKWhhc1NlbGVjdGlvbgogewogICAgIHJl
dHVybiBbdGV4dFZpZXcgc2VsZWN0ZWRSYW5nZV0ubGVuZ3RoID4gMDsKQEAgLTM4Myw2ICs0NDMs
MTAgQEAgY29uc3QgZmxvYXQgTGFyZ2VOdW1iZXJGb3JUZXh0ID0gMS4wZTc7CiAKIC0gKHZvaWQp
Z2V0Q3Vyc29yUG9zaXRpb25Bc0luZGV4OihpbnQgKilpbmRleCBpblBhcmFncmFwaDooaW50ICop
cGFyYWdyYXBoCiB7CisgICAgaWYgKHBhcmFncmFwaCA9PSBOVUxMIHx8IGluZGV4ID09IE5VTEwp
IHsKKyAgICAgICAgLy8gSnVzdCBpbiBjYXNlCisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
TlNTdHJpbmcgKnRleHQgPSBbdGV4dFZpZXcgc3RyaW5nXTsKICAgICBOU1JhbmdlIHNlbGVjdGVk
UmFuZ2UgPSBbdGV4dFZpZXcgc2VsZWN0ZWRSYW5nZV07CiAgICAgCkBAIC0zOTMsNjQgKzQ1Nyw2
OSBAQCBjb25zdCBmbG9hdCBMYXJnZU51bWJlckZvclRleHQgPSAxLjBlNzsKICAgICB9CiAgICAg
CiAgICAgaW50IHBhcmFncmFwaFNvRmFyID0gMDsKLSAgICBOU1JhbmdlIHNlYXJjaFJhbmdlID0g
TlNNYWtlUmFuZ2UoMCwgW3RleHQgbGVuZ3RoXSk7CisgICAgaW50IHBhcmFncmFwaFN0YXJ0ID0g
MDsKKyAgICAKKyAgICBOU1NjYW5uZXIgKnNjYW5uZXIgPSBbTlNTY2FubmVyIHNjYW5uZXJXaXRo
U3RyaW5nOnRleHRdOworICAgIFtzY2FubmVyIHNldENoYXJhY3RlcnNUb0JlU2tpcHBlZDpuaWxd
OworICAgIE5TQ2hhcmFjdGVyU2V0ICpuZXdsaW5lU2V0ID0gW05TQ2hhcmFjdGVyU2V0IGNoYXJh
Y3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJpbmc6QCJcclxuIl07CiAKICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAvLyBGSVhNRTogRG9lc24ndCB3b3JrIGZvciBDUi1zZXBhcmF0ZWQgb3Ig
Q1JMRi1zZXBhcmF0ZWQgdGV4dC4KLQlOU1JhbmdlIG5ld2xpbmVSYW5nZSA9IFt0ZXh0IHJhbmdl
T2ZTdHJpbmc6QCJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2Vd
OwotCWlmIChuZXdsaW5lUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCBzZWxlY3RlZFJh
bmdlLmxvY2F0aW9uIDw9IG5ld2xpbmVSYW5nZS5sb2NhdGlvbikgewotCSAgICBicmVhazsKLQl9
CisgICAgICAgIFtzY2FubmVyIHNjYW5VcFRvQ2hhcmFjdGVyc0Zyb21TZXQ6bmV3bGluZVNldCBp
bnRvU3RyaW5nOk5VTExdOwogICAgICAgICAKLQlwYXJhZ3JhcGhTb0ZhcisrOwotCi0gICAgICAg
IHVuc2lnbmVkIGFkdmFuY2UgPSBuZXdsaW5lUmFuZ2UubG9jYXRpb24gKyAxIC0gc2VhcmNoUmFu
Z2UubG9jYXRpb247Ci0KLQlzZWFyY2hSYW5nZS5sZW5ndGggLT0gYWR2YW5jZTsKLQlzZWFyY2hS
YW5nZS5sb2NhdGlvbiArPSBhZHZhbmNlOworICAgICAgICBpZiAoW3NjYW5uZXIgaXNBdEVuZF0g
fHwgc2VsZWN0ZWRSYW5nZS5sb2NhdGlvbiA8PSBbc2Nhbm5lciBzY2FuTG9jYXRpb25dKSB7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcGFyYWdyYXBo
U29GYXIrKzsKKyAgICAgICAgCisgICAgICAgIHVuaWNoYXIgYyA9IFt0ZXh0IGNoYXJhY3RlckF0
SW5kZXg6W3NjYW5uZXIgc2NhbkxvY2F0aW9uXV07CisgICAgICAgIFtzY2FubmVyIHNldFNjYW5M
b2NhdGlvbjpbc2Nhbm5lciBzY2FuTG9jYXRpb25dKzFdOyAvLyBza2lwIG92ZXIgdGhlIGZvdW5k
IGNoYXIKKyAgICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgW3NjYW5uZXIgc2Nh
blN0cmluZzpAIlxuIiBpbnRvU3RyaW5nOk5VTExdOyAvLyBnZXQgdGhlIGVudGlyZSBjcmxmIGlm
IGl0IGlzIG9uZQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwYXJhZ3JhcGhTdGFydCA9
IFtzY2FubmVyIHNjYW5Mb2NhdGlvbl07CiAgICAgfQogCiAgICAgKnBhcmFncmFwaCA9IHBhcmFn
cmFwaFNvRmFyOwotICAgICppbmRleCA9IHNlbGVjdGVkUmFuZ2UubG9jYXRpb24gLSBzZWFyY2hS
YW5nZS5sb2NhdGlvbjsKKyAgICAvLyBJdCBzaG91bGRuJ3QgaGFwcGVuLCBidXQgaXQgbWlnaHQg
YmUgcG9zc2libGUgZm9yIHRoZSBzZWxlY3Rpb24KKyAgICAvLyB0byBiZSBiZXR3ZWVuIHRoZSBj
ciBhbmQgbGYgaWYgdGhlcmUncyBhIGNybGYgc2VxdWVuY2UKKyAgICAvLyB0aGF0IHdvdWxkIHJl
c3VsdCBpbiBhIC0xIGluZGV4IHdoZW4gaXQgc2hvdWxkIGJlIDAuIExldHMgaGFuZGxlIHRoYXQK
KyAgICAqaW5kZXggPSBNQVgoc2VsZWN0ZWRSYW5nZS5sb2NhdGlvbiAtIHBhcmFncmFwaFN0YXJ0
LCAwKTsKIH0KIAogc3RhdGljIE5TUmFuZ2UgUmFuZ2VPZlBhcmFncmFwaChOU1N0cmluZyAqdGV4
dCwgaW50IHBhcmFncmFwaCkKIHsKICAgICBpbnQgcGFyYWdyYXBoU29GYXIgPSAwOwotICAgIE5T
UmFuZ2Ugc2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBbdGV4dCBsZW5ndGhdKTsKKyAgICBp
bnQgcGFyYWdyYXBoU3RhcnQgPSAwOworICAgIAorICAgIE5TU2Nhbm5lciAqc2Nhbm5lciA9IFtO
U1NjYW5uZXIgc2Nhbm5lcldpdGhTdHJpbmc6dGV4dF07CisgICAgW3NjYW5uZXIgc2V0Q2hhcmFj
dGVyc1RvQmVTa2lwcGVkOm5pbF07CisgICAgTlNDaGFyYWN0ZXJTZXQgKm5ld2xpbmVTZXQgPSBb
TlNDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0V2l0aENoYXJhY3RlcnNJblN0cmluZzpAIlxyXG4i
XTsKIAotICAgIE5TUmFuZ2UgbmV3bGluZVJhbmdlOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBEb2Vzbid0IHdvcmsgZm9yIENSLXNlcGFyYXRlZCBvciBDUkxGLXNlcGFy
YXRlZCB0ZXh0LgotCW5ld2xpbmVSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcbiIgb3B0
aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2VdOwotCWlmIChuZXdsaW5lUmFu
Z2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgewotCSAgICBicmVhazsKLQl9Ci0KLQlpZiAocGFy
YWdyYXBoU29GYXIgPT0gcGFyYWdyYXBoKSB7Ci0JICAgIGJyZWFrOwotCX0KLQotCXBhcmFncmFw
aFNvRmFyKys7Ci0KLSAgICAgICAgdW5zaWduZWQgYWR2YW5jZSA9IG5ld2xpbmVSYW5nZS5sb2Nh
dGlvbiArIDEgLSBzZWFyY2hSYW5nZS5sb2NhdGlvbjsKLQlpZiAoc2VhcmNoUmFuZ2UubGVuZ3Ro
IDw9IGFkdmFuY2UpIHsKLQkgICAgc2VhcmNoUmFuZ2UubG9jYXRpb24gPSBOU05vdEZvdW5kOwot
CSAgICBzZWFyY2hSYW5nZS5sZW5ndGggPSAwOwotCSAgICBicmVhazsKLQl9CisgICAgICAgIFtz
Y2FubmVyIHNjYW5VcFRvQ2hhcmFjdGVyc0Zyb21TZXQ6bmV3bGluZVNldCBpbnRvU3RyaW5nOk5V
TExdOworICAgICAgICAKKyAgICAgICAgaWYgKFtzY2FubmVyIGlzQXRFbmRdIHx8IHBhcmFncmFw
aFNvRmFyID09IHBhcmFncmFwaCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHBhcmFncmFwaFNvRmFyKys7CisgICAgICAgIAorICAgICAgICB1bmlj
aGFyIGMgPSBbdGV4dCBjaGFyYWN0ZXJBdEluZGV4OltzY2FubmVyIHNjYW5Mb2NhdGlvbl1dOwor
ICAgICAgICBbc2Nhbm5lciBzZXRTY2FuTG9jYXRpb246W3NjYW5uZXIgc2NhbkxvY2F0aW9uXSsx
XTsgLy8gc2tpcCBvdmVyIHRoZSBmb3VuZCBjaGFyCisgICAgICAgIGlmIChjID09ICdccicpIHsK
KyAgICAgICAgICAgIFtzY2FubmVyIHNjYW5TdHJpbmc6QCJcbiIgaW50b1N0cmluZzpOVUxMXTsg
Ly8gZ2V0IHRoZSBlbnRpcmUgY3JsZiBpZiBpdCBpcyBvbmUKKyAgICAgICAgfQogICAgICAgICAK
LQlzZWFyY2hSYW5nZS5sZW5ndGggLT0gYWR2YW5jZTsKLQlzZWFyY2hSYW5nZS5sb2NhdGlvbiAr
PSBhZHZhbmNlOworICAgICAgICBwYXJhZ3JhcGhTdGFydCA9IFtzY2FubmVyIHNjYW5Mb2NhdGlv
bl07CiAgICAgfQogCiAgICAgaWYgKHBhcmFncmFwaFNvRmFyIDwgcGFyYWdyYXBoKSB7CiAgICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICB9Ci0gICAgaWYgKHNl
YXJjaFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgfHwgbmV3bGluZVJhbmdlLmxvY2F0aW9u
ID09IE5TTm90Rm91bmQpIHsKLSAgICAgICAgcmV0dXJuIHNlYXJjaFJhbmdlOwogICAgIH0KLSAg
ICByZXR1cm4gTlNNYWtlUmFuZ2Uoc2VhcmNoUmFuZ2UubG9jYXRpb24sIG5ld2xpbmVSYW5nZS5s
b2NhdGlvbiAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uKTsKKyAgICAKKyAgICByZXR1cm4gTlNNYWtl
UmFuZ2UocGFyYWdyYXBoU3RhcnQsIFtzY2FubmVyIHNjYW5Mb2NhdGlvbl0pOwogfQogCiAtICh2
b2lkKXNldEN1cnNvclBvc2l0aW9uVG9JbmRleDooaW50KWluZGV4IGluUGFyYWdyYXBoOihpbnQp
cGFyYWdyYXBoCkBAIC00NTgsMTQgKzUyNywxNCBAQCBzdGF0aWMgTlNSYW5nZSBSYW5nZU9mUGFy
YWdyYXBoKE5TU3RyaW5nCiAgICAgTlNTdHJpbmcgKnRleHQgPSBbdGV4dFZpZXcgc3RyaW5nXTsK
ICAgICBOU1JhbmdlIHJhbmdlID0gUmFuZ2VPZlBhcmFncmFwaCh0ZXh0LCBwYXJhZ3JhcGgpOwog
ICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSB7Ci0JW3RleHRWaWV3IHNldFNl
bGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoW3RleHQgbGVuZ3RoXSwgMCldOworICAgICAgICBbdGV4
dFZpZXcgc2V0U2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZShbdGV4dCBsZW5ndGhdLCAwKV07CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICAgICAgaW5kZXgg
PSAwOwogICAgICAgICB9IGVsc2UgaWYgKCh1bnNpZ25lZClpbmRleCA+IHJhbmdlLmxlbmd0aCkg
ewogICAgICAgICAgICAgaW5kZXggPSByYW5nZS5sZW5ndGg7CiAgICAgICAgIH0KLQlbdGV4dFZp
ZXcgc2V0U2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZShyYW5nZS5sb2NhdGlvbiArIGluZGV4LCAw
KV07CisgICAgICAgIFt0ZXh0VmlldyBzZXRTZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKHJhbmdl
LmxvY2F0aW9uICsgaW5kZXgsIDApXTsKICAgICB9CiB9CiAKSW5kZXg6IGt3cS9LV1FUZXh0RWRp
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FUZXh0RWRp
dC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI0CmRpZmYgLXAgLXUgLXIxLjI0IGt3cS9LV1FU
ZXh0RWRpdC5oCi0tLSBrd3EvS1dRVGV4dEVkaXQuaAkyMDA1LzA2LzIwIDA1OjI0OjI3CTEuMjQK
KysrIGt3cS9LV1FUZXh0RWRpdC5oCTIwMDUvMDYvMjIgMDU6MTg6NDcKQEAgLTc0LDggKzc0LDE0
IEBAIGNsYXNzIFFUZXh0RWRpdCA6IHB1YmxpYyBRU2Nyb2xsVmlldwogICAgIHZvaWQgc2V0U2Ny
b2xsQmFyTW9kZXMoU2Nyb2xsQmFyTW9kZSBoTW9kZSwgU2Nyb2xsQmFyTW9kZSB2TW9kZSk7CiAK
ICAgICB2b2lkIHNldFdyaXRpbmdEaXJlY3Rpb24oUVBhaW50ZXI6OlRleHREaXJlY3Rpb24pOwor
CisgICAgbG9uZyBzZWxlY3Rpb25TdGFydCgpOworICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7Cisg
ICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVu
ZChsb25nKTsKICAgICAKICAgICB2b2lkIHNlbGVjdEFsbCgpOworICAgIHZvaWQgc2V0U2VsZWN0
aW9uUmFuZ2UobG9uZywgbG9uZyk7CiAKICAgICBRU2l6ZSBzaXplV2l0aENvbHVtbnNBbmRSb3dz
KGludCBudW1Db2x1bW5zLCBpbnQgbnVtUm93cykgY29uc3Q7CiAKSW5kZXg6IGt3cS9LV1FUZXh0
RWRpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4
dEVkaXQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDUKZGlmZiAtcCAtdSAtcjEuNDUga3dx
L0tXUVRleHRFZGl0Lm1tCi0tLSBrd3EvS1dRVGV4dEVkaXQubW0JMjAwNS8wNi8yMCAwNToyNDoy
NwkxLjQ1CisrKyBrd3EvS1dRVGV4dEVkaXQubW0JMjAwNS8wNi8yMiAwNToxODo0NwpAQCAtODIs
MTAgKzgyLDEwIEBAIHZvaWQgUVRleHRFZGl0OjpnZXRDdXJzb3JQb3NpdGlvbihpbnQgKnAKIHsK
ICAgICBLV1FUZXh0QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3KCk7CiAg
ICAgaWYgKGluZGV4KQotCSppbmRleCA9IDA7CisgICAgICAgICppbmRleCA9IDA7CiAgICAgaWYg
KHBhcmFncmFwaCkKLQkqcGFyYWdyYXBoID0gMDsKLQorICAgICAgICAqcGFyYWdyYXBoID0gMDsK
KyAgICAKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKICAgICBbdGV4dFZpZXcgZ2V0Q3Vyc29y
UG9zaXRpb25Bc0luZGV4OmluZGV4IGluUGFyYWdyYXBoOnBhcmFncmFwaF07CiAgICAgS1dRX1VO
QkxPQ0tfRVhDRVBUSU9OUzsKQEAgLTE4Niw2ICsxODYsOTkgQEAgdm9pZCBRVGV4dEVkaXQ6OnNl
dERpc2FibGVkKGJvb2wgZmxhZykKICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogfQogCits
b25nIFFUZXh0RWRpdDo6c2VsZWN0aW9uU3RhcnQoKQoreworICAgIEtXUVRleHRBcmVhICp0ZXh0
VmlldyA9IChLV1FUZXh0QXJlYSAqKWdldFZpZXcoKTsKKyAgICAKKyAgICBLV1FfQkxPQ0tfRVhD
RVBUSU9OUzsKKyAgICBOU1JhbmdlIHJhbmdlID0gW3RleHRWaWV3IHNlbGVjdGVkUmFuZ2VdOwor
ICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gcmFuZ2UubG9jYXRpb247CisgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsK
KyAgICAKKyAgICByZXR1cm4gMDsKK30KKworbG9uZyBRVGV4dEVkaXQ6OnNlbGVjdGlvbkVuZCgp
Cit7CisgICAgS1dRVGV4dEFyZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0Vmlldygp
OworICAgIAorICAgIEtXUV9CTE9DS19FWENFUFRJT05TOworICAgIE5TUmFuZ2UgcmFuZ2UgPSBb
dGV4dFZpZXcgc2VsZWN0ZWRSYW5nZV07CisgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90
Rm91bmQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBOU01heFJhbmdlKHJhbmdlKTsK
KyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiAwOworfQorCit2
b2lkIFFUZXh0RWRpdDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKyAgICBLV1FU
ZXh0QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3KCk7CisgICAgCisgICAg
S1dRX0JMT0NLX0VYQ0VQVElPTlM7CisgICAgTlNSYW5nZSByYW5nZSA9IFt0ZXh0VmlldyBzZWxl
Y3RlZFJhbmdlXTsKKyAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgeworICAg
ICAgICByYW5nZS5sb2NhdGlvbiA9IDA7CisgICAgICAgIHJhbmdlLmxlbmd0aCA9IDA7CisgICAg
fQorICAgIAorICAgIC8vIGNvZXJjZSBzdGFydCB0byBhIHZhbGlkIHZhbHVlCisgICAgbG9uZyBt
YXhMZW5ndGggPSBbW3RleHRWaWV3IHRleHRdIGxlbmd0aF07CisgICAgbG9uZyBuZXdTdGFydCA9
IHN0YXJ0OworICAgIGlmIChuZXdTdGFydCA8IDApCisgICAgICAgIG5ld1N0YXJ0ID0gMDsKKyAg
ICBpZiAobmV3U3RhcnQgPiBtYXhMZW5ndGgpCisgICAgICAgIG5ld1N0YXJ0ID0gbWF4TGVuZ3Ro
OworICAgIAorICAgIGlmICgodW5zaWduZWQpbmV3U3RhcnQgPCByYW5nZS5sb2NhdGlvbiArIHJh
bmdlLmxlbmd0aCkgeworICAgICAgICAvLyBJZiB3ZSdyZSBleHBhbmRpbmcgb3IgY29udHJhY3Rp
bmcsIGJ1dCBub3QgY29sbGFwc2luZyB0aGUgc2VsZWN0aW9uCisgICAgICAgIHJhbmdlLmxlbmd0
aCArPSByYW5nZS5sb2NhdGlvbiAtIG5ld1N0YXJ0OworICAgICAgICByYW5nZS5sb2NhdGlvbiA9
IG5ld1N0YXJ0OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIG9rLCB3ZSdyZSBjb2xsYXBzaW5n
IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgcmFuZ2UubG9jYXRpb24gPSBuZXdTdGFydDsKKyAgICAg
ICAgcmFuZ2UubGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgW3RleHRWaWV3IHNldFNlbGVj
dGVkUmFuZ2U6cmFuZ2VdOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQg
UVRleHRFZGl0OjpzZXRTZWxlY3Rpb25FbmQobG9uZyBlbmQpCit7CisgICAgS1dRVGV4dEFyZWEg
KnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOworICAgIAorICAgIEtXUV9CTE9D
S19FWENFUFRJT05TOworICAgIE5TUmFuZ2UgcmFuZ2UgPSBbdGV4dFZpZXcgc2VsZWN0ZWRSYW5n
ZV07CisgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICAgICAgcmFu
Z2UubG9jYXRpb24gPSAwOworICAgICAgICByYW5nZS5sZW5ndGggPSAwOworICAgIH0KKyAgICAK
KyAgICAvLyBjb2VyY2UgZW5kIHRvIGEgdmFsaWQgdmFsdWUKKyAgICBsb25nIG1heExlbmd0aCA9
IFtbdGV4dFZpZXcgdGV4dF0gbGVuZ3RoXTsKKyAgICBsb25nIG5ld0VuZCA9IGVuZDsKKyAgICBp
ZiAobmV3RW5kIDwgMCkKKyAgICAgICAgbmV3RW5kID0gMDsKKyAgICBpZiAobmV3RW5kID4gbWF4
TGVuZ3RoKQorICAgICAgICBuZXdFbmQgPSBtYXhMZW5ndGg7CisgICAgCisgICAgaWYgKCh1bnNp
Z25lZCluZXdFbmQgPj0gcmFuZ2UubG9jYXRpb24pIHsKKyAgICAgICAgLy8gSWYgd2UncmUganVz
dCBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIGxlbmd0aCwgYnV0IG5vdCBsb2NhdGlvbi4uCisgICAg
ICAgIHJhbmdlLmxlbmd0aCA9IG5ld0VuZCAtIHJhbmdlLmxvY2F0aW9uOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIG9rLCB3ZSd2ZSBjb2xsYXBzZWQgdGhlIHNlbGVjdGlvbiBhbmQgYXJlIG1v
dmluZyBpdAorICAgICAgICByYW5nZS5sb2NhdGlvbiA9IG5ld0VuZDsKKyAgICAgICAgcmFuZ2Uu
bGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgW3RleHRWaWV3IHNldFNlbGVjdGVkUmFuZ2U6
cmFuZ2VdOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Cit9CisKIGJvb2wgUVRleHRFZGl0
OjpoYXNTZWxlY3RlZFRleHQoKSBjb25zdAogewogICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9
IChLV1FUZXh0QXJlYSAqKWdldFZpZXcoKTsKQEAgLTIwMyw2ICsyOTYsMzIgQEAgdm9pZCBRVGV4
dEVkaXQ6OnNlbGVjdEFsbCgpCiAKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKICAgICBbdGV4
dFZpZXcgc2VsZWN0QWxsXTsKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworfQorCit2b2lk
IFFUZXh0RWRpdDo6c2V0U2VsZWN0aW9uUmFuZ2UobG9uZyBzdGFydCwgbG9uZyBsZW5ndGgpCit7
CisgICAgS1dRVGV4dEFyZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOwor
CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CisgICAgbG9uZyBuZXdTdGFydCA9IHN0YXJ0Owor
ICAgIGxvbmcgbmV3TGVuZ3RoID0gbGVuZ3RoOworICAgIGlmIChuZXdTdGFydCA8IDApIHsKKyAg
ICAgICAgLy8gdHJ1bmNhdGUgdGhlIGxlbmd0aCBieSB0aGUgbmVnYXRpdmUgc3RhcnQKKyAgICAg
ICAgbmV3TGVuZ3RoID0gbGVuZ3RoICsgbmV3U3RhcnQ7CisgICAgICAgIG5ld1N0YXJ0ID0gMDsK
KyAgICB9CisgICAgaWYgKG5ld0xlbmd0aCA8IDApIHsKKyAgICAgICAgbmV3TGVuZ3RoID0gMDsK
KyAgICB9CisgICAgaW50IG1heGxlbiA9IFtbdGV4dFZpZXcgdGV4dF0gbGVuZ3RoXTsKKyAgICBp
ZiAobmV3U3RhcnQgPiBtYXhsZW4pIHsKKyAgICAgICAgbmV3U3RhcnQgPSBtYXhsZW47CisgICAg
fQorICAgIGlmIChuZXdTdGFydCArIG5ld0xlbmd0aCA+IG1heGxlbikgeworICAgICAgICBuZXdM
ZW5ndGggPSBtYXhsZW4gLSBuZXdTdGFydDsKKyAgICB9CisgICAgW3RleHRWaWV3IHNldFNlbGVj
dGVkUmFuZ2U6TlNNYWtlUmFuZ2UobmV3U3RhcnQsIG5ld0xlbmd0aCldOwogICAgIEtXUV9VTkJM
T0NLX0VYQ0VQVElPTlM7CiB9CiAKSW5kZXg6IGt3cS9LV1FUZXh0RmllbGQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEZpZWxkLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEga3dxL0tXUVRleHRGaWVsZC5oCi0t
LSBrd3EvS1dRVGV4dEZpZWxkLmgJMjAwNS8wNi8yMCAwNToyNDoyNwkxLjIxCisrKyBrd3EvS1dR
VGV4dEZpZWxkLmgJMjAwNS8wNi8yMiAwNToxODo0NwpAQCAtNTYsNiArNTYsOSBAQCBjbGFzcyBR
TGluZUVkaXQ7CiAtICh2b2lkKXNldEJhc2VXcml0aW5nRGlyZWN0aW9uOihOU1dyaXRpbmdEaXJl
Y3Rpb24pZGlyZWN0aW9uOwogLSAoTlNXcml0aW5nRGlyZWN0aW9uKWJhc2VXcml0aW5nRGlyZWN0
aW9uOwogCistIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2U7CistICh2b2lkKXNldFNlbGVjdGVkUmFu
Z2U6KE5TUmFuZ2UpcmFuZ2U7CisKIC0gKE5TU3RyaW5nICopc3RyaW5nOwogCiBAZW5kCkluZGV4
OiBrd3EvS1dRVGV4dEZpZWxkLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9LV1FUZXh0RmllbGQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzgKZGlmZiAt
cCAtdSAtcjEuNzgga3dxL0tXUVRleHRGaWVsZC5tbQotLS0ga3dxL0tXUVRleHRGaWVsZC5tbQky
MDA1LzA2LzIwIDA1OjI0OjI3CTEuNzgKKysrIGt3cS9LV1FUZXh0RmllbGQubW0JMjAwNS8wNi8y
MiAwNToxODo0NwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAtIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2UK
IHsKICAgICBOU1RleHQgKmVkaXRvciA9IFtmaWVsZCBfS1dRX2N1cnJlbnRFZGl0b3JdOwotICAg
IHJldHVybiBlZGl0b3IgPyBbZWRpdG9yIHNlbGVjdGVkUmFuZ2VdIDogTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7CisgICAgcmV0dXJuIGVkaXRvciA/IFtlZGl0b3Igc2VsZWN0ZWRSYW5nZV0g
OiBsYXN0U2VsZWN0ZWRSYW5nZTsKIH0KIAogLSAodm9pZClzZXRTZWxlY3RlZFJhbmdlOihOU1Jh
bmdlKXJhbmdlCkBAIC0zNjUsOSArMzY1LDMwIEBACiAgICAgLy8gUmFuZ2UgY2hlY2sganVzdCBp
biBjYXNlIHRoZSBzYXZlZCByYW5nZSBoYXMgZ290dGVuIG91dCBvZiBzeW5jLgogICAgIC8vIEV2
ZW4gdGhvdWdoIHdlIGRvbid0IHNlZSB0aGlzIGluIHRlc3RpbmcsIHdlIHJlYWxseSBkb24ndCB3
YW50CiAgICAgLy8gYW4gZXhjZXB0aW9uIGluIHRoaXMgY2FzZSwgc28gd2UgcHJvdGVjdCBvdXJz
ZWx2ZXMuCi0gICAgTlNUZXh0ICplZGl0b3IgPSBbZmllbGQgX0tXUV9jdXJyZW50RWRpdG9yXTsg
ICAgCi0gICAgaWYgKE5TTWF4UmFuZ2UocmFuZ2UpIDw9IFtbZWRpdG9yIHN0cmluZ10gbGVuZ3Ro
XSkgeworICAgIE5TVGV4dCAqZWRpdG9yID0gW2ZpZWxkIF9LV1FfY3VycmVudEVkaXRvcl07Cisg
ICAgaWYgKGVkaXRvcikgeyAvLyBpZiB3ZSBoYXZlIG5vIGZvY3VzLCB3ZSBkb24ndCBoYXZlIGEg
Y3VycmVudCBlZGl0b3IKKyAgICAgICAgdW5zaWduZWQgaW50IGxlbiA9IFtbZWRpdG9yIHN0cmlu
Z10gbGVuZ3RoXTsKKyAgICAgICAgaWYgKE5TTWF4UmFuZ2UocmFuZ2UpID4gbGVuKSB7CisgICAg
ICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24gPiBsZW4pIHsKKyAgICAgICAgICAgICAgICByYW5n
ZS5sb2NhdGlvbiA9IGxlbjsKKyAgICAgICAgICAgICAgICByYW5nZS5sZW5ndGggPSAwOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByYW5nZS5sZW5ndGggPSBsZW4gLSBy
YW5nZS5sb2NhdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBbZWRpdG9y
IHNldFNlbGVjdGVkUmFuZ2U6cmFuZ2VdOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHNldCB0
aGUgbGFzdFNhdmVkUmFuZ2UsIHNvIGl0IHdpbGwgYmUgdXNlZCB3aGVuIGdpdmVuIGZvY3VzCisg
ICAgICAgIHVuc2lnbmVkIGludCBsZW4gPSBbW2ZpZWxkIHN0cmluZ1ZhbHVlXSBsZW5ndGhdOwor
ICAgICAgICBpZiAoTlNNYXhSYW5nZShyYW5nZSkgPiBsZW4pIHsKKyAgICAgICAgICAgIGlmIChy
YW5nZS5sb2NhdGlvbiA+IGxlbikgeworICAgICAgICAgICAgICAgIHJhbmdlLmxvY2F0aW9uID0g
bGVuOworICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCA9IGxlbiAtIHJhbmdlLmxvY2F0aW9u
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxhc3RTZWxlY3RlZFJhbmdlID0g
cmFuZ2U7CiAgICAgfQogfQogCg==
</data>
<flag name="review"
          id="68"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>2540</attachid>
            <date>2005-06-21 22:24:03 -0700</date>
            <delta_ts>2005-06-22 12:51:28 -0700</delta_ts>
            <desc>testcases</desc>
            <filename>new_tests.zip</filename>
            <type>application/zip</type>
            <size>2610</size>
            <attacher name="Kevin Ballard">kevin</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>2549</attachid>
            <date>2005-06-22 12:51:28 -0700</date>
            <delta_ts>2005-06-22 12:51:56 -0700</delta_ts>
            <desc>Slightly modified testcases</desc>
            <filename>testcases.zip</filename>
            <type>application/zip</type>
            <size>2665</size>
            <attacher name="Kevin Ballard">kevin</attacher>
            
              <data encoding="base64">UEsDBBQACAAIAE9x1TIAAAAAAAAAAAAAAAARABAAY3JsZi1leHBlY3RlZC50eHRVWAwAy8C5QhZY
uEL1AfUBXY5BDoMwDATvecWKc8s/euuBDxiyNFFDgnBQy+9rQD20p5XtnZG7EBWVWiG1cpqrTQXK
ilzyVatkL4tHiplg9jE/FDFDjHkbs1BgFVh6IwMn9DI8W3SBv5CGsiYPSQlDmXjUIHqURtJr69xt
3BXnO7OoUi/YyvpllXYLC0+zKWUzNZr7XvUNeqbyMo07F3/hPlBLBwh3ZRgqkQAAAOsAAABQSwME
FAAIAAgAOHHVMgAAAAAAAAAAAAAAAAkAEABjcmxmLmh0bWxVWAwAy8C5QuxXuEL1AfUBlVXBjtow
EL3vV4xyChJNPmBDpO2qlfZS9cAxlyEeiFvHtmwHNqr499oOZAkbCrUUGYd5782MZyZF41pRPoFf
RUPIhp/xaGvDtQPXa1oljt5d/gv3OLxNPuzC2naydlxJ0IZLl7ZkLe5oMbH5MzmFtUcDGg3uDOoG
VsBU3bUkXVYbQkffBIVTmgieLJ4/oUdkhlqTZK8NFyy94lh7t38oRqNLM0QjZEfupPm1f2NpUitp
laBkMVEYda+ojvMZcWRdei8TfAvpgUumDpnAXnVu7VGvSjqjhCCzmIGENWebsa7VLzYEns4Ee5y9
BRLuMv/XiQiXP3cFHpbtUXTkwcm64bYy4cHKhKiTz4BatT59lI7A5Qknw4OVjLh7Si+SVaaSDRkK
e5AckHE/qAeFA81AEtUjQYQ/oi8FWif65YhrDNH/CM/i7yknD5XcWdPDlkDv+pHq87awWkXrG8U2
tHbyE60lNufp0ftq6d/o78jFDfSNyIp8mDinGZV/DKlio1gPSgqFLAyo0GfPF4Op0GWordiBgM5R
q50/KbDkQCr5xTqUDA0DwSWBb3Audxa4BIRQ8eBziOBNwO/MIxtqYYP17wzWDU1BtlGdYIBChOxT
NAO00WhLxGxW5Hri2ts2EA7O6ZBTuwTfzWcmS/6/UBORwgtg74XgnH7YkPDDYkraGMgvjltl2umY
LkJYMSrOhpGelEV+fnkBzafYa2ZdFkpEjvOI9DRKlKM7RR7upnzy1xU/L38BUEsHCGOOf4g0AgAA
ZgYAAFBLAwQUAAgACABPfdYyAAAAAAAAAAAAAAAAGwAQAHRleHQtc2VsZWN0aW9uLWV4cGVjdGVk
LnR4dFVYDADLwLlCJr+5QvUB9QHNUMtqwzAQvO9X7K0tOCYkNg4Bn0oPvTb5AVle2yJCMno06d93
pThJC/2A6iBWszM7oz1OymMgH1BOJE8e1YCewoE0yaCs+RBmpOeXgsEFOQThQoHC9A/sjR/WoOBJ
F26TyG1l5hjwbN0JhUe6zEymvsRj8lRG6tiTv/oqMyL1I6EUnjEf5ZQ0NoaVHVadjTzuU+hIvgR4
HzDcY8/Ce+rxy8YnrTkRcYouGtbbAaV1jk0fQdGl/3jsSNtzia/Jm4fRPR0OShMO1mX0pr+q2Br5
QNu2t39yCX+saw/bAhtYF1hDtSmw2kGdavi9xUyroVm4DVS7zN3mG36ud6HyrE2irtPFnCxNgfKu
/0ca+AZQSwcIXszTLQ4BAABUAgAAUEsDBBQACAAIAE191jIAAAAAAAAAAAAAAAATABAAdGV4dC1z
ZWxlY3Rpb24uaHRtbFVYDADLwLlCIb+5QvUB9QG9WFFv2zYQfu+vuOklMuZIWJqgQysZWIMM6IDt
YckfoKWTpYYmBZKKY6z97zuKliNLlJM0RgUDlijyu/vujnc8JaVZ88U7oCspkeXutn3UmapqA2Zb
YxoYfDTxV/bA3GjwNM9eRSMyU0kBtaqECdeoNVvh7GDOfwdP9npgCmqm2EqxuoQUcpk1axQmyhQy
gzcc7VMY8CqYfRqtrgroBEGaQhDMPCLstRcRsbpGkV+XFc/DKWFLFcw80r4Dco1vkXBHFvxH5ri3
jk/KaGQPskKz0/Hz9kseBpkUWnIMZgcy95oMwL/73WVQm/A5N1lDbyqRy03E2VY25o5WXUthlOQc
1ZTZfXOjvFnXf2hrivBF9G2IIDf94BgawkamLz5cKAZpmtoZjHxAt76J1gg33IQkx/N2NPCMOpWo
m2P6HFe1XX0aPY/Ii+MWDIyENbtH0I1CMCXdIEcXGdo0RUEsUYszA7qUG2hqH9CmRAGVQcVMJVYg
H1ABg2VjjBRnmrSQNSpToX6tIR2ET/1CKgjvcQuVsCBTAWjj1s6yyWFP7JYiwQTw7RuMXt2IfPDC
3Hbv/mVihZMZpmfuP1nFMd/x7+zip2GvccSPR3xW/3vvtkNmwEQOfUZAgQ+NyLGoBOll9zz52ann
3elk0GiA+Uv6hDCZZB39zy3wEGC31meEMd2REpbFz1PhSKbsNt8z+ZLc099VjLbPMJKg0p1GR/gP
F6UvN4ILw48g5Fj4VCwqNI0SL3GRVe+B8YZUguCuJDL0Yy6ntOMR/NXQfVFxbpMC7VMt12QMSsRR
4M9HFJUOkqAuf4espEqW0fbRwKVYTWW3Eblw9tHHz2vQ8P38g2duXumaitdEnvUjnV/Mr04EdUlQ
lyfCuppfvBrpBwrX4V474oCDLZnC+x9jOUD5cBKU899OAnN1eRKYV1vmLV6jBPu8z2wWJnpvYucw
Lk6A8UZv7cicxlee+PMIe3WUHs+6gyw6UbX6El7QjFHC7UiNmY413C1x/IaU/dPNowXv5ERG3hoK
xlU4g18hmENAfw6x92oqgAlrsstJYten7jrb+Km1TZYy39I5iEuW27bWNkCfeu1sUi/aitYWs6zE
7F7bkuwpNPPB2Ws+PnyRCxh07Uf7uj3gw0aqe2Aa8LGmyZhH4KqoyHiTo3ZybeXEnOp+xjSN6SYr
7Rpqqs5lcb6UdBZwJVNHSVwfMPhSUEHtSNRMazr6UTd2xjnph+35XBCaLCCTSpEKvZO/suw0LJFT
wwfXVpO2One62qqO7Rncjnbr3aqBIqWCuPdIa9aH3w2SvW2q3H1jCBZJ3A0O5jrTPX2OCNpFrt/q
yxlN3nUS7fTuvq9XfKjYUO16kUjeLu56btJR8sWeaxLbmFq8ozCzH1P+B1BLBwiVVd1tEAQAAFMR
AABQSwECFQMUAAgACABPcdUyd2UYKpEAAADrAAAAEQAMAAAAAAAAAABApIEAAAAAY3JsZi1leHBl
Y3RlZC50eHRVWAgAy8C5QhZYuEJQSwECFQMUAAgACAA4cdUyY45/iDQCAABmBgAACQAMAAAAAAAA
AABApIHgAAAAY3JsZi5odG1sVVgIAMvAuULsV7hCUEsBAhUDFAAIAAgAT33WMl7M0y0OAQAAVAIA
ABsADAAAAAAAAAAAQKSBWwMAAHRleHQtc2VsZWN0aW9uLWV4cGVjdGVkLnR4dFVYCADLwLlCJr+5
QlBLAQIVAxQACAAIAE191jKVVd1tEAQAAFMRAAATAAwAAAAAAAAAAECkgcIEAAB0ZXh0LXNlbGVj
dGlvbi5odG1sVVgIAMvAuUIhv7lCUEsFBgAAAAAEAAQAMAEAACMJAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2553</attachid>
            <date>2005-06-22 15:11:43 -0700</date>
            <delta_ts>2005-06-22 19:57:07 -0700</delta_ts>
            <desc>Yet another patch</desc>
            <filename>SelectionPatch.txt</filename>
            <type>text/plain</type>
            <size>37967</size>
            <attacher name="Kevin Ballard">kevin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDMwNApkaWZmIC1wIC11IC1yMS40MzA0
IENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTIwMDUvMDYvMjIgMjE6MDU6NTYJMS40MzA0CisrKyBD
aGFuZ2VMb2cJMjAwNS8wNi8yMiAyMjowODo1OApAQCAtMSwzICsxLDg2IEBACisyMDA1LTA2LTIy
ICBLZXZpbiBCYWxsYXJkICA8a2V2aW5Ac2Iub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgY2FzZXMgYWRkZWQ6CisgICAgICAgICogY3Js
Zi5odG1sCisgICAgICAgICogdGV4dC1zZWxlY3Rpb24uaHRtbAorICAgICAgICBCb3RoIG9mIHRo
ZXNlIGFyZSBhdHRhY2hlZCB0byB0aGUgYnVnIHNlcGFyYXRlbHkgZnJvbSB0aGUgcGF0Y2gsCisg
ICAgICAgIGJlY2F1c2UgSSBjYW4ndCBjdnMgYWRkLgorICAgICAgICBSZXZpZXdlcjogZmVlbCBm
cmVlIHRvIHJlbW92ZSB0aGlzIGNvbW1lbnQgYW5kIHR3ZWFrIHRoZSB0ZXN0IGNhc2VzIGFkZGVk
CisgICAgICAgIGxpbmVzIHRvIHJlZmxlY3Qgd2hlcmV2ZXIgeW91IHBsYWNlIHRoZXNlIGNhc2Vz
IGluIHRoZSBoaWVyYXJjaHkKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAtIEZpeGVzIGJ1
ZyA8aHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDAxPi4K
KyAgICAgICAgICBBbHNvIGZpeGVzIGlzc3VlIHdoZXJlIHNldHRpbmcgdGV4dCBvZiBhIHRleHRh
cmVhIGluIGNvZGUgYW5kIHRoZW4KKyAgICAgICAgICByZXRyaWV2aW5nIGl0IHdvdWxkIGxlYXZl
IHRoZSBcclxuIHNlcXVlbmNlcyBpbiB0aGUgdGV4dCwgZGVzcGl0ZQorICAgICAgICAgIHRoZSB0
ZXh0YXJlYSB0cmFuc2xhdGluZyB0byBcbiBpbiBhbGwgb3RoZXIgY2FzZXMuCisKKyAgICAgICAg
KiBraHRtbC9lY21hL2tqc19odG1sLmNwcDoKKyAgICAgICAgKEtKUzo6Z2V0SW5wdXRTZWxlY3Rp
b25TdGFydCk6CisgICAgICAgIChLSlM6OmdldElucHV0U2VsZWN0aW9uRW5kKToKKyAgICAgICAg
KEtKUzo6S0pTOjpIVE1MRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6
OktKUzo6SFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKEtKUzo6S0pTOjpIVE1M
RWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsKToKKyAgICAgICAgKEtKUzo6SFRNTEVsZW1lbnQ6OnB1
dFZhbHVlKToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19odG1sLmg6CisgICAgICAgIChLSlM6
OkhUTUxFbGVtZW50OjopOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHA6
CisgICAgICAgIChET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsOjpjYW5IYXZlU2VsZWN0aW9uKToK
KyAgICAgICAgKERPTTo6SFRNTElucHV0RWxlbWVudEltcGw6OnNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKERPTTo6SFRNTElucHV0RWxlbWVudEltcGw6OnNlbGVjdGlvbkVuZCk6CisgICAgICAg
IChET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25TdGFydCk6CisgICAgICAg
IChET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25FbmQpOgorICAgICAgICAo
RE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uUmFuZ2UpOgorICAgICAgICAo
RE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0VmFsdWUpOgorICAgICAgICAoRE9NOjpIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NOjpIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKERPTTo6SFRNTFRl
eHRBcmVhRWxlbWVudEltcGw6OnNldFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKERPTTo6SFRN
TFRleHRBcmVhRWxlbWVudEltcGw6OnNldFNlbGVjdGlvbkVuZCk6CisgICAgICAgIChET006OkhU
TUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgIChET006
OkhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRWYWx1ZSk6CisgICAgICAgICoga2h0bWwvaHRt
bC9odG1sX2Zvcm1pbXBsLmg6CisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3Jt
LmNwcDoKKyAgICAgICAgKFJlbmRlckxpbmVFZGl0OjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAg
IChSZW5kZXJMaW5lRWRpdDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFJlbmRlckxpbmVFZGl0
OjpzZXRTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChSZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0
aW9uRW5kKToKKyAgICAgICAgKFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25SYW5nZSk6Cisg
ICAgICAgIChSZW5kZXJUZXh0QXJlYTo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoUmVuZGVy
VGV4dEFyZWE6OnNlbGVjdGlvbkVuZCk6CisgICAgICAgIChSZW5kZXJUZXh0QXJlYTo6c2V0U2Vs
ZWN0aW9uU3RhcnQpOgorICAgICAgICAoUmVuZGVyVGV4dEFyZWE6OnNldFNlbGVjdGlvbkVuZCk6
CisgICAgICAgIChSZW5kZXJUZXh0QXJlYTo6c2VsZWN0KToKKyAgICAgICAgKFJlbmRlclRleHRB
cmVhOjpzZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9mb3JtLmg6CisgICAgICAgICoga3dxL0tXUUxpbmVFZGl0Lmg6CisgICAgICAgICoga3dxL0tX
UUxpbmVFZGl0Lm1tOgorICAgICAgICAoUUxpbmVFZGl0OjpzZXRDdXJzb3JQb3NpdGlvbik6Cisg
ICAgICAgIChRTGluZUVkaXQ6OmN1cnNvclBvc2l0aW9uKToKKyAgICAgICAgKFFMaW5lRWRpdDo6
c2VsZWN0QWxsKToKKyAgICAgICAgKFFMaW5lRWRpdDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAg
ICAoUUxpbmVFZGl0OjpzZWxlY3RlZFRleHQpOgorICAgICAgICAoUUxpbmVFZGl0OjpzZXRTZWxl
Y3Rpb24pOgorICAgICAgICAqIGt3cS9LV1FUZXh0QXJlYS5oOgorICAgICAgICAqIGt3cS9LV1FU
ZXh0QXJlYS5tbToKKyAgICAgICAgKC1bS1dRVGV4dEFyZWEgc2V0U2VsZWN0ZWRSYW5nZTpdKToK
KyAgICAgICAgKC1bS1dRVGV4dEFyZWEgc2VsZWN0ZWRSYW5nZV0pOgorICAgICAgICAoLVtLV1FU
ZXh0QXJlYSBnZXRDdXJzb3JQb3NpdGlvbkFzSW5kZXg6aW5QYXJhZ3JhcGg6XSk6CisgICAgICAg
IChSYW5nZU9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBrd3EvS1dRVGV4dEVkaXQuaDoKKyAgICAg
ICAgKiBrd3EvS1dRVGV4dEVkaXQubW06CisgICAgICAgIChRVGV4dEVkaXQ6OmdldEN1cnNvclBv
c2l0aW9uKToKKyAgICAgICAgKFFUZXh0RWRpdDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAo
UVRleHRFZGl0OjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAoUVRleHRFZGl0OjpzZXRTZWxlY3Rp
b25TdGFydCk6CisgICAgICAgIChRVGV4dEVkaXQ6OnNldFNlbGVjdGlvbkVuZCk6CisgICAgICAg
IChRVGV4dEVkaXQ6OnNlbGVjdEFsbCk6CisgICAgICAgIChRVGV4dEVkaXQ6OnNldFNlbGVjdGlv
blJhbmdlKToKKyAgICAgICAgKiBrd3EvS1dRVGV4dEZpZWxkLmg6CisgICAgICAgICoga3dxL0tX
UVRleHRGaWVsZC5tbToKKyAgICAgICAgKC1bS1dRVGV4dEZpZWxkQ29udHJvbGxlciBzZWxlY3Rl
ZFJhbmdlXSk6CisgICAgICAgICgtW0tXUVRleHRGaWVsZENvbnRyb2xsZXIgc2V0U2VsZWN0ZWRS
YW5nZTpdKToKKwogMjAwNS0wNi0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVmlja2kuCkluZGV4OiAuL2todG1sL2VjbWEva2pzX2h0bWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pz
X2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExOApkaWZmIC1wIC11IC1yMS4xMTgg
Li9raHRtbC9lY21hL2tqc19odG1sLmNwcAotLS0gLi9raHRtbC9lY21hL2tqc19odG1sLmNwcAky
MDA1LzA2LzIyIDAwOjQ4OjQ0CTEuMTE4CisrKyAuL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCTIw
MDUvMDYvMjIgMjI6MDk6MTgKQEAgLTgzOCw2ICs4MzgsOCBAQCBjb25zdCBDbGFzc0luZm8qIEtK
Uzo6SFRNTEVsZW1lbnQ6OmNsYXNzCiAgIG1heExlbmd0aAlLSlM6OkhUTUxFbGVtZW50OjpJbnB1
dE1heExlbmd0aAlEb250RGVsZXRlCiAgIG5hbWUJCUtKUzo6SFRNTEVsZW1lbnQ6OklucHV0TmFt
ZQkJRG9udERlbGV0ZQogICByZWFkT25seQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFJlYWRPbmx5
CQlEb250RGVsZXRlCisgIHNlbGVjdGlvblN0YXJ0CUtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2Vs
ZWN0aW9uU3RhcnQJRG9udERlbGV0ZQorICBzZWxlY3Rpb25FbmQJS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRTZWxlY3Rpb25FbmQJRG9udERlbGV0ZQogICBzaXplCQlLSlM6OkhUTUxFbGVtZW50OjpJ
bnB1dFNpemUJCURvbnREZWxldGUKICAgc3JjCQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNyYwkJ
RG9udERlbGV0ZQogICB0YWJJbmRleAlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFRhYkluZGV4CQlE
b250RGVsZXRlCkBAIC04NDgsOCArODUwLDkgQEAgY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxF
bGVtZW50OjpjbGFzcwogICBmb2N1cwkJS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1cwkJRG9u
dERlbGV0ZXxGdW5jdGlvbiAwCiAgIHNlbGVjdAlLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVj
dAkJRG9udERlbGV0ZXxGdW5jdGlvbiAwCiAgIGNsaWNrCQlLSlM6OkhUTUxFbGVtZW50OjpJbnB1
dENsaWNrCQlEb250RGVsZXRlfEZ1bmN0aW9uIDAKKyAgc2V0U2VsZWN0aW9uUmFuZ2UJS0pTOjpI
VE1MRWxlbWVudDo6SW5wdXRTZXRTZWxlY3Rpb25SYW5nZQlEb250RGVsZXRlfEZ1bmN0aW9uIDIK
IEBlbmQKLUBiZWdpbiBIVE1MVGV4dEFyZWFFbGVtZW50VGFibGUgMTMKK0BiZWdpbiBIVE1MVGV4
dEFyZWFFbGVtZW50VGFibGUgMTcKICAgZGVmYXVsdFZhbHVlCUtKUzo6SFRNTEVsZW1lbnQ6OlRl
eHRBcmVhRGVmYXVsdFZhbHVlCURvbnREZWxldGUKICAgZm9ybQkJS0pTOjpIVE1MRWxlbWVudDo6
VGV4dEFyZWFGb3JtCQlEb250RGVsZXRlfFJlYWRPbmx5CiAgIGFjY2Vzc0tleQlLSlM6OkhUTUxF
bGVtZW50OjpUZXh0QXJlYUFjY2Vzc0tleQlEb250RGVsZXRlCkBAIC04NTgsMTIgKzg2MSwxNSBA
QCBjb25zdCBDbGFzc0luZm8qIEtKUzo6SFRNTEVsZW1lbnQ6OmNsYXNzCiAgIG5hbWUJCUtKUzo6
SFRNTEVsZW1lbnQ6OlRleHRBcmVhTmFtZQkJRG9udERlbGV0ZQogICByZWFkT25seQlLSlM6OkhU
TUxFbGVtZW50OjpUZXh0QXJlYVJlYWRPbmx5CURvbnREZWxldGUKICAgcm93cwkJS0pTOjpIVE1M
RWxlbWVudDo6VGV4dEFyZWFSb3dzCQlEb250RGVsZXRlCisgIHNlbGVjdGlvblN0YXJ0CUtKUzo6
SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0aW9uU3RhcnQJRG9udERlbGV0ZQorICBzZWxlY3Rp
b25FbmQJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3Rpb25FbmQJRG9udERlbGV0ZQog
ICB0YWJJbmRleAlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVRhYkluZGV4CURvbnREZWxldGUK
ICAgdHlwZQkJS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFUeXBlCQlEb250RGVsZXRlfFJlYWRP
bmx5CiAgIHZhbHVlCQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVZhbHVlCQlEb250RGVsZXRl
CiAgIGJsdXIJCUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cgkJRG9udERlbGV0ZXxGdW5j
dGlvbiAwCiAgIGZvY3VzCQlLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzCQlEb250RGVs
ZXRlfEZ1bmN0aW9uIDAKICAgc2VsZWN0CUtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0
CURvbnREZWxldGV8RnVuY3Rpb24gMAorICBzZXRTZWxlY3Rpb25SYW5nZQlLSlM6OkhUTUxFbGVt
ZW50OjpUZXh0QXJlYVNldFNlbGVjdGlvblJhbmdlCURvbnREZWxldGV8RnVuY3Rpb24gMgogQGVu
ZAogQGJlZ2luIEhUTUxCdXR0b25FbGVtZW50VGFibGUgNwogICBmb3JtCQlLSlM6OkhUTUxFbGVt
ZW50OjpCdXR0b25Gb3JtCQlEb250RGVsZXRlfFJlYWRPbmx5CkBAIC0xMzIwLDYgKzEzMjYsMjIg
QEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Y2FsbChFeGVjU3RhdGUgKgogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAorc3RhdGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uU3RhcnQoSFRN
TElucHV0RWxlbWVudEltcGwgJmlucHV0KQoreworICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlv
bigpKSB7CisgICAgcmV0dXJuIE51bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKKyAgfQor
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlv
bkVuZChIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQpCit7CisgIGlmIChpbnB1dC5jYW5IYXZl
U2VsZWN0aW9uKCkpIHsKKyAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvbkVuZCgpKTsK
KyAgfQorICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAg
IEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwg
Kj4oaW1wbCgpKTsKQEAgLTE0ODgsNiArMTUxMCw4IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkKICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4g
TnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0Lm5hbWUoKSk7CiAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAg
ICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7CisgICAgY2FzZSBJbnB1dFNl
bGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uU3RhcnQoaW5wdXQpOworICAg
IGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChp
bnB1dCk7CiAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1
dC5zaXplRE9NKCkpOwogICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQuc3JjKCkpOwogICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoaW5wdXQudGFiSW5kZXgoKSk7CkBAIC0xNTA4LDYgKzE1MzIsOCBAQCBWYWx1ZSBLSlM6
OkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5CiAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5uYW1lKCkpOwogICAgIGNhc2UgVGV4dEFy
ZWFSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLnJlYWRPbmx5KCkpOwog
ICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEu
cm93cygpKTsKKyAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gTnVtYmVy
KHRleHRhcmVhLnNlbGVjdGlvblN0YXJ0KCkpOworICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25F
bmQ6ICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEuc2VsZWN0aW9uRW5kKCkpOwogICAgIGNhc2Ug
VGV4dEFyZWFUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEudGFiSW5kZXgo
KSk7CiAgICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0
YXJlYS50eXBlKCkpOwogICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHJldHVybiBT
dHJpbmcodGV4dGFyZWEudmFsdWUoKSk7CkBAIC0yMDUyLDYgKzIwNzgsMjIgQEAgYm9vbCBLSlM6
OkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIElEX0lOUFVUOiB7CisgICAgICBIVE1MSW5wdXRF
bGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJv
cEhhc2hUYWJsZTsKKyAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRF
bnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICAgIGlmIChlbnRyeSkgeworICAgICAgICBz
d2l0Y2goZW50cnktPnZhbHVlKSB7CisgICAgICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0
OgorICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6CisgICAgICAgICAgY2FzZSBJbnB1
dFNldFNlbGVjdGlvblJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNhbkhhdmVTZWxl
Y3Rpb24oKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgYnJl
YWs7CiAgIH0KQEAgLTIxNzksNiArMjIyMSwxMCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVu
Y3Rpb246OnRyeUNhbGwoCiAgICAgICAgIGlucHV0LmNsaWNrKCk7CiAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OklucHV0U2V0U2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9u
UmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykpOworICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICB9CiAgICAgfQogICAgIGJyZWFrOwogICAg
IGNhc2UgSURfTEFCRUw6IHsKQEAgLTIyMjYsNiArMjI3MiwxMCBAQCBWYWx1ZSBLSlM6OkhUTUxF
bGVtZW50RnVuY3Rpb246OnRyeUNhbGwoCiAgICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOwogICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICB9CisgICAgICBlbHNlIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNldFNlbGVjdGlvblJhbmdlKSB7CisgICAgICAgIHRl
eHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50
b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgfQogICAg
IH0KICAgICBicmVhazsKICAgICBjYXNlIElEX0E6IHsKQEAgLTI1NjQsNiArMjYxNCw4IEBAIHZv
aWQgSFRNTEVsZW1lbnQ6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXgKICAgICAgIGNhc2UgSW5wdXRN
YXhMZW5ndGg6ICAgICAgIHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHsgaW5wdXQuc2V0
TmFtZShzdHIpOyByZXR1cm47IH0KICAgICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHsg
aW5wdXQuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICBjYXNlIElucHV0U2VsZWN0aW9uU3RhcnQ6ICB7IGlucHV0LnNldFNlbGVjdGlvblN0YXJ0KHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25F
bmQ6ICAgIHsgaW5wdXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KICAgICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHsgaW5wdXQuc2V0U2l6ZShz
dHIpOyByZXR1cm47IH0KICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQu
c2V0U3JjKHN0cik7IHJldHVybjsgfQogICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAg
eyBpbnB1dC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CkBAIC0y
NTg0LDYgKzI2MzYsOCBAQCB2b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4
CiAgICAgICBjYXNlIFRleHRBcmVhTmFtZTogICAgICAgICAgICB7IHRleHRhcmVhLnNldE5hbWUo
c3RyKTsgcmV0dXJuOyB9CiAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICB7IHRl
eHRhcmVhLnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQogICAg
ICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRSb3dzKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25T
dGFydDogIHsgdGV4dGFyZWEuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQorICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvbkVuZDogICAgeyB0ZXh0YXJl
YS5zZXRTZWxlY3Rpb25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgICAg
Y2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRUYWJJbmRleCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAvLyByZWFkLW9ubHk6IHR5cGUKICAg
ICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFyZWEuc2V0VmFsdWUoc3Ry
KTsgcmV0dXJuOyB9CkluZGV4OiAuL2todG1sL2VjbWEva2pzX2h0bWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNDcKZGlmZiAtcCAtdSAtcjEuNDcgLi9raHRtbC9lY21hL2tqc19odG1s
LmgKLS0tIC4va2h0bWwvZWNtYS9ranNfaHRtbC5oCTIwMDUvMDYvMjIgMDA6NDg6NDQJMS40Nwor
KysgLi9raHRtbC9lY21hL2tqc19odG1sLmgJMjAwNS8wNi8yMiAyMjowOToxOQpAQCAtMTAzLDkg
KzEwMywxMSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgSW5wdXRGb2N1cywgSW5wdXRN
YXhMZW5ndGgsIElucHV0RGVmYXVsdENoZWNrZWQsIElucHV0RGlzYWJsZWQsCiAgICAgICAgICAg
IElucHV0Q2hlY2tlZCwgSW5wdXRGb3JtLCBJbnB1dEFjY2Vzc0tleSwgSW5wdXRBbGlnbiwgSW5w
dXRBbHQsCiAgICAgICAgICAgIElucHV0TmFtZSwgSW5wdXRTcmMsIElucHV0VXNlTWFwLCBJbnB1
dFNlbGVjdCwgSW5wdXRDbGljaywKLSAgICAgICAgICAgVGV4dEFyZWFBY2Nlc3NLZXksIFRleHRB
cmVhTmFtZSwgVGV4dEFyZWFEZWZhdWx0VmFsdWUsIFRleHRBcmVhU2VsZWN0LAorICAgICAgICAg
ICBJbnB1dFNlbGVjdGlvblN0YXJ0LCBJbnB1dFNlbGVjdGlvbkVuZCwgSW5wdXRTZXRTZWxlY3Rp
b25SYW5nZSwKKyAgICAgICAgICAgVGV4dEFyZWFBY2Nlc3NLZXksIFRleHRBcmVhTmFtZSwgVGV4
dEFyZWFEZWZhdWx0VmFsdWUsIFRleHRBcmVhU2VsZWN0LCBUZXh0QXJlYVNldFNlbGVjdGlvblJh
bmdlLAogICAgICAgICAgICBUZXh0QXJlYUNvbHMsIFRleHRBcmVhRGlzYWJsZWQsIFRleHRBcmVh
Rm9ybSwgVGV4dEFyZWFUeXBlLAogICAgICAgICAgICBUZXh0QXJlYVRhYkluZGV4LCBUZXh0QXJl
YVJlYWRPbmx5LCBUZXh0QXJlYVJvd3MsIFRleHRBcmVhVmFsdWUsCisgICAgICAgICAgIFRleHRB
cmVhU2VsZWN0aW9uU3RhcnQsIFRleHRBcmVhU2VsZWN0aW9uRW5kLAogICAgICAgICAgICBUZXh0
QXJlYUJsdXIsIFRleHRBcmVhRm9jdXMsIEJ1dHRvbkJsdXIsIEJ1dHRvbkZvY3VzLCBCdXR0b25G
b3JtLCBCdXR0b25UYWJJbmRleCwgQnV0dG9uTmFtZSwKICAgICAgICAgICAgQnV0dG9uRGlzYWJs
ZWQsIEJ1dHRvbkFjY2Vzc0tleSwgQnV0dG9uVHlwZSwgQnV0dG9uVmFsdWUsIExhYmVsSHRtbEZv
ciwKICAgICAgICAgICAgTGFiZWxGb3JtLCBMYWJlbEZvY3VzLCBMYWJlbEFjY2Vzc0tleSwgRmll
bGRTZXRGb3JtLCBMZWdlbmRGb3JtLCBMZWdlbmRBY2Nlc3NLZXksCkluZGV4OiAuL2todG1sL2h0
bWwvaHRtbF9mb3JtaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NjcKZGlmZiAtcCAtdSAtcjEuMTY3IC4va2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAotLS0g
Li9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTIwMDUvMDYvMjAgMDU6NTI6MTYJMS4xNjcK
KysrIC4va2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMDA1LzA2LzIyIDIyOjA5OjIyCkBA
IC0xNTA4LDYgKzE1MDgsODkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6cmVzdG9yZVN0
YXRlKAogICAgIH0KIH0KIAorYm9vbCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6Y2FuSGF2ZVNlbGVj
dGlvbigpCit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBURVhUOgorICAg
ICAgICBjYXNlIFBBU1NXT1JEOgorI2lmIEFQUExFX0NIQU5HRVMKKyAgICAgICAgY2FzZSBTRUFS
Q0g6CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworbG9uZyBI
VE1MSW5wdXRFbGVtZW50SW1wbDo6c2VsZWN0aW9uU3RhcnQoKQoreworICAgIGlmICghbV9yZW5k
ZXIpIHJldHVybiAwOworICAgIAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2Ug
UEFTU1dPUkQ6CisjaWYgQVBQTEVfQ0hBTkdFUworICAgICAgICBjYXNlIFNFQVJDSDoKKyNlbmRp
ZgorICAgICAgICBjYXNlIFRFWFQ6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyTGluZUVkaXQgKj4obV9yZW5kZXIpLT5zZWxlY3Rpb25TdGFydCgpOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitsb25n
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZWxlY3Rpb25FbmQoKQoreworICAgIGlmICghbV9yZW5k
ZXIpIHJldHVybiAwOworICAgIAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2Ug
UEFTU1dPUkQ6CisjaWYgQVBQTEVfQ0hBTkdFUworICAgICAgICBjYXNlIFNFQVJDSDoKKyNlbmRp
ZgorICAgICAgICBjYXNlIFRFWFQ6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyTGluZUVkaXQgKj4obV9yZW5kZXIpLT5zZWxlY3Rpb25FbmQoKTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBI
VE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKyAg
ICBpZiAoIW1fcmVuZGVyKSByZXR1cm47CisgICAgCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICAgICAgY2FzZSBQQVNTV09SRDoKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgICAgIGNhc2UgU0VB
UkNIOgorI2VuZGlmCisgICAgICAgIGNhc2UgVEVYVDoKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlckxpbmVFZGl0ICo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlvbkVuZChs
b25nIGVuZCkKK3sKKyAgICBpZiAoIW1fcmVuZGVyKSByZXR1cm47CisgICAgCisgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBQQVNTV09SRDoKKyNpZiBBUFBMRV9DSEFOR0VTCisg
ICAgICAgIGNhc2UgU0VBUkNIOgorI2VuZGlmCisgICAgICAgIGNhc2UgVEVYVDoKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlckxpbmVFZGl0ICo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9u
RW5kKGVuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2VsZWN0
KCAgKQogewogICAgIGlmKCFtX3JlbmRlcikgcmV0dXJuOwpAQCAtMTUzOCw2ICsxNjIxLDIzIEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNlbGVjdCggICkKICAgICB9CiB9CiAKK3ZvaWQg
SFRNTElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlvblJhbmdlKGxvbmcgc3RhcnQsIGxvbmcg
ZW5kKQoreworICAgIGlmICghbV9yZW5kZXIpIHJldHVybjsKKyAgICAKKyAgICBzd2l0Y2ggKG1f
dHlwZSkgeworICAgICAgICBjYXNlIFBBU1NXT1JEOgorI2lmIEFQUExFX0NIQU5HRVMKKyAgICAg
ICAgY2FzZSBTRUFSQ0g6CisjZW5kaWYKKyAgICAgICAgY2FzZSBURVhUOgorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQgKj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rpb25SYW5n
ZShzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpj
bGljayhib29sIHNlbmRNb3VzZUV2ZW50cykKIHsKICAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7
CkBAIC0yMDk0LDEzICsyMTk0LDE1IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFZh
bHVlKGNvbnMKIHsKICAgICBpZiAobV90eXBlID09IEZJTEUpIHJldHVybjsKIAorICAgIG1fdmFs
dWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKICAgICBpZiAoc3RvcmVzVmFsdWVTZXBhcmF0ZUZy
b21BdHRyaWJ1dGUoKSkgewogICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIGlmICht
X3JlbmRlcikKKyAgICAgICAgICAgIG1fcmVuZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAg
ICAgICBzZXRDaGFuZ2VkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0QXR0cmlidXRlKEFU
VFJfVkFMVUUsIHZhbHVlKTsKICAgICB9Ci0gICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZh
bHNlOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRWYWx1ZUZyb21SZW5kZXJl
cihjb25zdCBET01TdHJpbmcgJnZhbHVlKQpAQCAtMzM4MCwxMiArMzQ4Miw0NCBAQCB2b2lkIEhU
TUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpyZXN0b3JlU3RhCiAgICAgLy8gdGhlIGNsb3NlKCkgaW4g
dGhlIHJlbmRlcnRyZWUgd2lsbCB0YWtlIGNhcmUgb2YgdHJhbnNmZXJyaW5nIGRlZmF1bHR2YWx1
ZSB0byAndmFsdWUnCiB9CiAKK2xvbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNlbGVjdGlv
blN0YXJ0KCkKK3sKKyAgICBpZiAobV9yZW5kZXIpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0QXJlYSAqPihtX3JlbmRlciktPnNlbGVjdGlvblN0YXJ0KCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK2xvbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNlbGVjdGlvbkVuZCgp
Cit7CisgICAgaWYgKG1fcmVuZGVyKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dEFyZWEgKj4obV9yZW5kZXIpLT5zZWxlY3Rpb25FbmQoKTsKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBz
dGFydCkKK3sKKyAgICBpZiAobV9yZW5kZXIpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRl
eHRBcmVhICo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOworfQorCit2b2lk
IEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25FbmQobG9uZyBlbmQpCit7Cisg
ICAgaWYgKG1fcmVuZGVyKQorICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSAqPiht
X3JlbmRlciktPnNldFNlbGVjdGlvbkVuZChlbmQpOworfQorCiB2b2lkIEhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsOjpzZWxlY3QoICApCiB7CiAgICAgaWYgKG1fcmVuZGVyKQogICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSo+KG1fcmVuZGVyKS0+c2VsZWN0KCk7CiB9CiAKK3ZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFNlbGVjdGlvblJhbmdlKGxvbmcgc3RhcnQsIGxv
bmcgZW5kKQoreworICAgIGlmIChtX3JlbmRlcikKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dEFyZWEgKj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsKK30K
Kwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6Y2hpbGRyZW5DaGFuZ2VkKCkKIHsKICAg
ICBzZXRWYWx1ZShkZWZhdWx0VmFsdWUoKSk7CkBAIC0zNDgzLDggKzM2MTcsMTAgQEAgRE9NU3Ry
aW5nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjp2YWx1ZQogdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbDo6c2V0VmFsdWUoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKICAgICBtX3ZhbHVl
ID0gdmFsdWUuc3RyaW5nKCk7Ci0gICAgbV92YWx1ZUlzVmFsaWQgPSB0cnVlOwogICAgIG1fdmFs
dWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKKyAgICBpZiAobV9yZW5kZXIpCisgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlclRleHRBcmVhICo+KG1fcmVuZGVyKS0+dXBkYXRlRnJvbUVsZW1lbnQo
KTsKKyAgICBtX3ZhbHVlSXNWYWxpZCA9IGZhbHNlOyAvLyBmb3JjZSB0aGUgbmV4dCBhY2Nlc3Mg
dG8gZmV0Y2ggZnJvbSB0aGUgcmVuZGVyZXIKICAgICBzZXRDaGFuZ2VkKHRydWUpOwogfQogCklu
ZGV4OiAuL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjc0CmRpZmYgLXAgLXUgLXIxLjc0IC4va2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBs
LmgKLS0tIC4va2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgJMjAwNS8wNi8yMCAwNTo1MjoxNgkx
Ljc0CisrKyAuL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTIwMDUvMDYvMjIgMjI6MDk6MjMK
QEAgLTM1Nyw3ICszNTcsMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUVN0cmluZyBzdGF0ZSgp
OwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU3RhdGUoUVN0cmluZ0xpc3QgJik7CiAKKyAgICBi
b29sIGNhbkhhdmVTZWxlY3Rpb24oKTsKKworICAgIGxvbmcgc2VsZWN0aW9uU3RhcnQoKTsKKyAg
ICBsb25nIHNlbGVjdGlvbkVuZCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQobG9uZyk7
CisgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQobG9uZyk7CisKICAgICB2b2lkIHNlbGVjdCgpOwor
ICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UobG9uZywgbG9uZyk7CiAgICAgCiAgICAgdmlydHVh
bCB2b2lkIGNsaWNrKGJvb2wgc2VuZE1vdXNlRXZlbnRzID0gZmFsc2UpOwogICAgIHZpcnR1YWwg
dm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKQEAgLTcyMiw3ICs3
MzAsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUVN0cmluZyBzdGF0ZSgpOwogICAgIHZpcnR1
YWwgdm9pZCByZXN0b3JlU3RhdGUoUVN0cmluZ0xpc3QgJik7CiAKKyAgICBsb25nIHNlbGVjdGlv
blN0YXJ0KCk7CisgICAgbG9uZyBzZWxlY3Rpb25FbmQoKTsKKworICAgIHZvaWQgc2V0U2VsZWN0
aW9uU3RhcnQobG9uZyk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQobG9uZyk7CisKICAgICB2
b2lkIHNlbGVjdCAoICApOworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UobG9uZywgbG9uZyk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpJbmRleDog
Li9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTA3CmRpZmYgLXAgLXUgLXIxLjEwNyAuL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfZm9ybS5jcHAKLS0tIC4va2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkyMDA1
LzA2LzIwIDA1OjI0OjI2CTEuMTA3CisrKyAuL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5j
cHAJMjAwNS8wNi8yMiAyMjowOToyNgpAQCAtNzE4LDExICs3MTgsNTUgQEAgdm9pZCBSZW5kZXJM
aW5lRWRpdDo6c2xvdFRleHRDaGFuZ2VkKGNvbgogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVGcm9t
UmVuZGVyZXIobmV3VGV4dCk7CiB9CiAKK2xvbmcgUmVuZGVyTGluZUVkaXQ6OnNlbGVjdGlvblN0
YXJ0KCkKK3sKKyAgICBLTGluZUVkaXQgKmxpbmVFZGl0ID0gc3RhdGljX2Nhc3Q8S0xpbmVFZGl0
ICo+KG1fd2lkZ2V0KTsKKyAgICBpbnQgc3RhcnQgPSBsaW5lRWRpdC0+c2VsZWN0aW9uU3RhcnQo
KTsKKyAgICBpZiAoc3RhcnQgPT0gLTEpCisgICAgICAgIHN0YXJ0ID0gbGluZUVkaXQtPmN1cnNv
clBvc2l0aW9uKCk7CisgICAgcmV0dXJuIHN0YXJ0OworfQorCitsb25nIFJlbmRlckxpbmVFZGl0
OjpzZWxlY3Rpb25FbmQoKQoreworICAgIEtMaW5lRWRpdCAqbGluZUVkaXQgPSBzdGF0aWNfY2Fz
dDxLTGluZUVkaXQgKj4obV93aWRnZXQpOworICAgIGludCBzdGFydCA9IGxpbmVFZGl0LT5zZWxl
Y3Rpb25TdGFydCgpOworICAgIGlmIChzdGFydCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGxpbmVF
ZGl0LT5jdXJzb3JQb3NpdGlvbigpOworICAgIHJldHVybiBzdGFydCArIChpbnQpbGluZUVkaXQt
PnNlbGVjdGVkVGV4dCgpLmxlbmd0aCgpOworfQorCit2b2lkIFJlbmRlckxpbmVFZGl0OjpzZXRT
ZWxlY3Rpb25TdGFydChsb25nIHN0YXJ0KQoreworICAgIGludCByZWFsU3RhcnQgPSBNQVgoc3Rh
cnQsIDApOworICAgIGludCBsZW5ndGggPSBNQVgoc2VsZWN0aW9uRW5kKCkgLSByZWFsU3RhcnQs
IDApOworICAgIHN0YXRpY19jYXN0PEtMaW5lRWRpdCAqPihtX3dpZGdldCktPnNldFNlbGVjdGlv
bihyZWFsU3RhcnQsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUmVuZGVyTGluZUVkaXQ6OnNldFNlbGVj
dGlvbkVuZChsb25nIGVuZCkKK3sKKyAgICBpbnQgc3RhcnQgPSBzZWxlY3Rpb25TdGFydCgpOwor
ICAgIGludCByZWFsRW5kID0gTUFYKGVuZCwgMCk7CisgICAgaW50IGxlbmd0aCA9IHJlYWxFbmQg
LSBzdGFydDsKKyAgICBpZiAobGVuZ3RoIDwgMCkgeworICAgICAgICBzdGFydCA9IHJlYWxFbmQ7
CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgfQorICAgIHN0YXRpY19jYXN0PEtMaW5lRWRpdCAq
PihtX3dpZGdldCktPnNldFNlbGVjdGlvbihzdGFydCwgbGVuZ3RoKTsKK30KKwogdm9pZCBSZW5k
ZXJMaW5lRWRpdDo6c2VsZWN0KCkKIHsKICAgICBzdGF0aWNfY2FzdDxLTGluZUVkaXQqPihtX3dp
ZGdldCktPnNlbGVjdEFsbCgpOwogfQogCit2b2lkIFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rp
b25SYW5nZShsb25nIHN0YXJ0LCBsb25nIGVuZCkKK3sKKyAgICBpbnQgcmVhbFN0YXJ0ID0gTUFY
KHN0YXJ0LCAwKTsKKyAgICBpbnQgbGVuZ3RoID0gTUFYKGVuZCAtIHJlYWxTdGFydCwgMCk7Cisg
ICAgc3RhdGljX2Nhc3Q8S0xpbmVFZGl0ICo+KG1fd2lkZ2V0KS0+c2V0U2VsZWN0aW9uKHJlYWxT
dGFydCwgbGVuZ3RoKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlbmRlckZpZWxk
c2V0OjpSZW5kZXJGaWVsZHNldChIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqZWxlbWVudCkK
QEAgLTE2NDEsOSArMTY4NSw2OSBAQCB2b2lkIFJlbmRlclRleHRBcmVhOjpzbG90VGV4dENoYW5n
ZWQoKQogICAgIG1fZGlydHkgPSB0cnVlOwogfQogCitsb25nIFJlbmRlclRleHRBcmVhOjpzZWxl
Y3Rpb25TdGFydCgpCit7CisgICAgUVRleHRFZGl0ICp0ZXh0RWRpdCA9IHN0YXRpY19jYXN0PFFU
ZXh0RWRpdCAqPihtX3dpZGdldCk7CisjaWYgQVBQTEVfQ0hBTkdFUworICAgIHJldHVybiB0ZXh0
RWRpdC0+c2VsZWN0aW9uU3RhcnQoKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEkgaGF2ZSBubyB3
YXkgdG8gdGVzdCBRdCwgc28gSSdsbAorICAgIC8vIGxlYXZlIHRoaXMgYWxvbmUgZm9yIG5vdwor
I2Vycm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9kCisjZW5kaWYKK30KKworbG9uZyBSZW5kZXJUZXh0
QXJlYTo6c2VsZWN0aW9uRW5kKCkKK3sKKyAgICBRVGV4dEVkaXQgKnRleHRFZGl0ID0gc3RhdGlj
X2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KTsKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgcmV0
dXJuIHRleHRFZGl0LT5zZWxlY3Rpb25FbmQoKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEkgaGF2
ZSBubyB3YXkgdG8gdGVzdCBRdCwgc28gSSdsbAorICAgIC8vIGxlYXZlIHRoaXMgYWxvbmUgZm9y
IG5vdworI2Vycm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9kCisjZW5kaWYKK30KKwordm9pZCBSZW5k
ZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKyAgICBRVGV4dEVk
aXQgKnRleHRFZGl0ID0gc3RhdGljX2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KTsKKyNpZiBB
UFBMRV9DSEFOR0VTCisgICAgdGV4dEVkaXQtPnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKKyNl
bHNlCisgICAgLy8gRklYTUU6IEkgaGF2ZSBubyB3YXkgdG8gdGVzdCBRdCwgc28gSSdsbAorICAg
IC8vIGxlYXZlIHRoaXMgYWxvbmUgZm9yIG5vdworI2Vycm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9k
CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uRW5kKGxvbmcg
ZW5kKQoreworICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBzdGF0aWNfY2FzdDxRVGV4dEVkaXQg
Kj4obV93aWRnZXQpOworI2lmIEFQUExFX0NIQU5HRVMKKyAgICB0ZXh0RWRpdC0+c2V0U2VsZWN0
aW9uRW5kKGVuZCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBJIGhhdmUgbm8gd2F5IHRvIHRlc3Qg
UXQsIHNvIEknbGwKKyAgICAvLyBsZWF2ZSB0aGlzIGFsb25lIGZvciBub3cKKyNlcnJvciBVbmlt
cGxlbWVudGVkIG1ldGhvZAorI2VuZGlmCit9CisKIHZvaWQgUmVuZGVyVGV4dEFyZWE6OnNlbGVj
dCgpCiB7CiAgICAgc3RhdGljX2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lkZ2V0KS0+c2VsZWN0QWxs
KCk7Cit9CisKK3ZvaWQgUmVuZGVyVGV4dEFyZWE6OnNldFNlbGVjdGlvblJhbmdlKGxvbmcgc3Rh
cnQsIGxvbmcgZW5kKQoreworICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBzdGF0aWNfY2FzdDxR
VGV4dEVkaXQgKj4obV93aWRnZXQpOworI2lmIEFQUExFX0NIQU5HRVMKKyAgICB0ZXh0RWRpdC0+
c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZC1zdGFydCk7CisjZWxzZQorICAgIC8vIEZJWE1F
OiBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgUXQsIHNvIEknbGwKKyAgICAvLyBsZWF2ZSB0aGlzIGFs
b25lIGZvciBub3cKKyNlcnJvciBVbmltcGxlbWVudGVkIG1ldGhvZAorI2VuZGlmCiB9CiAKIHZv
aWQgUmVuZGVyVGV4dEFyZWE6OnNsb3RTZWxlY3Rpb25DaGFuZ2VkKCkKSW5kZXg6IC4va2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNTEKZGlmZiAtcCAtdSAtcjEuNTEgLi9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAot
LS0gLi9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAkyMDA1LzA2LzIwIDA1OjI0OjI2CTEu
NTEKKysrIC4va2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgJMjAwNS8wNi8yMiAyMjowOToy
NgpAQCAtMjQ4LDcgKzI0OCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZy
b21FbGVtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlICopOwog
CisgICAgbG9uZyBzZWxlY3Rpb25TdGFydCgpOworICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7Cisg
ICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVu
ZChsb25nKTsKKyAgICAKICAgICB2b2lkIHNlbGVjdCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9u
UmFuZ2UobG9uZywgbG9uZyk7CiAKICAgICBLTGluZUVkaXQgKndpZGdldCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEtMaW5lRWRpdCo+KG1fd2lkZ2V0KTsgfQogICAgIERPTTo6SFRNTElu
cHV0RWxlbWVudEltcGwqIGVsZW1lbnQoKSBjb25zdApAQCAtNDY5LDggKzQ3NSwxNCBAQCBwdWJs
aWM6CiAKICAgICBRU3RyaW5nIHRleHQoKTsKIAorICAgIGxvbmcgc2VsZWN0aW9uU3RhcnQoKTsK
KyAgICBsb25nIHNlbGVjdGlvbkVuZCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQobG9u
Zyk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQobG9uZyk7CisgICAgCiAgICAgdm9pZCBzZWxl
Y3QoKTsKLQorICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UobG9uZywgbG9uZyk7CisgICAgCiAj
aWYgQVBQTEVfQ0hBTkdFUwogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlSW50cmluc2ljTWFyZ2lu
cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgpJbmRleDoga3dxL0tXUUxpbmVFZGl0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUxpbmVFZGl0
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzIKZGlmZiAtcCAtdSAtcjEuMzIga3dxL0tXUUxp
bmVFZGl0LmgKLS0tIGt3cS9LV1FMaW5lRWRpdC5oCTIwMDUvMDYvMjAgMDU6MjQ6MjYJMS4zMgor
Kysga3dxL0tXUUxpbmVFZGl0LmgJMjAwNS8wNi8yMiAyMjowOTozMApAQCAtNjgsNiArNjgsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0QWxsKCk7CiAgICAgYm9vbCBoYXNTZWxlY3RlZFRl
eHQoKSBjb25zdDsKICAgICAKKyAgICBpbnQgc2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKKyAgICBR
U3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0OworICAgIHZvaWQgc2V0U2VsZWN0aW9uKGludCwg
aW50KTsKKyAgICAKICAgICBRU2l6ZSBzaXplRm9yQ2hhcmFjdGVyV2lkdGgoaW50IG51bUNoYXJh
Y3RlcnMpIGNvbnN0OwogICAgIGludCBiYXNlbGluZVBvc2l0aW9uKGludCBoZWlnaHQpIGNvbnN0
OwogICAgIApJbmRleDoga3dxL0tXUUxpbmVFZGl0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FMaW5lRWRpdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS42NgpkaWZmIC1wIC11IC1yMS42NiBrd3EvS1dRTGluZUVkaXQubW0KLS0tIGt3cS9LV1FMaW5l
RWRpdC5tbQkyMDA1LzA2LzIwIDA1OjI0OjI2CTEuNjYKKysrIGt3cS9LV1FMaW5lRWRpdC5tbQky
MDA1LzA2LzIyIDIyOjA5OjMwCkBAIC03NiwxNCArNzYsMTggQEAgUUxpbmVFZGl0Ojp+UUxpbmVF
ZGl0KCkKICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogfQogCi12b2lkIFFMaW5lRWRpdDo6
c2V0Q3Vyc29yUG9zaXRpb24oaW50KQordm9pZCBRTGluZUVkaXQ6OnNldEN1cnNvclBvc2l0aW9u
KGludCBwb3MpCiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaGVyZS4KKyAgICBLV1FfQkxP
Q0tfRVhDRVBUSU9OUzsKKyAgICBbbV9jb250cm9sbGVyIHNldFNlbGVjdGVkUmFuZ2U6TlNNYWtl
UmFuZ2UocG9zLCAwKV07CisgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAogaW50IFFM
aW5lRWRpdDo6Y3Vyc29yUG9zaXRpb24oKSBjb25zdAogewotICAgIC8vIE5vdCBuZWVkZWQuICBX
ZSBpZ25vcmUgc2V0Q3Vyc29yUG9zaXRpb24oKS4KKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsK
KyAgICByZXR1cm4gW21fY29udHJvbGxlciBzZWxlY3RlZFJhbmdlXS5sb2NhdGlvbjsKKyAgICBL
V1FfVU5CTE9DS19FWENFUFRJT05TOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNzIsNiArMTc2
LDcgQEAgaW50IFFMaW5lRWRpdDo6bWF4TGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gW21fY29u
dHJvbGxlciBtYXhpbXVtTGVuZ3RoXTsKIH0KIAorCiB2b2lkIFFMaW5lRWRpdDo6c2VsZWN0QWxs
KCkKIHsKICAgICBpZiAoIWhhc0ZvY3VzKCkpIHsKQEAgLTE4NCw2ICsxODksMzMgQEAgdm9pZCBR
TGluZUVkaXQ6OnNlbGVjdEFsbCgpCiAgICAgICAgIFt0ZXh0RmllbGQgc2VsZWN0VGV4dDpuaWxd
OwogICAgICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogICAgIH0KK30KKworaW50IFFMaW5l
RWRpdDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdAoreworICAgIEtXUV9CTE9DS19FWENFUFRJT05T
OworICAgIGlmIChbbV9jb250cm9sbGVyIGhhc1NlbGVjdGlvbl0pIHsKKyAgICAgICAgcmV0dXJu
IFttX2NvbnRyb2xsZXIgc2VsZWN0ZWRSYW5nZV0ubG9jYXRpb247CisgICAgfQorICAgIEtXUV9V
TkJMT0NLX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIC0xOworfQorCitRU3RyaW5nIFFMaW5lRWRp
dDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKK3sKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKKyAg
ICBOU1JhbmdlIHJhbmdlID0gW21fY29udHJvbGxlciBzZWxlY3RlZFJhbmdlXTsKKyAgICBOU1N0
cmluZyAqc3RyID0gW21fY29udHJvbGxlciBzdHJpbmddOworICAgIHJldHVybiBRU3RyaW5nOjpm
cm9tTlNTdHJpbmcoW3N0ciBzdWJzdHJpbmdXaXRoUmFuZ2U6cmFuZ2VdKTsKKyAgICBLV1FfVU5C
TE9DS19FWENFUFRJT05TOworICAgIHJldHVybiBRU3RyaW5nKCk7Cit9CisKK3ZvaWQgUUxpbmVF
ZGl0OjpzZXRTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQoreworICAgIEtXUV9CTE9D
S19FWENFUFRJT05TOworICAgIFttX2NvbnRyb2xsZXIgc2V0U2VsZWN0ZWRSYW5nZTpOU01ha2VS
YW5nZShzdGFydCwgbGVuZ3RoKV07CisgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAog
Ym9vbCBRTGluZUVkaXQ6Omhhc1NlbGVjdGVkVGV4dCgpIGNvbnN0CkluZGV4OiBrd3EvS1dRVGV4
dEFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4
dEFyZWEuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC1wIC11IC1yMS4yMSBrd3Ev
S1dRVGV4dEFyZWEuaAotLS0ga3dxL0tXUVRleHRBcmVhLmgJMjAwNS8wNi8yMCAwNToyNDoyNgkx
LjIxCisrKyBrd3EvS1dRVGV4dEFyZWEuaAkyMDA1LzA2LzIyIDIyOjA5OjMwCkBAIC02Nyw2ICs2
Nyw4IEBAIGNsYXNzIFFUZXh0RWRpdDsKIC0gKEJPT0wpd29yZFdyYXA7CiAKIC0gKHZvaWQpc2Vs
ZWN0QWxsOworLSAodm9pZClzZXRTZWxlY3RlZFJhbmdlOihOU1JhbmdlKWFSYW5nZTsKKy0gKE5T
UmFuZ2Upc2VsZWN0ZWRSYW5nZTsKIC0gKEJPT0wpaGFzU2VsZWN0aW9uOwogCiAtIChOU1NpemUp
c2l6ZVdpdGhDb2x1bW5zOihpbnQpY29sdW1ucyByb3dzOihpbnQpcm93czsKSW5kZXg6IGt3cS9L
V1FUZXh0QXJlYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3Ev
S1dRVGV4dEFyZWEubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtcCAtdSAtcjEu
ODIga3dxL0tXUVRleHRBcmVhLm1tCi0tLSBrd3EvS1dRVGV4dEFyZWEubW0JMjAwNS8wNi8yMCAw
NToyNDoyNwkxLjgyCisrKyBrd3EvS1dRVGV4dEFyZWEubW0JMjAwNS8wNi8yMiAyMjowOTozMQpA
QCAtMjg4LDYgKzI4OCw2NiBAQCBjb25zdCBmbG9hdCBMYXJnZU51bWJlckZvclRleHQgPSAxLjBl
NzsKICAgICBbdGV4dFZpZXcgc2VsZWN0QWxsOm5pbF07CiB9CiAKKy0gKHZvaWQpc2V0U2VsZWN0
ZWRSYW5nZTooTlNSYW5nZSlhUmFuZ2UKK3sKKyAgICBOU1N0cmluZyAqdGV4dCA9IFt0ZXh0Vmll
dyBzdHJpbmddOworICAgIC8vIE9rLCB0aGUgc2VsZWN0aW9uIGhhcyB0byBtYXRjaCB1cCB3aXRo
IHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgLXRleHQKKyAgICAvLyBhbmQgc2luY2UgLXRleHQgdHJh
bnNsYXRlcyBcclxuIHRvIFxuLCB3ZSBoYXZlIHRvIG1vZGlmeSBvdXIgc2VsZWN0aW9uCisgICAg
Ly8gaWYgYSBcclxuIHNlcXVlbmNlIGlzIGFueXdoZXJlIGluIG9yIGJlZm9yZSB0aGUgc2VsZWN0
aW9uCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIE5TUmFuZ2UgZm91bmRSYW5nZSwgc2Vh
cmNoUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBhUmFuZ2UubG9jYXRpb24pOworICAgIHdoaWxlIChm
b3VuZFJhbmdlID0gW3RleHQgcmFuZ2VPZlN0cmluZzpAIlxyXG4iIG9wdGlvbnM6TlNMaXRlcmFs
U2VhcmNoIHJhbmdlOnNlYXJjaFJhbmdlXSwKKyAgICAgICAgICAgZm91bmRSYW5nZS5sb2NhdGlv
biAhPSBOU05vdEZvdW5kKSB7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHNlYXJjaFJhbmdl
LmxvY2F0aW9uID0gTlNNYXhSYW5nZShmb3VuZFJhbmdlKTsKKyAgICAgICAgaWYgKHNlYXJjaFJh
bmdlLmxvY2F0aW9uID49IGFSYW5nZS5sb2NhdGlvbikgYnJlYWs7CisgICAgICAgIHNlYXJjaFJh
bmdlLmxlbmd0aCA9IGFSYW5nZS5sb2NhdGlvbiAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uOworICAg
IH0KKyAgICBhUmFuZ2UubG9jYXRpb24gKz0gY291bnQ7CisgICAgY291bnQgPSAwOworICAgIHNl
YXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoYVJhbmdlLmxvY2F0aW9uLCBhUmFuZ2UubGVuZ3RoKTsK
KyAgICB3aGlsZSAoZm91bmRSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxuIiBvcHRp
b25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpzZWFyY2hSYW5nZV0sCisgICAgICAgICAgIGZvdW5k
UmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgICAgICBjb3VudCsrOworICAgICAg
ICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZm91bmRSYW5nZSk7CisgICAgICAg
IGlmIChzZWFyY2hSYW5nZS5sb2NhdGlvbiA+PSBOU01heFJhbmdlKGFSYW5nZSkpIGJyZWFrOwor
ICAgICAgICBzZWFyY2hSYW5nZS5sZW5ndGggPSBOU01heFJhbmdlKGFSYW5nZSkgLSBzZWFyY2hS
YW5nZS5sb2NhdGlvbjsKKyAgICB9CisgICAgYVJhbmdlLmxlbmd0aCArPSBjb3VudDsKKyAgICBb
dGV4dFZpZXcgc2V0U2VsZWN0ZWRSYW5nZTphUmFuZ2VdOworfQorCistIChOU1JhbmdlKXNlbGVj
dGVkUmFuZ2UKK3sKKyAgICBOU1JhbmdlIGFSYW5nZSA9IFt0ZXh0VmlldyBzZWxlY3RlZFJhbmdl
XTsKKyAgICBpZiAoYVJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICAgICAgcmV0
dXJuIGFSYW5nZTsKKyAgICB9CisgICAgLy8gU2FtZSBpc3N1ZSBhcyB3aXRoIC1zZXRTZWxlY3Rl
ZFJhbmdlOiByZWdhcmRpbmcgXHJcbiBzZXF1ZW5jZXMKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7
CisgICAgTlNSYW5nZSBmb3VuZFJhbmdlLCBzZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIGFS
YW5nZS5sb2NhdGlvbik7CisgICAgTlNTdHJpbmcgKnRleHQgPSBbdGV4dFZpZXcgc3RyaW5nXTsK
KyAgICB3aGlsZSAoZm91bmRSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxuIiBvcHRp
b25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpzZWFyY2hSYW5nZV0sCisgICAgICAgICAgIGZvdW5k
UmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgICAgICBjb3VudCsrOworICAgICAg
ICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZm91bmRSYW5nZSk7CisgICAgICAg
IGlmIChzZWFyY2hSYW5nZS5sb2NhdGlvbiA+PSBhUmFuZ2UubG9jYXRpb24pIGJyZWFrOworICAg
ICAgICBzZWFyY2hSYW5nZS5sZW5ndGggPSBhUmFuZ2UubG9jYXRpb24gLSBzZWFyY2hSYW5nZS5s
b2NhdGlvbjsKKyAgICB9CisgICAgYVJhbmdlLmxvY2F0aW9uIC09IGNvdW50OworICAgIGNvdW50
ID0gMDsKKyAgICBzZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKGFSYW5nZS5sb2NhdGlvbiwgYVJh
bmdlLmxlbmd0aCk7CisgICAgd2hpbGUgKGZvdW5kUmFuZ2UgPSBbdGV4dCByYW5nZU9mU3RyaW5n
OkAiXHJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2VdLAorICAg
ICAgICAgICBmb3VuZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsKKyAgICAgICAgY291
bnQrKzsKKyAgICAgICAgc2VhcmNoUmFuZ2UubG9jYXRpb24gPSBOU01heFJhbmdlKGZvdW5kUmFu
Z2UpOworICAgICAgICBpZiAoc2VhcmNoUmFuZ2UubG9jYXRpb24gPj0gTlNNYXhSYW5nZShhUmFu
Z2UpKSBicmVhazsKKyAgICAgICAgc2VhcmNoUmFuZ2UubGVuZ3RoID0gTlNNYXhSYW5nZShhUmFu
Z2UpIC0gc2VhcmNoUmFuZ2UubG9jYXRpb247CisgICAgfQorICAgIGFSYW5nZS5sZW5ndGggLT0g
Y291bnQ7CisgICAgcmV0dXJuIGFSYW5nZTsKK30KKwogLSAoQk9PTCloYXNTZWxlY3Rpb24KIHsK
ICAgICByZXR1cm4gW3RleHRWaWV3IHNlbGVjdGVkUmFuZ2VdLmxlbmd0aCA+IDA7CkBAIC0zOTQs
NyArNDU0LDcgQEAgY29uc3QgZmxvYXQgTGFyZ2VOdW1iZXJGb3JUZXh0ID0gMS4wZTc7CiAgICAg
CiAgICAgaW50IHBhcmFncmFwaFNvRmFyID0gMDsKICAgICBOU1JhbmdlIHNlYXJjaFJhbmdlID0g
TlNNYWtlUmFuZ2UoMCwgW3RleHQgbGVuZ3RoXSk7Ci0KKyAgICAKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICAvLyBGSVhNRTogRG9lc24ndCB3b3JrIGZvciBDUi1zZXBhcmF0ZWQgb3IgQ1JM
Ri1zZXBhcmF0ZWQgdGV4dC4KIAlOU1JhbmdlIG5ld2xpbmVSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZT
dHJpbmc6QCJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2VdOwpA
QCAtNDAzLDEzICs0NjMsMTMgQEAgY29uc3QgZmxvYXQgTGFyZ2VOdW1iZXJGb3JUZXh0ID0gMS4w
ZTc7CiAJfQogICAgICAgICAKIAlwYXJhZ3JhcGhTb0ZhcisrOwotCisgICAgICAgIAogICAgICAg
ICB1bnNpZ25lZCBhZHZhbmNlID0gbmV3bGluZVJhbmdlLmxvY2F0aW9uICsgMSAtIHNlYXJjaFJh
bmdlLmxvY2F0aW9uOwotCisgICAgICAgIAogCXNlYXJjaFJhbmdlLmxlbmd0aCAtPSBhZHZhbmNl
OwogCXNlYXJjaFJhbmdlLmxvY2F0aW9uICs9IGFkdmFuY2U7CiAgICAgfQotCisgICAgCiAgICAg
KnBhcmFncmFwaCA9IHBhcmFncmFwaFNvRmFyOwogICAgICppbmRleCA9IHNlbGVjdGVkUmFuZ2Uu
bG9jYXRpb24gLSBzZWFyY2hSYW5nZS5sb2NhdGlvbjsKIH0KQEAgLTQxOCw3ICs0NzgsNyBAQCBz
dGF0aWMgTlNSYW5nZSBSYW5nZU9mUGFyYWdyYXBoKE5TU3RyaW5nCiB7CiAgICAgaW50IHBhcmFn
cmFwaFNvRmFyID0gMDsKICAgICBOU1JhbmdlIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoMCwg
W3RleHQgbGVuZ3RoXSk7Ci0KKyAgICAKICAgICBOU1JhbmdlIG5ld2xpbmVSYW5nZTsKICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBGSVhNRTogRG9lc24ndCB3b3JrIGZvciBDUi1zZXBh
cmF0ZWQgb3IgQ1JMRi1zZXBhcmF0ZWQgdGV4dC4KQEAgLTQyNiwxMyArNDg2LDEzIEBAIHN0YXRp
YyBOU1JhbmdlIFJhbmdlT2ZQYXJhZ3JhcGgoTlNTdHJpbmcKIAlpZiAobmV3bGluZVJhbmdlLmxv
Y2F0aW9uID09IE5TTm90Rm91bmQpIHsKIAkgICAgYnJlYWs7CiAJfQotCisgICAgICAgIAogCWlm
IChwYXJhZ3JhcGhTb0ZhciA9PSBwYXJhZ3JhcGgpIHsKIAkgICAgYnJlYWs7CiAJfQotCisgICAg
ICAgIAogCXBhcmFncmFwaFNvRmFyKys7Ci0KKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGFk
dmFuY2UgPSBuZXdsaW5lUmFuZ2UubG9jYXRpb24gKyAxIC0gc2VhcmNoUmFuZ2UubG9jYXRpb247
CiAJaWYgKHNlYXJjaFJhbmdlLmxlbmd0aCA8PSBhZHZhbmNlKSB7CiAJICAgIHNlYXJjaFJhbmdl
LmxvY2F0aW9uID0gTlNOb3RGb3VuZDsKQEAgLTQ0Myw3ICs1MDMsNyBAQCBzdGF0aWMgTlNSYW5n
ZSBSYW5nZU9mUGFyYWdyYXBoKE5TU3RyaW5nCiAJc2VhcmNoUmFuZ2UubGVuZ3RoIC09IGFkdmFu
Y2U7CiAJc2VhcmNoUmFuZ2UubG9jYXRpb24gKz0gYWR2YW5jZTsKICAgICB9Ci0KKyAgICAKICAg
ICBpZiAocGFyYWdyYXBoU29GYXIgPCBwYXJhZ3JhcGgpIHsKICAgICAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAgIH0KSW5kZXg6IGt3cS9LV1FUZXh0RWRpdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FUZXh0RWRpdC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjI0CmRpZmYgLXAgLXUgLXIxLjI0IGt3cS9LV1FUZXh0RWRp
dC5oCi0tLSBrd3EvS1dRVGV4dEVkaXQuaAkyMDA1LzA2LzIwIDA1OjI0OjI3CTEuMjQKKysrIGt3
cS9LV1FUZXh0RWRpdC5oCTIwMDUvMDYvMjIgMjI6MDk6MzEKQEAgLTc0LDggKzc0LDE0IEBAIGNs
YXNzIFFUZXh0RWRpdCA6IHB1YmxpYyBRU2Nyb2xsVmlldwogICAgIHZvaWQgc2V0U2Nyb2xsQmFy
TW9kZXMoU2Nyb2xsQmFyTW9kZSBoTW9kZSwgU2Nyb2xsQmFyTW9kZSB2TW9kZSk7CiAKICAgICB2
b2lkIHNldFdyaXRpbmdEaXJlY3Rpb24oUVBhaW50ZXI6OlRleHREaXJlY3Rpb24pOworCisgICAg
bG9uZyBzZWxlY3Rpb25TdGFydCgpOworICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7CisgICAgdm9p
ZCBzZXRTZWxlY3Rpb25TdGFydChsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChsb25n
KTsKICAgICAKICAgICB2b2lkIHNlbGVjdEFsbCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFu
Z2UobG9uZywgbG9uZyk7CiAKICAgICBRU2l6ZSBzaXplV2l0aENvbHVtbnNBbmRSb3dzKGludCBu
dW1Db2x1bW5zLCBpbnQgbnVtUm93cykgY29uc3Q7CiAKSW5kZXg6IGt3cS9LV1FUZXh0RWRpdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEVkaXQu
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDUKZGlmZiAtcCAtdSAtcjEuNDUga3dxL0tXUVRl
eHRFZGl0Lm1tCi0tLSBrd3EvS1dRVGV4dEVkaXQubW0JMjAwNS8wNi8yMCAwNToyNDoyNwkxLjQ1
CisrKyBrd3EvS1dRVGV4dEVkaXQubW0JMjAwNS8wNi8yMiAyMjowOTozMQpAQCAtODIsMTAgKzgy
LDEwIEBAIHZvaWQgUVRleHRFZGl0OjpnZXRDdXJzb3JQb3NpdGlvbihpbnQgKnAKIHsKICAgICBL
V1FUZXh0QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3KCk7CiAgICAgaWYg
KGluZGV4KQotCSppbmRleCA9IDA7CisgICAgICAgICppbmRleCA9IDA7CiAgICAgaWYgKHBhcmFn
cmFwaCkKLQkqcGFyYWdyYXBoID0gMDsKLQorICAgICAgICAqcGFyYWdyYXBoID0gMDsKKyAgICAK
ICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKICAgICBbdGV4dFZpZXcgZ2V0Q3Vyc29yUG9zaXRp
b25Bc0luZGV4OmluZGV4IGluUGFyYWdyYXBoOnBhcmFncmFwaF07CiAgICAgS1dRX1VOQkxPQ0tf
RVhDRVBUSU9OUzsKQEAgLTE4Niw2ICsxODYsOTkgQEAgdm9pZCBRVGV4dEVkaXQ6OnNldERpc2Fi
bGVkKGJvb2wgZmxhZykKICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogfQogCitsb25nIFFU
ZXh0RWRpdDo6c2VsZWN0aW9uU3RhcnQoKQoreworICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9
IChLV1FUZXh0QXJlYSAqKWdldFZpZXcoKTsKKyAgICAKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9O
UzsKKyAgICBOU1JhbmdlIHJhbmdlID0gW3RleHRWaWV3IHNlbGVjdGVkUmFuZ2VdOworICAgIGlm
IChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gcmFuZ2UubG9jYXRpb247CisgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKKyAgICAK
KyAgICByZXR1cm4gMDsKK30KKworbG9uZyBRVGV4dEVkaXQ6OnNlbGVjdGlvbkVuZCgpCit7Cisg
ICAgS1dRVGV4dEFyZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOworICAg
IAorICAgIEtXUV9CTE9DS19FWENFUFRJT05TOworICAgIE5TUmFuZ2UgcmFuZ2UgPSBbdGV4dFZp
ZXcgc2VsZWN0ZWRSYW5nZV07CisgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBOU01heFJhbmdlKHJhbmdlKTsKKyAgICBL
V1FfVU5CTE9DS19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiAwOworfQorCit2b2lkIFFU
ZXh0RWRpdDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFydCkKK3sKKyAgICBLV1FUZXh0QXJl
YSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3KCk7CisgICAgCisgICAgS1dRX0JM
T0NLX0VYQ0VQVElPTlM7CisgICAgTlNSYW5nZSByYW5nZSA9IFt0ZXh0VmlldyBzZWxlY3RlZFJh
bmdlXTsKKyAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgeworICAgICAgICBy
YW5nZS5sb2NhdGlvbiA9IDA7CisgICAgICAgIHJhbmdlLmxlbmd0aCA9IDA7CisgICAgfQorICAg
IAorICAgIC8vIGNvZXJjZSBzdGFydCB0byBhIHZhbGlkIHZhbHVlCisgICAgbG9uZyBtYXhMZW5n
dGggPSBbW3RleHRWaWV3IHRleHRdIGxlbmd0aF07CisgICAgbG9uZyBuZXdTdGFydCA9IHN0YXJ0
OworICAgIGlmIChuZXdTdGFydCA8IDApCisgICAgICAgIG5ld1N0YXJ0ID0gMDsKKyAgICBpZiAo
bmV3U3RhcnQgPiBtYXhMZW5ndGgpCisgICAgICAgIG5ld1N0YXJ0ID0gbWF4TGVuZ3RoOworICAg
IAorICAgIGlmICgodW5zaWduZWQpbmV3U3RhcnQgPCByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxl
bmd0aCkgeworICAgICAgICAvLyBJZiB3ZSdyZSBleHBhbmRpbmcgb3IgY29udHJhY3RpbmcsIGJ1
dCBub3QgY29sbGFwc2luZyB0aGUgc2VsZWN0aW9uCisgICAgICAgIHJhbmdlLmxlbmd0aCArPSBy
YW5nZS5sb2NhdGlvbiAtIG5ld1N0YXJ0OworICAgICAgICByYW5nZS5sb2NhdGlvbiA9IG5ld1N0
YXJ0OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIG9rLCB3ZSdyZSBjb2xsYXBzaW5nIHRoZSBz
ZWxlY3Rpb24KKyAgICAgICAgcmFuZ2UubG9jYXRpb24gPSBuZXdTdGFydDsKKyAgICAgICAgcmFu
Z2UubGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgW3RleHRWaWV3IHNldFNlbGVjdGVkUmFu
Z2U6cmFuZ2VdOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgUVRleHRF
ZGl0OjpzZXRTZWxlY3Rpb25FbmQobG9uZyBlbmQpCit7CisgICAgS1dRVGV4dEFyZWEgKnRleHRW
aWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOworICAgIAorICAgIEtXUV9CTE9DS19FWENF
UFRJT05TOworICAgIE5TUmFuZ2UgcmFuZ2UgPSBbdGV4dFZpZXcgc2VsZWN0ZWRSYW5nZV07Cisg
ICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICAgICAgcmFuZ2UubG9j
YXRpb24gPSAwOworICAgICAgICByYW5nZS5sZW5ndGggPSAwOworICAgIH0KKyAgICAKKyAgICAv
LyBjb2VyY2UgZW5kIHRvIGEgdmFsaWQgdmFsdWUKKyAgICBsb25nIG1heExlbmd0aCA9IFtbdGV4
dFZpZXcgdGV4dF0gbGVuZ3RoXTsKKyAgICBsb25nIG5ld0VuZCA9IGVuZDsKKyAgICBpZiAobmV3
RW5kIDwgMCkKKyAgICAgICAgbmV3RW5kID0gMDsKKyAgICBpZiAobmV3RW5kID4gbWF4TGVuZ3Ro
KQorICAgICAgICBuZXdFbmQgPSBtYXhMZW5ndGg7CisgICAgCisgICAgaWYgKCh1bnNpZ25lZClu
ZXdFbmQgPj0gcmFuZ2UubG9jYXRpb24pIHsKKyAgICAgICAgLy8gSWYgd2UncmUganVzdCBjaGFu
Z2luZyB0aGUgc2VsZWN0aW9uIGxlbmd0aCwgYnV0IG5vdCBsb2NhdGlvbi4uCisgICAgICAgIHJh
bmdlLmxlbmd0aCA9IG5ld0VuZCAtIHJhbmdlLmxvY2F0aW9uOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIG9rLCB3ZSd2ZSBjb2xsYXBzZWQgdGhlIHNlbGVjdGlvbiBhbmQgYXJlIG1vdmluZyBp
dAorICAgICAgICByYW5nZS5sb2NhdGlvbiA9IG5ld0VuZDsKKyAgICAgICAgcmFuZ2UubGVuZ3Ro
ID0gMDsKKyAgICB9CisgICAgCisgICAgW3RleHRWaWV3IHNldFNlbGVjdGVkUmFuZ2U6cmFuZ2Vd
OworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Cit9CisKIGJvb2wgUVRleHRFZGl0OjpoYXNT
ZWxlY3RlZFRleHQoKSBjb25zdAogewogICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9IChLV1FU
ZXh0QXJlYSAqKWdldFZpZXcoKTsKQEAgLTIwMyw2ICsyOTYsMzIgQEAgdm9pZCBRVGV4dEVkaXQ6
OnNlbGVjdEFsbCgpCiAKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKICAgICBbdGV4dFZpZXcg
c2VsZWN0QWxsXTsKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOworfQorCit2b2lkIFFUZXh0
RWRpdDo6c2V0U2VsZWN0aW9uUmFuZ2UobG9uZyBzdGFydCwgbG9uZyBsZW5ndGgpCit7CisgICAg
S1dRVGV4dEFyZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOworCisgICAg
S1dRX0JMT0NLX0VYQ0VQVElPTlM7CisgICAgbG9uZyBuZXdTdGFydCA9IHN0YXJ0OworICAgIGxv
bmcgbmV3TGVuZ3RoID0gbGVuZ3RoOworICAgIGlmIChuZXdTdGFydCA8IDApIHsKKyAgICAgICAg
Ly8gdHJ1bmNhdGUgdGhlIGxlbmd0aCBieSB0aGUgbmVnYXRpdmUgc3RhcnQKKyAgICAgICAgbmV3
TGVuZ3RoID0gbGVuZ3RoICsgbmV3U3RhcnQ7CisgICAgICAgIG5ld1N0YXJ0ID0gMDsKKyAgICB9
CisgICAgaWYgKG5ld0xlbmd0aCA8IDApIHsKKyAgICAgICAgbmV3TGVuZ3RoID0gMDsKKyAgICB9
CisgICAgaW50IG1heGxlbiA9IFtbdGV4dFZpZXcgdGV4dF0gbGVuZ3RoXTsKKyAgICBpZiAobmV3
U3RhcnQgPiBtYXhsZW4pIHsKKyAgICAgICAgbmV3U3RhcnQgPSBtYXhsZW47CisgICAgfQorICAg
IGlmIChuZXdTdGFydCArIG5ld0xlbmd0aCA+IG1heGxlbikgeworICAgICAgICBuZXdMZW5ndGgg
PSBtYXhsZW4gLSBuZXdTdGFydDsKKyAgICB9CisgICAgW3RleHRWaWV3IHNldFNlbGVjdGVkUmFu
Z2U6TlNNYWtlUmFuZ2UobmV3U3RhcnQsIG5ld0xlbmd0aCldOwogICAgIEtXUV9VTkJMT0NLX0VY
Q0VQVElPTlM7CiB9CiAKSW5kZXg6IGt3cS9LV1FUZXh0RmllbGQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEZpZWxkLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEga3dxL0tXUVRleHRGaWVsZC5oCi0tLSBrd3Ev
S1dRVGV4dEZpZWxkLmgJMjAwNS8wNi8yMCAwNToyNDoyNwkxLjIxCisrKyBrd3EvS1dRVGV4dEZp
ZWxkLmgJMjAwNS8wNi8yMiAyMjowOTozMQpAQCAtNTYsNiArNTYsOSBAQCBjbGFzcyBRTGluZUVk
aXQ7CiAtICh2b2lkKXNldEJhc2VXcml0aW5nRGlyZWN0aW9uOihOU1dyaXRpbmdEaXJlY3Rpb24p
ZGlyZWN0aW9uOwogLSAoTlNXcml0aW5nRGlyZWN0aW9uKWJhc2VXcml0aW5nRGlyZWN0aW9uOwog
CistIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2U7CistICh2b2lkKXNldFNlbGVjdGVkUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2U7CisKIC0gKE5TU3RyaW5nICopc3RyaW5nOwogCiBAZW5kCkluZGV4OiBrd3Ev
S1dRVGV4dEZpZWxkLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3
cS9LV1FUZXh0RmllbGQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzgKZGlmZiAtcCAtdSAt
cjEuNzgga3dxL0tXUVRleHRGaWVsZC5tbQotLS0ga3dxL0tXUVRleHRGaWVsZC5tbQkyMDA1LzA2
LzIwIDA1OjI0OjI3CTEuNzgKKysrIGt3cS9LV1FUZXh0RmllbGQubW0JMjAwNS8wNi8yMiAyMjow
OTozMQpAQCAtMzU3LDcgKzM1Nyw3IEBACiAtIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2UKIHsKICAg
ICBOU1RleHQgKmVkaXRvciA9IFtmaWVsZCBfS1dRX2N1cnJlbnRFZGl0b3JdOwotICAgIHJldHVy
biBlZGl0b3IgPyBbZWRpdG9yIHNlbGVjdGVkUmFuZ2VdIDogTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7CisgICAgcmV0dXJuIGVkaXRvciA/IFtlZGl0b3Igc2VsZWN0ZWRSYW5nZV0gOiBsYXN0
U2VsZWN0ZWRSYW5nZTsKIH0KIAogLSAodm9pZClzZXRTZWxlY3RlZFJhbmdlOihOU1JhbmdlKXJh
bmdlCkBAIC0zNjUsOSArMzY1LDMwIEBACiAgICAgLy8gUmFuZ2UgY2hlY2sganVzdCBpbiBjYXNl
IHRoZSBzYXZlZCByYW5nZSBoYXMgZ290dGVuIG91dCBvZiBzeW5jLgogICAgIC8vIEV2ZW4gdGhv
dWdoIHdlIGRvbid0IHNlZSB0aGlzIGluIHRlc3RpbmcsIHdlIHJlYWxseSBkb24ndCB3YW50CiAg
ICAgLy8gYW4gZXhjZXB0aW9uIGluIHRoaXMgY2FzZSwgc28gd2UgcHJvdGVjdCBvdXJzZWx2ZXMu
Ci0gICAgTlNUZXh0ICplZGl0b3IgPSBbZmllbGQgX0tXUV9jdXJyZW50RWRpdG9yXTsgICAgCi0g
ICAgaWYgKE5TTWF4UmFuZ2UocmFuZ2UpIDw9IFtbZWRpdG9yIHN0cmluZ10gbGVuZ3RoXSkgewor
ICAgIE5TVGV4dCAqZWRpdG9yID0gW2ZpZWxkIF9LV1FfY3VycmVudEVkaXRvcl07CisgICAgaWYg
KGVkaXRvcikgeyAvLyBpZiB3ZSBoYXZlIG5vIGZvY3VzLCB3ZSBkb24ndCBoYXZlIGEgY3VycmVu
dCBlZGl0b3IKKyAgICAgICAgdW5zaWduZWQgbGVuID0gW1tlZGl0b3Igc3RyaW5nXSBsZW5ndGhd
OworICAgICAgICBpZiAoTlNNYXhSYW5nZShyYW5nZSkgPiBsZW4pIHsKKyAgICAgICAgICAgIGlm
IChyYW5nZS5sb2NhdGlvbiA+IGxlbikgeworICAgICAgICAgICAgICAgIHJhbmdlLmxvY2F0aW9u
ID0gbGVuOworICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCA9IGxlbiAtIHJhbmdlLmxvY2F0
aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIFtlZGl0b3Igc2V0U2VsZWN0
ZWRSYW5nZTpyYW5nZV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gc2V0IHRoZSBsYXN0U2F2
ZWRSYW5nZSwgc28gaXQgd2lsbCBiZSB1c2VkIHdoZW4gZ2l2ZW4gZm9jdXMKKyAgICAgICAgdW5z
aWduZWQgbGVuID0gW1tmaWVsZCBzdHJpbmdWYWx1ZV0gbGVuZ3RoXTsKKyAgICAgICAgaWYgKE5T
TWF4UmFuZ2UocmFuZ2UpID4gbGVuKSB7CisgICAgICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24g
PiBsZW4pIHsKKyAgICAgICAgICAgICAgICByYW5nZS5sb2NhdGlvbiA9IGxlbjsKKyAgICAgICAg
ICAgICAgICByYW5nZS5sZW5ndGggPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICByYW5nZS5sZW5ndGggPSBsZW4gLSByYW5nZS5sb2NhdGlvbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBsYXN0U2VsZWN0ZWRSYW5nZSA9IHJhbmdlOwogICAgIH0K
IH0KIAo=
</data>
<flag name="review"
          id="72"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>