<?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>4680</bug_id>
          
          <creation_ts>2005-08-26 23:05:35 -0700</creation_ts>
          <short_desc>WebHTMLView (WebNSTextInputSupport) - attributedSubstringFromRange &quot;not yet implemented&quot;</short_desc>
          <delta_ts>2005-12-16 12:45:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Evan Gross">evan</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>17734</commentid>
    <comment_count>0</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-08-26 23:05:35 -0700</bug_when>
    <thetext>This method needs to be implemented in order for certain TSM DocAccess events to work properly.

Specifically, kEventClassTSMDocumentAccess/kEventTSMDocumentAccessGetFont fails horribly.

Without knowing a whole lot about how TSM hooks into Cocoa&apos;s NSTextInput protocol, this simple bit 
of code *seems* to have mostly solved the problem my input method was having:

- (NSAttributedString *)attributedSubstringFromRange:(NSRange)theRange
{
    return [self _attributeStringFromDOMRange:[[self _bridge] convertToObjCDOMRange:theRange]];
}

Ok, no range checking is being done, and probably needs to. Is it really this simple, or am I missing 
something?

I kind of doubt many input methods are using this at the moment, but it&apos;s blocking future development 
of my product (and along with it it&apos;s usefulness in Tiger Mail). There are other TSM problems as well I 
need to write up (they are all in radar), most seem fairly easy to fix. But then again, the glue between 
TSM and NSTextInput is private, and I don&apos;t really know how it all works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18661</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-09-04 08:46:44 -0700</bug_when>
    <thetext>This method also needs to be implemented for Character Palette&apos;s &quot;Insert with Font&quot; to work. I haven&apos;t 
checked if the proposed fix helps, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18716</commentid>
    <comment_count>2</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-09-04 17:55:15 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This method also needs to be implemented for Character Palette&apos;s &quot;Insert with Font&quot; to work. I haven&apos;t 
&gt; checked if the proposed fix helps, though.

Actually, this is needed for the CP&apos;s &quot;Show Character Selected in Application&quot; feature to work. The fix I 
propose DOES do the trick here.

I don&apos;t think it helps at all with &quot;Insert with Font&quot;, though. Probably WebKit needs to support the Glyph 
Access protocol (maybe it says it does, but actually doesn&apos;t right now - haven&apos;t taken a look). No idea 
how these TSM calls (glyph access) wind their way down into AppKit&apos;s TextInput management, though. 
Figuring out some stuff as I go along here, but it&apos;s a totally undocumented area.

Should have patch files for this and other related bugs in the next couple of days...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18723</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-09-04 21:17:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I don&apos;t think it helps at all with &quot;Insert with Font&quot;, though.

I&apos;ve just seen this method being called after clicking &quot;Insert with Font&quot;... Though it does appear illogical, I 
agree :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18741</commentid>
    <comment_count>4</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-09-05 02:35:36 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; I don&apos;t think it helps at all with &quot;Insert with Font&quot;, though.
&gt; 
&gt; I&apos;ve just seen this method being called after clicking &quot;Insert with Font&quot;... Though it does appear illogical, 
I 
&gt; agree :)

Sounds plausible, but this fix alone doesn&apos;t get &quot;Insert with Font&quot; working. Something else is obviously 
needed as well.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19445</commentid>
    <comment_count>5</comment_count>
      <attachid>3871</attachid>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-09-12 01:10:31 -0700</bug_when>
    <thetext>Created attachment 3871
proposed patch

Not sure if we need to check theRange, or test for a nil result from
_attributeStringFromDOMRange (as is done the other places it&apos;s called).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20599</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-09-25 11:49:47 -0700</bug_when>
    <thetext>This patch breaks the build for me (gcc 3.3, Development style): _attributeStringFromDOMRange needs a 
forward declaration.

Other than that, it worked perfectly in my tests, enabling a lot of features in Kotoeri, Character Palette and 
my own input method. Unfortunately, I also do not know the reason for the nil checks in other places 
where _attributeStringFromDOMRange is called.

BTW, you may want to set a review? flag (by clicking an &quot;Edit&quot; link for the attachment) when you think a 
patch is ready to be reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20613</commentid>
    <comment_count>7</comment_count>
      <attachid>3871</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-25 22:08:57 -0700</bug_when>
    <thetext>Comment on attachment 3871
proposed patch

Looks fine, although I don&apos;t think we need to put the attributedString into a
local variable before returning it. (I&apos;d probably just do this as a one-liner.)
r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20746</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-09-28 10:39:10 -0700</bug_when>
    <thetext>*** Bug 4708 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21054</commentid>
    <comment_count>9</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-01 01:01:53 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Looks fine, although I don&apos;t think we need to put the attributedString into a
&gt; local variable before returning it. (I&apos;d probably just do this as a one-liner.)

(In reply to comment #7)
&gt; Looks fine, although I don&apos;t think we need to put the attributedString into a
&gt; local variable before returning it. (I&apos;d probably just do this as a one-liner.)

Oh boy. More testing has revealed a number of problems. Not quite sure even where to start. No idea 
what exactly is broken. I suspect a few things might be...

I was wondering whether _attributeStringFromDOMRange could fail. Indeed it can, but not in the 
manner you&apos;d expect - i.e. returning nil. It fails by returning a bogus or empty NSAttributedString. Easy 
to reproduce, though it may be instructive to stick an NSLog statement in there to print the DOMRange 
we obtained and the NSAttributedString result to the Console:

1. Fire up Blot or whatever you like to test this stuff with.
2. Type &quot;two&lt;space&gt;words&lt;return&gt;&lt;return&gt;&quot;.
3. Open the Character Palette.
4. Select the space between &quot;two&quot; and &quot;words&quot; with the mouse (semi-important, if only to reveal yet 
another unrelated problem - 2nd note below 7.).
5. Choose &quot;Show Character Selected in Application&quot;.

Result: _attributeStringFromDOMRange returns an empty string instead of the space. So the character&apos;s 
not shown in the Character Palette.

Even more fun:
6. Place the insertion point at the end of the last return you typed.
7. Shift-Left-Arrow once.
- (note that there&apos;s no indication that anything&apos;s selected besides the fact the insertion point isn&apos;t 
visible - compare that to NSTextView).
- (note that the behavior here is different from what happens if you immediately did this after typing 
the 2nd return, before changing the selected text).
8. Choose &quot;Show Character Selected in Application&quot;.

Result: Seems OK - CP shows 0x000A.

9. Shift-Left-Arrow one more time.
10. Choose &quot;Show Character Selected in Application&quot;.

Result: Seems OK. CP shows 0x0001 - looks like a CP bug. _attributeStringFromDOMRange returns a 2-
character string &quot;0x000A0x000A&quot;.

9. Shift-Left-Arrow one MORE time.
10. Choose &quot;Show Character Selected in Application&quot;.

Result: Trouble._attributeStringFromDOMRange returns a 12-character string - the entire text, for a 3-
character selection (which arguably should only be two characters).

Looks like -convertToObjCDOMRange isn&apos;t quite doing what we need (returning too large a range), or 
else _attributeStringFromDOMRange is barfing on that range in some way.

Solution: No idea. This seems semi-promising:

NSAttributedString *attributedString2 = [bridge attributedStringFrom:[range startContainer] startOffset:
[range startOffset] to:[range endContainer] endOffset:[range endOffset]];

in that it returns the right thing for 4. above, when just the space is selected.

Doesn&apos;t seem to do the right thing for the multiple-line-endings-selected case, though the results are 
slightly different.

THERE&apos;S more, the problem noted in 4. above is particularly nasty, as it relates to 
kEventTextInputOffsetToPos. If an input sends offsettopos while a space is selected (at least with this 
patch in-place), an exception is thrown when TSM tries to figure out the font/size/lineheight/leading, 
and control never even returns to the input method that sent it. Not good. PLUS the problem is 
compounded due to the strange range that&apos;s assembled by NSTSMInputContext when 
kEventTextInputOffsetToPos is called with a negative offset and there&apos;s no inline input going on 
(theRange.length is always 1 for negative offsets, but zero otherwise!).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21058</commentid>
    <comment_count>10</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-01 02:05:38 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; THERE&apos;S more, the problem noted in 4. above is particularly nasty, as it relates to 
&gt; kEventTextInputOffsetToPos. If an input sends kEventTextInputOffsetToPos while a space is selected 
(at least with this 
&gt; patch in-place), an exception is thrown when TSM tries to figure out the font/size/lineheight/
leading, 
&gt; and control never even returns to the input method that sent it. Not good. PLUS the problem is 
&gt; compounded due to the strange range that&apos;s assembled by NSTSMInputContext when 
&gt; kEventTextInputOffsetToPos is called with a negative offset and there&apos;s no inline input going on 
&gt; (theRange.length is always 1 for negative offsets, but zero otherwise!).
&gt; 

More about this one:

If an input method sends kEventTextInputOffsetToPos with a negative offset (to get info for a character 
offset before the insertion point), firstRectForCharacterRange gets called with theRange.location set 
(seemingly) appropriately, but with theRange.length = 1. This is not the case with positive offsets 
(where theRange.length is always zero).

Not sure if this is as-designed or a NSTSMInputContext bug. Not quite sure what to make of this, there 
are a couple of issues that I suppose should be filed against firstRectForCharacterRange, though they 
intimately involve the results (or lack thereof) from attributedSubstringFromRange.

1. When kEventTextInputOffsetToPos is called with a positive offset, firstRectForCharacterRange gets 
called with theRange.length set to zero. Fine - sort of. When theRange.length == 0, and there&apos;s only an 
insertion point, attributedSubstringFromRange is NOT called to figure what to return for 
kEventParamTextInputReplyFMFont, kEventParamTextInputReplyPointSize, 
kEventParamTextInputReplyLineHeight or kEventParamTextInputReplyLineAscent. So the values 
returned are some sort of defaults - and in general, they&apos;re wrong.

2. When kEventTextInputOffsetToPos is called with a negative offset, firstRectForCharacterRange gets 
called with theRange.length set to one (no clue why).
- The Good: When theRange.length &gt; 0, attributedSubstringFromRange IS called to calculate the four 
font/style/line-related parameters.
- The Bad: With this patch, anyway, IF the range given to firstRectForCharacterRange happens to be a 
space character (OK for non-breaking space, but this whole spaces/nbsp thing, while necessary, just 
seems a big mess - but I digress), attributedSubstringFromRange will return a zero-length string. This 
doesn&apos;t jive with what TSM seems to expect for the range it supplied (a string of length 
theRange.length, I&apos;d guess). So somewhere in TSM, wherever it expects to be able to extract the above 
four return parameters for kEventTextInputOffsetToPos, it barfs on the zero-length string. An out-of-
bounds exception is thrown, and control never returns to the input method (arguably a TSM bug in that 
it should catch the exception so it can always return control back to the IM). Basically, this is akin to a 
crash.

Solutions?

+ The alternate method to obtain the attributed string:

NSAttributedString *attributedString = [bridge attributedStringFrom:[range startContainer] startOffset:
[range startOffset] to:[range endContainer] endOffset:[range endOffset]];

At least deals with the space character problem. Not sure it&apos;s good in all situations.

+ Seems we can avoid the exception being thrown simply by testing for a zero-length attributed string 
result for a non-zero theRange.length, and return nil instead of the empty string. May also apply to 
other length mismatches, at least if the attributed string length is less than theRange.length.

But it&apos;s an avoidance approach, not really a fix.

Suggestions, anyone?

Guess this more appropriate for a firstRectForCharacterRange report...so I will probably add this info 
over there as well.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21232</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-02 23:30:12 -0700</bug_when>
    <thetext>I think it&apos;s a mistake to let one bug report start tracking all sorts of different problems discovered while 
working on it.

So to get some sanity here, we need this to represent one specific problem. I can&apos;t figure out which one, so 
for now I&apos;m just going to clear the review flag and let Evan set it back once we get clear on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21319</commentid>
    <comment_count>12</comment_count>
      <attachid>4190</attachid>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-04 02:12:05 -0700</bug_when>
    <thetext>Created attachment 4190
Updated patch

This new patch avoids calling -[self _attributeStringFromDOMRange:] because it
seems to have some problems and limitations, the source isn&apos;t available to
folks like myself, and it&apos;s not documented as to what it can and can&apos;t do. Best
to avoid, I suppose.

This patch doesn&apos;t have the problem with spaces returning an empty attributed
string. Seems to do the job, as long as convertToObjCDOMRange: takes care of
the basic range checking that the NSTextInput protocol docs mention (a
DOM-conversant person should know).

Basically, it&apos;s the same code used as a fallback in -attributedString, when the
test for a non-nil result from _attributeStringFromDOMRange fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21320</commentid>
    <comment_count>13</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-04 02:14:15 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I think it&apos;s a mistake to let one bug report start tracking all sorts of different problems discovered 
while working on it.

Yep, this is getting out-of-hand. I really think we need to consult with Mr. NSTSMContext (Aki Inoue, if 
I&apos;m correct) to figure out where some of the above problems are. It would really be nice to know how 
TSM actually uses NSTextInput for the various TSM CarbonEvents.

&gt; So to get some sanity here, we need this to represent one specific problem.

Solves just the one, original problem of getting an attributed string from an arbitrary NSRange.

I&apos;ll have to file bugs on the other stuff I&apos;ve found (some are filed, some aren&apos;t, some solutions need 
guidance from &quot;those that know&quot;).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21321</commentid>
    <comment_count>14</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-04 02:29:14 -0700</bug_when>
    <thetext>(In reply to comment #12)
Arggh. Still not quite right. Still returns in certain cases (multiple returns in a row) an empty string when it 
shouldn&apos;t. Maybe tomorrow.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21395</commentid>
    <comment_count>15</comment_count>
      <attachid>4208</attachid>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-05 02:32:49 -0700</bug_when>
    <thetext>Created attachment 4208
Updated patch

Ok, I like this one better. Not entirely perfect, but it&apos;s doing the job for me
in various situations.

Yet more discoveries, it&apos;s quite heavily commented (not sure if there still may
be &quot;too much information&quot; supplied).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21506</commentid>
    <comment_count>16</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-05 17:24:45 -0700</bug_when>
    <thetext>One way to test: Make any selection in (say) Blot, choose &quot;Show Character Selected in Application&quot; from the 
Character Palette&apos;s Action button. This seems to actually only show the character if you have only one 
selected, but it always calls attributedSubstringFromRange with the entire selection range.

To take the &quot;fallback&quot; route in the code, usually selecting a single space will do the trick, as will selecting 
two or three line endings in a row (use shift-left-arrow or something after placing the insertion at the end 
of a document that ends in a few linefeeds).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21586</commentid>
    <comment_count>17</comment_count>
      <attachid>4208</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-08 11:17:02 -0700</bug_when>
    <thetext>Comment on attachment 4208
Updated patch

There&apos;s a fundamental problem here because _attributeStringFromDOMRange: uses
an entirely different code path than our usual conversion to a string, and
there&apos;s no way to guarantee they are in sync.

I don&apos;t like the strategy here; I think instead we need to create a new
conversion to attributed string that *is* based on the WebCore text machinery
(rather than relying no the entirely-outside-WebKit one from AppKit we are
currently using) for this call.

I&apos;m sorry; I know that&apos;s a bigger undertaking than this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21592</commentid>
    <comment_count>18</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-08 18:41:55 -0700</bug_when>
    <thetext>(In reply to comment #17)
No need to be sorry - I don&apos;t much like this either. Better than the first, still not good enough. After 
more testing with this patch, I see:

- performance is really bad, since _attributeStringFromDOMRange, while doing a good job in general, is 
slow, undocumented, and obviously buggy (empty string for a range consisting of a space).
- we may not actually need all the attributes returned by _attributeStringFromDOMRange, at least an 
input method or input manager doesn&apos;t.

We *could* simply using -[bridge attributedStringFrom:startOffset:to:endOffset:], however this gives 
only font and foreground color attributes (probably ok for input methods), it&apos;s faster, but still not 
always quite right. Seems to return bogus or empty strings for some ranges containing only whitespace 
or newlines.

The BEST way to go (from what I&apos;ve seen so far), would be to extract the substring from the result of 
calling [self attributedString]. I don&apos;t see empty strings returned from any of the &quot;problematic&quot; ranges, 
it&apos;s always in-sync with what&apos;s considered as the entire attributed string. BUT it&apos;s a really bad performer. 
If there was some way to cache the result from [self attributedString] until it was modified, that could 
improve performance significantly, at least for those input methods that are inspecting what&apos;s in the 
document even when you&apos;re not changing it (Dictionary popup, for example - my product as well at 
certain times). I have no idea how to correctly do the above at this point in time, though.

Ideas?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22536</commentid>
    <comment_count>19</comment_count>
      <attachid>4447</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-10-23 05:53:27 -0700</bug_when>
    <thetext>Created attachment 4447
Proposed patch

This is basically Evan&apos;s patch that used [WebCoreBridge
attributedStringFrom:startOffset:to:endOffset:], packaged with an automated
test.

Correct behavior relies on other patches that are currently in commit and
review queues - range checking is fixed in bug 4682; attributed strings testing
is implemented in bug 5303, and there may be other dependencies that I
overlooked.

There are indeed some issues with multiple returns - but they seem to be caused
by deeper problems, and should be handled separately IMO.

WebHTMLView uses _attributeStringFromDOMRange in a couple other places -
shouldn&apos;t they be changed to attributedStringFrom:startOffset:to:endOffset:, as
well? Then someone from Apple would need to add support for more attributes,
perhaps by copying it from [NSAttributedString _initWithDOMRange:].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23313</commentid>
    <comment_count>20</comment_count>
      <attachid>4533</attachid>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-10-30 01:17:14 -0800</bug_when>
    <thetext>Created attachment 4533
Proposed patch - safer?

This is Alexey&apos;s most recent patch (without the tests), pretty much identical
but wrapped in an NS_DURING/NS_ENDHANDLER. Since it&apos;s usually the case that
this gets called from a CarbonEvent handler, we should probably make sure that
exceptions don&apos;t propagate into the toolbox. Same may well go for other
TextInput methods as well...

I don&apos;t think we should count on NSTSMDocumentAccessEventHandler or
NSTSMTextInputEventHandler to do this for us. At this point in time (10.4.2),
if an exception is raised but not caught, SendTextInputEvent() will not return
to the input method, nasty things can happen.

I&apos;d recommend that this be done for all the top-level NSTextInput methods that
make calls to anything that could conceivably raise an exception. Realize that
I have no idea if this is going to be adequate for exceptions that originate in
lower-level C++ layers. All I know for sure is that  if you call +[NSException
raise:format] (or whatever) in this or (probably) any other NSTextInput method,
the above nastiness happens.

OK, that said, I&apos;ve done quite a bit of real-world testing with this and the
most recent versions of any other proposed patches (almost all are required to
enable the new functionality I&apos;m working on in my product). I know quite a bit
more now than I did a few weeks ago, at least wrt where most of the problems
I&apos;ve described actually originate. More bugs will be filed shortly...

Provided the bugs that affect the proper behavior of this patch are fixed
(there are a bunch, both at the WebCore level below this, and the AppKit level
above), I think this patch will do what&apos;s needed. I&apos;m not seeing any real issue
related to the fact that [WebCoreBridge
attributedStringFrom:startOffset:to:endOffset:] (in general) adds only font and
foreground color attributes. Seems enough for TSM events that make use of
attributes. Not sure if that&apos;s true for Cocoa input servers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23748</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-11-04 14:44:55 -0800</bug_when>
    <thetext>The problem with line breaks is bug 5631.

AFAIK, the methods used here aren&apos;t supposed to throw exceptions, so the decision on whether to 
safeguard with NS_DURING/NS_ENDHANDLER is not entirely obvious... I like to write my own code 
defensively, but WebKit seems to usually have fewer safeguards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23945</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-11-12 00:47:42 -0800</bug_when>
    <thetext>It doesn&apos;t look like WebNSTextInputSupport methods should be using TextIterator at all. TextIterator uses 
rendered text (see, for example, bug 3429), and may be eventually converted to use render tree (see its 
FIXME comments) - while TextInput is IMO supposed to provide DOM text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24477</commentid>
    <comment_count>23</comment_count>
      <attachid>4533</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-23 17:26:17 -0800</bug_when>
    <thetext>Comment on attachment 4533
Proposed patch - safer?

We don&apos;t need the NS_DURING code here, so this is no better than the other
patch (which still needs review).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25256</commentid>
    <comment_count>24</comment_count>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-11-30 22:25:11 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; It doesn&apos;t look like WebNSTextInputSupport methods should be using TextIterator at all.

That may well be true...

&gt; ...while TextInput is IMO supposed to provide DOM text.

Not sure about this statement yet. Absolutely when the given range lies within marked text! But it&apos;s not 
so clear-cut for something like the Dictionary pop-up. In fact, a quick test with the Dictionary pop-up 
with text-transform:uppercase applied to some lowercase text, shows that on 10.4.3 it displays the 
DOM (lowercase) text, but with the nightly build from a couple days ago, it displays the rendered text!

Since the Dictionary pop-up doesn&apos;t have the ability to modify the document&apos;s text, I think showing the 
rendered text is the right thing to do.

BUT for an input method that can modify any range of text via UAIA w/replacerange, it could go either 
way. I waffle between the two myself, since my input method can (not the shipping version!) do both - 
draw what&apos;s in the document in an overlay, AND replace that text via UAIA.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25257</commentid>
    <comment_count>25</comment_count>
      <attachid>4889</attachid>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-11-30 22:41:13 -0800</bug_when>
    <thetext>Created attachment 4889
More rigorous layout test for attributedSubstringFromRange to show what doesn&apos;t work

The layout test in attachment 4447 is a bit &quot;too easy.&quot; It doesn&apos;t show the
current troubles with ranges that enclose some sort of line break.

This one creates 3 lines of text, and does it more like it would actually
occur, via typing commands. It will display both the attributed string and its
length, so it&apos;s more obvious when things go wrong (i.e. string with wrong
length is returned).

The expected results in this patch were created using this version of
attributedSubstringFromRange:

- (NSAttributedString *)attributedSubstringFromRange:(NSRange)theRange
{
    WebBridge *bridge = [self _bridge];
    NSAttributedString *attributedString = [bridge attributedStringFrom:[bridge
DOMDocument] startOffset:0 to:nil endOffset:0];
    
    return !NSLocationInRange(theRange.location, NSMakeRange(0,
[attributedString length])) ? nil : [attributedString
attributedSubstringFromRange:NSIntersectionRange(theRange, NSMakeRange(0,
[attributedString length]))];
}

This seems to always give the correct results (according to -[bridge
attributedStringFrom:startOffset:to:endOffset:] with current patches applied).

With the latest proposed patch, it&apos;s easy to see the failures when you run this
test.

Not sure if there&apos;s some better way to package this, I&apos;ve been building with
the above version of attributedSubstringFromRange to get expected results, then
again with the latest proposed patch to find the problems. A bit of a pain, but
you&apos;ll see how screwy the results can be...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25453</commentid>
    <comment_count>26</comment_count>
      <attachid>4447</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-03 12:33:28 -0800</bug_when>
    <thetext>Comment on attachment 4447
Proposed patch

OK, lets land this even though we know it won&apos;t work in all cases. We need to
figure out how to make this work properly, though. We should come up with test
cases that show AppKit HTML conversion not matching WebKit&apos;s plain text
conversion, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25472</commentid>
    <comment_count>27</comment_count>
      <attachid>4924</attachid>
    <who name="Evan Gross">evan</who>
    <bug_when>2005-12-03 18:59:38 -0800</bug_when>
    <thetext>Created attachment 4924
The actual results from this test, using the proposed patch

Forgot to also upload the actual results I&apos;m getting, so here they are. The
main issue is that ranges that include a line break, or maybe even start at the
beginning of a line, give totally wrong results. Take a look at the results for
range (0,7) for instance - the entire text is returned.

I don&apos;t think this patch is the problem, but that bug 5610 is the reason it&apos;s
failing. I don&apos;t really think that additional layout tests are necessary, at
least until we can fix things so this one passes. Once we get a &quot;sane&quot;
attributed string for any arbitrary NSRange, then we might want to worry about
whether the text actually matches up with the results from other plain text
methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26056</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-16 08:50:59 -0800</bug_when>
    <thetext>I checked this in, but the layout tests are not giving the results that were in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26063</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-16 12:17:50 -0800</bug_when>
    <thetext>The new results appear to be quite wrong :-(. I&apos;m going to investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26065</commentid>
    <comment_count>30</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-16 12:45:32 -0800</bug_when>
    <thetext>Ok, it&apos;s because the results were depending on the patch in bug 4682, as noted in comment 19. I&apos;ve 
noticed no other differences in attributed-substring-from-range; haven&apos;t checked attributed-substring-
from-range-lines (but this one wasn&apos;t giving correct results anyway).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3871</attachid>
            <date>2005-09-12 01:10:31 -0700</date>
            <delta_ts>2005-10-04 02:12:05 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>attributedSubstringFromRange.txt</filename>
            <type>text/plain</type>
            <size>795</size>
            <attacher name="Evan Gross">evan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkhUTUxWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktp
dC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
NjcKZGlmZiAtcCAtdSAtcjEuNDY3IFdlYkhUTUxWaWV3Lm0KLS0tIFdlYkhUTUxWaWV3Lm0JNSBT
ZXAgMjAwNSAyMjoyNjowNSAtMDAwMAkxLjQ2NworKysgV2ViSFRNTFZpZXcubQkxMiBTZXAgMjAw
NSAwNjoyMzozMSAtMDAwMApAQCAtNDk0Niw4ICs0OTQ2LDExIEBAIHN0YXRpYyBOU0FycmF5ICp2
YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0
ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2UpdGhlUmFuZ2UKIHsKLSAgICBFUlJPUigiVEVY
VElOUFVUOiBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOiBub3QgeWV0IGltcGxlbWVudGVk
Iik7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlk
Z2VdOworICAgIERPTVJhbmdlICpyYW5nZSA9IFticmlkZ2UgY29udmVydFRvT2JqQ0RPTVJhbmdl
OnRoZVJhbmdlXTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBb
c2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOnJhbmdlXTsKKworICAgIHJldHVybiBh
dHRyaWJ1dGVkU3RyaW5nOwogfQogCiAtIChsb25nKWNvbnZlcnNhdGlvbklkZW50aWZpZXIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4190</attachid>
            <date>2005-10-04 02:12:05 -0700</date>
            <delta_ts>2005-10-05 02:32:49 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>attributedSubstringFromRange2.txt</filename>
            <type>text/plain</type>
            <size>1016</size>
            <attacher name="Evan Gross">evan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkhUTUxWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktp
dC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
NzEKZGlmZiAtcCAtdSAtcjEuNDcxIFdlYkhUTUxWaWV3Lm0KLS0tIFdlYkhUTUxWaWV3Lm0JMjQg
U2VwIDIwMDUgMTA6NTg6MTkgLTAwMDAJMS40NzEKKysrIFdlYkhUTUxWaWV3Lm0JNCBPY3QgMjAw
NSAwODo1NToyOSAtMDAwMApAQCAtNDk0OCw4ICs0OTQ4LDE3IEBAIHN0YXRpYyBOU0FycmF5ICp2
YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0
ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2UpdGhlUmFuZ2UKIHsKLSAgICBFUlJPUigiVEVY
VElOUFVUOiBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOiBub3QgeWV0IGltcGxlbWVudGVk
Iik7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlk
Z2VdOworICAgIERPTVJhbmdlICpyYW5nZSA9IFticmlkZ2UgY29udmVydFRvT2JqQ0RPTVJhbmdl
OnRoZVJhbmdlXTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7Cisg
ICAgCisgICAgaWYgKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pIHsKKyAgICAgICAgYXR0cmlidXRl
ZFN0cmluZyA9IFticmlkZ2UgYXR0cmlidXRlZFN0cmluZ0Zyb206W3JhbmdlIHN0YXJ0Q29udGFp
bmVyXSBzdGFydE9mZnNldDpbcmFuZ2Ugc3RhcnRPZmZzZXRdIHRvOltyYW5nZSBlbmRDb250YWlu
ZXJdIGVuZE9mZnNldDpbcmFuZ2UgZW5kT2Zmc2V0XV07CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YXR0cmlidXRlZFN0cmluZyA9IG5pbDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGF0dHJpYnV0
ZWRTdHJpbmc7CiB9CiAKIC0gKGxvbmcpY29udmVyc2F0aW9uSWRlbnRpZmllcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4208</attachid>
            <date>2005-10-05 02:32:49 -0700</date>
            <delta_ts>2005-10-23 05:53:27 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>attributedSubstringFromRange3.txt</filename>
            <type>text/plain</type>
            <size>3363</size>
            <attacher name="Evan Gross">evan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkhUTUxWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktp
dC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
NzEKZGlmZiAtcCAtdSAtcjEuNDcxIFdlYkhUTUxWaWV3Lm0KLS0tIFdlYkhUTUxWaWV3Lm0JMjQg
U2VwIDIwMDUgMTA6NTg6MTkgLTAwMDAJMS40NzEKKysrIFdlYkhUTUxWaWV3Lm0JNSBPY3QgMjAw
NSAwOToyNjo1NiAtMDAwMApAQCAtNDk0OCw4ICs0OTQ4LDU1IEBAIHN0YXRpYyBOU0FycmF5ICp2
YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0
ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2UpdGhlUmFuZ2UKIHsKLSAgICBFUlJPUigiVEVY
VElOUFVUOiBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOiBub3QgeWV0IGltcGxlbWVudGVk
Iik7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dWJTdHJpbmcgPSBuaWw7CisgICAgV2ViQnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsK
KyAgICBET01SYW5nZSAqcmFuZ2UgPSBbYnJpZGdlIGNvbnZlcnRUb09iakNET01SYW5nZTp0aGVS
YW5nZV07CisgICAgCisgICAgLy8gIElmIHdlIGNhbiBnZXQgcmVzdWx0cyBmcm9tIF9hdHRyaWJ1
dGVTdHJpbmdGcm9tRE9NUmFuZ2UsIHVzZSB0aGVtLgorICAgIC8vICBUaGlzIG1ldGhvZCBnZXRz
IHVzIG1vcmUgYXR0cmlidXRlcyB0aGFuIHRoZSBmYWxsYmFja3MgYmVsb3cgKHVuZGVybGluZSwK
KyAgICAvLyAgc3VwZXIvc3Vic2NyaXB0LCBwYXJhZ3JhcGggc3R5bGUsIGV0Yy4pLgorICAgIC8v
ICBOb3RlIHRoYXQgKHNvbWUpIHJhbmdlcyB0aGF0IGNvbnNpc3Qgb2Ygd2hpdGVzcGFjZSByZXR1
cm4gYSB6ZXJvLWxlbmd0aAorICAgIC8vICBzdHJpbmcgKE5PVCBuaWwhKS4gTm90IHN1cmUgd2h5
LgorICAgIC8vICBOb3RlIHRoYXQgKHNvbWUpIHJhbmdlcyB0aGF0IGNvbnRhaW4gbmV3bGluZSBj
aGFyYWN0ZXJzIHJldHVybiBhIHN0cmluZworICAgIC8vICBtdWNoIGxvbmdlciB0aGFuIHdoYXQg
d2UgYXNrZWQgZm9yLCBsaWtlbHkgYmVjYXVzZSBvZiB0aGUgcmVzdWx0IGZyb20KKyAgICAvLyAg
Y29udmVydFRvT2JqQ0RPTVJhbmdlLgorICAgIGlmIChbcmFuZ2Ugc3RhcnRDb250YWluZXJdKSB7
CisgICAgICAgIGF0dHJpYnV0ZWRTdWJTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlU3RyaW5nRnJv
bURPTVJhbmdlOnJhbmdlXTsKKyAgICB9CisgICAgCisgICAgLy8gIFJldHVybmluZyBhbiBhdHRy
aWJ1dGVkIHN0cmluZyB3aXRoIGxlbmd0aCBsZXNzIHRoYW4gdGhlUmFuZ2UubGVuZ3RoCisgICAg
Ly8gIG1heSBjYXVzZSBUU00gdG8gcmFpc2UgYW4gb3V0LW9mLWJvdW5kcyBleGNlcHRpb24sIGlm
IGNhbGxlZCB2aWEga0V2ZW50VGV4dElucHV0T2Zmc2V0VG9Qb3MuCisgICAgLy8gIFNlZW1zIHRv
IGhhcHBlbiB3aGVuIFRTTSB0cmllcyB0byBjYWxjdWxhdGUgdGhlIGxpbmUgaGVpZ2h0LCBsaW5l
IGFzY2VudCBhbmQgZm9udCBzaXplLgorICAgIC8vICBUaGlzIGlzIGEgInZlcnkgYmFkIHRoaW5n
IiBhbmQgaGFzIHRvIGJlIGF2b2lkZWQsIGFzIGNvbnRyb2wgbmV2ZXIgcmV0dXJucworICAgIC8v
ICB0byB0aGUgaW5wdXQgbWV0aG9kLgorICAgIC8vICBSZXR1cm5pbmcgYW4gYXR0cmlidXRlZCBz
dHJpbmcgd2l0aCBsZW5ndGggKHVzdWFsbHkgc2lnbmlmaWNhbnRseSBncmVhdGVyIHRoYW4pCisg
ICAgLy8gIHRoZVJhbmdlLmxlbmd0aCBjYW4gY2F1c2Ugb3RoZXIgbmFzdHkgdGhpbmdzIChsaWtl
IHRoZSBDaGFyYWN0ZXIgUGFsZXR0ZSBjYW4gY3Jhc2gpLgorICAgIC8vICBTbyBpZiB3ZSBkb24n
dCBnZXQgdGhlIGxlbmd0aCB3ZSdyZSBhc2tpbmcgZm9yLCBiYWlsIGFuZCB1c2UgdGhlIGZhbGxi
YWNrIGJlbG93LgorICAgIGlmIChhdHRyaWJ1dGVkU3ViU3RyaW5nID09IG5pbCB8fCBbYXR0cmli
dXRlZFN1YlN0cmluZyBsZW5ndGhdICE9IHRoZVJhbmdlLmxlbmd0aCkgeworICAgICAgICAKKyAg
ICAgICAgLy8gIFRoZSBhYm92ZSBwcm9ibGVtcyBzZWVtIE5PVCB0byBoYXBwZW4gaWYgd2UgZ2V0
IHRoZSBlbnRpcmUgZG9jdW1lbnQncyBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIC8vICBhbmQg
ZXh0cmFjdCB0aGUgc3Vic3RyaW5nIGZyb20gaXQuIFdlIHRyeSBub3QgdG8gdGFrZSB0aGlzIGFw
cHJvYWNoIGJ5IGRlZmF1bHQgYmVjYXVzZQorICAgICAgICAvLyAgaXQncyBwcm9iYWJseSBhIHBv
b3IoZXIpIHBlcmZvcm1lci4KKyAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpkb2N1bWVudEF0
dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBhdHRyaWJ1dGVkU3RyaW5nXTsKKworICAgICAgICAvLyAg
SGF2ZSB0byBiZSBwcmVwYXJlZCBmb3IgdGhlUmFuZ2UgdG8gYmUgb3V0LW9mLWJvdW5kcyAoTlNU
ZXh0SW5wdXQgc2F5cyBzbykuCisgICAgICAgIC8vICBTbyB3ZSBhZGp1c3QgaXQgdG8gdXNlIHRo
ZSBpbnRlcnNlY3Rpb24gcmFuZ2UgKHNlZSB0ZXN0IGZvciAiY29ycmVjdCBsZW5ndGgiCisgICAg
ICAgIC8vICBiZWxvdykuIElmIHRoZSByYW5nZXMgZG9uJ3QgaW50ZXJzZWN0LCB3ZSBoYXZlIHRv
IHJldHVybiBuaWwuCisgICAgICAgIHRoZVJhbmdlID0gTlNJbnRlcnNlY3Rpb25SYW5nZSh0aGVS
YW5nZSwgTlNNYWtlUmFuZ2UoMCwgW2RvY3VtZW50QXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSk7
CisgICAgICAgIGlmICh0aGVSYW5nZS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBhdHRyaWJ1
dGVkU3ViU3RyaW5nID0gW2RvY3VtZW50QXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3Vic3Ry
aW5nRnJvbVJhbmdlOnRoZVJhbmdlXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF0
dHJpYnV0ZWRTdWJTdHJpbmcgPSBuaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAgSWYg
d2UgU1RJTEwgZG9uJ3QgaGF2ZSBhICJjb3JyZWN0IGxlbmd0aCIgc3Vic3RyaW5nLCBqdXN0IHJl
dHVybiBuaWwuCisgICAgLy8gIFRoaXMgYXQgbGVhc3QgYXZvaWRzIFRTTSByYWlzaW5nIGFuIG91
dC1vZi1ib3VuZHMgZXhjZXB0aW9uLgorICAgIGlmIChhdHRyaWJ1dGVkU3ViU3RyaW5nICE9IG5p
bCAmJiBbYXR0cmlidXRlZFN1YlN0cmluZyBsZW5ndGhdICE9IHRoZVJhbmdlLmxlbmd0aCkgewor
ICAgICAgICBhdHRyaWJ1dGVkU3ViU3RyaW5nID0gbmlsOworICAgIH0KKworICAgIHJldHVybiBh
dHRyaWJ1dGVkU3ViU3RyaW5nOwogfQogCiAtIChsb25nKWNvbnZlcnNhdGlvbklkZW50aWZpZXIK
</data>
<flag name="review"
          id="685"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4447</attachid>
            <date>2005-10-23 05:53:27 -0700</date>
            <delta_ts>2005-12-03 12:33:28 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>AttributedSubstringFromRangePatch.txt</filename>
            <type>text/plain</type>
            <size>8182</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IGF0dHJpYnV0ZWQtc3Vic3RyaW5nLWZyb20tcmFuZ2UtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KZGlmZiAtTnB1IGF0dHJpYnV0ZWQtc3Vic3RyaW5nLWZyb20tcmFuZ2UtZXhwZWN0ZWQu
dHh0Ci0tLSBhdHRyaWJ1dGVkLXN1YnN0cmluZy1mcm9tLXJhbmdlLWV4cGVjdGVkLnR4dAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBhdHRyaWJ1dGVkLXN1YnN0cmluZy1mcm9tLXJhbmdl
LWV4cGVjdGVkLnR4dAkyMyBPY3QgMjAwNSAxMjo0MDozNCAtMDAwMApAQCAtMCwwICsxLDMwIEBA
CitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJ
VElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQgPiBJID4gQiA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDMgb2YgI3RleHQgPiBJID4gQiA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9u
CitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorVGVz
dGluZyBzdHlsZWQgdGV4dCAoMTI8Yj4zPGk+NDU2PC9pPjwvYj4pCisoMCwgMCk6IHsgTlNDb2xv
ciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Sb21h
biAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7
IH0KKygwLCAyKTogMTJ7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAx
OyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9
MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9CisoMCwgMyk6IDEyeyBOU0NvbG9yID0gTlNDYWxpYnJh
dGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQ
IFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfTN7IE5TQ29sb3Ig
PSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZCAx
Ni4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0K
KygwLCA2KTogMTJ7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBO
U0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhY
WFhYWFhYWCwgc3BjPTQuMDAiOyB9M3sgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JT
cGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhY
KSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfTQ1NnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRl
ZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkSXRhbGljIDE2LjAwIHB0
LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfQorKDAsIDcp
OiAxMnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9
ICJUaW1lcy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhY
LCBzcGM9NC4wMCI7IH0zeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAg
MTsgTlNGb250ID0gIlRpbWVzLUJvbGQgMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9
MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9NDU2eyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVD
b2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGRJdGFsaWMgMTYuMDAgcHQuIFAgW10g
KDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9CisoMCwgMTAwKTogMTJ7
IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGlt
ZXMtUm9tYW4gMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3Bj
PTQuMDAiOyB9M3sgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5T
Rm9udCA9ICJUaW1lcy1Cb2xkIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhY
WFhYWFgsIHNwYz00LjAwIjsgfTQ1NnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JT
cGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkSXRhbGljIDE2LjAwIHB0LiBQIFtdICgweFhY
WFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfQorKDUsIDEpOiA2eyBOU0NvbG9y
ID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGRJ
dGFsaWMgMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQu
MDAiOyB9CisoNSwgMik6IDZ7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2Ug
MCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZEl0YWxpYyAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhY
WCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0KKygxMDAsIDApOiB1bmRlZmluZWQKKygx
MDAsIDEwMCk6IHVuZGVmaW5lZAorVGVzdGluZyBwcm9wZXIgc3BhY2UgcnVucyAoMS5fMi5fXzMu
X19fNF81KQordG90YWwgbGVuZ3RoOiAxNQorb25lIHNwYWNlOiAiICIKK3R3byBzcGFjZXM6ICIg
wqAiCit0aHJlZSBzcGFjZXM6ICIgwqDCoCIKK2ZvdXIgc3BhY2VzOiAiIMKgwqDCoCIKK1Rlc3Rp
bmcgc3BhY2Utb25seSBydW5zICgxLi4yLi4uMy4uLi40LjUpCit0b3RhbCBsZW5ndGg6IDkKKygw
LCAxMDApOiAxIDIgMyA0IDV7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2Ug
MCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZv
Ymo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9CisKKwpJbmRleDogYXR0cmlidXRlZC1zdWJzdHJp
bmctZnJvbS1yYW5nZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGF0dHJpYnV0ZWQtc3Vic3Ry
aW5nLWZyb20tcmFuZ2UuaHRtbAotLS0gYXR0cmlidXRlZC1zdWJzdHJpbmctZnJvbS1yYW5nZS5o
dG1sCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGF0dHJpYnV0ZWQtc3Vic3RyaW5nLWZy
b20tcmFuZ2UuaHRtbAkyMyBPY3QgMjAwNSAxMjo0MDoxMiAtMDAwMApAQCAtMCwwICsxLDczIEBA
Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorYm9keSB7IG1hcmdpbjogMTA7IHBhZGRpbmc6IDAg
fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IGNvbnRlbnRlZGl0YWJsZT4KKzEyPGI+MzxpPjQ8
L2k+PC9iPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCisgICAgdmFyIGNvbnNv
bGVfbWVzc2FnZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOworICAgIAorICAgIGZ1
bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgIHsKKyAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJsaSIpOworICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKFN0cmluZyhtZXNzYWdlKS5yZXBsYWNlKC8weFswLTlhLWZBLUZdezh9L2cs
ICIweFhYWFhYWFhYIikpKTsKKyAgICAgICAgY29uc29sZV9tZXNzYWdlcy5hcHBlbmRDaGlsZChp
dGVtKTsKKyAgICB9CisgICAgCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIAorICAgICAgICAgICAgbG9nKCJU
ZXN0aW5nIHN0eWxlZCB0ZXh0ICgxMjxiPjM8aT40NTY8L2k+PC9iPikiKTsKKyAgICAgICAgICAg
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlvbihkb2N1bWVudC5ib2R5LCA0KTsKKyAg
ICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dCgiNTYiLCAwLCAxKTsK
KworICAgICAgICAgICAgbG9nKCIoMCwgMCk6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJp
YnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMCwgMCkpOworICAgICAgICAgICAgbG9nKCIoMCwgMik6
ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMCwg
MikpOworICAgICAgICAgICAgbG9nKCIoMCwgMyk6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMCwgMykpOworICAgICAgICAgICAgbG9nKCIoMCwg
Nik6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2Uo
MCwgNikpOworICAgICAgICAgICAgbG9nKCIoMCwgNyk6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVy
LmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMCwgNykpOworICAgICAgICAgICAgbG9nKCIo
MCwgMTAwKTogIiArIHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21S
YW5nZSgwLCAxMDApKTsKKyAgICAgICAgICAgIGxvZygiKDUsIDEpOiAiICsgdGV4dElucHV0Q29u
dHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDUsIDEpKTsKKyAgICAgICAgICAg
IGxvZygiKDUsIDIpOiAiICsgdGV4dElucHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5n
RnJvbVJhbmdlKDUsIDIpKTsKKyAgICAgICAgICAgIGxvZygiKDEwMCwgMCk6ICIgKyB0ZXh0SW5w
dXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMTAwLCAwKSk7IC8vIHNo
b3VsZCBiZSB1bmRlZmluZWQKKyAgICAgICAgICAgIGxvZygiKDEwMCwgMTAwKTogIiArIHRleHRJ
bnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSgxMDAsIDEwMCkpOyAv
LyBzaG91bGQgYmUgdW5kZWZpbmVkCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvZygiXG5U
ZXN0aW5nIHByb3BlciBzcGFjZSBydW5zICgxLl8yLl9fMy5fX180XzUpIik7CisgICAgICAgICAg
ICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICIxICZuYnNwOzIgJm5ic3A7Jm5ic3A7MyAmbmJz
cDsmbmJzcDsmbmJzcDs0Jm5ic3A7NSI7CisgICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuc2V0UG9zaXRpb24oZG9jdW1lbnQuYm9keSwgMCk7CisKKyAgICAgICAgICAgIGxvZygidG90
YWwgbGVuZ3RoOiAiICsgdGV4dElucHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJv
bVJhbmdlKDAsIDEwMCkubGVuZ3RoKCkpOworICAgICAgICAgICAgbG9nKCJvbmUgc3BhY2U6IFwi
IiArIHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSgxLCAx
KS5zdHJpbmcoKSArICJcIiIpOworICAgICAgICAgICAgbG9nKCJ0d28gc3BhY2VzOiBcIiIgKyB0
ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMSwgMikuc3Ry
aW5nKCkgKyAiXCIiKTsKKyAgICAgICAgICAgIGxvZygidGhyZWUgc3BhY2VzOiBcIiIgKyB0ZXh0
SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoNCwgMykuc3RyaW5n
KCkgKyAiXCIiKTsKKyAgICAgICAgICAgIGxvZygiZm91ciBzcGFjZXM6IFwiIiArIHRleHRJbnB1
dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSg4LCA0KS5zdHJpbmcoKSAr
ICJcIiIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2coIlxuVGVzdGluZyBzcGFjZS1v
bmx5IHJ1bnMgKDEuLjIuLi4zLi4uLjQuNSkiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHku
aW5uZXJIVE1MID0gIjEgIDIgICAzICAgIDQgNSI7CisgICAgICAgICAgICB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkuc2V0UG9zaXRpb24oZG9jdW1lbnQuYm9keSwgMCk7CisKKyAgICAgICAgICAgIGxv
ZygidG90YWwgbGVuZ3RoOiAiICsgdGV4dElucHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3Ry
aW5nRnJvbVJhbmdlKDAsIDEwMCkubGVuZ3RoKCkpOworICAgICAgICAgICAgbG9nKCIoMCwgMTAw
KTogIiArIHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSgw
LCAxMDApKTsKKworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiIjsKKwor
ICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgbG9nKCJFeGNlcHRpb246ICIgKyBl
eC5kZXNjcmlwdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhciBjb25zb2xl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOworICAgICAgICBjb25zb2xlLmFwcGVuZENo
aWxkKGNvbnNvbGVfbWVzc2FnZXMpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGNvbnNvbGUpOworICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBkb2N1bWVudC53cml0
ZSgiKGNhbm5vdCBydW4gaW50ZXJhY3RpdmVseSkiKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJI
VE1MVmlldy5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ3NgpkaWZmIC1wIC11IC1yMS40NzYg
V2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5tCi0tLSBXZWJLaXQvV2ViVmlldy5z
dWJwcm9qL1dlYkhUTUxWaWV3Lm0JMTMgT2N0IDIwMDUgMTk6Mzc6MzEgLTAwMDAJMS40NzYKKysr
IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubQkyMyBPY3QgMjAwNSAxMjo0Njoz
MiAtMDAwMApAQCAtNDkyMSw4ICs0OTMxLDEyIEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJp
YnV0ZXMgPSBuaWw7CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2U6KE5TUmFuZ2UpdGhlUmFuZ2UKIHsKLSAgICBFUlJPUigiVEVYVElOUFVUOiBh
dHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOiBub3QgeWV0IGltcGxlbWVudGVkIik7Ci0gICAg
cmV0dXJuIG5pbDsKKyAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOworICAg
IERPTVJhbmdlICpyYW5nZSA9IFticmlkZ2UgY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOnRoZVJh
bmdlXTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJl
dHVybiBbYnJpZGdlIGF0dHJpYnV0ZWRTdHJpbmdGcm9tOltyYW5nZSBzdGFydENvbnRhaW5lcl0g
c3RhcnRPZmZzZXQ6W3JhbmdlIHN0YXJ0T2Zmc2V0XSB0bzpbcmFuZ2UgZW5kQ29udGFpbmVyXSBl
bmRPZmZzZXQ6W3JhbmdlIGVuZE9mZnNldF1dOwogfQogCiAvLyB0ZXN0IGZvciAxMC40IGJlY2F1
c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzQyNDM0NjM+Cg==
</data>
<flag name="review"
          id="768"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4533</attachid>
            <date>2005-10-30 01:17:14 -0800</date>
            <delta_ts>2005-11-23 17:26:17 -0800</delta_ts>
            <desc>Proposed patch - safer?</desc>
            <filename>attributedSubstringFromRangePatch2.txt</filename>
            <type>text/plain</type>
            <size>1117</size>
            <attacher name="Evan Gross">evan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkhUTUxWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktp
dC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
NzcKZGlmZiAtcCAtdSAtcjEuNDc3IFdlYkhUTUxWaWV3Lm0KLS0tIFdlYkhUTUxWaWV3Lm0JMjQg
T2N0IDIwMDUgMDI6MTM6MTggLTAwMDAJMS40NzcKKysrIFdlYkhUTUxWaWV3Lm0JMzAgT2N0IDIw
MDUgMDU6MjU6MzUgLTAwMDAKQEAgLTQ5MjgsOCArNDkyOCwyMCBAQCBzdGF0aWMgTlNBcnJheSAq
dmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1
dGVkU3Vic3RyaW5nRnJvbVJhbmdlOihOU1JhbmdlKXRoZVJhbmdlCiB7Ci0gICAgRVJST1IoIlRF
WFRJTlBVVDogYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTogbm90IHlldCBpbXBsZW1lbnRl
ZCIpOwotICAgIHJldHVybiBuaWw7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
U3ViU3RyaW5nID0gbmlsOworICAgIAorICAgIE5TX0RVUklORyB7CisgICAgICAgIFdlYkJyaWRn
ZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRnZV07CisgICAgICAgIERPTVJhbmdlICpyYW5nZSA9IFti
cmlkZ2UgY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOnRoZVJhbmdlXTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChyYW5nZSkgeworICAgICAgICAgICAgYXR0cmlidXRlZFN1YlN0cmluZyA9IFticmlk
Z2UgYXR0cmlidXRlZFN0cmluZ0Zyb206W3JhbmdlIHN0YXJ0Q29udGFpbmVyXSBzdGFydE9mZnNl
dDpbcmFuZ2Ugc3RhcnRPZmZzZXRdIHRvOltyYW5nZSBlbmRDb250YWluZXJdIGVuZE9mZnNldDpb
cmFuZ2UgZW5kT2Zmc2V0XV07CisgICAgICAgIH0KKyAgICB9IE5TX0hBTkRMRVIgeworICAgICAg
ICBhdHRyaWJ1dGVkU3ViU3RyaW5nID0gbmlsOworICAgIH0gTlNfRU5ESEFORExFUgorICAgIAor
ICAgIHJldHVybiBhdHRyaWJ1dGVkU3ViU3RyaW5nOwogfQogCiAvLyB0ZXN0IGZvciAxMC40IGJl
Y2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzQyNDM0NjM+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4889</attachid>
            <date>2005-11-30 22:41:13 -0800</date>
            <delta_ts>2005-11-30 22:41:13 -0800</delta_ts>
            <desc>More rigorous layout test for attributedSubstringFromRange to show what doesn&apos;t work</desc>
            <filename>attributed-substring-from-range-lines-patch.txt</filename>
            <type>text/plain</type>
            <size>27467</size>
            <attacher name="Evan Gross">evan</attacher>
            
              <data encoding="base64">SW5kZXg6IGF0dHJpYnV0ZWQtc3Vic3RyaW5nLWZyb20tcmFuZ2UtbGluZXMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IGF0dHJpYnV0ZWQtc3Vic3RyaW5nLWZyb20tcmFuZ2UtbGlu
ZXMtZXhwZWN0ZWQudHh0Ci0tLSBhdHRyaWJ1dGVkLXN1YnN0cmluZy1mcm9tLXJhbmdlLWxpbmVz
LWV4cGVjdGVkLnR4dAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBhdHRyaWJ1dGVkLXN1
YnN0cmluZy1mcm9tLXJhbmdlLWxpbmVzLWV4cGVjdGVkLnR4dAkxIERlYyAyMDA1IDA1OjE5OjUx
IC0wMDAwCkBAIC0wLDAgKzEsMTI3IEBACitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJ
TkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9m
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdl
Tm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJh
bmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNl
bGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0
ZXh0ID4gQiA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAx
IG9mICN0ZXh0ID4gQiA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEIgPiBTUEFOID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4dCA+IEIgPiBTUEFOID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdl
Tm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJh
bmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBJID4gQiA+IFNQQU4gPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBv
ZiAjdGV4dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDEgb2YgI3RleHQgPiBJID4gQiA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGls
bFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJW
aWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VT
ZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBCID4gU1BBTiA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBJID4gQiA+
IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBJID4gQiA+IFNQQU4gPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBC
ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3Rl
eHQgPiBJID4gQiA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBJID4gQiA+IFNQQU4g
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlv
bkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAj
dGV4dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDEgb2YgI3RleHQgPiBJID4gQiA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCB0byAwIG9mIERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5n
OkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FU
RTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgQlIgdG8gMCBv
ZiBCUiB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGls
bFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJ
TkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8g
MiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6
V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDMgb2YgI3RleHQgPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAzIG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURv
d25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgor
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZp
Y2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJh
bmdlIGZyb20gMyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDMgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RP
TVJhbmdlOnJhbmdlIGZyb20gNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA0IG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNCBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA1IG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNSBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0g
c3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20g
NiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQor
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA4IG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gOCBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5p
dHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRp
b24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5v
dGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5n
ZTpyYW5nZSBmcm9tIDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0byA4IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG8gMiBvZiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0
eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
OldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENo
YW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAzIG9mIERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDMgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDMgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG8gMyBvZiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQor
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZp
Y2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJh
bmdlIGZyb20gMSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDEgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RP
TVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDMgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAzIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0g
c3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20g
MyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDMgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQor
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4gU1BBTiA+IEZP
TlQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAj
dGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBT
UEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4dCA+
IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZB
TFNFCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTog
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQgPiBTUEFO
ID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAx
IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBTUEFOID4gRk9O
VCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0
ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rp
bmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVH
QVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+
IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMyBvZiAjdGV4dCA+IFNQQU4g
PiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDMg
b2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNl
bGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAzIG9mICN0
ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG8gMyBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA0IG9mICN0ZXh0ID4g
U1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gNCBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0
aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgorRURJ
VElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDQg
b2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byA0IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDUgb2YgI3Rl
eHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0byA1IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJl
YW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9u
CitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZy
b20gNSBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDUgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gNiBv
ZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmlj
YXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFu
Z2UgZnJvbSA2IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJv
bSA3IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5p
dHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRp
b24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5v
dGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5n
ZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBT
UEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5n
ZSBmcm9tIDggb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byA4IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlm
aWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hh
bmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOnJhbmdlIGZyb20gOCBvZiAjdGV4dCA+IFNQQU4gPiBTUEFOID4gRk9OVCA+IFNQQU4g
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA4IG9mICN0ZXh0ID4gU1BB
TiA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mIFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgU1BBTiA+IEZPTlQgPiBTUEFO
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rp
b25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5v
dGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlk
Q2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KKzEyMzQ1NgorbGlu
ZSB0d28KKworYW5kIHRocmVlIMKgwqAKKworQWN0dWFsIEhUTUw6Cis8cHJlPiA8RElWIGNsYXNz
PSJlZGl0aW5nIiBpZD0idGVzdCI+PFNQQU4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iPjEyPEI+
MzxJPjQ8L0k+PEk+NTwvST48ST42PC9JPjwvQj48L1NQQU4+PC9ESVY+PERJViBjbGFzcz0iZWRp
dGluZyIgaWQ9InRlc3QiPjxTUEFOIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIj5saW5lIHR3bzxC
Uj48QlI+YW5kIDxGT05UIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzaXplPSI3Ij48U1BBTiBj
bGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6ZTogMzZwdDsgIj48U1BBTiBj
bGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
OyI+dGhyZWUgwqDCoDwvU1BBTj48QlI+PC9TUEFOPjwvRk9OVD48QlI+PC9TUEFOPjwvRElWPiA8
L3ByZT4KKygwLCAwKToKKygwLCAwKSBsZW5ndGg6IDAKKygwLCAyKTogMTJ7IE5TQ29sb3IgPSBO
U0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYu
MDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9Ciso
MCwgMikgbGVuZ3RoOiAyCisoMSwgMik6IDJ7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNv
bG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQuIFAgW10gKDB4WFhY
WFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9M3sgTlNDb2xvciA9IE5TQ2FsaWJy
YXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkIDE2LjAwIHB0LiBQ
IFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfQorKDEsIDIpIGxl
bmd0aDogMgorKDAsIDMpOiAxMnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFj
ZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkg
Zm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0zeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hp
dGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGQgMTYuMDAgcHQuIFAgW10gKDB4
WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9CisoMCwgMykgbGVuZ3RoOiAz
CisoMCwgNik6IDEyeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsg
TlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4
WFhYWFhYWFgsIHNwYz00LjAwIjsgfTN7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9y
U3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZCAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhY
WCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH00NTZ7IE5TQ29sb3IgPSBOU0NhbGlicmF0
ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZEl0YWxpYyAxNi4wMCBw
dC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0KKygwLCA2
KSBsZW5ndGg6IDYKKygwLCA3KTogMTJ7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9y
U3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhY
WFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9M3sgTlNDb2xvciA9IE5TQ2FsaWJyYXRl
ZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkIDE2LjAwIHB0LiBQIFtd
ICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfTQ1NnsgTlNDb2xvciA9
IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkSXRh
bGljIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAw
IjsgfSB7fQorKDAsIDcpIGxlbmd0aDogNworKDAsIDMxKTogMTJ7IE5TQ29sb3IgPSBOU0NhbGli
cmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQu
IFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9M3sgTlNDb2xv
ciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xk
IDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsg
fTQ1NnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9
ICJUaW1lcy1Cb2xkSXRhbGljIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhY
WFhYWFgsIHNwYz00LjAwIjsgfSB7fWxpbmUgdHdveyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hp
dGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgw
eFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfSB7fWFuZCB7IE5TQ29sb3Ig
PSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4g
MTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9
dGhyZWUgwqDCoHsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5T
Rm9udCA9ICJUaW1lcy1Sb21hbiA0OC4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhY
WFhYWFhYLCBzcGM9MTIuMDAiOyB9IHt9CisoMCwgMzEpIGxlbmd0aDogMzEKKygwLCAxMDApOiAx
MnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJU
aW1lcy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBz
cGM9NC4wMCI7IH0zeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsg
TlNGb250ID0gIlRpbWVzLUJvbGQgMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhY
WFhYWFhYWCwgc3BjPTQuMDAiOyB9NDU2eyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xv
clNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGRJdGFsaWMgMTYuMDAgcHQuIFAgW10gKDB4
WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9IHt9bGluZSB0d297IE5TQ29s
b3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9t
YW4gMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAi
OyB9IHt9YW5kIHsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5T
Rm9udCA9ICJUaW1lcy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhY
WFhYWFhYLCBzcGM9NC4wMCI7IH10aHJlZSDCoMKgeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hp
dGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDQ4LjAwIHB0LiBQIFtdICgw
eFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz0xMi4wMCI7IH0ge30KKygwLCAxMDApIGxl
bmd0aDogMzEKKygxLCAxMDApOiAyeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNw
YWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhY
KSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfTN7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRX
aGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZCAxNi4wMCBwdC4gUCBbXSAo
MHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH00NTZ7IE5TQ29sb3IgPSBO
U0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZEl0YWxp
YyAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7
IH0ge31saW5lIHR3b3sgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7
IE5TRm9udCA9ICJUaW1lcy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0w
eFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0ge31hbmQgeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hp
dGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgw
eFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfXRocmVlIMKgwqB7IE5TQ29s
b3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9t
YW4gNDguMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTEyLjAw
IjsgfSB7fQorKDEsIDEwMCkgbGVuZ3RoOiAzMAorKDIsIDMpOiAzeyBOU0NvbG9yID0gTlNDYWxp
YnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGQgMTYuMDAgcHQu
IFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9NDV7IE5TQ29s
b3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9s
ZEl0YWxpYyAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9
NC4wMCI7IH0KKygyLCAzKSBsZW5ndGg6IDMKKyg1LCAxKTogNnsgTlNDb2xvciA9IE5TQ2FsaWJy
YXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkSXRhbGljIDE2LjAw
IHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfQorKDUs
IDEpIGxlbmd0aDogMQorKDUsIDIpOiA2eyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xv
clNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGRJdGFsaWMgMTYuMDAgcHQuIFAgW10gKDB4
WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9IHt9CisoNSwgMikgbGVuZ3Ro
OiAyCisoNSwgNSk6IDZ7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAx
OyBOU0ZvbnQgPSAiVGltZXMtQm9sZEl0YWxpYyAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkg
Zm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0ge31saW57IE5TQ29sb3IgPSBOU0NhbGlicmF0
ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQuIFAg
W10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9CisoNSwgNSkgbGVu
Z3RoOiA1CisoMTUsIDE0KToge31hbmQgeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xv
clNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhY
WFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfXRocmVlIMKgwqB7IE5TQ29sb3IgPSBO
U0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gNDgu
MDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTEyLjAwIjsgfQor
KDE1LCAxNCkgbGVuZ3RoOiAxNAorKDEwMCwgMCk6IHVuZGVmaW5lZAorKDEwMCwgMTAwKTogdW5k
ZWZpbmVkCisKKwpJbmRleDogYXR0cmlidXRlZC1zdWJzdHJpbmctZnJvbS1yYW5nZS1saW5lcy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGF0dHJpYnV0ZWQtc3Vic3RyaW5nLWZyb20tcmFuZ2Ut
bGluZXMuaHRtbAotLS0gYXR0cmlidXRlZC1zdWJzdHJpbmctZnJvbS1yYW5nZS1saW5lcy5odG1s
CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGF0dHJpYnV0ZWQtc3Vic3RyaW5nLWZyb20t
cmFuZ2UtbGluZXMuaHRtbAkxIERlYyAyMDA1IDA1OjI4OjIyIC0wMDAwCkBAIC0wLDAgKzEsMTMw
IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLmVkaXRpbmcgeyAKKyAgICBtYXJnaW46IDEw
OyBwYWRkaW5nOiAwOyAKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0uLi9lZGl0aW5nLmpzIGxh
bmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiID48L3NjcmlwdD4KKwor
PHNjcmlwdD4KKworZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgdHlwZUNoYXJhY3RlckNv
bW1hbmQoJzEnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnMicpOworICAgIGJvbGRDb21t
YW5kKCk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJzMnKTsKKyAgICBpdGFsaWNDb21tYW5k
KCk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJzQnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29t
bWFuZCgnNScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCc2Jyk7CisgICAgaXRhbGljQ29t
bWFuZCgpOworICAgIGJvbGRDb21tYW5kKCk7CisgICAgaW5zZXJ0UGFyYWdyYXBoQ29tbWFuZCgp
OworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdsJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1h
bmQoJ2knKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnbicpOworICAgIHR5cGVDaGFyYWN0
ZXJDb21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICB0eXBl
Q2hhcmFjdGVyQ29tbWFuZCgndCcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCd3Jyk7Cisg
ICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ28nKTsKKyAgICBpbnNlcnRMaW5lQnJlYWtDb21tYW5k
KCk7CisgICAgaW5zZXJ0TGluZUJyZWFrQ29tbWFuZCgpOworICAgIHR5cGVDaGFyYWN0ZXJDb21t
YW5kKCdhJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ24nKTsKKyAgICB0eXBlQ2hhcmFj
dGVyQ29tbWFuZCgnZCcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgZm9u
dFNpemVDb21tYW5kKCIzNnB0Iik7CisgICAgdW5kZXJsaW5lQ29tbWFuZCgpOworICAgIHR5cGVD
aGFyYWN0ZXJDb21tYW5kKCd0Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsKKyAg
ICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgncicpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdl
Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29t
bWFuZCgnICcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgdHlwZUNoYXJh
Y3RlckNvbW1hbmQoJyAnKTsKKyAgICB1bmRlcmxpbmVDb21tYW5kKCk7CisgICAgaW5zZXJ0TGlu
ZUJyZWFrQ29tbWFuZCgpOworfQorCis8L3NjcmlwdD4KKworPHRpdGxlPkF0dHJpYnV0ZWQgU3Ry
aW5nIFRlc3Q8L3RpdGxlPiAKKzwvaGVhZD4KKzxib2R5IGNvbnRlbnRlZGl0YWJsZSBpZD0icm9v
dCI+Cis8ZGl2IGlkPSJ3cmFwcGVyIj4KKzxkaXYgY2xhc3M9ImVkaXRpbmciIGlkPSJ0ZXN0Ij48
L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0PgorcnVuRWRpdGluZ1Rlc3QoKTsKKzwvc2NyaXB0Pgor
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKyAgICB2YXIgY29uc29sZV9tZXNz
YWdlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgICAgCisgICAgZnVuY3Rpb24g
bG9nKG1lc3NhZ2UpCisgICAgeworICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImxpIik7CisgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoU3RyaW5nKG1lc3NhZ2UpLnJlcGxhY2UoLzB4WzAtOWEtZkEtRl17OH0vZywgIjB4WFhY
WFhYWFgiKSkpOworICAgICAgICBjb25zb2xlX21lc3NhZ2VzLmFwcGVuZENoaWxkKGl0ZW0pOwor
ICAgIH0KKyAgICAKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
ICAgIAorICAgICAgICB0cnkgeworICAgICAgICAKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgCisgICAgICAgICAgICBsb2coIkFjdHVhbCBI
VE1MOiIpOworICAgICAgICAgICAgbG9nKCI8cHJlPiIgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgid3JhcHBlciIpLmlubmVySFRNTCArICI8L3ByZT4iKTsKKyAgICAgICAgICAgIHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlvbihkb2N1bWVudC5ib2R5LCAwKTsKKworICAgICAgICAg
ICAgbG9nKCIoMCwgMCk6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2UoMCwgMCkpOworICAgICAgICAgICAgbG9nKCIoMCwgMCkgbGVuZ3RoOiAiICsg
dGV4dElucHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDAsIDApLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGxvZygiKDAsIDIpOiAiICsgdGV4dElucHV0Q29udHJvbGxl
ci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDAsIDIpKTsKKyAgICAgICAgICAgIGxvZygi
KDAsIDIpIGxlbmd0aDogIiArIHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmlu
Z0Zyb21SYW5nZSgwLCAyKS5sZW5ndGgoKSk7CisgICAgICAgICAgICBsb2coIigxLCAyKTogIiAr
IHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSgxLCAyKSk7
CisgICAgICAgICAgICBsb2coIigxLCAyKSBsZW5ndGg6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVy
LmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMSwgMikubGVuZ3RoKCkpOworICAgICAgICAg
ICAgbG9nKCIoMCwgMyk6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2UoMCwgMykpOworICAgICAgICAgICAgbG9nKCIoMCwgMykgbGVuZ3RoOiAiICsg
dGV4dElucHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDAsIDMpLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGxvZygiKDAsIDYpOiAiICsgdGV4dElucHV0Q29udHJvbGxl
ci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDAsIDYpKTsKKyAgICAgICAgICAgIGxvZygi
KDAsIDYpIGxlbmd0aDogIiArIHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmlu
Z0Zyb21SYW5nZSgwLCA2KS5sZW5ndGgoKSk7CisgICAgICAgICAgICBsb2coIigwLCA3KTogIiAr
IHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSgwLCA3KSk7
CisgICAgICAgICAgICBsb2coIigwLCA3KSBsZW5ndGg6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVy
LmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMCwgNykubGVuZ3RoKCkpOyAvLyBzaG91bGQg
YmUgNyBjaGFyYWN0ZXJzIQorICAgICAgICAgICAgbG9nKCIoMCwgMzEpOiAiICsgdGV4dElucHV0
Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDAsIDMxKSk7CisgICAgICAg
ICAgICBsb2coIigwLCAzMSkgbGVuZ3RoOiAiICsgdGV4dElucHV0Q29udHJvbGxlci5hdHRyaWJ1
dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDAsIDMxKS5sZW5ndGgoKSk7IC8vIGFjdHVhbCBsZW5ndGgg
SVMgMzEKKyAgICAgICAgICAgIGxvZygiKDAsIDEwMCk6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVy
LmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMCwgMTAwKSk7CisgICAgICAgICAgICBsb2co
IigwLCAxMDApIGxlbmd0aDogIiArIHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0
cmluZ0Zyb21SYW5nZSgwLCAxMDApLmxlbmd0aCgpKTsgLy8gc2hvdWxkIGJlIDMxIGNoYXJhY3Rl
cnMhCisgICAgICAgICAgICBsb2coIigxLCAxMDApOiAiICsgdGV4dElucHV0Q29udHJvbGxlci5h
dHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDEsIDEwMCkpOworICAgICAgICAgICAgbG9nKCIo
MSwgMTAwKSBsZW5ndGg6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2UoMSwgMTAwKS5sZW5ndGgoKSk7IC8vIHNob3VsZCBiZSAzMCBjaGFyYWN0ZXJz
IQorICAgICAgICAgICAgbG9nKCIoMiwgMyk6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJp
YnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMiwgMykpOworICAgICAgICAgICAgbG9nKCIoMiwgMykg
bGVuZ3RoOiAiICsgdGV4dElucHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJh
bmdlKDIsIDMpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGxvZygiKDUsIDEpOiAiICsgdGV4dElu
cHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDUsIDEpKTsKKyAgICAg
ICAgICAgIGxvZygiKDUsIDEpIGxlbmd0aDogIiArIHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmli
dXRlZFN1YnN0cmluZ0Zyb21SYW5nZSg1LCAxKS5sZW5ndGgoKSk7CisgICAgICAgICAgICBsb2co
Iig1LCAyKTogIiArIHRleHRJbnB1dENvbnRyb2xsZXIuYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21S
YW5nZSg1LCAyKSk7CisgICAgICAgICAgICBsb2coIig1LCAyKSBsZW5ndGg6ICIgKyB0ZXh0SW5w
dXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoNSwgMikubGVuZ3RoKCkp
OworICAgICAgICAgICAgbG9nKCIoNSwgNSk6ICIgKyB0ZXh0SW5wdXRDb250cm9sbGVyLmF0dHJp
YnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoNSwgNSkpOworICAgICAgICAgICAgbG9nKCIoNSwgNSkg
bGVuZ3RoOiAiICsgdGV4dElucHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJh
bmdlKDUsIDUpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGxvZygiKDE1LCAxNCk6ICIgKyB0ZXh0
SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMTUsIDE0KSk7Cisg
ICAgICAgICAgICBsb2coIigxNSwgMTQpIGxlbmd0aDogIiArIHRleHRJbnB1dENvbnRyb2xsZXIu
YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSgxNSwgMTQpLmxlbmd0aCgpKTsgLy8gc2hvdWxk
IGJlIDE0IGNoYXJhY3RlcnMhCisgICAgICAgICAgICBsb2coIigxMDAsIDApOiAiICsgdGV4dElu
cHV0Q29udHJvbGxlci5hdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKDEwMCwgMCkpOyAvLyBz
aG91bGQgYmUgdW5kZWZpbmVkCisgICAgICAgICAgICBsb2coIigxMDAsIDEwMCk6ICIgKyB0ZXh0
SW5wdXRDb250cm9sbGVyLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoMTAwLCAxMDApKTsg
Ly8gc2hvdWxkIGJlIHVuZGVmaW5lZAorICAgICAgICAgICAgCisgICAgICAgIH0gY2F0Y2ggKGV4
KSB7CisgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbjogIiArIGV4LmRlc2NyaXB0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJwIik7CisgICAgICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQoY29uc29sZV9tZXNzYWdl
cyk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29uc29sZSk7CisgICAgICAg
IAorICAgIH0gZWxzZSB7CisgICAgICAgIGRvY3VtZW50LndyaXRlKCIoY2Fubm90IHJ1biBpbnRl
cmFjdGl2ZWx5KSIpOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4924</attachid>
            <date>2005-12-03 18:59:38 -0800</date>
            <delta_ts>2005-12-03 18:59:38 -0800</delta_ts>
            <desc>The actual results from this test, using the proposed patch</desc>
            <filename>attributed-substring-from-range-lines-actual.txt</filename>
            <type>text/plain</type>
            <size>20737</size>
            <attacher name="Evan Gross">evan</attacher>
            
              <data encoding="base64">RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNl
bGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9E
T01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rp
bmc6RkFMU0UKRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRF
OiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlv
bkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3Rp
ZmljYXRpb24KRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hh
bmdlTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4gQiA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gQiA+IFNQQU4gPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4
dCA+IEIgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBv
ZiAjdGV4dCA+IEIgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFM
U0UKRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBCID4g
U1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQg
PiBJID4gQiA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RP
TVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBJID4gQiA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KRURJVElORyBERUxF
R0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQg
PiBJID4gQiA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAx
IG9mICN0ZXh0ID4gSSA+IEIgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQgPiBJID4gQiA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gSSA+IEIg
PiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNT
ZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAx
IG9mICN0ZXh0ID4gSSA+IEIgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG8gMSBvZiAjdGV4dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4gSSA+IEIg
PiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4
dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFm
ZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNF
CkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlm
aWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJh
bmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBCID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBJID4gQiA+IFNQQU4gPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAwIG9mIERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFt
IHN0aWxsU2VsZWN0aW5nOkZBTFNFCkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgpFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KRURJ
VElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAg
b2YgQlIgdG8gMCBvZiBCUiB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0
aW9uCkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSAxIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8g
MSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFu
Z2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZB
TFNFCkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDMgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAzIG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0
aW9uCkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5v
dGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdl
OnJhbmdlIGZyb20gMyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDMgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
b0RPTVJhbmdlOnJhbmdlIGZyb20gNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IHRvIDQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVj
dGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA0IG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNCBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA1IG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNSBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCkVESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5v
dGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRD
aGFuZ2VOb3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3Rp
bGxTZWxlY3Rpbmc6RkFMU0UKRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgpFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gNiBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZy
b20gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcg
b2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxl
Y3Rpb25Ob3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJW
aWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNl
bGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA4IG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gOCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3Ry
ZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgpFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24K
RURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9t
IDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA4IG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpy
YW5nZSBmcm9tIDIgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBv
ZiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlv
bkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3Rp
ZmljYXRpb24KRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hh
bmdlTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6cmFuZ2UgZnJvbSAzIG9mIERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDMgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpy
YW5nZSBmcm9tIDMgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMyBv
ZiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlv
bkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KRURJVElORyBE
RUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3Rl
eHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9t
IDEgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNT
ZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmll
d0RpZENoYW5nZU5vdGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAy
IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAzIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
OldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDMgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAzIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDQgb2YgI3RleHQgPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA0IG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURv
d25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNh
dGlvbgpFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdl
IGZyb20gMSBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20g
MSBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24K
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZp
Y2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAxIG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAyIG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5p
dHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlv
bgpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24KRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpy
YW5nZSBmcm9tIDIgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFO
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBm
cm9tIDMgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCB0byAzIG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0
aW9uCkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5v
dGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdl
OnJhbmdlIGZyb20gMyBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDMgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQ
QU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdl
IGZyb20gNCBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDQgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmlj
YXRpb24KRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdl
Tm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6cmFuZ2UgZnJvbSA0IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNCBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4g
U1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFu
Z2UgZnJvbSA1IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNSBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9u
QWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCkVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlm
aWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFu
Z2VOb3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQg
PiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpy
YW5nZSBmcm9tIDYgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFO
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rp
b25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90
aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENo
YW5nZU5vdGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOnJhbmdlIGZyb20gNiBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBTUEFOID4gRk9O
VCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdl
OnJhbmdlIGZyb20gNyBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4gU1BBTiA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgI3RleHQgPiBTUEFOID4gRk9OVCA+IFNQ
QU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlk
Q2hhbmdlTm90aWZpY2F0aW9uCkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVk
RE9NUmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IFNQQU4gPiBG
T05UID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFu
Z2U6cmFuZ2UgZnJvbSA4IG9mICN0ZXh0ID4gU1BBTiA+IEZPTlQgPiBTUEFOID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gOCBvZiAjdGV4dCA+IFNQQU4gPiBGT05UID4g
U1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCkVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bk5vdGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdE
aWRDaGFuZ2VOb3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZTpyYW5nZSBmcm9tIDggb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEZPTlQgPiBT
UEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gOCBvZiAjdGV4dCA+
IFNQQU4gPiBTUEFOID4gRk9OVCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiBTUEFOID4gRk9OVCA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mIFNQQU4gPiBGT05UID4g
U1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCkVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bk5vdGlmaWNhdGlvbgpFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdE
aWRDaGFuZ2VOb3RpZmljYXRpb24KRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCjEyMzQ1NgpsaW5l
IHR3bwoKYW5kIHRocmVlIMKgwqAKCkFjdHVhbCBIVE1MOgo8cHJlPiA8RElWIGNsYXNzPSJlZGl0
aW5nIiBpZD0idGVzdCI+PFNQQU4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iPjEyPEI+MzxJPjQ8
L0k+PEk+NTwvST48ST42PC9JPjwvQj48L1NQQU4+PC9ESVY+PERJViBjbGFzcz0iZWRpdGluZyIg
aWQ9InRlc3QiPjxTUEFOIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIj5saW5lIHR3bzxCUj48QlI+
YW5kIDxGT05UIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzaXplPSI3Ij48U1BBTiBjbGFzcz0i
QXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc2l6ZTogMzZwdDsgIj48U1BBTiBjbGFzcz0i
QXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+dGhy
ZWUgwqDCoDwvU1BBTj48QlI+PC9TUEFOPjwvRk9OVD48QlI+PC9TUEFOPjwvRElWPiA8L3ByZT4K
KDAsIDApOgooMCwgMCkgbGVuZ3RoOiAwCigwLCAyKTogMTJ7IE5TQ29sb3IgPSBOU0NhbGlicmF0
ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQuIFAg
W10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9CigwLCAyKSBsZW5n
dGg6IDIKKDEsIDIpOiAyeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAg
MTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2Jq
PTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfTN7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNv
bG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZCAxNi4wMCBwdC4gUCBbXSAoMHhYWFhY
WFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0KKDEsIDIpIGxlbmd0aDogMgooMCwg
Myk6IDEyeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250
ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhY
WFgsIHNwYz00LjAwIjsgfTN7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2Ug
MCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZCAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9i
aj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0KKDAsIDMpIGxlbmd0aDogMwooMCwgNik6IDEyeyBO
U0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVz
LVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00
LjAwIjsgfTN7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0Zv
bnQgPSAiVGltZXMtQm9sZCAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhY
WFhYLCBzcGM9NC4wMCI7IH00NTZ7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3Bh
Y2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZEl0YWxpYyAxNi4wMCBwdC4gUCBbXSAoMHhYWFhY
WFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0KKDAsIDYpIGxlbmd0aDogNgooMCwg
Nyk6IDEyeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250
ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhY
WFgsIHNwYz00LjAwIjsgfTN7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2Ug
MCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZCAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9i
aj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH00NTZ7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0
ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtQm9sZEl0YWxpYyAxNi4wMCBwdC4gUCBb
XSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0ge31saW5lIHR3b3sg
TlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1l
cy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9
NC4wMCI7IH0ge31hbmQgeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAg
MTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2Jq
PTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfXRocmVlIMKgwqB7IE5TQ29sb3IgPSBOU0NhbGlicmF0
ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gNDguMDAgcHQuIFAg
W10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTEyLjAwIjsgfSB7fQooMCwgNykg
bGVuZ3RoOiAzMQooMCwgMzEpOiAxMnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JT
cGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhY
WCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0zeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVk
V2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGQgMTYuMDAgcHQuIFAgW10g
KDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9NDU2eyBOU0NvbG9yID0g
TlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGRJdGFs
aWMgMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAi
OyB9IHt9CigwLCAzMSkgbGVuZ3RoOiA3CigwLCAxMDApOiAxMnsgTlNDb2xvciA9IE5TQ2FsaWJy
YXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Sb21hbiAxNi4wMCBwdC4g
UCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4wMCI7IH0zeyBOU0NvbG9y
ID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGQg
MTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9
NDU2eyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250ID0g
IlRpbWVzLUJvbGRJdGFsaWMgMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhY
WFhYWCwgc3BjPTQuMDAiOyB9IHt9CigwLCAxMDApIGxlbmd0aDogNwooMSwgMTAwKTogMnsgTlND
b2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1S
b21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9NC4w
MCI7IH0zeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAgMTsgTlNGb250
ID0gIlRpbWVzLUJvbGQgMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhY
WCwgc3BjPTQuMDAiOyB9NDU2eyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNl
IDAgMTsgTlNGb250ID0gIlRpbWVzLUJvbGRJdGFsaWMgMTYuMDAgcHQuIFAgW10gKDB4WFhYWFhY
WFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9IHt9CigxLCAxMDApIGxlbmd0aDogNgoo
MiwgMyk6IDN7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0Zv
bnQgPSAiVGltZXMtQm9sZCAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhY
WFhYLCBzcGM9NC4wMCI7IH00NXsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFj
ZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkSXRhbGljIDE2LjAwIHB0LiBQIFtdICgweFhYWFhY
WFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfQooMiwgMykgbGVuZ3RoOiAzCig1LCAx
KTogNnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9
ICJUaW1lcy1Cb2xkSXRhbGljIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhY
WFhYWFgsIHNwYz00LjAwIjsgfQooNSwgMSkgbGVuZ3RoOiAxCig1LCAyKTogNnsgTlNDb2xvciA9
IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkSXRh
bGljIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAw
IjsgfSB7fWxpbmUgdHdveyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVDb2xvclNwYWNlIDAg
MTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDE2LjAwIHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2Jq
PTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfSB7fWFuZCB7IE5TQ29sb3IgPSBOU0NhbGlicmF0ZWRX
aGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4gMTYuMDAgcHQuIFAgW10g
KDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9dGhyZWUgwqDCoHsgTlND
b2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1S
b21hbiA0OC4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBzcGM9MTIu
MDAiOyB9IHt9Cig1LCAyKSBsZW5ndGg6IDI2Cig1LCA1KTogNnsgTlNDb2xvciA9IE5TQ2FsaWJy
YXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJUaW1lcy1Cb2xkSXRhbGljIDE2LjAw
IHB0LiBQIFtdICgweFhYWFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz00LjAwIjsgfSB7fWxp
bnsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9udCA9ICJU
aW1lcy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhYWFhYLCBz
cGM9NC4wMCI7IH0KKDUsIDUpIGxlbmd0aDogNQooMTUsIDE0KTogbGluZSB0d297IE5TQ29sb3Ig
PSBOU0NhbGlicmF0ZWRXaGl0ZUNvbG9yU3BhY2UgMCAxOyBOU0ZvbnQgPSAiVGltZXMtUm9tYW4g
MTYuMDAgcHQuIFAgW10gKDB4WFhYWFhYWFgpIGZvYmo9MHhYWFhYWFhYWCwgc3BjPTQuMDAiOyB9
IHt9YW5kIHsgTlNDb2xvciA9IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSAwIDE7IE5TRm9u
dCA9ICJUaW1lcy1Sb21hbiAxNi4wMCBwdC4gUCBbXSAoMHhYWFhYWFhYWCkgZm9iaj0weFhYWFhY
WFhYLCBzcGM9NC4wMCI7IH10aHJlZSDCoMKgeyBOU0NvbG9yID0gTlNDYWxpYnJhdGVkV2hpdGVD
b2xvclNwYWNlIDAgMTsgTlNGb250ID0gIlRpbWVzLVJvbWFuIDQ4LjAwIHB0LiBQIFtdICgweFhY
WFhYWFhYKSBmb2JqPTB4WFhYWFhYWFgsIHNwYz0xMi4wMCI7IH0KKDE1LCAxNCkgbGVuZ3RoOiAy
MgooMTAwLCAwKTogdW5kZWZpbmVkCigxMDAsIDEwMCk6IHVuZGVmaW5lZAoKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>