<?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>29681</bug_id>
          
          <creation_ts>2009-09-23 06:57:00 -0700</creation_ts>
          <short_desc>[Qt] QWebPagePrivate::inputMethodEvent and QWebPage::inputMethodQuery methods are incomplete</short_desc>
          <delta_ts>2009-10-01 05:43:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Ligman">joseph.ligman</reporter>
          <assigned_to name="Joseph Ligman">joseph.ligman</assigned_to>
          <cc>hausmann</cc>
    
    <cc>kristian.amlie</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>149386</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Ligman">joseph.ligman</who>
    <bug_when>2009-09-23 06:57:00 -0700</bug_when>
    <thetext>These methods are used to sync the virtual keyboard on s60 devices through the fep input context. There are a few cases missing in the query and event methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149388</commentid>
    <comment_count>1</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-09-23 07:02:23 -0700</bug_when>
    <thetext>Please describe the missing cases and how you would change impl/api to cover those</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149399</commentid>
    <comment_count>2</comment_count>
      <attachid>39997</attachid>
    <who name="Joseph Ligman">joseph.ligman</who>
    <bug_when>2009-09-23 08:11:42 -0700</bug_when>
    <thetext>Created attachment 39997
patch to describe the changes need to sync up the s60 input context

patch to describe missing s60 cases from inputMethodQuery, inputMethodEvent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149402</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Ligman">joseph.ligman</who>
    <bug_when>2009-09-23 08:21:49 -0700</bug_when>
    <thetext>The patch attempts to address these issue for s60:

QWebPage::inputMethodQuery
Qt::ImAnchorPosition is not implemented.
Qt::ImCursorPosition returns the wrong position.
Qt::ImSurroundingText returns an empty string.

QWebPagePrivate::inputMethodEvent
The QInputMethodEvent::Selection position is not set for input areas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149786</commentid>
    <comment_count>4</comment_count>
      <attachid>40075</attachid>
    <who name="Joseph Ligman">joseph.ligman</who>
    <bug_when>2009-09-24 11:16:03 -0700</bug_when>
    <thetext>Created attachment 40075
patch to describe the changes need to sync up the s60 input context

Added a change log to the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149969</commentid>
    <comment_count>5</comment_count>
      <attachid>40075</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-25 04:06:54 -0700</bug_when>
    <thetext>Comment on attachment 40075
patch to describe the changes need to sync up the s60 input context


In principle this looks good, it&apos;s great that you&apos;re working on fixing the input method handling!

I have a few minor issues (see below) and I&apos;m also wondering if there&apos;s anything we can do
to make this testable.

How about unit tests that programmatically set the focus, select text, etc. and then call inputMethodQuery() 
or send synthetic input method events to verify this code?

&gt; +
&gt; +#if PLATFORM(SYMBIAN)
&gt; +    for (int i = 0; i &lt; ev-&gt;attributes().size(); ++i) {
&gt; +        const QInputMethodEvent::Attribute &amp;a = ev-&gt;attributes().at(i);
&gt; +        if (a.type == QInputMethodEvent::Selection) {
&gt; +            RenderObject* renderer = 0;
&gt; +            if (frame-&gt;selection()-&gt;rootEditableElement())
&gt; +                renderer = frame-&gt;selection()-&gt;rootEditableElement()-&gt;shadowAncestorNode()-&gt;renderer();
&gt; +
&gt; +            if (renderer &amp;&amp; renderer-&gt;isTextControl()) {
&gt; +                toRenderTextControl(renderer)-&gt;setSelectionStart(a.start);
&gt; +                toRenderTextControl(renderer)-&gt;setSelectionEnd(a.start + a.length);
&gt; +            }
&gt; +            break;
&gt; +        };
&gt;      }
&gt; +#endif

Why is this code limited to PLATFORM(SYMBIAN)?
  

&gt; @@ -1196,42 +1215,64 @@ bool QWebPagePrivate::handleScrolling(QK
[...]
&gt;
&gt; +    switch (property) { 
&gt; +        case Qt::ImMicroFocus: { 

Looks like the indentation is off here :)

&gt; +             return QVariant(frame-&gt;selection()-&gt;absoluteCaretBounds()); 
&gt; +         return QVariant(); 
&gt; +     } 
&gt; +     case Qt::ImFont: { 
&gt; +         QWebView *webView = qobject_cast&lt;QWebView *&gt;(d-&gt;view); 
&gt; +         if (webView) 
&gt; +             return QVariant(webView-&gt;font()); 
&gt; +         return QVariant(); 

This doesn&apos;t look correct. font() is a method of QWidget, it should be enough to
simply use return d-&gt;view ? d-&gt;view-&gt;font() : QFont();

&gt; +#if PLATFORM(SYMBIAN)
&gt; +     case Qt::ImAnchorPosition: {
&gt; +        if (renderTextControl) {
&gt; +            if (editor-&gt;hasComposition()) {
&gt; +                PassRefPtr&lt;Range&gt; range = editor-&gt;compositionRange();
&gt; +                return QVariant(renderTextControl-&gt;selectionStart() - TextIterator::rangeLength(range.get()));
&gt; +            }
&gt; +            return QVariant(renderTextControl-&gt;selectionStart());
&gt;          }
&gt;          return QVariant();
&gt;      }
&gt; -    case Qt::ImSurroundingText: {
&gt; -        Frame *frame = d-&gt;page-&gt;focusController()-&gt;focusedFrame();
&gt; -        if (frame) {
&gt; -            Document *document = frame-&gt;document();
&gt; -            if (document-&gt;focusedNode())
&gt; -                return QVariant(document-&gt;focusedNode()-&gt;nodeValue());
&gt; +#endif

Same as earlier hunk, why is this only enabled for Symbian?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150102</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Ligman">joseph.ligman</who>
    <bug_when>2009-09-25 12:28:19 -0700</bug_when>
    <thetext>Thanks for the review. 
I will add the missing test cases and remove the PLATFORM(SYMBIAN) flag. 

I see if I can cover the cases in the 4.6 documentation:
InputMethodQuery:
Qt::ImMicroFocus, Qt::ImFont, Qt::ImCursorPosition, Qt::ImSurroundingText, Qt::ImCurrentSelection, Qt::ImMaximumTextLength, Qt::ImAnchorPosition

InputMethodEvent:
QInputMethodEvent::TextFormat, QInputMethodEvent::Cursor, QInputMethodEvent::Language, QInputMethodEvent::Ruby, QInputMethodEvent::Selection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151290</commentid>
    <comment_count>7</comment_count>
      <attachid>40382</attachid>
    <who name="Joseph Ligman">joseph.ligman</who>
    <bug_when>2009-09-30 10:18:40 -0700</bug_when>
    <thetext>Created attachment 40382
Proposed patch,  input method handling

This patch attempts to address some of the missing cases in the input methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151497</commentid>
    <comment_count>8</comment_count>
      <attachid>40382</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-01 03:38:31 -0700</bug_when>
    <thetext>Comment on attachment 40382
Proposed patch,  input method handling

Thanks for the update and a big thanks for adding the good automated tests!

I&apos;ve taken another look at the patch and I&apos;ve also tried it out with Kristian (CCed).

There are a few things that need to be fixed as commented below. Kristian is going to upload
a revised version of your patch later with a few small fixes.


&gt; +Q_DECLARE_METATYPE(QTextCharFormat)
[...]
&gt; +            case QInputMethodEvent::TextFormat: {
&gt; +                QTextCharFormat textCharFormat = a.value.value&lt;QTextCharFormat&gt;();
&gt; +                QColor qcolor = textCharFormat.underlineColor();

This sequence can be simplified a bit. The text format stored in the QVariant is _actually_ a QTextFormat. QVariant has native
support for storing these. So the Q_DECLARE_METATYPE can be removed and instead the code should look like this:

    QTextCharFormat textCharFormat = a.value.value&lt;QCharFormat&gt;().toCharFormat();

A coding style issue I noticed: The case portions of the switch() statement should be indented at the same level
as the switch(). I recommend the use of WebKitTools/Scripts/check-webkit-style to verify the coding style after
a change :-)


&gt;  QVariant QWebPage::inputMethodQuery(Qt::InputMethodQuery property) const
[...]
&gt;  {
&gt; +    Frame *frame = d-&gt;page-&gt;focusController()-&gt;focusedFrame();
[...]
&gt; +    WebCore::Editor *editor = frame-&gt;editor();

* placement :)


&gt; +        case Qt::ImCursorPosition: {
&gt; +            if (renderTextControl) {
&gt; +                if (editor-&gt;hasComposition()) {
&gt; +                    PassRefPtr&lt;Range&gt; range = editor-&gt;compositionRange();

This should be a RefPtr, not a PassRefPtr. Same for the other cases below.

&gt; +                    return QVariant(renderTextControl-&gt;selectionEnd() - TextIterator::rangeLength(range.get()));
&gt; +                }
&gt; +                return QVariant(renderTextControl-&gt;selectionEnd());
&gt; +            }
&gt; +            return QVariant();
&gt; +        }
&gt; +        case Qt::ImSurroundingText: {
&gt; +            if (renderTextControl)
&gt; +                return QVariant(renderTextControl-&gt;text());
&gt; +            return QVariant();
&gt; +        }
&gt; +        case Qt::ImCurrentSelection: {
&gt; +            if (renderTextControl) {
&gt; +                int start = renderTextControl-&gt;selectionStart();
&gt; +                int end = renderTextControl-&gt;selectionEnd();
&gt; +                if (end &gt; start)
&gt; +                    return QVariant(QString(renderTextControl-&gt;text()).mid(start,end-start));
&gt; +            }
&gt; +            return QVariant();
&gt; +
&gt; +        }
&gt; +#if QT_VERSION &gt;= 0x040502

This should check for Qt version &gt;= 4.6 instead of 4.5.2, otherwise the compilation
on non-S60 platforms will break.


Another issue that Kristian noticed is that the query for ImSurroundingText should _exclude_ the preedit text.

We&apos;ll see about getting that fixed in a revised patch :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151513</commentid>
    <comment_count>9</comment_count>
      <attachid>40433</attachid>
    <who name="Kristian Amlie">kristian.amlie</who>
    <bug_when>2009-10-01 05:20:19 -0700</bug_when>
    <thetext>Created attachment 40433
Update patch with more fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151514</commentid>
    <comment_count>10</comment_count>
      <attachid>40434</attachid>
    <who name="Kristian Amlie">kristian.amlie</who>
    <bug_when>2009-10-01 05:33:26 -0700</bug_when>
    <thetext>Created attachment 40434
Patch which fixes software input panel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151517</commentid>
    <comment_count>11</comment_count>
      <attachid>40433</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-01 05:42:03 -0700</bug_when>
    <thetext>Comment on attachment 40433
Update patch with more fixes

There&apos;s tabs in the ChangeLog, but I&apos;ll fix those before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151518</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-01 05:43:59 -0700</bug_when>
    <thetext>Landed in r48967 and r48968</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39997</attachid>
            <date>2009-09-23 08:11:42 -0700</date>
            <delta_ts>2009-09-24 11:16:03 -0700</delta_ts>
            <desc>patch to describe the changes need to sync up the s60 input context</desc>
            <filename>bug29681.patch</filename>
            <type>text/plain</type>
            <size>5400</size>
            <attacher name="Joseph Ligman">joseph.ligman</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNDg2NzQpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDktMjMgIEpvZSBMaWdtYW4gIDxqb3NlcGgubGln
bWFuQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisg
ICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6aW5w
dXRNZXRob2RFdmVudCk6CisgICAgICAgIChRV2ViUGFnZTo6aW5wdXRNZXRob2RRdWVyeSk6CisK
IDIwMDktMDktMjIgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCShyZXZpc2lvbiA0ODY3NCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2Niw4IEBACiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZWZQdHIuaCIKKyNpbmNs
dWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkhhc2hNYXAuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCkBAIC0xMDg3LDYgKzEwODksMjIgQEAgdm9pZCBRV2ViUGFnZVBy
aXZhdGU6OmlucHV0TWV0aG9kRXZlbnQoUQogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYg
UExBVEZPUk0oU1lNQklBTikKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGV2LT5hdHRyaWJ1dGVz
KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJp
YnV0ZSAmYSA9IGV2LT5hdHRyaWJ1dGVzKCkuYXQoaSk7CisgICAgICAgIGlmIChhLnR5cGUgPT0g
UUlucHV0TWV0aG9kRXZlbnQ6OlNlbGVjdGlvbikgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IDA7CisgICAgICAgICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5yb290
RWRpdGFibGVFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBmcmFtZS0+c2Vs
ZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJl
bmRlcmVyKCk7CisKKyAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0
Q29udHJvbCgpKSB7CisgICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJl
ciktPnNldFNlbGVjdGlvblN0YXJ0KGEuc3RhcnQpOworICAgICAgICAgICAgICAgIHRvUmVuZGVy
VGV4dENvbnRyb2wocmVuZGVyZXIpLT5zZXRTZWxlY3Rpb25FbmQoYS5zdGFydCArIGEubGVuZ3Ro
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAgIH0K
KyNlbmRpZgogICAgIGlmICghZXYtPmNvbW1pdFN0cmluZygpLmlzRW1wdHkoKSkKICAgICAgICAg
ZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oZXYtPmNvbW1pdFN0cmluZygpKTsKICAgICBlbHNl
IHsKQEAgLTExOTYsNDIgKzEyMTQsNjQgQEAgYm9vbCBRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNj
cm9sbGluZyhRSwogKi8KIFFWYXJpYW50IFFXZWJQYWdlOjppbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJ
bnB1dE1ldGhvZFF1ZXJ5IHByb3BlcnR5KSBjb25zdAogewotICAgIHN3aXRjaCAocHJvcGVydHkp
IHsKLSAgICBjYXNlIFF0OjpJbU1pY3JvRm9jdXM6IHsKLSAgICAgICAgRnJhbWUgKmZyYW1lID0g
ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgpOwotICAgICAgICBpZiAo
ZnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoZnJhbWUtPnNlbGVjdGlvbigpLT5h
YnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwotICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKLSAgICB9
Ci0gICAgY2FzZSBRdDo6SW1Gb250OiB7Ci0gICAgICAgIFFXZWJWaWV3ICp3ZWJWaWV3ID0gcW9i
amVjdF9jYXN0PFFXZWJWaWV3ICo+KGQtPnZpZXcpOwotICAgICAgICBpZiAod2ViVmlldykKLSAg
ICAgICAgICAgIHJldHVybiBRVmFyaWFudCh3ZWJWaWV3LT5mb250KCkpOworICAgIEZyYW1lICpm
cmFtZSA9IGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUoKTsKKyAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKLSAgICB9Ci0gICAgY2FzZSBR
dDo6SW1DdXJzb3JQb3NpdGlvbjogewotICAgICAgICBGcmFtZSAqZnJhbWUgPSBkLT5wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCk7Ci0gICAgICAgIGlmIChmcmFtZSkgewot
ICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpOworCisgICAgV2ViQ29yZTo6RWRpdG9yICplZGl0b3IgPSBmcmFt
ZS0+ZWRpdG9yKCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gMDsKKyAgICBSZW5k
ZXJUZXh0Q29udHJvbCogcmVuZGVyVGV4dENvbnRyb2wgPSAwOworCisgICAgaWYgKGZyYW1lLT5z
ZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICAgICByZW5kZXJlciA9IGZy
YW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5zaGFkb3dBbmNlc3Rvck5v
ZGUoKS0+cmVuZGVyZXIoKTsKKworICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0
Q29udHJvbCgpKQorICAgICAgICByZW5kZXJUZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRy
b2wocmVuZGVyZXIpOworCisgICAgc3dpdGNoKHByb3BlcnR5KSB7CisgICAgICAgIGNhc2UgUXQ6
OkltTWljcm9Gb2N1czogeworICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KGZyYW1lLT5zZWxl
Y3Rpb24oKS0+YWJzb2x1dGVDYXJldEJvdW5kcygpKTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gUVZhcmlhbnQoKTsKLSAgICB9Ci0gICAgY2FzZSBRdDo6SW1TdXJyb3VuZGluZ1RleHQ6IHsK
LSAgICAgICAgRnJhbWUgKmZyYW1lID0gZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRGcmFtZSgpOwotICAgICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgIERvY3VtZW50ICpk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICAgICAgaWYgKGRvY3VtZW50LT5m
b2N1c2VkTm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChkb2N1bWVudC0+
Zm9jdXNlZE5vZGUoKS0+bm9kZVZhbHVlKCkpOworICAgICAgICBjYXNlIFF0OjpJbUZvbnQ6IHsK
KyAgICAgICAgICAgIFFXZWJWaWV3ICp3ZWJWaWV3ID0gcW9iamVjdF9jYXN0PFFXZWJWaWV3ICo+
KGQtPnZpZXcpOworICAgICAgICAgICAgaWYgKHdlYlZpZXcpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFFWYXJpYW50KHdlYlZpZXctPmZvbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gUVZhcmlh
bnQoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKLSAgICB9Ci0gICAg
Y2FzZSBRdDo6SW1DdXJyZW50U2VsZWN0aW9uOgotICAgICAgICByZXR1cm4gUVZhcmlhbnQoc2Vs
ZWN0ZWRUZXh0KCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwor
I2lmIFBMQVRGT1JNKFNZTUJJQU4pCisgICAgICAgIGNhc2UgUXQ6OkltQW5jaG9yUG9zaXRpb246
IHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJUZXh0Q29udHJvbCkgeworICAgICAgICAgICAgICAg
IGlmIChlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KHJlbmRlclRleHRDb250cm9sLT5zZWxlY3Rp
b25TdGFydCgpIC0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQocmVuZGVyVGV4
dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIFFWYXJpYW50KCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjYXNlIFF0OjpJ
bUN1cnNvclBvc2l0aW9uOiB7CisgICAgICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRyb2wpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlv
blJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChyZW5kZXJUZXh0
Q29udHJvbC0+c2VsZWN0aW9uRW5kKCkgLSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdl
LmdldCgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBRVmFy
aWFudChyZW5kZXJUZXh0Q29udHJvbC0+c2VsZWN0aW9uRW5kKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBR
dDo6SW1TdXJyb3VuZGluZ1RleHQ6IHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJUZXh0Q29udHJv
bCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQocmVuZGVyVGV4dENvbnRyb2wtPnRl
eHQoKSk7CisgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFF0OjpJbUN1cnJlbnRTZWxlY3Rpb246CisgICAgICAgICAgICByZXR1cm4gUVZhcmlh
bnQoc2VsZWN0ZWRUZXh0KCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQorICAgIHJldHVybiBRVmFyaWFudCgpOwogfQogCiAvKiEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40075</attachid>
            <date>2009-09-24 11:16:03 -0700</date>
            <delta_ts>2009-09-30 10:18:40 -0700</delta_ts>
            <desc>patch to describe the changes need to sync up the s60 input context</desc>
            <filename>bug29681a.patch</filename>
            <type>text/plain</type>
            <size>6952</size>
            <attacher name="Joseph Ligman">joseph.ligman</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNDg3MjQpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDktMjQgIEpvZSBMaWdtYW4gIDxqb3NlcGgubGln
bWFuQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVl
cnkgY2FzZXMgZm9yIHRoZSBTNjAgQ29lRmVwSW5wdXRDb250ZXh0ICAKKyAgICAgICAgUXQ6Oklt
QW5jaG9yUG9zaXRpb24gaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICBRdDo6SW1DdXJzb3JQ
b3NpdGlvbiByZXR1cm5zIHRoZSB3cm9uZyBwb3NpdGlvbi4KKyAgICAgICAgUXQ6OkltU3Vycm91
bmRpbmdUZXh0IHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAKKyAgICAgICAgU2V0
cyB0aGUgc2VsZWN0aW9uIGZvciBRV2ViUGFnZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQKKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2ODEKKwor
ICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6Omlu
cHV0TWV0aG9kRXZlbnQpOgorICAgICAgICAoUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnkpOgor
CiAyMDA5LTA5LTI0ICBNYXJ0aW4gU21pdGggIDxtc21pdGhAdHJvbGx0ZWNoLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZp
c2lvbiA0ODcyMSkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2ICs2Niw4IEBACiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZWZQdHIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkhh
c2hNYXAuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCkBAIC0xMDc5LDI0ICsxMDgxLDQxIEBAIFFQYWxldHRlIFFXZWJQYWdlOjpwYWxl
dHRlKCkgY29uc3QKIAogdm9pZCBRV2ViUGFnZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQoUUlu
cHV0TWV0aG9kRXZlbnQgKmV2KQogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IHBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBXZWJDb3JlOjpF
ZGl0b3IgKmVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSAqZnJh
bWUgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7IAorICAg
IFdlYkNvcmU6OkVkaXRvciAqZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOyAKIAotICAgIGlmICgh
ZWRpdG9yLT5jYW5FZGl0KCkpIHsKLSAgICAgICAgZXYtPmlnbm9yZSgpOwotICAgICAgICByZXR1
cm47CisgICAgaWYgKCFlZGl0b3ItPmNhbkVkaXQoKSkgeyAKKyAgICAgICAgZXYtPmlnbm9yZSgp
OyAKKyAgICAgICAgcmV0dXJuOyAKKyAgICB9IAorCisjaWYgUExBVEZPUk0oU1lNQklBTikKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGV2LT5hdHRyaWJ1dGVzKCkuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgUUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZSAmYSA9IGV2LT5hdHRyaWJ1
dGVzKCkuYXQoaSk7CisgICAgICAgIGlmIChhLnR5cGUgPT0gUUlucHV0TWV0aG9kRXZlbnQ6OlNl
bGVjdGlvbikgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IDA7CisgICAg
ICAgICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCisg
ICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCk7CisKKyAgICAgICAg
ICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0Q29udHJvbCgpKSB7CisgICAgICAg
ICAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlciktPnNldFNlbGVjdGlvblN0YXJ0
KGEuc3RhcnQpOworICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIp
LT5zZXRTZWxlY3Rpb25FbmQoYS5zdGFydCArIGEubGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9OwogICAgIH0KKyNlbmRpZgogCi0gICAgaWYgKCFl
di0+Y29tbWl0U3RyaW5nKCkuaXNFbXB0eSgpKQotICAgICAgICBlZGl0b3ItPmNvbmZpcm1Db21w
b3NpdGlvbihldi0+Y29tbWl0U3RyaW5nKCkpOwotICAgIGVsc2UgewotICAgICAgICBRU3RyaW5n
IHByZWVkaXQgPSBldi0+cHJlZWRpdFN0cmluZygpOwotICAgICAgICAvLyAjIyMgRklYTUU6IHVz
ZSB0aGUgcHJvdmlkZWQgUVRleHRDaGFyRm9ybWF0ICh1c2UgY29sb3IgYXQgbGVhc3QpCi0gICAg
ICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKLSAgICAgICAgdW5k
ZXJsaW5lcy5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxpbmUoMCwgcHJlZWRpdC5sZW5ndGgoKSwg
Q29sb3IoMCwgMCwgMCksIGZhbHNlKSk7Ci0gICAgICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24o
cHJlZWRpdCwgdW5kZXJsaW5lcywgcHJlZWRpdC5sZW5ndGgoKSwgMCk7Ci0gICAgfQotICAgIGV2
LT5hY2NlcHQoKTsKKyAgICBpZiAoIWV2LT5jb21taXRTdHJpbmcoKS5pc0VtcHR5KCkpIAorICAg
ICAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbihldi0+Y29tbWl0U3RyaW5nKCkpOyAKKyAg
ICBlbHNlIHsgCisgICAgICAgIFFTdHJpbmcgcHJlZWRpdCA9IGV2LT5wcmVlZGl0U3RyaW5nKCk7
IAorICAgICAgICAvLyAjIyMgRklYTUU6IHVzZSB0aGUgcHJvdmlkZWQgUVRleHRDaGFyRm9ybWF0
ICh1c2UgY29sb3IgYXQgbGVhc3QpIAorICAgICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxp
bmU+IHVuZGVybGluZXM7IAorICAgICAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlvblVu
ZGVybGluZSgwLCBwcmVlZGl0Lmxlbmd0aCgpLCBDb2xvcigwLCAwLCAwKSwgZmFsc2UpKTsgCisg
ICAgICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24ocHJlZWRpdCwgdW5kZXJsaW5lcywgcHJlZWRp
dC5sZW5ndGgoKSwgMCk7IAorICAgIH0gCisgICAgZXYtPmFjY2VwdCgpOyAKIH0KIAogdm9pZCBR
V2ViUGFnZVByaXZhdGU6OnNob3J0Y3V0T3ZlcnJpZGVFdmVudChRS2V5RXZlbnQqIGV2ZW50KQpA
QCAtMTE5Niw0MiArMTIxNSw2NCBAQCBib29sIFFXZWJQYWdlUHJpdmF0ZTo6aGFuZGxlU2Nyb2xs
aW5nKFFLCiAqLwogUVZhcmlhbnQgUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnkoUXQ6OklucHV0
TWV0aG9kUXVlcnkgcHJvcGVydHkpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChwcm9wZXJ0eSkgewot
ICAgIGNhc2UgUXQ6OkltTWljcm9Gb2N1czogewotICAgICAgICBGcmFtZSAqZnJhbWUgPSBkLT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCk7Ci0gICAgICAgIGlmIChmcmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChmcmFtZS0+c2VsZWN0aW9uKCktPmFic29s
dXRlQ2FyZXRCb3VuZHMoKSk7Ci0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwotICAgIH0KLSAg
ICBjYXNlIFF0OjpJbUZvbnQ6IHsKLSAgICAgICAgUVdlYlZpZXcgKndlYlZpZXcgPSBxb2JqZWN0
X2Nhc3Q8UVdlYlZpZXcgKj4oZC0+dmlldyk7Ci0gICAgICAgIGlmICh3ZWJWaWV3KQotICAgICAg
ICAgICAgcmV0dXJuIFFWYXJpYW50KHdlYlZpZXctPmZvbnQoKSk7CisgICAgRnJhbWUgKmZyYW1l
ID0gZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgpOyAKKyAgICBpZiAo
IWZyYW1lKSAKICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgfQotICAgIGNhc2UgUXQ6
OkltQ3Vyc29yUG9zaXRpb246IHsKLSAgICAgICAgRnJhbWUgKmZyYW1lID0gZC0+cGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgpOwotICAgICAgICBpZiAoZnJhbWUpIHsKLSAg
ICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKTsKKworICAgIFdlYkNvcmU6OkVkaXRvciAqZWRpdG9yID0gZnJhbWUt
PmVkaXRvcigpOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IDA7CisgICAgUmVuZGVy
VGV4dENvbnRyb2wqIHJlbmRlclRleHRDb250cm9sID0gMDsKKworICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgcmVuZGVyZXIgPSBmcmFt
ZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2Rl
KCktPnJlbmRlcmVyKCk7CisKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dENv
bnRyb2woKSkKKyAgICAgICAgcmVuZGVyVGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9s
KHJlbmRlcmVyKTsKKworICAgIHN3aXRjaCAocHJvcGVydHkpIHsgCisgICAgICAgIGNhc2UgUXQ6
OkltTWljcm9Gb2N1czogeyAKKyAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoZnJhbWUtPnNl
bGVjdGlvbigpLT5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOyAKKyAgICAgICAgIHJldHVybiBRVmFy
aWFudCgpOyAKKyAgICAgfSAKKyAgICAgY2FzZSBRdDo6SW1Gb250OiB7IAorICAgICAgICAgUVdl
YlZpZXcgKndlYlZpZXcgPSBxb2JqZWN0X2Nhc3Q8UVdlYlZpZXcgKj4oZC0+dmlldyk7IAorICAg
ICAgICAgaWYgKHdlYlZpZXcpIAorICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudCh3ZWJWaWV3
LT5mb250KCkpOyAKKyAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOyAKKyAgICAgfQorI2lmIFBM
QVRGT1JNKFNZTUJJQU4pCisgICAgIGNhc2UgUXQ6OkltQW5jaG9yUG9zaXRpb246IHsKKyAgICAg
ICAgaWYgKHJlbmRlclRleHRDb250cm9sKSB7CisgICAgICAgICAgICBpZiAoZWRpdG9yLT5oYXND
b21wb3NpdGlvbigpKSB7CisgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZh
cmlhbnQocmVuZGVyVGV4dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCkgLSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gUVZhcmlhbnQocmVuZGVyVGV4dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCkpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KLSAgICBjYXNlIFF0OjpJ
bVN1cnJvdW5kaW5nVGV4dDogewotICAgICAgICBGcmFtZSAqZnJhbWUgPSBkLT5wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCk7Ci0gICAgICAgIGlmIChmcmFtZSkgewotICAg
ICAgICAgICAgRG9jdW1lbnQgKmRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAg
ICAgICBpZiAoZG9jdW1lbnQtPmZvY3VzZWROb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFFWYXJpYW50KGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpLT5ub2RlVmFsdWUoKSk7CisjZW5kaWYK
KyAgICBjYXNlIFF0OjpJbUN1cnNvclBvc2l0aW9uOiB7IAorICAgICAgICBpZiAocmVuZGVyVGV4
dENvbnRyb2wpIHsKKyAgICAgICAgICAgIGlmIChlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsK
KyAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9z
aXRpb25SYW5nZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChyZW5kZXJUZXh0
Q29udHJvbC0+c2VsZWN0aW9uU3RhcnQoKSAtIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFu
Z2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChy
ZW5kZXJUZXh0Q29udHJvbC0+c2VsZWN0aW9uU3RhcnQoKSk7CiAgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIFFWYXJpYW50KCk7IAorICAgICB9IAorICAgIGNhc2UgUXQ6OkltU3Vycm91bmRpbmdU
ZXh0OiB7IAorICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRyb2wpCisgICAgICAgICAgICByZXR1
cm4gUVZhcmlhbnQocmVuZGVyVGV4dENvbnRyb2wtPnRleHQoKSk7CiAgICAgICAgIHJldHVybiBR
VmFyaWFudCgpOwogICAgIH0KLSAgICBjYXNlIFF0OjpJbUN1cnJlbnRTZWxlY3Rpb246Ci0gICAg
ICAgIHJldHVybiBRVmFyaWFudChzZWxlY3RlZFRleHQoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgfQorICAgIGNhc2UgUXQ6OkltQ3VycmVudFNlbGVj
dGlvbjogCisgICAgICAgIHJldHVybiBRVmFyaWFudChzZWxlY3RlZFRleHQoKSk7IAorICAgIGRl
ZmF1bHQ6IAorICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsgCisgICAgfSAKIH0KIAogLyohCg==
</data>
<flag name="review"
          id="21253"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40382</attachid>
            <date>2009-09-30 10:18:40 -0700</date>
            <delta_ts>2009-10-01 03:38:31 -0700</delta_ts>
            <desc>Proposed patch,  input method handling</desc>
            <filename>bug29681a.patch</filename>
            <type>text/plain</type>
            <size>12113</size>
            <attacher name="Joseph Ligman">joseph.ligman</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNDg5MjkpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDktMzAgIEpvZSBMaWdtYW4gIDxqb3NlcGgubGln
bWFuQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBsZW1lbnRhdGlvbiBmb3IgUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnkgYW5k
IFFXZWJQYWdlUHJpdmF0ZTo6aW5wdXRNZXRob2RFdmVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2ODEKKworICAgICAgICAqIEFwaS9xd2VicGFn
ZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQpOgorICAg
ICAgICAoUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnkpOgorICAgICAgICAqIHRlc3RzL3F3ZWJw
YWdlL3RzdF9xd2VicGFnZS5jcHA6CisgICAgICAgICh0c3RfUVdlYlBhZ2U6OmlucHV0TWV0aG9k
cyk6CisKIDIwMDktMDktMjkgIEFuZHJhcyBCZWNzaSAgPGJlY3NpLmFuZHJhc0BzdHVkLnUtc3pl
Z2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCkluZGV4OiBX
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmNwcAkocmV2aXNpb24gNDg5MjkpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsMTIgQEAKICNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlZlB0ci5o
IgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSGFzaE1hcC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKICNp
bmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC05NSw2ICs5OSw3IEBACiAjaW5jbHVkZSA8
UVNzbFNvY2tldD4KICNpbmNsdWRlIDxRU3R5bGU+CiAjaW5jbHVkZSA8UVN5c0luZm8+CisjaW5j
bHVkZSA8UVRleHRDaGFyRm9ybWF0PgogI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKICNpbmNs
dWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CiAjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgpA
QCAtMTA3Nyw2ICsxMDgyLDcgQEAgUVBhbGV0dGUgUVdlYlBhZ2U6OnBhbGV0dGUoKSBjb25zdAog
ICAgIHJldHVybiBkLT5wYWxldHRlOwogfQogCitRX0RFQ0xBUkVfTUVUQVRZUEUoUVRleHRDaGFy
Rm9ybWF0KQogdm9pZCBRV2ViUGFnZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0
aG9kRXZlbnQgKmV2KQogewogICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IHBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTEwODcsMTMgKzEwOTMsNTMg
QEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQoUQogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IDA7CisgICAgUmVuZGVy
VGV4dENvbnRyb2wqIHJlbmRlclRleHRDb250cm9sID0gMDsKKworICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgcmVuZGVyZXIgPSBmcmFt
ZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2Rl
KCktPnJlbmRlcmVyKCk7CisKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dENv
bnRyb2woKSkKKyAgICAgICAgcmVuZGVyVGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9s
KHJlbmRlcmVyKTsKKworICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5l
czsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXYtPmF0dHJpYnV0ZXMoKS5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBRSW5wdXRNZXRob2RFdmVudDo6QXR0cmlidXRlICZhID0gZXYt
PmF0dHJpYnV0ZXMoKS5hdChpKTsKKyAgICAgICAgc3dpdGNoIChhLnR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgUUlucHV0TWV0aG9kRXZlbnQ6OlRleHRGb3JtYXQ6IHsKKyAgICAgICAgICAgICAg
ICBRVGV4dENoYXJGb3JtYXQgdGV4dENoYXJGb3JtYXQgPSBhLnZhbHVlLnZhbHVlPFFUZXh0Q2hh
ckZvcm1hdD4oKTsKKyAgICAgICAgICAgICAgICBRQ29sb3IgcWNvbG9yID0gdGV4dENoYXJGb3Jt
YXQudW5kZXJsaW5lQ29sb3IoKTsKKyAgICAgICAgICAgICAgICB1bmRlcmxpbmVzLmFwcGVuZChD
b21wb3NpdGlvblVuZGVybGluZShhLnN0YXJ0LCBhLmxlbmd0aCwgQ29sb3IobWFrZVJHQkEocWNv
bG9yLnJlZCgpLCBxY29sb3IuZ3JlZW4oKSwgcWNvbG9yLmJsdWUoKSwgcWNvbG9yLmFscGhhKCkp
KSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgUUlucHV0TWV0aG9kRXZlbnQ6OkN1cnNvcjogeworICAgICAgICAgICAgICAg
IGZyYW1lLT5zZXRDYXJldFZpc2libGUoYS5sZW5ndGgpOyAvL2lmIGxlbmd0aCBpcyAwIGN1cnNv
ciBpcyBpbnZpc2libGUKKyAgICAgICAgICAgICAgICBpZiAoYS5sZW5ndGggPiAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2FyZXRSZW5kZXJlciA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS0+Y2FyZXRSZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZXRS
ZW5kZXJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHFjb2xvciA9IGEudmFs
dWUudmFsdWU8UUNvbG9yPigpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXRSZW5kZXJl
ci0+c3R5bGUoKS0+c2V0Q29sb3IoQ29sb3IobWFrZVJHQkEocWNvbG9yLnJlZCgpLCBxY29sb3Iu
Z3JlZW4oKSwgcWNvbG9yLmJsdWUoKSwgcWNvbG9yLmFscGhhKCkpKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDUwMgorICAgICAgICAgICAgY2FzZSBR
SW5wdXRNZXRob2RFdmVudDo6U2VsZWN0aW9uOiB7CisgICAgICAgICAgICAgICAgaWYgKHJlbmRl
clRleHRDb250cm9sKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRleHRDb250cm9sLT5z
ZXRTZWxlY3Rpb25TdGFydChhLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGV4
dENvbnRyb2wtPnNldFNlbGVjdGlvbkVuZChhLnN0YXJ0ICsgYS5sZW5ndGgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICB9OworICAgIH0KKwogICAgIGlmICghZXYtPmNvbW1pdFN0cmluZygpLmlzRW1wdHko
KSkKICAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oZXYtPmNvbW1pdFN0cmluZygp
KTsKLSAgICBlbHNlIHsKKyAgICBlbHNlIGlmICghZXYtPnByZWVkaXRTdHJpbmcoKS5pc0VtcHR5
KCkpIHsKICAgICAgICAgUVN0cmluZyBwcmVlZGl0ID0gZXYtPnByZWVkaXRTdHJpbmcoKTsKLSAg
ICAgICAgLy8gIyMjIEZJWE1FOiB1c2UgdGhlIHByb3ZpZGVkIFFUZXh0Q2hhckZvcm1hdCAodXNl
IGNvbG9yIGF0IGxlYXN0KQotICAgICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVu
ZGVybGluZXM7Ci0gICAgICAgIHVuZGVybGluZXMuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5l
KDAsIHByZWVkaXQubGVuZ3RoKCksIENvbG9yKDAsIDAsIDApLCBmYWxzZSkpOwogICAgICAgICBl
ZGl0b3ItPnNldENvbXBvc2l0aW9uKHByZWVkaXQsIHVuZGVybGluZXMsIHByZWVkaXQubGVuZ3Ro
KCksIDApOwogICAgIH0KICAgICBldi0+YWNjZXB0KCk7CkBAIC0xMTk2LDQxICsxMjQyLDgzIEBA
IGJvb2wgUVdlYlBhZ2VQcml2YXRlOjpoYW5kbGVTY3JvbGxpbmcoUUsKICovCiBRVmFyaWFudCBR
V2ViUGFnZTo6aW5wdXRNZXRob2RRdWVyeShRdDo6SW5wdXRNZXRob2RRdWVyeSBwcm9wZXJ0eSkg
Y29uc3QKIHsKKyAgICBGcmFtZSAqZnJhbWUgPSBkLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
Zm9jdXNlZEZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFFWYXJpYW50
KCk7CisKKyAgICBXZWJDb3JlOjpFZGl0b3IgKmVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKKwor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAwOworICAgIFJlbmRlclRleHRDb250cm9sKiBy
ZW5kZXJUZXh0Q29udHJvbCA9IDA7CisKKyAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5yb290
RWRpdGFibGVFbGVtZW50KCkpCisgICAgICAgIHJlbmRlcmVyID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5yb290RWRpdGFibGVFbGVtZW50KCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigp
OworCisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHRDb250cm9sKCkpCisgICAg
ICAgIHJlbmRlclRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcik7CisK
ICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7Ci0gICAgY2FzZSBRdDo6SW1NaWNyb0ZvY3VzOiB7Ci0g
ICAgICAgIEZyYW1lICpmcmFtZSA9IGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
RnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICBjYXNlIFF0OjpJbU1pY3JvRm9j
dXM6IHsKICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChmcmFtZS0+c2VsZWN0aW9uKCktPmFi
c29sdXRlQ2FyZXRCb3VuZHMoKSk7Ci0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwotICAgIH0K
LSAgICBjYXNlIFF0OjpJbUZvbnQ6IHsKLSAgICAgICAgUVdlYlZpZXcgKndlYlZpZXcgPSBxb2Jq
ZWN0X2Nhc3Q8UVdlYlZpZXcgKj4oZC0+dmlldyk7Ci0gICAgICAgIGlmICh3ZWJWaWV3KQotICAg
ICAgICAgICAgcmV0dXJuIFFWYXJpYW50KHdlYlZpZXctPmZvbnQoKSk7Ci0gICAgICAgIHJldHVy
biBRVmFyaWFudCgpOwotICAgIH0KLSAgICBjYXNlIFF0OjpJbUN1cnNvclBvc2l0aW9uOiB7Ci0g
ICAgICAgIEZyYW1lICpmcmFtZSA9IGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
RnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7Ci0gICAgICAg
ICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUVZh
cmlhbnQoc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgfQotICAgIGNhc2UgUXQ6Oklt
U3Vycm91bmRpbmdUZXh0OiB7Ci0gICAgICAgIEZyYW1lICpmcmFtZSA9IGQtPnBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAg
ICAgICAgICBEb2N1bWVudCAqZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAg
ICAgIGlmIChkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
UVZhcmlhbnQoZG9jdW1lbnQtPmZvY3VzZWROb2RlKCktPm5vZGVWYWx1ZSgpKTsKKyAgICAgICAg
Y2FzZSBRdDo6SW1Gb250OiB7CisgICAgICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRyb2wpIHsK
KyAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJUZXh0Q29u
dHJvbC0+c3R5bGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoUUZvbnQocmVu
ZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBRVmFyaWFudChRRm9udCgpKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUVZhcmlh
bnQoKTsKLSAgICB9Ci0gICAgY2FzZSBRdDo6SW1DdXJyZW50U2VsZWN0aW9uOgotICAgICAgICBy
ZXR1cm4gUVZhcmlhbnQoc2VsZWN0ZWRUZXh0KCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBRVmFyaWFudCgpOworICAgICAgICBjYXNlIFF0OjpJbUN1cnNvclBvc2l0aW9uOiB7Cisg
ICAgICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRyb2wpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBRVmFyaWFudChyZW5kZXJUZXh0Q29udHJvbC0+c2VsZWN0aW9uRW5k
KCkgLSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChyZW5kZXJUZXh0Q29udHJv
bC0+c2VsZWN0aW9uRW5kKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFFW
YXJpYW50KCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBRdDo6SW1TdXJyb3VuZGluZ1RleHQ6
IHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJUZXh0Q29udHJvbCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUVZhcmlhbnQocmVuZGVyVGV4dENvbnRyb2wtPnRleHQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gUVZhcmlhbnQoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFF0OjpJbUN1cnJlbnRT
ZWxlY3Rpb246IHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJUZXh0Q29udHJvbCkgeworICAgICAg
ICAgICAgICAgIGludCBzdGFydCA9IHJlbmRlclRleHRDb250cm9sLT5zZWxlY3Rpb25TdGFydCgp
OworICAgICAgICAgICAgICAgIGludCBlbmQgPSByZW5kZXJUZXh0Q29udHJvbC0+c2VsZWN0aW9u
RW5kKCk7CisgICAgICAgICAgICAgICAgaWYgKGVuZCA+IHN0YXJ0KQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUVZhcmlhbnQoUVN0cmluZyhyZW5kZXJUZXh0Q29udHJvbC0+dGV4dCgpKS5t
aWQoc3RhcnQsZW5kLXN0YXJ0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
UVZhcmlhbnQoKTsKKworICAgICAgICB9CisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDUwMgorICAg
ICAgICBjYXNlIFF0OjpJbUFuY2hvclBvc2l0aW9uOiB7CisgICAgICAgICAgICBpZiAocmVuZGVy
VGV4dENvbnRyb2wpIHsgCisgICAgICAgICAgICAgICAgaWYgKGVkaXRvci0+aGFzQ29tcG9zaXRp
b24oKSkgeworICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVk
aXRvci0+Y29tcG9zaXRpb25SYW5nZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUVZh
cmlhbnQocmVuZGVyVGV4dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCkgLSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBRVmFyaWFudChyZW5kZXJUZXh0Q29udHJvbC0+c2VsZWN0aW9uU3RhcnQo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIFF0OjpJbU1heGltdW1UZXh0TGVuZ3RoOiB7CisgICAgICAgICAg
ICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+
Zm9jdXNlZE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChpbnB1dEVsZW1lbnQt
Pm1heExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoSW5wdXRFbGVtZW50OjpzX21heGltdW1M
ZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KDApOwor
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBR
VmFyaWFudCgpOwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3Rz
dF9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3Rz
dF9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDQ4OTI5KQorKysgV2ViS2l0L3F0L3Rlc3RzL3F3ZWJw
YWdlL3RzdF9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDcgQEAKIAog
I2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CiAKKyNpbmNsdWRlIDxxd2ViZWxlbWVudC5oPgogI2lu
Y2x1ZGUgPHF3ZWJwYWdlLmg+CiAjaW5jbHVkZSA8cXdpZGdldC5oPgogI2luY2x1ZGUgPHF3ZWJ2
aWV3Lmg+CkBAIC0xMTQsNiArMTE1LDcgQEAgcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIHRlc3RP
cHRpb25hbEpTT2JqZWN0cygpOwogICAgIHZvaWQgdGVzdEVuYWJsZVBlcnNpc3RlbnRTdG9yYWdl
KCk7CiAgICAgdm9pZCBjb25zb2xlT3V0cHV0KCk7CisgICAgdm9pZCBpbnB1dE1ldGhvZHMoKTsK
IAogICAgIHZvaWQgY3Jhc2hUZXN0c19MYXp5SW5pdGlhbGl6YXRpb25PZk1haW5GcmFtZSgpOwog
CkBAIC0xMjAzLDYgKzEyMDUsNjggQEAgdm9pZCB0c3RfUVdlYlBhZ2U6OmZyYW1lQXQoKQogICAg
IGZyYW1lQXRIZWxwZXIod2ViUGFnZSwgd2ViUGFnZS0+bWFpbkZyYW1lKCksIHdlYlBhZ2UtPm1h
aW5GcmFtZSgpLT5wb3MoKSk7CiB9CiAKK3ZvaWQgdHN0X1FXZWJQYWdlOjppbnB1dE1ldGhvZHMo
KQoreworICAgIG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+c2V0SHRtbCgiPGh0bWw+PGJv
ZHk+IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aW5w
dXQgdHlwZT0ndGV4dCcgaWQ9J2lucHV0MScgc3R5bGU9J2ZvbnQtZmFtaWx5OiBzZXJpZicgdmFs
dWU9JycgbWF4bGVuZ3RoPScyMCcvPiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICBtX3ZpZXctPnBhZ2UoKS0+bWFp
bkZyYW1lKCktPnNldEZvY3VzKCk7CisKKyAgICBRTGlzdDxRV2ViRWxlbWVudD4gaW5wdXRzID0g
bV92aWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudEVsZW1lbnQoKS5maW5kQWxsKCJp
bnB1dCIpOworCisgICAgUU1vdXNlRXZlbnQgZXZwcmVzKFFFdmVudDo6TW91c2VCdXR0b25QcmVz
cywgaW5wdXRzLmF0KDApLmdlb21ldHJ5KCkuY2VudGVyKCksIFF0OjpMZWZ0QnV0dG9uLCBRdDo6
Tm9CdXR0b24sIFF0OjpOb01vZGlmaWVyKTsKKyAgICBtX3ZpZXctPnBhZ2UoKS0+ZXZlbnQoJmV2
cHJlcyk7CisgICAgUU1vdXNlRXZlbnQgZXZyZWwoUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2Us
IGlucHV0cy5hdCgwKS5nZW9tZXRyeSgpLmNlbnRlcigpLCBRdDo6TGVmdEJ1dHRvbiwgUXQ6Ok5v
QnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7CisgICAgbV92aWV3LT5wYWdlKCktPmV2ZW50KCZldnJl
bCk7CisKKyAgICAvL0ltTWljcm9Gb2N1cworICAgIFFWYXJpYW50IHZhcmlhbnQgPSBtX3ZpZXct
PnBhZ2UoKS0+aW5wdXRNZXRob2RRdWVyeShRdDo6SW1NaWNyb0ZvY3VzKTsKKyAgICBRUmVjdCBm
b2N1c1JlY3QgPSB2YXJpYW50LnRvUmVjdCgpOworICAgIFFWRVJJRlkoaW5wdXRzLmF0KDApLmdl
b21ldHJ5KCkuY29udGFpbnModmFyaWFudC50b1JlY3QoKS50b3BMZWZ0KCkpKTsKKworICAgIC8v
SW1Gb250CisgICAgdmFyaWFudCA9IG1fdmlldy0+cGFnZSgpLT5pbnB1dE1ldGhvZFF1ZXJ5KFF0
OjpJbUZvbnQpOworICAgIFFGb250IGZvbnQgPSB2YXJpYW50LnZhbHVlPFFGb250PigpOworICAg
IFFDT01QQVJFKFFTdHJpbmcoIi13ZWJraXQtc2VyaWYiKSwgZm9udC5mYW1pbHkoKSk7CisKKyAg
ICAvL0luc2VydCB0ZXh0LgorICAgIFFMaXN0PFFJbnB1dE1ldGhvZEV2ZW50OjpBdHRyaWJ1dGU+
IGlucHV0QXR0cmlidXRlczsKKyAgICBRSW5wdXRNZXRob2RFdmVudCBldmVudFRleHQoIiIsIGlu
cHV0QXR0cmlidXRlcyk7CisgICAgZXZlbnRUZXh0LnNldENvbW1pdFN0cmluZyhRU3RyaW5nKCJR
dFdlYktpdCIpLCAwLCAwKTsKKyAgICBtX3ZpZXctPnBhZ2UoKS0+ZXZlbnQoJmV2ZW50VGV4dCk7
CisKKyNpZiBRVF9WRVJTSU9OID49IDB4MDQwNTAyCisgICAgLy9JbU1heGltdW1UZXh0TGVuZ3Ro
CisgICAgdmFyaWFudCA9IG1fdmlldy0+cGFnZSgpLT5pbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJbU1h
eGltdW1UZXh0TGVuZ3RoKTsKKyAgICBRQ09NUEFSRSgyMCwgdmFyaWFudC50b0ludCgpKTsKKwor
ICAgIC8vU2V0IHNlbGVjdGlvbgorICAgIGlucHV0QXR0cmlidXRlcyA8PCBRSW5wdXRNZXRob2RF
dmVudDo6QXR0cmlidXRlKFFJbnB1dE1ldGhvZEV2ZW50OjpTZWxlY3Rpb24sIDMsIDIsIFFWYXJp
YW50KCkpOworICAgIFFJbnB1dE1ldGhvZEV2ZW50IGV2ZW50U2VsZWN0aW9uKCIiLGlucHV0QXR0
cmlidXRlcyk7CisgICAgbV92aWV3LT5wYWdlKCktPmV2ZW50KCZldmVudFNlbGVjdGlvbik7CisK
KyAgICAvL0ltQW5jaG9yUG9zaXRpb24KKyAgICB2YXJpYW50ID0gbV92aWV3LT5wYWdlKCktPmlu
cHV0TWV0aG9kUXVlcnkoUXQ6OkltQW5jaG9yUG9zaXRpb24pOworICAgIGludCBhbmNob3JQb3Np
dGlvbiA9ICB2YXJpYW50LnRvSW50KCk7CisgICAgUUNPTVBBUkUoYW5jaG9yUG9zaXRpb24sIDMp
OworCisgICAgLy9JbUN1cnNvclBvc2l0aW9uCisgICAgdmFyaWFudCA9IG1fdmlldy0+cGFnZSgp
LT5pbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJbUN1cnNvclBvc2l0aW9uKTsKKyAgICBpbnQgY3Vyc29y
UG9zaXRpb24gPSAgdmFyaWFudC50b0ludCgpOworICAgIFFDT01QQVJFKGN1cnNvclBvc2l0aW9u
LCA1KTsKKworICAgIC8vSW1DdXJyZW50U2VsZWN0aW9uCisgICAgdmFyaWFudCA9IG1fdmlldy0+
cGFnZSgpLT5pbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJbUN1cnJlbnRTZWxlY3Rpb24pOworICAgIFFT
dHJpbmcgc2VsZWN0aW9uVmFsdWUgPSB2YXJpYW50LnZhbHVlPFFTdHJpbmc+KCk7CisgICAgUUNP
TVBBUkUoc2VsZWN0aW9uVmFsdWUsIFFTdHJpbmcoImViIikpOworI2VuZGlmCisKKyAgICAvL0lt
U3Vycm91bmRpbmdUZXh0CisgICAgdmFyaWFudCA9IG1fdmlldy0+cGFnZSgpLT5pbnB1dE1ldGhv
ZFF1ZXJ5KFF0OjpJbVN1cnJvdW5kaW5nVGV4dCk7CisgICAgUVN0cmluZyB2YWx1ZSA9IHZhcmlh
bnQudmFsdWU8UVN0cmluZz4oKTsKKyAgICBRQ09NUEFSRSh2YWx1ZSwgUVN0cmluZygiUXRXZWJL
aXQiKSk7Cit9CisKIC8vIGltcG9ydCBhIGxpdHRsZSBEUlQgaGVscGVyIGZ1bmN0aW9uIHRvIHRy
aWdnZXIgdGhlIGdhcmJhZ2UgY29sbGVjdG9yCiB2b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2RydF9n
YXJiYWdlQ29sbGVjdG9yX2NvbGxlY3QoKTsKIAo=
</data>
<flag name="review"
          id="21597"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40433</attachid>
            <date>2009-10-01 05:20:19 -0700</date>
            <delta_ts>2009-10-01 05:42:03 -0700</delta_ts>
            <desc>Update patch with more fixes</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>13912</size>
            <attacher name="Kristian Amlie">kristian.amlie</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKaW5kZXggNGI2MjQ4YS4uMDAwYjg5NSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTY2
LDggKzY2LDEyIEBACiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQcm9n
cmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZWZQdHIuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0
Q29udHJvbC5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkhhc2hNYXAu
aCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgpAQCAtOTUsNiArOTksNyBAQAogI2luY2x1ZGUgPFFTc2xTb2NrZXQ+CiAjaW5jbHVkZSA8
UVN0eWxlPgogI2luY2x1ZGUgPFFTeXNJbmZvPgorI2luY2x1ZGUgPFFUZXh0Q2hhckZvcm1hdD4K
ICNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyPgogI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KQEAgLTEwODcsMTMgKzEwOTIsNTMgQEAg
dm9pZCBRV2ViUGFnZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQg
KmV2KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IDA7CisgICAgUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlclRleHRDb250cm9sID0gMDsKKwor
ICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAg
ICAgcmVuZGVyZXIgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+
c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCk7CisKKyAgICBpZiAocmVuZGVyZXIgJiYg
cmVuZGVyZXItPmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmVuZGVyVGV4dENvbnRyb2wgPSB0
b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKTsKKworICAgIFZlY3RvcjxDb21wb3NpdGlvblVu
ZGVybGluZT4gdW5kZXJsaW5lczsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXYtPmF0dHJp
YnV0ZXMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBRSW5wdXRNZXRob2RFdmVudDo6
QXR0cmlidXRlJiBhID0gZXYtPmF0dHJpYnV0ZXMoKS5hdChpKTsKKyAgICAgICAgc3dpdGNoIChh
LnR5cGUpIHsKKyAgICAgICAgY2FzZSBRSW5wdXRNZXRob2RFdmVudDo6VGV4dEZvcm1hdDogewor
ICAgICAgICAgICAgUVRleHRDaGFyRm9ybWF0IHRleHRDaGFyRm9ybWF0ID0gYS52YWx1ZS52YWx1
ZTxRVGV4dEZvcm1hdD4oKS50b0NoYXJGb3JtYXQoKTsKKyAgICAgICAgICAgIFFDb2xvciBxY29s
b3IgPSB0ZXh0Q2hhckZvcm1hdC51bmRlcmxpbmVDb2xvcigpOworICAgICAgICAgICAgdW5kZXJs
aW5lcy5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxpbmUoYS5zdGFydCwgYS5sZW5ndGgsIENvbG9y
KG1ha2VSR0JBKHFjb2xvci5yZWQoKSwgcWNvbG9yLmdyZWVuKCksIHFjb2xvci5ibHVlKCksIHFj
b2xvci5hbHBoYSgpKSksIGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFFJbnB1dE1ldGhvZEV2ZW50OjpDdXJzb3I6IHsKKyAgICAgICAgICAgIGZy
YW1lLT5zZXRDYXJldFZpc2libGUoYS5sZW5ndGgpOyAvL2lmIGxlbmd0aCBpcyAwIGN1cnNvciBp
cyBpbnZpc2libGUKKyAgICAgICAgICAgIGlmIChhLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIGNhcmV0UmVuZGVyZXIgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmNh
cmV0UmVuZGVyZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FyZXRSZW5kZXJlcikgeworICAg
ICAgICAgICAgICAgICAgICBRQ29sb3IgcWNvbG9yID0gYS52YWx1ZS52YWx1ZTxRQ29sb3I+KCk7
CisgICAgICAgICAgICAgICAgICAgIGNhcmV0UmVuZGVyZXItPnN0eWxlKCktPnNldENvbG9yKENv
bG9yKG1ha2VSR0JBKHFjb2xvci5yZWQoKSwgcWNvbG9yLmdyZWVuKCksIHFjb2xvci5ibHVlKCks
IHFjb2xvci5hbHBoYSgpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDYwMAor
ICAgICAgICBjYXNlIFFJbnB1dE1ldGhvZEV2ZW50OjpTZWxlY3Rpb246IHsKKyAgICAgICAgICAg
IGlmIChyZW5kZXJUZXh0Q29udHJvbCkgeworICAgICAgICAgICAgICAgIHJlbmRlclRleHRDb250
cm9sLT5zZXRTZWxlY3Rpb25TdGFydChhLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICByZW5kZXJU
ZXh0Q29udHJvbC0+c2V0U2VsZWN0aW9uRW5kKGEuc3RhcnQgKyBhLmxlbmd0aCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0K
KyAgICB9CisKICAgICBpZiAoIWV2LT5jb21taXRTdHJpbmcoKS5pc0VtcHR5KCkpCiAgICAgICAg
IGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKGV2LT5jb21taXRTdHJpbmcoKSk7Ci0gICAgZWxz
ZSB7CisgICAgZWxzZSBpZiAoIWV2LT5wcmVlZGl0U3RyaW5nKCkuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIFFTdHJpbmcgcHJlZWRpdCA9IGV2LT5wcmVlZGl0U3RyaW5nKCk7Ci0gICAgICAgIC8vICMj
IyBGSVhNRTogdXNlIHRoZSBwcm92aWRlZCBRVGV4dENoYXJGb3JtYXQgKHVzZSBjb2xvciBhdCBs
ZWFzdCkKLSAgICAgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOwot
ICAgICAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZSgwLCBwcmVlZGl0
Lmxlbmd0aCgpLCBDb2xvcigwLCAwLCAwKSwgZmFsc2UpKTsKICAgICAgICAgZWRpdG9yLT5zZXRD
b21wb3NpdGlvbihwcmVlZGl0LCB1bmRlcmxpbmVzLCBwcmVlZGl0Lmxlbmd0aCgpLCAwKTsKICAg
ICB9CiAgICAgZXYtPmFjY2VwdCgpOwpAQCAtMTE5Niw0MSArMTI0MSw4OSBAQCBib29sIFFXZWJQ
YWdlUHJpdmF0ZTo6aGFuZGxlU2Nyb2xsaW5nKFFLZXlFdmVudCAqZXYsIEZyYW1lICpmcmFtZSkK
ICovCiBRVmFyaWFudCBRV2ViUGFnZTo6aW5wdXRNZXRob2RRdWVyeShRdDo6SW5wdXRNZXRob2RR
dWVyeSBwcm9wZXJ0eSkgY29uc3QKIHsKKyAgICBGcmFtZSogZnJhbWUgPSBkLT5wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIFFWYXJpYW50KCk7CisKKyAgICBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9IGZyYW1l
LT5lZGl0b3IoKTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAwOworICAgIFJlbmRl
clRleHRDb250cm9sKiByZW5kZXJUZXh0Q29udHJvbCA9IDA7CisKKyAgICBpZiAoZnJhbWUtPnNl
bGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCisgICAgICAgIHJlbmRlcmVyID0gZnJh
bWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCktPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpLT5yZW5kZXJlcigpOworCisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHRD
b250cm9sKCkpCisgICAgICAgIHJlbmRlclRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJv
bChyZW5kZXJlcik7CisKICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7Ci0gICAgY2FzZSBRdDo6SW1N
aWNyb0ZvY3VzOiB7Ci0gICAgICAgIEZyYW1lICpmcmFtZSA9IGQtPnBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkRnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICBjYXNl
IFF0OjpJbU1pY3JvRm9jdXM6IHsKICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChmcmFtZS0+
c2VsZWN0aW9uKCktPmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7Ci0gICAgICAgIHJldHVybiBRVmFy
aWFudCgpOwotICAgIH0KLSAgICBjYXNlIFF0OjpJbUZvbnQ6IHsKLSAgICAgICAgUVdlYlZpZXcg
KndlYlZpZXcgPSBxb2JqZWN0X2Nhc3Q8UVdlYlZpZXcgKj4oZC0+dmlldyk7Ci0gICAgICAgIGlm
ICh3ZWJWaWV3KQotICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KHdlYlZpZXctPmZvbnQoKSk7
Ci0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwotICAgIH0KLSAgICBjYXNlIFF0OjpJbUN1cnNv
clBvc2l0aW9uOiB7Ci0gICAgICAgIEZyYW1lICpmcmFtZSA9IGQtPnBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkRnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCk7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gUVZhcmlhbnQoc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgfQot
ICAgIGNhc2UgUXQ6OkltU3Vycm91bmRpbmdUZXh0OiB7Ci0gICAgICAgIEZyYW1lICpmcmFtZSA9
IGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUoKTsKLSAgICAgICAgaWYg
KGZyYW1lKSB7Ci0gICAgICAgICAgICBEb2N1bWVudCAqZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKTsKLSAgICAgICAgICAgIGlmIChkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gUVZhcmlhbnQoZG9jdW1lbnQtPmZvY3VzZWROb2RlKCktPm5vZGVWYWx1
ZSgpKTsKKyAgICAgICAgY2FzZSBRdDo6SW1Gb250OiB7CisgICAgICAgICAgICBpZiAocmVuZGVy
VGV4dENvbnRyb2wpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUg
PSByZW5kZXJUZXh0Q29udHJvbC0+c3R5bGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZh
cmlhbnQoUUZvbnQocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChRRm9udCgpKTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gUVZhcmlhbnQoKTsKLSAgICB9Ci0gICAgY2FzZSBRdDo6SW1DdXJyZW50U2VsZWN0
aW9uOgotICAgICAgICByZXR1cm4gUVZhcmlhbnQoc2VsZWN0ZWRUZXh0KCkpOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOworICAgICAgICBjYXNlIFF0OjpJbUN1cnNv
clBvc2l0aW9uOiB7CisgICAgICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRyb2wpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7CisgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KHJlbmRlclRleHRDb250cm9sLT5z
ZWxlY3Rpb25FbmQoKSAtIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCkpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KHJlbmRl
clRleHRDb250cm9sLT5zZWxlY3Rpb25FbmQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gUVZhcmlhbnQoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFF0OjpJbVN1cnJv
dW5kaW5nVGV4dDogeworICAgICAgICAgICAgaWYgKHJlbmRlclRleHRDb250cm9sKSB7CisgICAg
ICAgICAgICAgICAgUVN0cmluZyB0ZXh0ID0gcmVuZGVyVGV4dENvbnRyb2wtPnRleHQoKTsKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlvblJh
bmdlKCk7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICAgICAgICAg
IHRleHQucmVtb3ZlKHJhbmdlLT5zdGFydFBvc2l0aW9uKCkub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KHRleHQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBRdDo6SW1DdXJyZW50U2VsZWN0aW9uOiB7CisgICAgICAgICAgICBpZiAocmVuZGVyVGV4
dENvbnRyb2wpIHsKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSByZW5kZXJUZXh0Q29udHJv
bC0+c2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgICAgICAgICBpbnQgZW5kID0gcmVuZGVyVGV4
dENvbnRyb2wtPnNlbGVjdGlvbkVuZCgpOworICAgICAgICAgICAgICAgIGlmIChlbmQgPiBzdGFy
dCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KFFTdHJpbmcocmVuZGVyVGV4
dENvbnRyb2wtPnRleHQoKSkubWlkKHN0YXJ0LGVuZC1zdGFydCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CisKKyAgICAgICAgfQorI2lmIFFUX1ZFUlNJ
T04gPj0gMHgwNDA2MDAKKyAgICAgICAgY2FzZSBRdDo6SW1BbmNob3JQb3NpdGlvbjogeworICAg
ICAgICAgICAgaWYgKHJlbmRlclRleHRDb250cm9sKSB7CisgICAgICAgICAgICAgICAgaWYgKGVk
aXRvci0+aGFzQ29tcG9zaXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBRVmFyaWFudChyZW5kZXJUZXh0Q29udHJvbC0+c2VsZWN0aW9uU3RhcnQoKSAt
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KHJlbmRlclRleHRDb250cm9sLT5z
ZWxlY3Rpb25TdGFydCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBRVmFy
aWFudCgpOworICAgICAgICB9CisgICAgICAgIGNhc2UgUXQ6OkltTWF4aW11bVRleHRMZW5ndGg6
IHsKKyAgICAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxl
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRv
Y3VtZW50KCktPmZvY3VzZWROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1l
LT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRU
YWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZnJhbWUtPmRvY3VtZW50KCkt
PmZvY3VzZWROb2RlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50
KGlucHV0RWxlbWVudC0+bWF4TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChJbnB1dEVsZW1l
bnQ6OnNfbWF4aW11bUxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
UVZhcmlhbnQoMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAzOWFlZjg4Li44M2U1YjI3
IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNCBAQAorMjAwOS0xMC0wMSAgSm9lIExpZ21hbiAgPGpvc2VwaC5saWdt
YW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJ
SW1wbGVtZW50YXRpb24gZm9yIFFXZWJQYWdlOjppbnB1dE1ldGhvZFF1ZXJ5IGFuZCBRV2ViUGFn
ZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2ODEKKworCVNvbWUgYWRkaXRpb25hbCBjaGFuZ2VzIGZy
b20gS3Jpc3RpYW4gQW1saWUgPGtyaXN0aWFuLmFtbGllQG5va2lhLmNvbT46CisKKwkgICAgKiBG
aXhlZCBzdXJyb3VuZGluZyB0ZXh0IHRvIGV4Y2x1ZGUgcHJlZWRpdCBzdHJpbmcKKwkgICAgKiBB
dm9pZCBlbWlzc2lvbiBvZiBtaWNyb0ZvY3VzQ2hhbmdlZCBkdXJpbmcgc2V0Q29tcG9zaXRpb24o
KQorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0
ZTo6aW5wdXRNZXRob2RFdmVudCk6CisgICAgICAgIChRV2ViUGFnZTo6aW5wdXRNZXRob2RRdWVy
eSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgor
ICAgICAgICAqIHRlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHA6CisgICAgICAgICh0c3Rf
UVdlYlBhZ2U6OmlucHV0TWV0aG9kcyk6CisKIDIwMDktMDktMzAgIEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIEh5YXR0LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAK
aW5kZXggNDA4MzNmMi4uNWQ1ZGY5NyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50UXQuY3BwCkBAIC0yMjAsNyArMjIwLDkgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpCiAKICAgICBtX3BhZ2UtPmQtPnVwZGF0ZUVkaXRv
ckFjdGlvbnMoKTsKICAgICBlbWl0IG1fcGFnZS0+c2VsZWN0aW9uQ2hhbmdlZCgpOwotICAgIGVt
aXQgbV9wYWdlLT5taWNyb0ZvY3VzQ2hhbmdlZCgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAg
IGlmICghZnJhbWUtPmVkaXRvcigpLT5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgp
KQorICAgICAgICBlbWl0IG1fcGFnZS0+bWljcm9Gb2N1c0NoYW5nZWQoKTsKIH0KIAogdm9pZCBF
ZGl0b3JDbGllbnRRdDo6ZGlkRW5kRWRpdGluZygpCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvdGVz
dHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90
c3RfcXdlYnBhZ2UuY3BwCmluZGV4IDI4Mzk1MGUuLjhmOWE3NDAgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC90ZXN0
cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRl
IDxRdFRlc3QvUXRUZXN0PgogCisjaW5jbHVkZSA8cXdlYmVsZW1lbnQuaD4KICNpbmNsdWRlIDxx
d2VicGFnZS5oPgogI2luY2x1ZGUgPHF3aWRnZXQuaD4KICNpbmNsdWRlIDxxd2Vidmlldy5oPgpA
QCAtMTE0LDYgKzExNSw3IEBAIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCB0ZXN0T3B0aW9uYWxK
U09iamVjdHMoKTsKICAgICB2b2lkIHRlc3RFbmFibGVQZXJzaXN0ZW50U3RvcmFnZSgpOwogICAg
IHZvaWQgY29uc29sZU91dHB1dCgpOworICAgIHZvaWQgaW5wdXRNZXRob2RzKCk7CiAKICAgICB2
b2lkIGNyYXNoVGVzdHNfTGF6eUluaXRpYWxpemF0aW9uT2ZNYWluRnJhbWUoKTsKIApAQCAtMTIw
Myw2ICsxMjA1LDk0IEBAIHZvaWQgdHN0X1FXZWJQYWdlOjpmcmFtZUF0KCkKICAgICBmcmFtZUF0
SGVscGVyKHdlYlBhZ2UsIHdlYlBhZ2UtPm1haW5GcmFtZSgpLCB3ZWJQYWdlLT5tYWluRnJhbWUo
KS0+cG9zKCkpOwogfQogCit2b2lkIHRzdF9RV2ViUGFnZTo6aW5wdXRNZXRob2RzKCkKK3sKKyAg
ICBtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnNldEh0bWwoIjxodG1sPjxib2R5PiIgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGlucHV0IHR5cGU9
J3RleHQnIGlkPSdpbnB1dDEnIHN0eWxlPSdmb250LWZhbWlseTogc2VyaWYnIHZhbHVlPScnIG1h
eGxlbmd0aD0nMjAnLz4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIjwvYm9keT48L2h0bWw+Iik7CisgICAgbV92aWV3LT5wYWdlKCktPm1haW5GcmFtZSgp
LT5zZXRGb2N1cygpOworCisgICAgUUxpc3Q8UVdlYkVsZW1lbnQ+IGlucHV0cyA9IG1fdmlldy0+
cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnRFbGVtZW50KCkuZmluZEFsbCgiaW5wdXQiKTsK
KworICAgIFFNb3VzZUV2ZW50IGV2cHJlcyhRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3MsIGlucHV0
cy5hdCgwKS5nZW9tZXRyeSgpLmNlbnRlcigpLCBRdDo6TGVmdEJ1dHRvbiwgUXQ6Ok5vQnV0dG9u
LCBRdDo6Tm9Nb2RpZmllcik7CisgICAgbV92aWV3LT5wYWdlKCktPmV2ZW50KCZldnByZXMpOwor
ICAgIFFNb3VzZUV2ZW50IGV2cmVsKFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlLCBpbnB1dHMu
YXQoMCkuZ2VvbWV0cnkoKS5jZW50ZXIoKSwgUXQ6OkxlZnRCdXR0b24sIFF0OjpOb0J1dHRvbiwg
UXQ6Ok5vTW9kaWZpZXIpOworICAgIG1fdmlldy0+cGFnZSgpLT5ldmVudCgmZXZyZWwpOworCisg
ICAgLy9JbU1pY3JvRm9jdXMKKyAgICBRVmFyaWFudCB2YXJpYW50ID0gbV92aWV3LT5wYWdlKCkt
PmlucHV0TWV0aG9kUXVlcnkoUXQ6OkltTWljcm9Gb2N1cyk7CisgICAgUVJlY3QgZm9jdXNSZWN0
ID0gdmFyaWFudC50b1JlY3QoKTsKKyAgICBRVkVSSUZZKGlucHV0cy5hdCgwKS5nZW9tZXRyeSgp
LmNvbnRhaW5zKHZhcmlhbnQudG9SZWN0KCkudG9wTGVmdCgpKSk7CisKKyAgICAvL0ltRm9udAor
ICAgIHZhcmlhbnQgPSBtX3ZpZXctPnBhZ2UoKS0+aW5wdXRNZXRob2RRdWVyeShRdDo6SW1Gb250
KTsKKyAgICBRRm9udCBmb250ID0gdmFyaWFudC52YWx1ZTxRRm9udD4oKTsKKyAgICBRQ09NUEFS
RShRU3RyaW5nKCItd2Via2l0LXNlcmlmIiksIGZvbnQuZmFtaWx5KCkpOworCisgICAgUUxpc3Q8
UUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZT4gaW5wdXRBdHRyaWJ1dGVzOworCisgICAgLy9J
bnNlcnQgdGV4dC4KKyAgICB7CisgICAgICAgIFFJbnB1dE1ldGhvZEV2ZW50IGV2ZW50VGV4dCgi
UXRXZWJLaXQiLCBpbnB1dEF0dHJpYnV0ZXMpOworICAgICAgICBRU2lnbmFsU3B5IHNpZ25hbFNw
eShtX3ZpZXctPnBhZ2UoKSwgU0lHTkFMKG1pY3JvRm9jdXNDaGFuZ2VkKCkpKTsKKyAgICAgICAg
bV92aWV3LT5wYWdlKCktPmV2ZW50KCZldmVudFRleHQpOworICAgICAgICBRQ09NUEFSRShzaWdu
YWxTcHkuY291bnQoKSwgMCk7CisgICAgfQorCisgICAgeworICAgICAgICBRSW5wdXRNZXRob2RF
dmVudCBldmVudFRleHQoIiIsIGlucHV0QXR0cmlidXRlcyk7CisgICAgICAgIGV2ZW50VGV4dC5z
ZXRDb21taXRTdHJpbmcoUVN0cmluZygiUXRXZWJLaXQiKSwgMCwgMCk7CisgICAgICAgIG1fdmll
dy0+cGFnZSgpLT5ldmVudCgmZXZlbnRUZXh0KTsKKyAgICB9CisKKyNpZiBRVF9WRVJTSU9OID49
IDB4MDQwNjAwCisgICAgLy9JbU1heGltdW1UZXh0TGVuZ3RoCisgICAgdmFyaWFudCA9IG1fdmll
dy0+cGFnZSgpLT5pbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJbU1heGltdW1UZXh0TGVuZ3RoKTsKKyAg
ICBRQ09NUEFSRSgyMCwgdmFyaWFudC50b0ludCgpKTsKKworICAgIC8vU2V0IHNlbGVjdGlvbgor
ICAgIGlucHV0QXR0cmlidXRlcyA8PCBRSW5wdXRNZXRob2RFdmVudDo6QXR0cmlidXRlKFFJbnB1
dE1ldGhvZEV2ZW50OjpTZWxlY3Rpb24sIDMsIDIsIFFWYXJpYW50KCkpOworICAgIFFJbnB1dE1l
dGhvZEV2ZW50IGV2ZW50U2VsZWN0aW9uKCIiLGlucHV0QXR0cmlidXRlcyk7CisgICAgbV92aWV3
LT5wYWdlKCktPmV2ZW50KCZldmVudFNlbGVjdGlvbik7CisKKyAgICAvL0ltQW5jaG9yUG9zaXRp
b24KKyAgICB2YXJpYW50ID0gbV92aWV3LT5wYWdlKCktPmlucHV0TWV0aG9kUXVlcnkoUXQ6Oklt
QW5jaG9yUG9zaXRpb24pOworICAgIGludCBhbmNob3JQb3NpdGlvbiA9ICB2YXJpYW50LnRvSW50
KCk7CisgICAgUUNPTVBBUkUoYW5jaG9yUG9zaXRpb24sIDMpOworCisgICAgLy9JbUN1cnNvclBv
c2l0aW9uCisgICAgdmFyaWFudCA9IG1fdmlldy0+cGFnZSgpLT5pbnB1dE1ldGhvZFF1ZXJ5KFF0
OjpJbUN1cnNvclBvc2l0aW9uKTsKKyAgICBpbnQgY3Vyc29yUG9zaXRpb24gPSAgdmFyaWFudC50
b0ludCgpOworICAgIFFDT01QQVJFKGN1cnNvclBvc2l0aW9uLCA1KTsKKworICAgIC8vSW1DdXJy
ZW50U2VsZWN0aW9uCisgICAgdmFyaWFudCA9IG1fdmlldy0+cGFnZSgpLT5pbnB1dE1ldGhvZFF1
ZXJ5KFF0OjpJbUN1cnJlbnRTZWxlY3Rpb24pOworICAgIFFTdHJpbmcgc2VsZWN0aW9uVmFsdWUg
PSB2YXJpYW50LnZhbHVlPFFTdHJpbmc+KCk7CisgICAgUUNPTVBBUkUoc2VsZWN0aW9uVmFsdWUs
IFFTdHJpbmcoImViIikpOworI2VuZGlmCisKKyAgICAvL0ltU3Vycm91bmRpbmdUZXh0CisgICAg
dmFyaWFudCA9IG1fdmlldy0+cGFnZSgpLT5pbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJbVN1cnJvdW5k
aW5nVGV4dCk7CisgICAgUVN0cmluZyB2YWx1ZSA9IHZhcmlhbnQudmFsdWU8UVN0cmluZz4oKTsK
KyAgICBRQ09NUEFSRSh2YWx1ZSwgUVN0cmluZygiUXRXZWJLaXQiKSk7CisKKyNpZiBRVF9WRVJT
SU9OID49IDB4MDQwNjAwCisgICAgeworICAgICAgICBRTGlzdDxRSW5wdXRNZXRob2RFdmVudDo6
QXR0cmlidXRlPiBhdHRyaWJ1dGVzOworICAgICAgICAvLyBDbGVhciB0aGUgc2VsZWN0aW9uLCBz
byB0aGUgbmV4dCB0ZXN0IGRvZXMgbm90IGNsZWFyIGFueSBjb250ZW50cy4KKyAgICAgICAgUUlu
cHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZSBuZXdTZWxlY3Rpb24oUUlucHV0TWV0aG9kRXZlbnQ6
OlNlbGVjdGlvbiwgMCwgMCwgUVZhcmlhbnQoKSk7CisgICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5k
KG5ld1NlbGVjdGlvbik7CisgICAgICAgIFFJbnB1dE1ldGhvZEV2ZW50IGV2ZW50KCJjb21wb3Np
dGlvbiIsIGF0dHJpYnV0ZXMpOworICAgICAgICBtX3ZpZXctPnBhZ2UoKS0+ZXZlbnQoJmV2ZW50
KTsKKyAgICB9CisKKyAgICAvLyBBIG9uZ29pbmcgY29tcG9zaXRpb24gc2hvdWxkIG5vdCBjaGFu
Z2UgdGhlIHN1cnJvdW5kaW5nIHRleHQgYmVmb3JlIGl0IGlzIGNvbW1pdHRlZC4KKyAgICB2YXJp
YW50ID0gbV92aWV3LT5wYWdlKCktPmlucHV0TWV0aG9kUXVlcnkoUXQ6OkltU3Vycm91bmRpbmdU
ZXh0KTsKKyAgICB2YWx1ZSA9IHZhcmlhbnQudmFsdWU8UVN0cmluZz4oKTsKKyAgICBRQ09NUEFS
RSh2YWx1ZSwgUVN0cmluZygiUXRXZWJLaXQiKSk7CisjZW5kaWYKK30KKwogLy8gaW1wb3J0IGEg
bGl0dGxlIERSVCBoZWxwZXIgZnVuY3Rpb24gdG8gdHJpZ2dlciB0aGUgZ2FyYmFnZSBjb2xsZWN0
b3IKIHZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHJ0X2dhcmJhZ2VDb2xsZWN0b3JfY29sbGVjdCgp
OwogCg==
</data>
<flag name="review"
          id="21654"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40434</attachid>
            <date>2009-10-01 05:33:26 -0700</date>
            <delta_ts>2009-10-01 05:43:25 -0700</delta_ts>
            <desc>Patch which fixes software input panel</desc>
            <filename>file</filename>
            <type>text/plain</type>
            <size>3537</size>
            <attacher name="Kristian Amlie">kristian.amlie</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKaW5kZXggNGI2MjQ4YS4uY2I4NzY5MCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTI2
Miw2ICsyNjIsNyBAQCBRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnZSAq
cXEpCiAgICAgLCBpbnNwZWN0b3IoMCkKICAgICAsIGluc3BlY3RvcklzSW50ZXJuYWxPbmx5KGZh
bHNlKQogICAgICwgdmlld3BvcnRTaXplKFFTaXplKDAsIDApKQorICAgICwgY2xpY2tDYXVzZWRG
b2N1cyhmYWxzZSkKIHsKICAgICBXZWJDb3JlOjpJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZO
ZWNlc3NhcnkoKTsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTYyNyw2ICs2
MjgsMTEgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVu
dCAqZXYpCiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6Tm9kZT4gb2xkTm9kZTsKKyAgICBpZiAocGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRGcmFtZSgpCisgICAgICAgICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkRnJhbWUoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgb2xkTm9kZSA9IHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUo
KTsKKwogICAgIGlmICh0cmlwbGVDbGlja1RpbWVyLmlzQWN0aXZlKCkKICAgICAgICAgICAgICYm
IChldi0+cG9zKCkgLSB0cmlwbGVDbGljaykubWFuaGF0dGFuTGVuZ3RoKCkKICAgICAgICAgICAg
ICAgICA8IFFBcHBsaWNhdGlvbjo6c3RhcnREcmFnRGlzdGFuY2UoKSkgewpAQCAtNjQwLDYgKzY0
NiwxNCBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50
ICpldikKICAgICBpZiAobWV2LmJ1dHRvbigpICE9IE5vQnV0dG9uKQogICAgICAgICBhY2NlcHRl
ZCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KG1ldik7CiAg
ICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2Rl
PiBuZXdOb2RlOworICAgIGlmIChwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1l
KCkKKyAgICAgICAgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgpLT5k
b2N1bWVudCgpKQorICAgICAgICBuZXdOb2RlID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRGcmFtZSgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworCisgICAgaWYgKG5ld05v
ZGUgJiYgb2xkTm9kZSAhPSBuZXdOb2RlKQorICAgICAgICBjbGlja0NhdXNlZEZvY3VzID0gdHJ1
ZTsKIH0KIAogdm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChRR3Jh
cGhpY3NTY2VuZU1vdXNlRXZlbnQgKmV2KQpAQCAtNzQ1LDYgKzc1OSwyMCBAQCB2b2lkIFFXZWJQ
YWdlUHJpdmF0ZTo6bW91c2VSZWxlYXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBl
dikKICAgICBldi0+c2V0QWNjZXB0ZWQoYWNjZXB0ZWQpOwogCiAgICAgaGFuZGxlQ2xpcGJvYXJk
KGV2LCBldi0+YnV0dG9uKCkpOworCisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNL
KDQsIDYsIDApCisgICAgaWYgKHZpZXcgJiYgdmlldy0+dGVzdEF0dHJpYnV0ZShRdDo6V0FfSW5w
dXRNZXRob2RFbmFibGVkKQorICAgICAgICAmJiBldi0+YnV0dG9uKCkgPT0gUXQ6OkxlZnRCdXR0
b24gJiYgcUFwcC0+YXV0b1NpcEVuYWJsZWQoKSkgeworICAgICAgICBRU3R5bGU6OlJlcXVlc3RT
b2Z0d2FyZUlucHV0UGFuZWwgYmVoYXZpb3IgPSBRU3R5bGU6OlJlcXVlc3RTb2Z0d2FyZUlucHV0
UGFuZWwoCisgICAgICAgICAgICB2aWV3LT5zdHlsZSgpLT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9S
ZXF1ZXN0U29mdHdhcmVJbnB1dFBhbmVsKSk7CisgICAgICAgIGlmICghY2xpY2tDYXVzZWRGb2N1
cyB8fCBiZWhhdmlvciA9PSBRU3R5bGU6OlJTSVBfT25Nb3VzZUNsaWNrKSB7CisgICAgICAgICAg
ICBRRXZlbnQgZXZlbnQoUUV2ZW50OjpSZXF1ZXN0U29mdHdhcmVJbnB1dFBhbmVsKTsKKyAgICAg
ICAgICAgIFFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KHZpZXcsICZldmVudCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBjbGlja0NhdXNlZEZvY3VzID0gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9p
ZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50ICpldikKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZV9wLmgKaW5kZXggOWY0MjE2YS4uZDQxNDcxYSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZV9wLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKQEAgLTE0Myw2
ICsxNDMsOCBAQCBwdWJsaWM6CiAgICAgUVBvaW50IHRyaXBsZUNsaWNrOwogICAgIFFCYXNpY1Rp
bWVyIHRyaXBsZUNsaWNrVGltZXI7CiAKKyAgICBib29sIGNsaWNrQ2F1c2VkRm9jdXM7CisKICNp
ZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKICAgICBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0
KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFXZWJOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUVdl
YlBhZ2U6Ok5hdmlnYXRpb25UeXBlIHR5cGUpOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hh
bmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAzOWFlZjg4Li4wMWI2ZWIxIDEwMDY0
NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAwOS0xMC0wMSAgS3Jpc3RpYW4gQW1saWUgIDxrcmlzdGlhbi5hbWxp
ZUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlG
aXhlZCBzb2Z0d2FyZSBpbnB1dCBwYW5lbCBzdXBwb3J0IG9uIHdlYiBpbnB1dCBlbGVtZW50cy4K
KworCVNlbmQgdGhlIFJlcXVlc3RTb2Z0d2FyZUlucHV0UGFuZWwgZXZlbnQgaWYgdGhlIGVsZW1l
bnQgc3VwcG9ydHMgZm9jdXMKKwlhbmQgdGhlIGVsZW1lbnQgaXMgY2xpY2tlZC4KKworICAgICAg
ICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdl
UHJpdmF0ZSk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6Om1vdXNlUHJlc3NFdmVudCk6Cisg
ICAgICAgIChRV2ViUGFnZVByaXZhdGU6Om1vdXNlUmVsZWFzZUV2ZW50KToKKyAgICAgICAgKiBB
cGkvcXdlYnBhZ2VfcC5oOgorCiAyMDA5LTA5LTMwICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
biAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0
dC4K
</data>
<flag name="review"
          id="21655"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>