<?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>54777</bug_id>
          
          <creation_ts>2011-02-18 15:21:49 -0800</creation_ts>
          <short_desc>Mac OS X Services are not available for selected text in WebKit2 windows</short_desc>
          <delta_ts>2011-02-23 15:08:15 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>353874</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-02-18 15:21:49 -0800</bug_when>
    <thetext>* STEPS TO REPRODUCE
1. In a WebKit2 window, navigate to &lt;http://www.apple.com/&gt;
2. Select a word on the page
3. Choose Safari &gt; Services

* RESULTS
A menu item saying “No Services Apply”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353887</commentid>
    <comment_count>1</comment_count>
      <attachid>83028</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-02-18 15:37:59 -0800</bug_when>
    <thetext>Created attachment 83028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353889</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-18 15:39:57 -0800</bug_when>
    <thetext>Attachment 83028 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/Pasteboard.h:89:  The parameter name &quot;pasteboard&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/Pasteboard.h:89:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353931</commentid>
    <comment_count>3</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-02-18 17:09:19 -0800</bug_when>
    <thetext>I&apos;ve fixed the style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354585</commentid>
    <comment_count>4</comment_count>
      <attachid>83028</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-02-21 07:23:39 -0800</bug_when>
    <thetext>Comment on attachment 83028
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=83028&amp;action=review

&gt; Source/WebCore/editing/mac/EditorMac.mm:213
&gt; +    RetainPtr&lt;NSMutableArray&gt; types = [NSMutableArray array];

It would be a little more efficient to use the AdoptNS constructor and +alloc/-init rather than +array. That would also match our general style of only using autoreleased objects when absolutely necessary.

&gt; Source/WebCore/editing/mac/EditorMac.mm:216
&gt; +    Pasteboard::writeSelection([NSPasteboard pasteboardWithName:pasteboardName], (NSArray*)types.get(), selectedRange().get(), true, m_frame);

I&apos;m surprised the cast is needed here.

&gt; Source/WebCore/platform/mac/PasteboardMac.mm:156
&gt; +    NSArray *types = (!pasteboardTypes) ? frame-&gt;editor()-&gt;client()-&gt;pasteboardTypesForSelection(frame) : pasteboardTypes;

No need for the parentheses here. I think this would be a little clearer if you got rid of the !, too: pasteboardTypes ? pasteboardTypes : ...

&gt; Source/WebCore/platform/mac/PasteboardMac.mm:166
&gt; +    NSArray *types = (!pasteboardTypes) ? selectionPasteboardTypes(canSmartCopyOrDelete, [attributedString containsAttachments]) : pasteboardTypes;

Same comments as above.

&gt; Source/WebKit2/Shared/mac/PasteboardTypes.mm:74
&gt; +    static NSArray *types = retain([NSArray arrayWithObjects:WebArchivePboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, nil]);

If you used +alloc/-initWithObjects: and removed the retain() call you would avoid an unnecessary -autorelease/CFRetain.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:653
&gt; +    process()-&gt;sendSync(Messages::WebPage::WriteSelectionToPasteboard(pasteboardName, pasteboardTypes), Messages::WebPage::WriteSelectionToPasteboard::Reply(result), m_pageID, 20);

What is the &quot;20&quot; here? Is it a timeout value? How was it chosen? Putting it in a constant with a comment explaining why this particular value is used would be better.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:211
&gt;  
&gt; +    

Extra blank line here.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:213
&gt; +    [NSApp registerServicesMenuSendTypes:PasteboardTypes::forSelection() 
&gt; +                             returnTypes:PasteboardTypes::forEditing()];

I think this could all go on one line.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:506
&gt; +    for (size_t i = 0; i &lt; [types count]; ++i)

You should store the result of -count in a local variable so it isn&apos;t called on each loop iteration.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:511
&gt; +- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType

This method might be clearer if you were to add two helper functions: one for validating the send type, and one for validating the return type.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:514
&gt; +    BOOL isSendTypeOK = !sendType || ([PasteboardTypes::forSelection() containsObject:sendType] &amp;&amp; !_data-&gt;_page-&gt;selectionState().isNone);
&gt; +    BOOL isReturnTypeOK = NO;

I think isValidSendType and isValidReturnType would be slightly clearer than these names.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:519
&gt; +    else if ([PasteboardTypes::forEditing() containsObject:returnType] &amp;&amp; _data-&gt;_page-&gt;selectionState().isContentEditable) {
&gt; +        // We can insert strings in any editable context.  We can insert other types, like images, only in rich edit contexts.
&gt; +        isReturnTypeOK = [returnType isEqualToString:NSStringPboardType] || _data-&gt;_page-&gt;selectionState().isContentRichlyEditable;

Swapping the sides of these &amp;&amp; expressions could be more efficient, since you could avoid the ObjC method dispatch in some cases.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:2613
&gt; +    NSLog(@&quot;Pasteboard name: %@&quot;, [pasteboard name]);

I assume you meant to remove this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356434</commentid>
    <comment_count>5</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-02-23 14:44:32 -0800</bug_when>
    <thetext>Thanks for the review!
I&apos;ve addressed your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356450</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-02-23 14:58:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/79494</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83028</attachid>
            <date>2011-02-18 15:37:59 -0800</date>
            <delta_ts>2011-02-21 07:23:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>services.txt</filename>
            <type>text/plain</type>
            <size>19076</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5MDM3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDItMTggIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNYWMgT1MgWCBTZXJ2aWNlcyBhcmUgbm90IGF2YWlsYWJsZSBm
b3Igc2VsZWN0ZWQgdGV4dCBpbiBXZWJLaXQyIHdpbmRvd3MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDc3NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vODY2NjQyOD4KKworICAgICAgICBUaGUgY2hhbmdlcyB0byBXZWJDb3JlIGZvciB0aGlzIGJ1
ZyBhcmUgbGltaXRlZCB0byBleHBvc2luZyBhIG5ldworICAgICAgICBlbnRyeSBwb2ludCBpbiB0
aGUgRWRpdG9yIGNsYXNzIHRvIHdyaXRlIHRvIHRoZSBwYXN0ZWJvYXJkIGFuZAorICAgICAgICBj
aGFuZ2VzIHRvIHRoZSBQYXN0ZWJvYXJkIGNsYXNzIHRvIHdyaXRlIHRoZSBzZWxlY3Rpb24gd2l0
aAorICAgICAgICBhIGdpdmVuIHNldCBvZiBwYXN0ZWJvYXJkIHR5cGVzLiBUaGUgbWFqb3JpdHkg
b2YgdGhlIHdvcmsKKyAgICAgICAgaXMgZG9uZSBpbiBXZWJLaXQyLgorICAgICAgICAKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAg
ICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbTogQWRkZWQgZW50cnlwb2ludCB0byB3cml0ZSB0
aGUKKyAgICAgICAgc2VsZWN0aW9uIHRvIHRoZSBwYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgICogcGxhdGZv
cm0vUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OndyaXRlUmFuZ2UpOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6d3JpdGVTZWxlY3Rpb24pOgorCiAyMDExLTAyLTE4ICBKYW1lcyBSb2JpbnNvbiAgPGph
bWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxs
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDc5MDA2KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTcyNyw2ICs3MjcsNyBAQCBf
X1pON1dlYkNvcmU2RWRpdG9yMjRjb21wdXRlQW5kU2V0VHlwaW5nCiBfX1pON1dlYkNvcmU2RWRp
dG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2ZGVj
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2aW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxFdgorX19aTjdXZWJDb3JlNkVkaXRvcjI2d3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmRFUktOM1dURjZTdHJpbmdFUktOUzFfNlZlY3RvcklTMl9MbTBFRUUKIF9fWk43
V2ViQ29yZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04zV1RGNlN0cmlu
Z0UKIF9fWk43V2ViQ29yZTZFZGl0b3IyOWNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYK
IF9fWk43V2ViQ29yZTZFZGl0b3IyOWNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gNzkwMDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksNiArMzc5LDcgQEAg
cHVibGljOgogICAgIE5TV3JpdGluZ0RpcmVjdGlvbiBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNl
bGVjdGlvblN0YXJ0KCkgY29uc3Q7CiAgICAgYm9vbCBjYW5Db3B5RXhjbHVkaW5nU3RhbmRhbG9u
ZUltYWdlcygpOwogICAgIHZvaWQgdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKCk7CisgICAg
dm9pZCB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKTsKICNlbmRpZgogCiAg
ICAgYm9vbCBzZWxlY3Rpb25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yKGludCBmcm9tLCBpbnQg
bGVuZ3RoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0JKHJldmlzaW9uIDc5MDA2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNCArMjA4LDEyIEBAIHZvaWQgRWRpdG9yOjp0
YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24KICAgICBbZmluZFBhc3RlYm9hcmQgc2V0U3RyaW5n
Om5zU2VsZWN0ZWRUZXh0IGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXTsKIH0KIAordm9pZCBF
ZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpCit7CisgICAgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0eXBlcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXN0ZWJvYXJkVHlwZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIFt0eXBlcy5nZXQoKSBhZGRPYmplY3Q6cGFzdGVib2FyZFR5cGVzW2ldXTsKKyAgICBQ
YXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFt
ZTpwYXN0ZWJvYXJkTmFtZV0sIChOU0FycmF5Kil0eXBlcy5nZXQoKSwgc2VsZWN0ZWRSYW5nZSgp
LmdldCgpLCB0cnVlLCBtX2ZyYW1lKTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHJldmlzaW9uIDc5MDA2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw3IEBAIGNsYXNzIFBhc3RlYm9hcmQgewogcHVibGljOgogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAvL0hlbHBlciBmdW5jdGlvbnMgdG8gYWxsb3cgQ2xpcGJvYXJkIHRvIHNoYXJl
IGNvZGUKLSAgICBzdGF0aWMgdm9pZCB3cml0ZVNlbGVjdGlvbihOU1Bhc3RlYm9hcmQqIHBhc3Rl
Ym9hcmQsIFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBG
cmFtZSogZnJhbWUpOworICAgIHN0YXRpYyB2b2lkIHdyaXRlU2VsZWN0aW9uKE5TUGFzdGVib2Fy
ZCogcGFzdGVib2FyZCwgTlNBcnJheSogcGFzdGVib2FyZFR5cGVzLCBSYW5nZSogc2VsZWN0ZWRS
YW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lKTsKICAgICBzdGF0
aWMgdm9pZCB3cml0ZVVSTChOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE5TQXJyYXkqIHR5cGVz
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1lKiBmcmFtZSk7
CiAgICAgc3RhdGljIHZvaWQgd3JpdGVQbGFpblRleHQoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJk
LCBjb25zdCBTdHJpbmcmIHRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9DbGlwYm9hcmRNYWMubW0JKHJldmlzaW9uIDc5MDA2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3
MCw3IEBAIHZvaWQgQ2xpcGJvYXJkTWFjOjp3cml0ZVJhbmdlKFJhbmdlKiByYW4KIHsKICAgICBB
U1NFUlQocmFuZ2UpOwogICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgUGFzdGVib2FyZDo6d3JpdGVT
ZWxlY3Rpb24obV9wYXN0ZWJvYXJkLmdldCgpLCByYW5nZSwgZnJhbWUtPmVkaXRvcigpLT5zbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCktPmdyYW51bGFyaXR5
KCkgPT0gV29yZEdyYW51bGFyaXR5LCBmcmFtZSk7CisgICAgUGFzdGVib2FyZDo6d3JpdGVTZWxl
Y3Rpb24obV9wYXN0ZWJvYXJkLmdldCgpLCAwLCByYW5nZSwgZnJhbWUtPmVkaXRvcigpLT5zbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCktPmdyYW51bGFyaXR5
KCkgPT0gV29yZEdyYW51bGFyaXR5LCBmcmFtZSk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkTWFjOjp3
cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkocmV2aXNpb24gNzkwMDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTM4LDcgKzEzOCw3IEBAIHN0YXRpYyBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmlwQXR0YWNo
bWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0
aW9uKE5TUGFzdGVib2FyZCogcGFzdGVib2FyZCwgUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wg
Y2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgUGFzdGVib2FyZDo6d3Jp
dGVTZWxlY3Rpb24oTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBOU0FycmF5KiBwYXN0ZWJvYXJk
VHlwZXMsIFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBG
cmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFXZWJBcmNoaXZlUGJvYXJkVHlwZSkKICAgICAgICAg
UGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKTsgLy8gSW5pdGlhbGl6ZXMgcGFzdGVib2Fy
ZCB0eXBlcy4KQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0
aW9uKE5TUGFzdGViCiAgICAgLy8gd2UgY2FuJ3QgY2FsbCBXZWJDb3JlOjpQYXN0ZWJvYXJkJ3Mg
bWV0aG9kIGZvciBzZXR0aW5nIHR5cGVzLiAKICAgICBVTlVTRURfUEFSQU0oY2FuU21hcnRDb3B5
T3JEZWxldGUpOwogCi0gICAgTlNBcnJheSAqdHlwZXMgPSBmcmFtZS0+ZWRpdG9yKCktPmNsaWVu
dCgpLT5wYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb24oZnJhbWUpOworICAgIE5TQXJyYXkgKnR5
cGVzID0gKCFwYXN0ZWJvYXJkVHlwZXMpID8gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+cGFz
dGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uKGZyYW1lKSA6IHBhc3RlYm9hcmRUeXBlczsKICAgICAv
LyBEb24ndCB3cml0ZSBSVEZEIHRvIHRoZSBwYXN0ZWJvYXJkIHdoZW4gdGhlIGNvcGllZCBhdHRy
aWJ1dGVkIHN0cmluZyBoYXMgbm8gYXR0YWNobWVudHMuCiAgICAgTlNNdXRhYmxlQXJyYXkgKm11
dGFibGVUeXBlcyA9IG5pbDsKICAgICBpZiAoIVthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0
YWNobWVudHNdKSB7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNl
bGVjdGlvbihOU1Bhc3RlYgogICAgIH0KICAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlw
ZXMgb3duZXI6bmlsXTsgICAgCiAjZWxzZQotICAgIE5TQXJyYXkgKnR5cGVzID0gc2VsZWN0aW9u
UGFzdGVib2FyZFR5cGVzKGNhblNtYXJ0Q29weU9yRGVsZXRlLCBbYXR0cmlidXRlZFN0cmluZyBj
b250YWluc0F0dGFjaG1lbnRzXSk7CisgICAgTlNBcnJheSAqdHlwZXMgPSAoIXBhc3RlYm9hcmRU
eXBlcykgPyBzZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMoY2FuU21hcnRDb3B5T3JEZWxldGUsIFth
dHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKSA6IHBhc3RlYm9hcmRUeXBlczsK
ICAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6bmlsXTsKICAgICBmcmFt
ZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5kaWRTZXRTZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQo
KTsKICNlbmRpZgpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFp
blRleHQoTlNQYXN0ZWIKICAgICAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFu
Z2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihtX3Bhc3RlYm9hcmQuZ2V0KCks
IHNlbGVjdGVkUmFuZ2UsIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBmcmFtZSk7CisgICAgUGFzdGVi
b2FyZDo6d3JpdGVTZWxlY3Rpb24obV9wYXN0ZWJvYXJkLmdldCgpLCAwLCBzZWxlY3RlZFJhbmdl
LCBjYW5TbWFydENvcHlPckRlbGV0ZSwgZnJhbWUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc5MDM3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMTEtMDItMTggIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWMg
T1MgWCBTZXJ2aWNlcyBhcmUgbm90IGF2YWlsYWJsZSBmb3Igc2VsZWN0ZWQgdGV4dCBpbiBXZWJL
aXQyIHdpbmRvd3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDc3NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODY2NjQyOD4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBNYWMgT1MgWCBTZXJ2aWNlcyBpbiBX
ZWJLaXQyIHdpbmRvd3MuCisgICAgICAgIEluIFdLVmlldyB3ZSBub3cgY2FsbCByZWdpc3RlclNl
cnZpY2VzTWVudVNlbmRUeXBlcyBwcm92aWRpbmcgdGhlCisgICAgICAgIHBhc3RlYm9hcmQgdHlw
ZXMgc3VwcG9ydGVkIGJ5IFdlYktpdCBhbmQgd2UgYWxzbyBpbXBsZW1lbnQgdGhlIHR3bworICAg
ICAgICBwcm90b2NvbCBtZXRob2RzIHJlcXVpcmVkIHRvIHZhbGlkYXRlIHRoZSBzZW5kIHR5cGUg
YW5kIHdyaXRlIHRoZQorICAgICAgICBjb250ZW50IHRvIHRoZSBwYXN0ZWJvYXJkLiBVbmZvcnR1
bmF0ZWx5LCBBcHBLaXQgZXhwZWN0cyB0aGUgY29udGVudAorICAgICAgICB0byBiZSBhdmFpbGFi
bGUgaW4gdGhlIHBhc3RlYm9hcmQgdXBvbiByZXR1cm4gZnJvbSB3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZCBhbmQKKyAgICAgICAgdGhpcyBpcyB0aGUgcmVhc29uIHdoeSB0aGUgY2FsbCB0byB0
aGUgV2ViUHJvY2VzcyBpcyBzeW5jaHJvbm91cy4KKworICAgICAgICAqIFNoYXJlZC9TZWxlY3Rp
b25TdGF0ZS5oOgorICAgICAgICAoV2ViS2l0OjpTZWxlY3Rpb25TdGF0ZTo6U2VsZWN0aW9uU3Rh
dGUpOiBFeHRlbmRlZCB0byBpbmNsdWRlCisgICAgICAgIGlzQ29udGVudFJpY2hseUVkaXRhYmxl
CisgICAgICAgICogU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMuaDoKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5
cGVzOjpmb3JTZWxlY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZyYW1lOmNvbnRleHRSZWY6cGFn
ZUdyb3VwUmVmOl0pOiBBZGRlZCBjYWxsCisgICAgICAgIHRvIHJlZ2lzdGVyU2VydmljZXNNZW51
U2VuZFR5cGVzLgorICAgICAgICAoLVtXS1ZpZXcgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6
dHlwZXM6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1ZpZXcgdmFsaWRSZXF1ZXN0b3JGb3JTZW5k
VHlwZTpyZXR1cm5UeXBlOl0pOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3cml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTog
TW9kaWZpZWQgdG8KKyAgICAgICAgc3VwcG9ydCB0aGUgbmV3IFNlbGVjdGlvblN0YXRlIHZhbHVl
LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp3
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6IEFkZGVkIHN5bmNocm9ub3VzCisgICAgICAgIG1l
c3NhZ2UgdG8gd3JpdGUgdGhlIHNlbGVjdGVkIGNvbnRlbnQgdG8gdGhlIHBhc3RlYm9hcmQuCisK
IDIwMTEtMDItMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2VsZWN0aW9uU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U2VsZWN0aW9uU3RhdGUuaAkocmV2aXNpb24gNzkwMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2VsZWN0aW9uU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBzdHJ1
Y3QgU2VsZWN0aW9uU3RhdGUgewogICAgIFNlbGVjdGlvblN0YXRlKCkKICAgICAgICAgOiBpc05v
bmUodHJ1ZSkKICAgICAgICAgLCBpc0NvbnRlbnRFZGl0YWJsZShmYWxzZSkKKyAgICAgICAgLCBp
c0NvbnRlbnRSaWNobHlFZGl0YWJsZShmYWxzZSkKICAgICAgICAgLCBpc0luUGFzc3dvcmRGaWVs
ZChmYWxzZSkKICAgICAgICAgLCBoYXNDb21wb3NpdGlvbihmYWxzZSkKICAgICAgICAgLCBzZWxl
Y3RlZFJhbmdlU3RhcnQobm90Rm91bmQpCkBAIC00Nyw2ICs0OCw5IEBAIHN0cnVjdCBTZWxlY3Rp
b25TdGF0ZSB7CiAKICAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSBjb250ZW50
IGVkaXRhYmxlIGFyZWEuCiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKKyAgICAKKyAgICAv
LyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSByaWNoIGNvbnRlbnQgZWRpdGFibGUgYXJl
YS4KKyAgICBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlOwogCiAgICAgLy8gV2hldGhlciB0
aGUgc2VsZWN0aW9uIGlzIGluIGEgcGFzc3dvcmQgZmllbGQuCiAgICAgYm9vbCBpc0luUGFzc3dv
cmRGaWVsZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlw
ZXMuaAkocmV2aXNpb24gNzkwMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Bhc3Rl
Ym9hcmRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgTlNBcnJheSAqZm9yVVJMKCk7CiAgICAgc3RhdGljIE5TQXJyYXkgKmZvckltYWdl
cygpOwogICAgIHN0YXRpYyBOU0FycmF5ICpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpOworICAgIHN0
YXRpYyBOU0FycmF5ICpmb3JTZWxlY3Rpb24oKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMubW0J
KHJldmlzaW9uIDc5MDA2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJk
VHlwZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY4LDUgKzY4LDExIEBAIE5TQXJyYXkqIFBhc3Rl
Ym9hcmRUeXBlczo6Zm9ySW1hZ2VzV2l0aEEKICAgICBzdGF0aWMgTlNBcnJheSAqdHlwZXMgPSBy
ZXRhaW4oW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpOU1RJRkZQYm9hcmRUeXBlLCBXZWJVUkxz
V2l0aFRpdGxlc1Bib2FyZFR5cGUsIE5TVVJMUGJvYXJkVHlwZSwgV2ViVVJMUGJvYXJkVHlwZSwg
V2ViVVJMTmFtZVBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJkVHlw
ZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUsIG5pbF0pOwogICAgIHJldHVybiB0eXBlczsKIH0KKwor
TlNBcnJheSogUGFzdGVib2FyZFR5cGVzOjpmb3JTZWxlY3Rpb24oKQoreworICAgIHN0YXRpYyBO
U0FycmF5ICp0eXBlcyA9IHJldGFpbihbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYkFyY2hp
dmVQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5n
UGJvYXJkVHlwZSwgbmlsXSk7CisgICAgcmV0dXJuIHR5cGVzOworfQogICAgIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkocmV2aXNpb24gNzkwMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ2LDYgKzY0NiwxMyBAQCBXZWJDb3JlOjpJ
bnRSZWN0IFdlYlBhZ2VQcm94eTo6Zmlyc3RSZWN0CiAgICAgcHJvY2VzcygpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZTo6Rmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UobG9jYXRpb24sIGxl
bmd0aCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpGaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTo6UmVw
bHkocmVzdWx0UmVjdCksIG1fcGFnZUlEKTsKICAgICByZXR1cm4gcmVzdWx0UmVjdDsKIH0KKyAg
ICAKK2Jvb2wgV2ViUGFnZVByb3h5Ojp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzKQoreworICAgIGJvb2wgcmVzdWx0OworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2U6OldyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lLCBw
YXN0ZWJvYXJkVHlwZXMpLCBNZXNzYWdlczo6V2ViUGFnZTo6V3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlELCAyMCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KICNlbGlmIFBMQVRGT1JNKFdJTikKIFdlYkNvcmU6OkludFJlY3QgV2ViUGFnZVByb3h5Ojpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJJblNlbGVjdGVkUmFuZ2UoaW50IGNoYXJhY3RlclBvc2l0aW9u
KQogewpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNp
b24gNzkwMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3OCw2ICsyNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3Rl
cldlYlByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW4oY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSYpOwogICAgIC8vIENhbGxlZCBieSB0aGUgVUkgcHJvY2VzcyB3aGVuIGl0IGlzIHJlYWR5IHRv
IHNlbmQgaXRzIHRva2VucyB0byB0aGUgd2ViIHByb2Nlc3MuCiAgICAgdm9pZCByZWdpc3RlclVJ
UHJvY2Vzc0FjY2Vzc2liaWxpdHlUb2tlbnMoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYg
ZWxlbWVuVG9rZW4sIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIHdpbmRvd1Rva2VuKTsK
KyAgICBib29sIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwogI2VuZGlm
CiAKICAgICB2b2lkIHZpZXdTY2FsZUZhY3RvckRpZENoYW5nZShkb3VibGUpOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gNzkwMDYp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIwOCw2ICsyMDgsMTAgQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZy
YW1lIGNvbnRleAogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsKIAorICAgIAor
ICAgIFtOU0FwcCByZWdpc3RlclNlcnZpY2VzTWVudVNlbmRUeXBlczpQYXN0ZWJvYXJkVHlwZXM6
OmZvclNlbGVjdGlvbigpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBl
czpQYXN0ZWJvYXJkVHlwZXM6OmZvckVkaXRpbmcoKV07CisKICAgICBJbml0V2ViQ29yZVN5c3Rl
bUludGVyZmFjZSgpOwogICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwogCkBA
IC00OTYsNiArNTAwLDI5IEBAIFdFQkNPUkVfQ09NTUFORCh5YW5rQW5kU2VsZWN0KQogCiAjdW5k
ZWYgV0VCQ09SRV9DT01NQU5ECiAKKy0gKEJPT0wpd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6
KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgdHlwZXM6KE5TQXJyYXkgKil0eXBlcworeworICAg
IFZlY3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRUeXBlczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IFt0eXBlcyBjb3VudF07ICsraSkKKyAgICAgICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZChb
dHlwZXMgb2JqZWN0QXRJbmRleDppXSk7CisgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+d3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoW3Bhc3RlYm9hcmQgbmFtZV0sIHBhc3RlYm9hcmRUeXBlcyk7
Cit9CisKKy0gKGlkKXZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6KE5TU3RyaW5nICopc2VuZFR5
cGUgcmV0dXJuVHlwZTooTlNTdHJpbmcgKilyZXR1cm5UeXBlCit7CisgICAgQk9PTCBpc1NlbmRU
eXBlT0sgPSAhc2VuZFR5cGUgfHwgKFtQYXN0ZWJvYXJkVHlwZXM6OmZvclNlbGVjdGlvbigpIGNv
bnRhaW5zT2JqZWN0OnNlbmRUeXBlXSAmJiAhX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgp
LmlzTm9uZSk7CisgICAgQk9PTCBpc1JldHVyblR5cGVPSyA9IE5POworICAgIGlmICghcmV0dXJu
VHlwZSkKKyAgICAgICAgaXNSZXR1cm5UeXBlT0sgPSBZRVM7CisgICAgZWxzZSBpZiAoW1Bhc3Rl
Ym9hcmRUeXBlczo6Zm9yRWRpdGluZygpIGNvbnRhaW5zT2JqZWN0OnJldHVyblR5cGVdICYmIF9k
YXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkgeworICAgICAg
ICAvLyBXZSBjYW4gaW5zZXJ0IHN0cmluZ3MgaW4gYW55IGVkaXRhYmxlIGNvbnRleHQuICBXZSBj
YW4gaW5zZXJ0IG90aGVyIHR5cGVzLCBsaWtlIGltYWdlcywgb25seSBpbiByaWNoIGVkaXQgY29u
dGV4dHMuCisgICAgICAgIGlzUmV0dXJuVHlwZU9LID0gW3JldHVyblR5cGUgaXNFcXVhbFRvU3Ry
aW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0gfHwgX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlOworICAgIH0KKyAgICBpZiAoaXNTZW5kVHlwZU9LICYm
IGlzUmV0dXJuVHlwZU9LKQorICAgICAgICByZXR1cm4gc2VsZjsKKyAgICByZXR1cm4gW1tzZWxm
IG5leHRSZXNwb25kZXJdIHZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6c2VuZFR5cGUgcmV0dXJu
VHlwZTpyZXR1cm5UeXBlXTsKK30KKwogLyoKIAogV2hlbiBwb3NzaWJsZSwgZWRpdGluZy1yZWxh
dGVkIG1ldGhvZHMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIFdlYkNvcmUgd2l0aCB0aGUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDc5MDA2KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3Bv
bmRUb0NoYW5nZWRTZQogICAgIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlOwogICAgIHNl
bGVjdGlvblN0YXRlLmlzTm9uZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCk7CiAgICAg
c2VsZWN0aW9uU3RhdGUuaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlz
Q29udGVudEVkaXRhYmxlKCk7CisgICAgc2VsZWN0aW9uU3RhdGUuaXNDb250ZW50UmljaGx5RWRp
dGFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CiAg
ICAgc2VsZWN0aW9uU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgPSBmcmFtZS0+c2VsZWN0aW9uKCkt
PmlzSW5QYXNzd29yZEZpZWxkKCk7CiAgICAgc2VsZWN0aW9uU3RhdGUuaGFzQ29tcG9zaXRpb24g
PSBmcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gNzkwMDYpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTUsNiArMjk1LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UodWlu
dDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKICAgICB2b2lkIGNoYXJhY3Rlcklu
ZGV4Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90JiByZXN1
bHQpOwogICAgIHZvaWQgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRp
b24sIHVpbnQ2NF90IGxlbmd0aCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0UmVjdCk7CisgICAg
dm9pZCB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBXVEY6OlN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBib29sJiByZXN1bHQpOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgY29uZmlybUNv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcpOwogICAgIHZvaWQgc2V0
Q29tcG9zaXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBjb25zdCBX
VEY6OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIHVp
bnQ2NF90IGN1cnNvclBvc2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiA3OTAwNikK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7
CiAgICAgQ2hhcmFjdGVySW5kZXhGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkgLT4g
KHVpbnQ2NF90IHJlc3VsdCkKICAgICBGaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRf
dCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKSAtPiAoV2ViQ29yZTo6SW50UmVjdCByZXN1bHRS
ZWN0KQogICAgIFJlZ2lzdGVyVUlQcm9jZXNzQWNjZXNzaWJpbGl0eVRva2VucyhDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlIGVsZW1lblRva2VuLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIHdpbmRvd1Rv
a2VuKQorICAgIFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdURjo6U3RyaW5nIHBhc3RlYm9h
cmROYW1lLCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4gcGFzdGVib2FyZFR5cGVzKSAtPiAoYm9v
bCByZXN1bHQpCiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgQ29uZmlybUNvbXBvc2l0
aW9uKFdURjo6U3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24g
NzkwMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyMCw2ICs0MjAsMTMgQEAgdm9pZCBXZWJQYWdlOjpy
ZWdpc3RlclVJUHJvY2Vzc0FjY2Vzc2liaQogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUGFnZTo6d3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgYm9vbCYgcmVzdWx0KQoreworICAg
IEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5G
cmFtZSgpOworICAgIGZyYW1lLT5lZGl0b3IoKS0+d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlcyk7CisgICAgcmVzdWx0ID0gdHJ1ZTsKK30K
KwogQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QqIFdlYlBhZ2U6OmFjY2Vzc2liaWxpdHlSZW1v
dGVPYmplY3QoKQogewogICAgIHJldHVybiBtX21vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudC5nZXQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNp
b24gNzkwMDYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjEwLDYgKzI2MTAsNyBAQCAtIChJQkFjdGlvbil0YWtlRmluZFN0
cmluZ0Zyb21TZWxlY3Rpb246CiAKIC0gKEJPT0wpd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6
KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgdHlwZXM6KE5TQXJyYXkgKil0eXBlcwogeworICAg
IE5TTG9nKEAiUGFzdGVib2FyZCBuYW1lOiAlQCIsIFtwYXN0ZWJvYXJkIG5hbWVdKTsKICAgICBb
cGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6W3NlbGYgX3RvcEhUTUxWaWV3XV07
CiAgICAgW3NlbGYgd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFz
dGVib2FyZDpwYXN0ZWJvYXJkXTsKICAgICByZXR1cm4gWUVTOwo=
</data>
<flag name="review"
          id="74770"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>