<?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>139661</bug_id>
          
          <creation_ts>2014-12-15 16:28:52 -0800</creation_ts>
          <short_desc>Make lookup an immediate action instead of an action menu item</short_desc>
          <delta_ts>2014-12-15 16:51:09 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1055799</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-12-15 16:28:52 -0800</bug_when>
    <thetext>Make lookup an immediate action instead of an action menu item

rdar://problem/19198414</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055802</commentid>
    <comment_count>1</comment_count>
      <attachid>243329</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-12-15 16:37:53 -0800</bug_when>
    <thetext>Created attachment 243329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055803</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-15 16:39:27 -0800</bug_when>
    <thetext>Attachment 243329 did not pass style-queue:


ERROR: Source/WebKit/mac/WebView/WebImmediateActionController.mm:317:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:998:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:998:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:998:  The parameter name &quot;presentationTransition&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm:519:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm:519:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 6 in 16 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>1055805</commentid>
    <comment_count>3</comment_count>
      <attachid>243329</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-12-15 16:42:49 -0800</bug_when>
    <thetext>Comment on attachment 243329
Patch

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

&gt; Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm:518
&gt; +        // Run the animations serially because attaching another subwindow breaks the bounce animation.
&gt; +        // We could consider making the bounce NSAnimationNonblockingThreaded instead, which seems
&gt; +        // to work, but need to consider all of the implications.

Please remove this comment.

&gt; Source/WebKit/mac/WebView/WebImmediateActionController.mm:350
&gt; +    DictionaryPopupInfo dictionaryPopupInfo = dictionaryPopupInfoForRange(frame, *dictionaryRange, options, TextIndicatorPresentationTransition::BounceAndCrossfade);

Plz just bounce.

&gt; Source/WebKit/mac/WebView/WebView.mm:8662
&gt; +- (id)_animationControllerForDictionaryLookupPopupInfo:(const DictionaryPopupInfo&amp;)dictionaryPopupInfo

It would be nice if someday this could share more code with the function above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055809</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-12-15 16:51:09 -0800</bug_when>
    <thetext>Thanks Tim! http://trac.webkit.org/changeset/177323</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243329</attachid>
            <date>2014-12-15 16:37:53 -0800</date>
            <delta_ts>2014-12-15 16:42:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>35513</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTEyLTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIGxvb2t1cCBhbiBpbW1lZGlh
dGUgYWN0aW9uIGluc3RlYWQgb2YgYW4gYWN0aW9uIG1lbnUgaXRlbQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NjYxCisgICAgICAgIC1hbmQgY29y
cmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMTkxOTg0MTQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgU1BJLgorICAgICAgICAq
IHBsYXRmb3JtL3NwaS9tYWMvTG9va3VwU1BJLmg6CisKIDIwMTQtMTItMTIgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIHRoZSBET05U
X0ZJTkFMSVpFX09OX01BSU5fVEhSRUFEICNkZWZpbmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NwaS9tYWMvTG9va3VwU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3BpL21hYy9Mb29rdXBTUEkuaAkocmV2aXNpb24gMTc3MzA4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9Mb29rdXBTUEkuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNCArNDcsMTAgQEAgQGludGVyZmFjZSBMVUxvb2t1cERlZmluaXRpb25Nb2R1bGUgOiBOUwog
CiAjZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKK0BpbnRlcmZhY2UgTFVMb29r
dXBEZWZpbml0aW9uTW9kdWxlIChBbmltYXRpb25Db250cm9sbGVyKQorCisrIChpZDxOU0ltbWVk
aWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWxvb2t1cEFuaW1hdGlvbkNvbnRyb2xsZXJG
b3JUZXJtOihOU0F0dHJpYnV0ZWRTdHJpbmcgKil0ZXJtIGF0TG9jYXRpb246KE5TUG9pbnQpc2Ny
ZWVuUG9pbnQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKKworQGVuZAorCiAjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3MzIyKQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAK
KzIwMTQtMTItMTUgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIE1h
a2UgbG9va3VwIGFuIGltbWVkaWF0ZSBhY3Rpb24gaW5zdGVhZCBvZiBhbiBhY3Rpb24gbWVudSBp
dGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk2
NjEKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8x
OTE5ODQxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5ldyB0eXBlLgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0ltbWVkaWF0ZUFjdGlvblR5cGVz
Lmg6CisKKyAgICAgICAgQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQgbm93IGluY2x1ZGVzIGEgRGlj
dGlvbmFyeVBvcHVwSW5mby4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0Lmg6CisgICAgICAgICogU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5t
bToKKyAgICAgICAgKFdlYktpdDo6QWN0aW9uTWVudUhpdFRlc3RSZXN1bHQ6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0OjpkZWNvZGUpOgorCisgICAg
ICAgIFJlbW92ZSBhbGwgbG9va3VwIG1lbnUgaXRlbXMuCisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS0FjdGlvbk1lbnVDb250
cm9sbGVyIF9kZWZhdWx0TWVudUl0ZW1zRm9yVGV4dF0pOgorICAgICAgICAoLVtXS0FjdGlvbk1l
bnVDb250cm9sbGVyIF9kZWZhdWx0TWVudUl0ZW1zRm9yRWRpdGFibGVUZXh0XSk6CisgICAgICAg
ICgtW1dLQWN0aW9uTWVudUNvbnRyb2xsZXIgX2RlZmF1bHRNZW51SXRlbXNGb3JFZGl0YWJsZVRl
eHRXaXRoU3VnZ2VzdGlvbnNdKToKKyAgICAgICAgKC1bV0tBY3Rpb25NZW51Q29udHJvbGxlciBf
Y3JlYXRlQWN0aW9uTWVudUl0ZW1Gb3JUYWc6XSk6CisgICAgICAgICgtW1dLQWN0aW9uTWVudUNv
bnRyb2xsZXIgX2xvb2t1cFRleHQ6XSk6IERlbGV0ZWQuCisKKyAgICAgICAgU2V0IHRoZSBkZWZh
dWx0QW5pbWF0aW9uQ29udHJvbGxlciB0byB0aGUgbG9va3VwLXByb3ZpZGVkIGFuaW1hdGlvbiBj
b250cm9sbGVyIAorICAgICAgICB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS0ltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RlZmF1bHRBbmltYXRpb25Db250cm9sbGVyXSk6CisgICAg
ICAgICgtW1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBfYW5pbWF0aW9uQ29udHJvbGxlckZv
clRleHRdKToKKworICAgICAgICBSZS1mYWN0b3IgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JS
YW5nZSgpIHNvIHRoYXQgbW9zdCBvZiB0aGUgd29yayBpcyBkb25lIGluIGEgCisgICAgICAgIG5l
dyBmdW5jdGlvbiBjYWxsZWQgZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKCkuIFRoaXMgd2Fz
IHRoYXQgY29kZSBjYW4gYmUgdXNlZCAKKyAgICAgICAgZm9yIGJvdGggcGVyZm9ybWluZyBhIGRp
Y3Rpb25hcnkgbG9va3VwIGFuZCBqdXN0IGdldHRpbmcgdGhlIERpY3Rpb25hcnlQb3B1cEluZm8g
CisgICAgICAgIGZvciB0aGUgQWN0aW9uTWVudUhpdFRlc3QuCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cElu
Zm9Gb3JSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtQWN0aW9u
TWVudUhpdFRlc3RBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6bG9va3Vw
VGV4dEF0TG9jYXRpb24pOgorCiAyMDE0LTEyLTE1ICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBEb2NrZWQgaW5zcGVjdG9yIHJlcG9z
aXRpb25lZCBpbmNvcnJlY3RseSB3aGVuIGRyYWdnaW5nIGZyYW1lIGJvcmRlcnMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0ltbWVkaWF0ZUFjdGlvblR5cGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLSW1tZWRpYXRlQWN0aW9uVHlw
ZXMuaAkocmV2aXNpb24gMTc3MzA4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dL
SW1tZWRpYXRlQWN0aW9uVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBl
bnVtIHsKICAgICBrV0tJbW1lZGlhdGVBY3Rpb25Ob25lID0gMCwKICAgICBrV0tJbW1lZGlhdGVB
Y3Rpb25MaW5rUHJldmlldywKICAgICBrV0tJbW1lZGlhdGVBY3Rpb25EYXRhRGV0ZWN0ZWRJdGVt
LAorICAgIGtXS0ltbWVkaWF0ZUFjdGlvbkxvb2t1cFRleHQsCiB9OwogdHlwZWRlZiB1aW50MzJf
dCBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiAxNzczMDgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQWN0aW9uTWVudUhpdFRl
c3RSZXN1bHRfaAogCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkRpY3Rp
b25hcnlQb3B1cEluZm8uaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRl
ICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCkBAIC01OSw2
ICs2MCw4IEBAIHN0cnVjdCBBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCB7CiAgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwogICAgIFJlZlB0cjxXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yPiBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOwogICAgIFdlYkNvcmU6OlBh
Z2VPdmVybGF5OjpQYWdlT3ZlcmxheUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJs
YXk7CisKKyAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
QWN0aW9uTWVudUhpdFRlc3RSZXN1bHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5tbQkocmV2aXNpb24gMTc3MzA4KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCB2b2lkIEFjdGlvbk1lbnVIaXRUZXN0UmVz
dWx0OjplbmNvZGUoSVBDCiAgICAgICAgIGlmIChoYXNUZXh0SW5kaWNhdG9yKQogICAgICAgICAg
ICAgZW5jb2RlciA8PCBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAgICAgfQor
CisgICAgZW5jb2RlciA8PCBkaWN0aW9uYXJ5UG9wdXBJbmZvOwogfQogCiBib29sIEFjdGlvbk1l
bnVIaXRUZXN0UmVzdWx0OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEFj
dGlvbk1lbnVIaXRUZXN0UmVzdWx0JiBhY3Rpb25NZW51SGl0VGVzdFJlc3VsdCkKQEAgLTEzMCw2
ICsxMzIsOSBAQCBib29sIEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0OjpkZWNvZGUoSVBDCiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0LmRpY3Rpb25hcnlQb3B1cEluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDE3NzMw
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQAogI2ltcG9ydCA8SW1hZ2VLaXQv
SW1hZ2VLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGF0YURldGVjdG9yc1NQSS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0xvb2t1cFNQ
SS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU01lbnVTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNT
aGFyaW5nU2VydmljZVNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU1NoYXJpbmdTZXJ2aWNlUGlj
a2VyU1BJLmg+CkBAIC00MDgsMjAgKzQwNywxOCBAQCAtIChOU0FycmF5ICopX2RlZmF1bHRNZW51
SXRlbXNGb3JEYXRhRGV0CiAtIChOU0FycmF5ICopX2RlZmF1bHRNZW51SXRlbXNGb3JUZXh0CiB7
CiAgICAgUmV0YWluUHRyPE5TTWVudUl0ZW0+IGNvcHlUZXh0SXRlbSA9IFtzZWxmIF9jcmVhdGVB
Y3Rpb25NZW51SXRlbUZvclRhZzprV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0NvcHlUZXh0XTsKLSAg
ICBSZXRhaW5QdHI8TlNNZW51SXRlbT4gbG9va3VwVGV4dEl0ZW0gPSBbc2VsZiBfY3JlYXRlQWN0
aW9uTWVudUl0ZW1Gb3JUYWc6a1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdMb29rdXBUZXh0XTsKICAg
ICBSZXRhaW5QdHI8TlNNZW51SXRlbT4gcGFzdGVJdGVtID0gW3NlbGYgX2NyZWF0ZUFjdGlvbk1l
bnVJdGVtRm9yVGFnOmtXS0NvbnRleHRBY3Rpb25JdGVtVGFnUGFzdGVdOwogICAgIFtwYXN0ZUl0
ZW0gc2V0RW5hYmxlZDpOT107CiAKLSAgICByZXR1cm4gQFsgY29weVRleHRJdGVtLmdldCgpLCBs
b29rdXBUZXh0SXRlbS5nZXQoKSwgcGFzdGVJdGVtLmdldCgpIF07CisgICAgcmV0dXJuIEBbIGNv
cHlUZXh0SXRlbS5nZXQoKSwgW05TTWVudUl0ZW0gc2VwYXJhdG9ySXRlbV0sIHBhc3RlSXRlbS5n
ZXQoKSBdOwogfQogCiAtIChOU0FycmF5ICopX2RlZmF1bHRNZW51SXRlbXNGb3JFZGl0YWJsZVRl
eHQKIHsKICAgICBSZXRhaW5QdHI8TlNNZW51SXRlbT4gY29weVRleHRJdGVtID0gW3NlbGYgX2Ny
ZWF0ZUFjdGlvbk1lbnVJdGVtRm9yVGFnOmtXS0NvbnRleHRBY3Rpb25JdGVtVGFnQ29weVRleHRd
OwotICAgIFJldGFpblB0cjxOU01lbnVJdGVtPiBsb29rdXBUZXh0SXRlbSA9IFtzZWxmIF9jcmVh
dGVBY3Rpb25NZW51SXRlbUZvclRhZzprV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0xvb2t1cFRleHRd
OwogICAgIFJldGFpblB0cjxOU01lbnVJdGVtPiBwYXN0ZUl0ZW0gPSBbc2VsZiBfY3JlYXRlQWN0
aW9uTWVudUl0ZW1Gb3JUYWc6a1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdQYXN0ZV07CiAKLSAgICBy
ZXR1cm4gQFsgY29weVRleHRJdGVtLmdldCgpLCBsb29rdXBUZXh0SXRlbS5nZXQoKSwgcGFzdGVJ
dGVtLmdldCgpIF07CisgICAgcmV0dXJuIEBbIGNvcHlUZXh0SXRlbS5nZXQoKSwgW05TTWVudUl0
ZW0gc2VwYXJhdG9ySXRlbV0sIHBhc3RlSXRlbS5nZXQoKSBdOwogfQogCiAtIChOU0FycmF5ICop
X2RlZmF1bHRNZW51SXRlbXNGb3JFZGl0YWJsZVRleHRXaXRoU3VnZ2VzdGlvbnMKQEAgLTQ0OCwx
MyArNDQ1LDEyIEBAIC0gKE5TQXJyYXkgKilfZGVmYXVsdE1lbnVJdGVtc0ZvckVkaXRhYmwKICAg
ICB9CiAKICAgICBSZXRhaW5QdHI8TlNNZW51SXRlbT4gY29weVRleHRJdGVtID0gW3NlbGYgX2Ny
ZWF0ZUFjdGlvbk1lbnVJdGVtRm9yVGFnOmtXS0NvbnRleHRBY3Rpb25JdGVtVGFnQ29weVRleHRd
OwotICAgIFJldGFpblB0cjxOU01lbnVJdGVtPiBsb29rdXBUZXh0SXRlbSA9IFtzZWxmIF9jcmVh
dGVBY3Rpb25NZW51SXRlbUZvclRhZzprV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0xvb2t1cFRleHRd
OwogICAgIFJldGFpblB0cjxOU01lbnVJdGVtPiBwYXN0ZUl0ZW0gPSBbc2VsZiBfY3JlYXRlQWN0
aW9uTWVudUl0ZW1Gb3JUYWc6a1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdQYXN0ZV07CiAgICAgUmV0
YWluUHRyPE5TTWVudUl0ZW0+IHRleHRTdWdnZXN0aW9uc0l0ZW0gPSBbc2VsZiBfY3JlYXRlQWN0
aW9uTWVudUl0ZW1Gb3JUYWc6a1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdUZXh0U3VnZ2VzdGlvbnNd
OwogCiAgICAgW3RleHRTdWdnZXN0aW9uc0l0ZW0gc2V0U3VibWVudTpzcGVsbGluZ1N1Yk1lbnUu
Z2V0KCldOwogCi0gICAgcmV0dXJuIEBbIGNvcHlUZXh0SXRlbS5nZXQoKSwgbG9va3VwVGV4dEl0
ZW0uZ2V0KCksIHBhc3RlSXRlbS5nZXQoKSwgdGV4dFN1Z2dlc3Rpb25zSXRlbS5nZXQoKSBdOwor
ICAgIHJldHVybiBAWyBjb3B5VGV4dEl0ZW0uZ2V0KCksIFtOU01lbnVJdGVtIHNlcGFyYXRvckl0
ZW1dLCBwYXN0ZUl0ZW0uZ2V0KCksIHRleHRTdWdnZXN0aW9uc0l0ZW0uZ2V0KCkgXTsKIH0KIAog
LSAodm9pZClfY29weVNlbGVjdGlvbjooaWQpc2VuZGVyCkBAIC00NjcsMTEgKzQ2Myw2IEBAIC0g
KHZvaWQpX3Bhc3RlOihpZClzZW5kZXIKICAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKCJw
YXN0ZSIpOwogfQogCi0tICh2b2lkKV9sb29rdXBUZXh0OihpZClzZW5kZXIKLXsKLSAgICBfcGFn
ZS0+cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKTsKLX0KLQogLSAo
dm9pZClfY2hhbmdlU2VsZWN0aW9uVG9TdWdnZXN0aW9uOihpZClzZW5kZXIKIHsKICAgICBOU1N0
cmluZyAqc2VsZWN0ZWRDb3JyZWN0aW9uID0gW3NlbmRlciByZXByZXNlbnRlZE9iamVjdF07CkBA
IC02MjcsMTMgKzYxOCw2IEBAIC0gKFJldGFpblB0cjxOU01lbnVJdGVtPilfY3JlYXRlQWN0aW9u
TWUKICAgICAgICAgZW5hYmxlZCA9IGhpdFRlc3RSZXN1bHQtPmFsbG93c0NvcHkoKTsKICAgICAg
ICAgYnJlYWs7CiAKLSAgICBjYXNlIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnTG9va3VwVGV4dDoK
LSAgICAgICAgc2VsZWN0b3IgPSBAc2VsZWN0b3IoX2xvb2t1cFRleHQ6KTsKLSAgICAgICAgdGl0
bGUgPSBXRUJfVUlfU1RSSU5HX0tFWSgiTG9vayBVcCIsICJMb29rIFVwIChhY3Rpb24gbWVudSBp
dGVtKSIsICJhY3Rpb24gbWVudSBpdGVtIik7Ci0gICAgICAgIGltYWdlID0gW05TSW1hZ2UgaW1h
Z2VOYW1lZDpAIk5TQWN0aW9uTWVudUxvb2t1cCJdOwotICAgICAgICBlbmFibGVkID0gZ2V0TFVM
b29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSAmJiBoaXRUZXN0UmVzdWx0LT5hbGxvd3NDb3B5
KCk7Ci0gICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBrV0tDb250ZXh0QWN0aW9uSXRlbVRhZ1Bh
c3RlOgogICAgICAgICBzZWxlY3RvciA9IEBzZWxlY3RvcihfcGFzdGU6KTsKICAgICAgICAgdGl0
bGUgPSBXRUJfVUlfU1RSSU5HX0tFWSgiUGFzdGUiLCAiUGFzdGUgKGFjdGlvbiBtZW51IGl0ZW0p
IiwgImFjdGlvbiBtZW51IGl0ZW0iKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCShyZXZp
c2lvbiAxNzczMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2lt
cG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3RvcnNT
UEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvTG9va3VwU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TTWVudVNQSS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9RdWlja0xvb2tNYWNTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtp
bmcuaD4KQEAgLTQ0LDYgKzQ1LDcgQEAKIAogU09GVF9MSU5LX0ZSQU1FV09SS19JTl9VTUJSRUxM
QShRdWFydHosIFF1aWNrTG9va1VJKQogU09GVF9MSU5LX0NMQVNTKFF1aWNrTG9va1VJLCBRTFBy
ZXZpZXdNZW51SXRlbSkKK1NPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTChMb29rdXAsIExVVGVy
bU9wdGlvbkRpc2FibGVTZWFyY2hUZXJtSW5kaWNhdG9yLCBOU1N0cmluZyAqKQogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0yMzUsNiArMjM3
LDExIEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2wKICAgICAgICAg
ICAgIF90eXBlID0ga1dLSW1tZWRpYXRlQWN0aW9uRGF0YURldGVjdGVkSXRlbTsKICAgICAgICAg
ICAgIHJldHVybiAoaWQ8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilpbW1l
ZGlhdGVBY3Rpb25JdGVtOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKGlkPE5TSW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gdGV4dEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBbc2Vs
ZiBfYW5pbWF0aW9uQ29udHJvbGxlckZvclRleHRdKSB7CisgICAgICAgICAgICBfdHlwZSA9IGtX
S0ltbWVkaWF0ZUFjdGlvbkxvb2t1cFRleHQ7CisgICAgICAgICAgICByZXR1cm4gdGV4dEFuaW1h
dGlvbkNvbnRyb2xsZXI7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmlsOwpAQCAt
NDg1LDYgKzQ5MiwzNyBAQCAtIChOU01lbnVJdGVtICopX21lbnVJdGVtRm9yRGF0YURldGVjdGVk
CiAgICAgcmV0dXJuIG1lbnVJdGVtcy5sYXN0T2JqZWN0OwogfQogCisjcHJhZ21hIG1hcmsgVGV4
dCBhY3Rpb24KKworLSAoaWQ8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilf
YW5pbWF0aW9uQ29udHJvbGxlckZvclRleHQKK3sKKyAgICBpZiAoX3N0YXRlICE9IEltbWVkaWF0
ZUFjdGlvblN0YXRlOjpSZWFkeSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghZ2V0
TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbyA9IF9oaXRUZXN0UmVz
dWx0LmRpY3Rpb25hcnlQb3B1cEluZm87CisgICAgaWYgKCFkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0
dHJpYnV0ZWRTdHJpbmcuc3RyaW5nKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gQ29u
dmVydCBiYXNlbGluZSB0byBzY3JlZW4gY29vcmRpbmF0ZXMuCisgICAgTlNQb2ludCB0ZXh0QmFz
ZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbjsKKyAgICB0ZXh0QmFzZWxp
bmVPcmlnaW4gPSBbX3drVmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5lT3JpZ2luIHRvVmll
dzpuaWxdOworICAgIHRleHRCYXNlbGluZU9yaWdpbiA9IFtfd2tWaWV3LndpbmRvdyBjb252ZXJ0
UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3QodGV4dEJhc2VsaW5lT3JpZ2luLngsIHRleHRCYXNlbGlu
ZU9yaWdpbi55LCAwLCAwKV0ub3JpZ2luOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbKE5TRGljdGlvbmFyeSAqKWRpY3Rpb25h
cnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSBtdXRhYmxlQ29weV0pOworICAgIGlmIChjYW5Mb2Fk
TFVUZXJtT3B0aW9uRGlzYWJsZVNlYXJjaFRlcm1JbmRpY2F0b3IoKSAmJiBkaWN0aW9uYXJ5UG9w
dXBJbmZvLnRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKSB7CisgICAgICAgIC8vIFJ1biB0aGUg
YW5pbWF0aW9ucyBzZXJpYWxseSBiZWNhdXNlIGF0dGFjaGluZyBhbm90aGVyIHN1YndpbmRvdyBi
cmVha3MgdGhlIGJvdW5jZSBhbmltYXRpb24uCisgICAgICAgIC8vIFdlIGNvdWxkIGNvbnNpZGVy
IG1ha2luZyB0aGUgYm91bmNlIE5TQW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZCBpbnN0ZWFk
LCB3aGljaCBzZWVtcworICAgICAgICAvLyB0byB3b3JrLCBidXQgbmVlZCB0byBjb25zaWRlciBh
bGwgb2YgdGhlIGltcGxpY2F0aW9ucy4KKyAgICAgICAgW193a1ZpZXcgX3NldFRleHRJbmRpY2F0
b3I6VGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRv
cikgZmFkZU91dDpOTyBhbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcjpbXXt9XTsKKyAgICAgICAg
W211dGFibGVPcHRpb25zIHNldE9iamVjdDpAWUVTIGZvcktleTpnZXRMVVRlcm1PcHRpb25EaXNh
YmxlU2VhcmNoVGVybUluZGljYXRvcigpXTsKKyAgICAgICAgcmV0dXJuIFtnZXRMVUxvb2t1cERl
ZmluaXRpb25Nb2R1bGVDbGFzcygpIGxvb2t1cEFuaW1hdGlvbkNvbnRyb2xsZXJGb3JUZXJtOmRp
Y3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5zdHJpbmcuZ2V0KCkgYXRMb2NhdGlv
bjp0ZXh0QmFzZWxpbmVPcmlnaW4gb3B0aW9uczptdXRhYmxlT3B0aW9ucy5nZXQoKV07CisgICAg
fQorICAgIHJldHVybiBbZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSBsb29rdXBB
bmltYXRpb25Db250cm9sbGVyRm9yVGVybTpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRT
dHJpbmcuc3RyaW5nLmdldCgpIGF0TG9jYXRpb246dGV4dEJhc2VsaW5lT3JpZ2luIG9wdGlvbnM6
bXV0YWJsZU9wdGlvbnMuZ2V0KCldOworfQorCiBAZW5kCiAKICNlbmRpZiAvLyBQTEFURk9STShN
QUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJ
KHJldmlzaW9uIDE3NzMwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElJ
bmplY3RlZEJ1bmRsZUZvcm1DbGllbnQuaCIKICNpbmNsdWRlICJBUElJbmplY3RlZEJ1bmRsZVBh
Z2VVSUNsaWVudC5oIgogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkRpY3Rpb25h
cnlQb3B1cEluZm8uaCIKICNpbmNsdWRlICJGaW5kQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcHRp
b25zLmgiCkBAIC05OTQsNiArOTk1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAg
dm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpOwogICAgIHZv
aWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShXZWJDb3JlOjpGcmFtZSosIFdlYkNv
cmU6OlJhbmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9u
YXJ5UG9wdXBJbmZvRm9yUmFuZ2UoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBXZWJDb3JlOjpSYW5n
ZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwogCiAgICAgdm9p
ZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB3
aW5kb3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyk7CiAKQEAgLTEwNzIsNyArMTA3
NCw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBwZXJmb3JtQWN0
aW9uTWVudUhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQpOwotICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGxvb2t1cFRleHRBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0
UG9pbnQpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGxvb2t1cFRleHRBdExvY2F0
aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpOwogICAgIHZv
aWQgc2VsZWN0TGFzdEFjdGlvbk1lbnVSYW5nZSgpOwogICAgIHZvaWQgZm9jdXNBbmRTZWxlY3RM
YXN0QWN0aW9uTWVudUhpdFRlc3RSZXN1bHQoKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMTc3
MzA4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsMTAgKzUxMSwxMSBAQCB2b2lkIFdlYlBhZ2U6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDCiAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JT
ZWxlY3Rpb24oZnJhbWUsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7CiB9CiAKLXZv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSogZnJhbWUs
IFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQorRGljdGlvbmFyeVBvcHVw
SW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUqIGZyYW1lLCBS
YW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCiB7CisgICAgRGljdGlvbmFy
eVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOwogICAgIGlmIChyYW5nZS50ZXh0KCkuc3Ry
aXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBkaWN0aW9uYXJ5UG9wdXBJbmZvOwogICAgIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSByYW5nZS5zdGFydENvbnRhaW5lcigpLT5yZW5kZXJlcigpOwogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwpAQCAtNTIyLDEzICs1MjMsMTIgQEAgdm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvcgogICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHF1YWRzOwogICAgIHJhbmdlLnRleHRRdWFkcyhxdWFkcyk7CiAgICAgaWYgKHF1YWRzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVw
SW5mbzsKIAogICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNU
b1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKIAotICAgIERpY3Rpb25h
cnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZv
Lm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIChzdHls
ZS5mb250TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkpKTsKLSAgICBkaWN0
aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKW9wdGlvbnM7CisgICAg
ZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gKENGRGljdGlvbmFyeVJlZikqb3B0aW9uczsK
IAogICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRT
dHJpbmc6Ok5vKTsKIApAQCAtNTUwLDExICs1NTAsMTcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEZvcgogCiAgICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRp
Y2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIHByZXNlbnRhdGlv
blRyYW5zaXRpb24pOwogICAgIGlmICghdGV4dEluZGljYXRvcikKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKIAogICAgIGRpY3Rpb25hcnlQb3B1
cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKICAgICBkaWN0aW9u
YXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVk
U3RyaW5nOwogCisgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87Cit9CisKK3ZvaWQgV2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSogZnJhbWUsIFJhbmdl
JiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIERpY3Rpb25hcnlQb3B1
cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbyA9IGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShm
cmFtZSwgcmFuZ2UsICZvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGRpY3Rp
b25hcnlQb3B1cEluZm8pKTsKIH0KIApAQCAtOTg5LDggKzk5NSwxNiBAQCB2b2lkIFdlYlBhZ2U6
OnBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0CiAgICAgYWN0aW9uTWVudVJlc3VsdC5oaXRUZXN0
TG9jYXRpb25JblZpZXdDb29vcmRpbmF0ZXMgPSBsb2NhdGlvbkluVmlld0Nvb29yZGluYXRlczsK
ICAgICBhY3Rpb25NZW51UmVzdWx0LmhpdFRlc3RSZXN1bHQgPSBXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhKGhpdFRlc3RSZXN1bHQpOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBsb29rdXBS
YW5nZSA9IGxvb2t1cFRleHRBdExvY2F0aW9uKGxvY2F0aW9uSW5WaWV3Q29vb3JkaW5hdGVzKTsK
KyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiBsb29rdXBSYW5nZSA9IGxvb2t1cFRleHRBdExvY2F0aW9uKGxvY2F0aW9uSW5WaWV3Q29v
b3JkaW5hdGVzLCAmb3B0aW9ucyk7CiAgICAgYWN0aW9uTWVudVJlc3VsdC5sb29rdXBUZXh0ID0g
bG9va3VwUmFuZ2UgPyBsb29rdXBSYW5nZS0+dGV4dCgpIDogU3RyaW5nKCk7CisgICAgaWYgKGxv
b2t1cFJhbmdlKSB7CisgICAgICAgIGlmIChOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5l
ck5vZGUoKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBoaXRUZXN0UmVzdWx0RnJhbWUgPSBu
b2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICAgICAgYWN0aW9uTWVudVJlc3Vs
dC5kaWN0aW9uYXJ5UG9wdXBJbmZvID0gZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKGhpdFRl
c3RSZXN1bHRGcmFtZSwgKmxvb2t1cFJhbmdlLmdldCgpLCAmb3B0aW9ucywgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBtX2xhc3RBY3Rpb25NZW51UmFuZ2VGb3JTZWxlY3Rpb24gPSBsb29rdXBSYW5nZTsKICAgICBt
X2xhc3RBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCA9IGhpdFRlc3RSZXN1bHQ7CiAKQEAgLTEwNTIs
NyArMTA2Niw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0QXQKICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1BY3Rpb25NZW51SGl0VGVz
dChhY3Rpb25NZW51UmVzdWx0LCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2Vy
RGF0YS5nZXQoKSkpKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gV2ViUGFnZTo6
bG9va3VwVGV4dEF0TG9jYXRpb24oRmxvYXRQb2ludCBsb2NhdGlvbkluVmlld0Nvb29yZGluYXRl
cykKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IFdlYlBhZ2U6Omxvb2t1cFRleHRBdExvY2F0
aW9uKEZsb2F0UG9pbnQgbG9jYXRpb25JblZpZXdDb29vcmRpbmF0ZXMsIE5TRGljdGlvbmFyeSAq
Km9wdGlvbnMpCiB7CiAgICAgTWFpbkZyYW1lJiBtYWluRnJhbWUgPSBjb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKTsKICAgICBpZiAoIW1haW5GcmFtZS52aWV3KCkgfHwgIW1haW5GcmFtZS52aWV3KCkt
PnJlbmRlclZpZXcoKSkKQEAgLTEwNjAsOCArMTA3NCw3IEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IFdlYlBhZ2U6Omxvb2sKIAogICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBv
aW50KGxvY2F0aW9uSW5WaWV3Q29vb3JkaW5hdGVzKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3Vs
dCA9IG1haW5GcmFtZS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2Ut
Pm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCkpOwotICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKLSAgICByZXR1cm4gcmFuZ2VGb3JEaWN0aW9uYXJ5TG9v
a3VwQXRIaXRUZXN0UmVzdWx0KHJlc3VsdCwgJm9wdGlvbnMpOworICAgIHJldHVybiByYW5nZUZv
ckRpY3Rpb25hcnlMb29rdXBBdEhpdFRlc3RSZXN1bHQocmVzdWx0LCBvcHRpb25zKTsKIH0KIAog
dm9pZCBXZWJQYWdlOjpzZWxlY3RMYXN0QWN0aW9uTWVudVJhbmdlKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE3NzMyMikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTEyLTE1ICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIGxvb2t1cCBhbiBpbW1lZGlhdGUgYWN0
aW9uIGluc3RlYWQgb2YgYW4gYWN0aW9uIG1lbnUgaXRlbQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NjYxCisgICAgICAgIC1hbmQgY29ycmVzcG9u
ZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMTkxOTg0MTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIGxvb2t1cCBtZW51IGl0
ZW1zIGFuZCBub24tdW51c2VkIHN0YXRpYyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggCisgICAg
ICAgIGxvb2t1cC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkFjdGlvbk1lbnVDb250cm9sbGVyLm1t
OgorICAgICAgICAoLVtXZWJBY3Rpb25NZW51Q29udHJvbGxlciBfZGVmYXVsdE1lbnVJdGVtc0Zv
clRleHRdKToKKyAgICAgICAgKC1bV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIgX2RlZmF1bHRNZW51
SXRlbXNGb3JFZGl0YWJsZVRleHRdKToKKyAgICAgICAgKC1bV2ViQWN0aW9uTWVudUNvbnRyb2xs
ZXIgX2RlZmF1bHRNZW51SXRlbXNGb3JFZGl0YWJsZVRleHRXaXRoU3VnZ2VzdGlvbnNdKToKKyAg
ICAgICAgKC1bV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIgX2NyZWF0ZUFjdGlvbk1lbnVJdGVtRm9y
VGFnOl0pOgorICAgICAgICAoLVtXZWJBY3Rpb25NZW51Q29udHJvbGxlciBfbG9va3VwVGV4dDpd
KTogRGVsZXRlZC4KKyAgICAgICAgKHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UpOiBE
ZWxldGVkLgorCisgICAgICAgIFNldCB0aGUgZGVmYXVsdEFuaW1hdGlvbkNvbnRyb2xsZXIgdG8g
dGhlIGxvb2t1cC1wcm92aWRlZCBhbmltYXRpb24gY29udHJvbGxlciAKKyAgICAgICAgd2hlbiBh
cHByb3ByaWF0ZS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIubW06CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RlZmF1bHRB
bmltYXRpb25Db250cm9sbGVyXSk6CisgICAgICAgIChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFu
Z2UpOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9hbmltYXRpb25D
b250cm9sbGVyRm9yVGV4dF0pOgorCisgICAgICAgIE5ldyB0eXBlLgorICAgICAgICAqIFdlYlZp
ZXcvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaDoKKworICAgICAgICBOZXcgZnVuY3Rpb24gdG8gZ2V0
IHRoZSBsb29rdXAgYW5pbWF0aW9uIGNvbnRyb2xsZXIuCisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9hbmltYXRpb25Db250cm9sbGVyRm9yRGljdGlv
bmFyeUxvb2t1cFBvcHVwSW5mbzpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5h
bC5oOgorCiAyMDE0LTEyLTE1ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgRGF0YSBEZXRlY3RvcnMgaW1tZWRpYXRlIGFjdGlv
bnMgZm9yIExlZ2FjeSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
QWN0aW9uTWVudUNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJBY3Rpb25NZW51Q29udHJvbGxlci5tbQkocmV2aXNpb24gMTc3MzA4KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJBY3Rpb25NZW51Q29udHJvbGxlci5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2ltcG9ydCAiRE9NRWxlbWVudEludGVybmFs
LmgiCiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJu
YWwuaCIKLSNpbXBvcnQgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKICNpbXBvcnQgIldlYkRvY3Vt
ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkVsZW1lbnREaWN0aW9uYXJ5LmgiCiAjaW1wb3J0
ICJXZWJGcmFtZUludGVybmFsLmgiCkBAIC01Myw3ICs1Miw2IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MQ29udmVydGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0xvb2t1cFNQSS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9OU01lbnVTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNTaGFyaW5nU2Vydmlj
ZVBpY2tlclNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU1NoYXJpbmdTZXJ2aWNlU1BJLmg+CkBA
IC00NjMsMjAgKzQ2MSwxOCBAQCAtICh2b2lkKV9zYXZlVmlkZW9Ub0Rvd25sb2FkczooaWQpc2Vu
ZGVyCiAtIChOU0FycmF5ICopX2RlZmF1bHRNZW51SXRlbXNGb3JUZXh0CiB7CiAgICAgUmV0YWlu
UHRyPE5TTWVudUl0ZW0+IGNvcHlUZXh0SXRlbSA9IFtzZWxmIF9jcmVhdGVBY3Rpb25NZW51SXRl
bUZvclRhZzpXZWJBY3Rpb25NZW51SXRlbVRhZ0NvcHlUZXh0XTsKLSAgICBSZXRhaW5QdHI8TlNN
ZW51SXRlbT4gbG9va3VwVGV4dEl0ZW0gPSBbc2VsZiBfY3JlYXRlQWN0aW9uTWVudUl0ZW1Gb3JU
YWc6V2ViQWN0aW9uTWVudUl0ZW1UYWdMb29rdXBUZXh0XTsKICAgICBSZXRhaW5QdHI8TlNNZW51
SXRlbT4gcGFzdGVJdGVtID0gW3NlbGYgX2NyZWF0ZUFjdGlvbk1lbnVJdGVtRm9yVGFnOldlYkFj
dGlvbk1lbnVJdGVtVGFnUGFzdGVdOwogICAgIFtwYXN0ZUl0ZW0gc2V0RW5hYmxlZDpOT107CiAK
LSAgICByZXR1cm4gQFsgY29weVRleHRJdGVtLmdldCgpLCBsb29rdXBUZXh0SXRlbS5nZXQoKSwg
cGFzdGVJdGVtLmdldCgpIF07CisgICAgcmV0dXJuIEBbIGNvcHlUZXh0SXRlbS5nZXQoKSwgW05T
TWVudUl0ZW0gc2VwYXJhdG9ySXRlbV0sIHBhc3RlSXRlbS5nZXQoKSBdOwogfQogCiAtIChOU0Fy
cmF5ICopX2RlZmF1bHRNZW51SXRlbXNGb3JFZGl0YWJsZVRleHQKIHsKICAgICBSZXRhaW5QdHI8
TlNNZW51SXRlbT4gY29weVRleHRJdGVtID0gW3NlbGYgX2NyZWF0ZUFjdGlvbk1lbnVJdGVtRm9y
VGFnOldlYkFjdGlvbk1lbnVJdGVtVGFnQ29weVRleHRdOwotICAgIFJldGFpblB0cjxOU01lbnVJ
dGVtPiBsb29rdXBUZXh0SXRlbSA9IFtzZWxmIF9jcmVhdGVBY3Rpb25NZW51SXRlbUZvclRhZzpX
ZWJBY3Rpb25NZW51SXRlbVRhZ0xvb2t1cFRleHRdOwogICAgIFJldGFpblB0cjxOU01lbnVJdGVt
PiBwYXN0ZUl0ZW0gPSBbc2VsZiBfY3JlYXRlQWN0aW9uTWVudUl0ZW1Gb3JUYWc6V2ViQWN0aW9u
TWVudUl0ZW1UYWdQYXN0ZV07CiAKLSAgICByZXR1cm4gQFsgY29weVRleHRJdGVtLmdldCgpLCBs
b29rdXBUZXh0SXRlbS5nZXQoKSwgcGFzdGVJdGVtLmdldCgpIF07CisgICAgcmV0dXJuIEBbIGNv
cHlUZXh0SXRlbS5nZXQoKSwgW05TTWVudUl0ZW0gc2VwYXJhdG9ySXRlbV0sIHBhc3RlSXRlbS5n
ZXQoKSBdOwogfQogCiAtIChOU0FycmF5ICopX2RlZmF1bHRNZW51SXRlbXNGb3JFZGl0YWJsZVRl
eHRXaXRoU3VnZ2VzdGlvbnMKQEAgLTUxMywxMyArNTA5LDEyIEBAIC0gKE5TQXJyYXkgKilfZGVm
YXVsdE1lbnVJdGVtc0ZvckVkaXRhYmwKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNNZW51SXRl
bT4gY29weVRleHRJdGVtID0gW3NlbGYgX2NyZWF0ZUFjdGlvbk1lbnVJdGVtRm9yVGFnOldlYkFj
dGlvbk1lbnVJdGVtVGFnQ29weVRleHRdOwotICAgIFJldGFpblB0cjxOU01lbnVJdGVtPiBsb29r
dXBUZXh0SXRlbSA9IFtzZWxmIF9jcmVhdGVBY3Rpb25NZW51SXRlbUZvclRhZzpXZWJBY3Rpb25N
ZW51SXRlbVRhZ0xvb2t1cFRleHRdOwogICAgIFJldGFpblB0cjxOU01lbnVJdGVtPiBwYXN0ZUl0
ZW0gPSBbc2VsZiBfY3JlYXRlQWN0aW9uTWVudUl0ZW1Gb3JUYWc6V2ViQWN0aW9uTWVudUl0ZW1U
YWdQYXN0ZV07CiAgICAgUmV0YWluUHRyPE5TTWVudUl0ZW0+IHRleHRTdWdnZXN0aW9uc0l0ZW0g
PSBbc2VsZiBfY3JlYXRlQWN0aW9uTWVudUl0ZW1Gb3JUYWc6V2ViQWN0aW9uTWVudUl0ZW1UYWdU
ZXh0U3VnZ2VzdGlvbnNdOwogCiAgICAgW3RleHRTdWdnZXN0aW9uc0l0ZW0gc2V0U3VibWVudTpz
cGVsbGluZ1N1Yk1lbnUuZ2V0KCldOwogCi0gICAgcmV0dXJuIEBbIGNvcHlUZXh0SXRlbS5nZXQo
KSwgbG9va3VwVGV4dEl0ZW0uZ2V0KCksIHBhc3RlSXRlbS5nZXQoKSwgdGV4dFN1Z2dlc3Rpb25z
SXRlbS5nZXQoKSBdOworICAgIHJldHVybiBAWyBjb3B5VGV4dEl0ZW0uZ2V0KCksIFtOU01lbnVJ
dGVtIHNlcGFyYXRvckl0ZW1dLCBwYXN0ZUl0ZW0uZ2V0KCksIHRleHRTdWdnZXN0aW9uc0l0ZW0u
Z2V0KCkgXTsKIH0KIAogLSAodm9pZClfc2VsZWN0RGF0YURldGVjdGVkVGV4dApAQCAtNTc5LDE2
ICs1NzQsNiBAQCAtICh2b2lkKV9jb3B5U2VsZWN0aW9uOihpZClzZW5kZXIKICAgICBbX3dlYlZp
ZXcgY29weTpzZWxmXTsKIH0KIAotLSAodm9pZClfbG9va3VwVGV4dDooaWQpc2VuZGVyCi17Ci0g
ICAgRnJhbWUqIGZyYW1lID0gY29yZShbX3dlYlZpZXcgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsK
LSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaWN0aW9uYXJ5UG9wdXBJ
bmZvIHBvcHVwSW5mbyA9IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1l
LCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgIFtfd2ViVmlldyBfc2hvd0Rp
Y3Rpb25hcnlMb29rdXBQb3B1cDpwb3B1cEluZm9dOwotfQotCiAtICh2b2lkKV9wYXN0ZTooaWQp
c2VuZGVyCiB7CiAgICAgW193ZWJWaWV3IHBhc3RlOnNlbGZdOwpAQCAtNjIwLDU2ICs2MDUsNiBA
QCAtICh2b2lkKV9jaGFuZ2VTZWxlY3Rpb25Ub1N1Z2dlc3Rpb246KGlkCiAgICAgW2RvY3VtZW50
VmlldyBfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6c2VsZWN0ZWRDb3JyZWN0aW9uXTsKIH0KIAotc3Rh
dGljIERpY3Rpb25hcnlQb3B1cEluZm8gcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCi17Ci0g
ICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwotICAgIERpY3Rpb25hcnlQb3B1cEluZm8g
cG9wdXBJbmZvOwotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHJhbmdlRm9yRGlj
dGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihzZWxlY3Rpb24sICZvcHRpb25zKTsKLSAgICBpZiAo
c2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcG9wdXBJbmZvID0gcGVyZm9ybURpY3Rpb25hcnlMb29r
dXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOwotICAgIHJldHVybiBw
b3B1cEluZm87Ci19Ci0KLXN0YXRpYyBEaWN0aW9uYXJ5UG9wdXBJbmZvIHBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUqIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFy
eSAqb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0
aW9uVHJhbnNpdGlvbikKLXsKLSAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIHBvcHVwSW5mbzsKLSAg
ICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHBvcHVwSW5mbzsKLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcmFu
Z2Uuc3RhcnRDb250YWluZXIoKS0+cmVuZGVyZXIoKTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRz
OwotICAgIHJhbmdlLnRleHRRdWFkcyhxdWFkcyk7Ci0gICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHBvcHVwSW5mbzsKLQotICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJh
bWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpKTsKLQotICAgIHBvcHVwSW5mby5vcmlnaW4gPSBOU01ha2VQb2ludChyYW5nZVJlY3QueCgp
LCByYW5nZVJlY3QueSgpICsgKHN0eWxlLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICogZnJhbWUt
PnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCkpKTsKLSAgICBwb3B1cEluZm8ub3B0aW9ucyA9IG9w
dGlvbnM7Ci0KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRy
aWJ1dGVkU3RyaW5nOjpObyk7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1
dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmlu
Z11dKTsKLSAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNo
YXJlZEZvbnRNYW5hZ2VyXTsKLQotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0
cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhd
KSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5n
ZSByYW5nZSwgQk9PTCAqc3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlv
bmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHld
KTsKLQotICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JL
ZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChmb250KSB7Ci0gICAgICAgICAg
ICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOltmb250IHBvaW50
U2l6ZV0gKiBmcmFtZS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKV07Ci0gICAgICAgICAgICBb
c2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFt
ZV07Ci0gICAgICAgIH0KLQotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0
dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07Ci0gICAgfV07Ci0K
LSAgICBwb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmlu
Zy5nZXQoKTsKLSAgICBwb3B1cEluZm8udGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZVdpdGhSYW5nZShyYW5nZSwgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAgcmV0dXJu
IHBvcHVwSW5mbzsKLX0KLQogI3ByYWdtYSBtYXJrIFdoaXRlc3BhY2UgYWN0aW9ucwogCiAtIChO
U0FycmF5ICopX2RlZmF1bHRNZW51SXRlbXNGb3JXaGl0ZXNwYWNlSW5FZGl0YWJsZUFyZWEKQEAg
LTczNywxMyArNjcyLDYgQEAgLSAoUmV0YWluUHRyPE5TTWVudUl0ZW0+KV9jcmVhdGVBY3Rpb25N
ZQogICAgICAgICBlbmFibGVkID0gX2hpdFRlc3RSZXN1bHQuYWxsb3dzQ29weSgpOwogICAgICAg
ICBicmVhazsKIAotICAgIGNhc2UgV2ViQWN0aW9uTWVudUl0ZW1UYWdMb29rdXBUZXh0OgotICAg
ICAgICBzZWxlY3RvciA9IEBzZWxlY3RvcihfbG9va3VwVGV4dDopOwotICAgICAgICB0aXRsZSA9
IFdFQl9VSV9TVFJJTkdfS0VZKCJMb29rIFVwIiwgIkxvb2sgVXAgKGFjdGlvbiBtZW51IGl0ZW0p
IiwgImFjdGlvbiBtZW51IGl0ZW0iKTsKLSAgICAgICAgaW1hZ2UgPSBbTlNJbWFnZSBpbWFnZU5h
bWVkOkAiTlNBY3Rpb25NZW51TG9va3VwIl07Ci0gICAgICAgIGVuYWJsZWQgPSBnZXRMVUxvb2t1
cERlZmluaXRpb25Nb2R1bGVDbGFzcygpICYmIF9oaXRUZXN0UmVzdWx0LmFsbG93c0NvcHkoKTsK
LSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIFdlYkFjdGlvbk1lbnVJdGVtVGFnUGFzdGU6CiAg
ICAgICAgIHNlbGVjdG9yID0gQHNlbGVjdG9yKF9wYXN0ZTopOwogICAgICAgICB0aXRsZSA9IFdF
Ql9VSV9TVFJJTkdfS0VZKCJQYXN0ZSIsICJQYXN0ZSAoYWN0aW9uIG1lbnUgaXRlbSkiLCAiYWN0
aW9uIG1lbnUgaXRlbSIpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gMTc3MzA4
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJET01FbGVt
ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9N
UmFuZ2VJbnRlcm5hbC5oIgorI2ltcG9ydCAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgogI2ltcG9y
dCAiV2ViRWxlbWVudERpY3Rpb25hcnkuaCIKICNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIldlYkhUTUxWaWV3LmgiCkBAIC0zOCw5ICszOSwxNSBAQAogI2ltcG9ydCAiV2Vi
Vmlld0ludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3Rpb24uaD4KICNpbXBv
cnQgPFdlYkNvcmUvRGF0YURldGVjdG9yc1NQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9u
YXJ5TG9va3VwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb29rdXBTUEkuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTlNNZW51U1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRM
aW5raW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNpbXBvcnQgPG9i
amMvb2JqYy1jbGFzcy5oPgpAQCAtMTc2LDYgKzE4MywxMSBAQCAtIChpZCA8TlNJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Db250cm9sCiAgICAgICAgICAgICBfdHlwZSA9IFdlYkltbWVkaWF0ZUFj
dGlvbkRhdGFEZXRlY3RlZEl0ZW07CiAgICAgICAgICAgICByZXR1cm4gKGlkPE5TSW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4paW1tZWRpYXRlQWN0aW9uSXRlbTsKICAgICAgICAg
fQorCisgICAgICAgIGlmIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+
IGRlZmF1bHRUZXh0Q29udHJvbGxlciA9IFtzZWxmIF9hbmltYXRpb25Db250cm9sbGVyRm9yVGV4
dF0pIHsKKyAgICAgICAgICAgIF90eXBlID0gV2ViSW1tZWRpYXRlQWN0aW9uVGV4dDsKKyAgICAg
ICAgICAgIHJldHVybiBkZWZhdWx0VGV4dENvbnRyb2xsZXI7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICByZXR1cm4gbmlsOwpAQCAtMjc3LDYgKzI4OSw3MSBAQCAtIChOU01lbnVJdGVtICopX21l
bnVJdGVtRm9yRGF0YURldGVjdGVkCiAgICAgcmV0dXJuIG1lbnVJdGVtcy5sYXN0T2JqZWN0Owog
fQogCisjcHJhZ21hIG1hcmsgVGV4dCBhY3Rpb24KKworc3RhdGljIERpY3Rpb25hcnlQb3B1cElu
Zm8gZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lKiBmcmFtZSwgUmFuZ2UmIHJhbmdl
LCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBw
b3B1cEluZm87CisgICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBwb3B1cEluZm87CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCktPnJlbmRlcmVyKCk7CisgICAgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisKKyAgICBWZWN0b3I8Rmxv
YXRRdWFkPiBxdWFkczsKKyAgICByYW5nZS50ZXh0UXVhZHMocXVhZHMpOworICAgIGlmIChxdWFk
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwb3B1cEluZm87CisKKyAgICBJbnRSZWN0IHJh
bmdlUmVjdCA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9z
aW5nQm91bmRpbmdCb3goKSk7CisKKyAgICBwb3B1cEluZm8ub3JpZ2luID0gTlNNYWtlUG9pbnQo
cmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIChzdHlsZS5mb250TWV0cmljcygpLmRlc2Nl
bnQoKSAqIGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpKSk7CisgICAgcG9wdXBJbmZv
Lm9wdGlvbnMgPSBvcHRpb25zOworCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0
ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVk
ZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOworICAgIFJldGFpblB0cjxOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRl
ZFN0cmluZyBzdHJpbmddXSk7CisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisKKyAgICBbbnNBdHRyaWJ1dGVkU3RyaW5n
IGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRT
dHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJp
YnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWluUHRyPE5T
TXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVz
IG11dGFibGVDb3B5XSk7CisKKyAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0
ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoZm9udCkg
eworICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6
ZTpbZm9udCBwb2ludFNpemVdICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCldOwor
ICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9u
dEF0dHJpYnV0ZU5hbWVdOworICAgICAgICB9CisKKyAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRl
ZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2Vd
OworICAgIH1dOworCisgICAgcG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7CisgICAgcG9wdXBJbmZvLnRleHRJbmRpY2F0b3IgPSBUZXh0
SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIHByZXNlbnRhdGlvblRyYW5zaXRpb24p
OworICAgIHJldHVybiBwb3B1cEluZm87Cit9CisKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JUZXh0Cit7CisgICAgaWYg
KCFnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgTm9kZSogbm9kZSA9IF9oaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUt
PmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworICAgIFJlZlB0cjxSYW5nZT4g
ZGljdGlvbmFyeVJhbmdlID0gcmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwQXRIaXRUZXN0UmVzdWx0
KF9oaXRUZXN0UmVzdWx0LCAmb3B0aW9ucyk7CisKKyAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRp
Y3Rpb25hcnlQb3B1cEluZm8gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsICpk
aWN0aW9uYXJ5UmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworICAgIGlmICghZGljdGlvbmFyeVBvcHVwSW5mby5h
dHRyaWJ1dGVkU3RyaW5nKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIFtfd2Vi
VmlldyBfYW5pbWF0aW9uQ29udHJvbGxlckZvckRpY3Rpb25hcnlMb29rdXBQb3B1cEluZm86ZGlj
dGlvbmFyeVBvcHVwSW5mb107Cit9CisKICNwcmFnbWEgbWFyayBUZXh0IEluZGljYXRvcgogCiAt
ICh2b2lkKV9zaG93VGV4dEluZGljYXRvcgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaAkocmV2aXNpb24gMTc3MzA4KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDcsNyArMTQ3LDggQEAgdHlwZWRlZiBlbnVtIHsKIHR5cGVkZWYgZW51bSB7CiAg
ICAgV2ViSW1tZWRpYXRlQWN0aW9uTm9uZSA9IDAsCiAgICAgV2ViSW1tZWRpYXRlQWN0aW9uTGlu
a1ByZXZpZXcsCi0gICAgV2ViSW1tZWRpYXRlQWN0aW9uRGF0YURldGVjdGVkSXRlbQorICAgIFdl
YkltbWVkaWF0ZUFjdGlvbkRhdGFEZXRlY3RlZEl0ZW0sCisgICAgV2ViSW1tZWRpYXRlQWN0aW9u
VGV4dAogfSBXZWJJbW1lZGlhdGVBY3Rpb25UeXBlOwogCiAvLyBNZXNzYWdlIFNvdXJjZXMuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxNzczMDgpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTg2NTksNiArODY1OSwzMyBAQCAtICh2b2lkKV9zaG93RGljdGlvbmFyeUxvb2t1cFBvcHVwOihj
b25zCiAgICAgICAgIFtnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1bGVDbGFzcygpIHNob3dEZWZp
bml0aW9uRm9yVGVybTpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkg
YXRMb2NhdGlvbjp0ZXh0QmFzZWxpbmVPcmlnaW4gb3B0aW9uczpkaWN0aW9uYXJ5UG9wdXBJbmZv
Lm9wdGlvbnMuZ2V0KCldOwogfQogCistIChpZClfYW5pbWF0aW9uQ29udHJvbGxlckZvckRpY3Rp
b25hcnlMb29rdXBQb3B1cEluZm86KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKWRpY3Rpb25h
cnlQb3B1cEluZm8KK3sKKyAgICBpZiAoIWRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0
cmluZykKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3Jp
Z2luID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW47CisKKyAgICAvLyBDb252ZXJ0IHRvIHNj
cmVlbiBjb29yZGluYXRlcy4KKyAgICB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBbc2VsZi53aW5kb3cg
Y29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KHRleHRCYXNlbGluZU9yaWdpbi54LCB0ZXh0
QmFzZWxpbmVPcmlnaW4ueSwgMCwgMCldLm9yaWdpbjsKKworICAgIGlmIChjYW5Mb2FkTFVUZXJt
T3B0aW9uRGlzYWJsZVNlYXJjaFRlcm1JbmRpY2F0b3IoKSAmJiBjYW5Mb2FkTFVOb3RpZmljYXRp
b25Qb3BvdmVyV2lsbENsb3NlKCkpIHsKKyAgICAgICAgaWYgKCFfcHJpdmF0ZS0+aGFzSW5pdGlh
bGl6ZWRMb29rdXBPYnNlcnZlcikgeworICAgICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfZGlj
dGlvbmFyeUxvb2t1cFBvcG92ZXJXaWxsQ2xvc2U6KSBuYW1lOmdldExVTm90aWZpY2F0aW9uUG9w
b3ZlcldpbGxDbG9zZSgpIG9iamVjdDpuaWxdOworICAgICAgICAgICAgX3ByaXZhdGUtPmhhc0lu
aXRpYWxpemVkTG9va3VwT2JzZXJ2ZXIgPSBZRVM7CisgICAgICAgIH0KKworICAgICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbXV0YWJsZU9wdGlvbnMgPSBhZG9wdE5TKFtkaWN0
aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgbXV0YWJsZUNvcHldKTsKKyAgICAgICAgaWYgKCFtdXRh
YmxlT3B0aW9ucykKKyAgICAgICAgICAgIG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW211dGFibGVPcHRpb25zIHNl
dE9iamVjdDpAWUVTIGZvcktleTpnZXRMVVRlcm1PcHRpb25EaXNhYmxlU2VhcmNoVGVybUluZGlj
YXRvcigpXTsKKyAgICAgICAgW3NlbGYgX3NldFRleHRJbmRpY2F0b3I6ZGljdGlvbmFyeVBvcHVw
SW5mby50ZXh0SW5kaWNhdG9yLmdldCgpIGZhZGVPdXQ6Tk8gYW5pbWF0aW9uQ29tcGxldGlvbkhh
bmRsZXI6W10geyB9XTsKKyAgICAgICAgcmV0dXJuIFtnZXRMVUxvb2t1cERlZmluaXRpb25Nb2R1
bGVDbGFzcygpIGxvb2t1cEFuaW1hdGlvbkNvbnRyb2xsZXJGb3JUZXJtOmRpY3Rpb25hcnlQb3B1
cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKSBhdExvY2F0aW9uOnRleHRCYXNlbGluZU9yaWdp
biBvcHRpb25zOm11dGFibGVPcHRpb25zLmdldCgpXTsKKyAgICB9CisKKyAgICByZXR1cm4gW2dl
dExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkgbG9va3VwQW5pbWF0aW9uQ29udHJvbGxl
ckZvclRlcm06ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpIGF0TG9j
YXRpb246dGV4dEJhc2VsaW5lT3JpZ2luIG9wdGlvbnM6ZGljdGlvbmFyeVBvcHVwSW5mby5vcHRp
b25zLmdldCgpXTsKK30KKwogLSAodm9pZClfZGljdGlvbmFyeUxvb2t1cFBvcG92ZXJXaWxsQ2xv
c2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CiAgICAgW3NlbGYgX3NldFRleHRJ
bmRpY2F0b3I6bnVsbHB0ciBmYWRlT3V0Ok5PIGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOltd
IHsgfV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFs
LmgJKHJldmlzaW9uIDE3NzMwOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
d0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw2ICsyNjIsNyBAQCBAaW50ZXJmYWNl
IFdlYlZpZXcgKFdlYlZpZXdPdGhlckludGVybmFsCiAtICh2b2lkKV9zZXRUZXh0SW5kaWNhdG9y
OihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yKil0ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFk
ZU91dCBhbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcjooc3RkOjpmdW5jdGlvbjx2b2lkICgpPilj
b21wbGV0aW9uSGFuZGxlcjsKIC0gKHZvaWQpX2NsZWFyVGV4dEluZGljYXRvcjsKIC0gKHZvaWQp
X3Nob3dEaWN0aW9uYXJ5TG9va3VwUG9wdXA6KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKWRp
Y3Rpb25hcnlQb3B1cEluZm87CistIChpZClfYW5pbWF0aW9uQ29udHJvbGxlckZvckRpY3Rpb25h
cnlMb29rdXBQb3B1cEluZm86KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKWRpY3Rpb25hcnlQ
b3B1cEluZm87CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAK
IC0gKFdlYkFjdGlvbk1lbnVDb250cm9sbGVyICopX2FjdGlvbk1lbnVDb250cm9sbGVyOwogLSAo
V2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciAqKV9pbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
Owo=
</data>
<flag name="review"
          id="268195"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>