<?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>119605</bug_id>
          
          <creation_ts>2013-08-08 16:23:07 -0700</creation_ts>
          <short_desc>AX: Not able to use arrow keys to read text in a WK2 app</short_desc>
          <delta_ts>2013-08-09 12:58:25 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>OS X 10.8</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</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="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>915642</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-08-08 16:23:07 -0700</bug_when>
    <thetext>Arrow keys should be able to read text line-by-line in a WebView when running with VoiceOver. This feature is broken in WK2.

&lt;rdar://problem/14281275&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915644</commentid>
    <comment_count>1</comment_count>
      <attachid>208380</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-08-08 16:28:37 -0700</bug_when>
    <thetext>Created attachment 208380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915665</commentid>
    <comment_count>2</comment_count>
      <attachid>208380</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-08 18:38:03 -0700</bug_when>
    <thetext>Comment on attachment 208380
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:3349
&gt; +        // provides KB navigation and selection for enhanced accessibility users

Given the title of this function and the code below, I am not sure we need this comment any more. Or if we ever did!

&gt; Source/WebKit2/ChangeLog:22
&gt; +        This function now gives accessibility a chance to handle the event too. And it 
&gt; +        also actually tracks whether or not the event was handled by scrolling instead of 
&gt; +        assuming that it was and universally returning true.

Why do we need to fix the boolean result here as part of this patch? Nice fix, but how is it relevant?

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:633
&gt; +    // First give accessibility a chance to handle the event.
&gt; +    Frame* frame = frameForEvent(event);
&gt; +    frame-&gt;eventHandler()-&gt;handleKeyboardSelectionMovementForAccessibility(event);
&gt; +    if (event-&gt;defaultHandled())
&gt; +        return true;

Can the event ever be zero?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915693</commentid>
    <comment_count>3</comment_count>
      <attachid>208380</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-08-08 22:12:49 -0700</bug_when>
    <thetext>Comment on attachment 208380
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp:2
&gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.

2010?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915886</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-08-09 11:39:35 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 208380 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208380&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:3349
&gt; &gt; +        // provides KB navigation and selection for enhanced accessibility users
&gt; 
&gt; Given the title of this function and the code below, I am not sure we need this comment any more. Or if we ever did!
&gt; 

Good point. I removed it.

&gt; &gt; Source/WebKit2/ChangeLog:22
&gt; &gt; +        This function now gives accessibility a chance to handle the event too. And it 
&gt; &gt; +        also actually tracks whether or not the event was handled by scrolling instead of 
&gt; &gt; +        assuming that it was and universally returning true.
&gt; 
&gt; Why do we need to fix the boolean result here as part of this patch? Nice fix, but how is it relevant?
&gt; 

This could be done in a separate patch, and maybe should be. This change is required to get this feature working in some WebKit2 apps that were previously swallowing some events that they can not longer swallow. Those events need to be sent to WK2 in order to support this accessibility feature. But in the non-accessibility case, WK2 needs to accurately report whether it handled the event or not in order to avoid behavioral regressions.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:633
&gt; &gt; +    // First give accessibility a chance to handle the event.
&gt; &gt; +    Frame* frame = frameForEvent(event);
&gt; &gt; +    frame-&gt;eventHandler()-&gt;handleKeyboardSelectionMovementForAccessibility(event);
&gt; &gt; +    if (event-&gt;defaultHandled())
&gt; &gt; +        return true;
&gt; 
&gt; Can the event ever be zero?

By the time we reach this function, no it cannot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915889</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-08-09 11:39:51 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 208380 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208380&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp:2
&gt; &gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.
&gt; 
&gt; 2010?

Oops, good catch.

Thanks Darin!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915917</commentid>
    <comment_count>6</comment_count>
      <attachid>208380</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-09 12:56:21 -0700</bug_when>
    <thetext>Comment on attachment 208380
Patch

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

&gt;&gt;&gt; Tools/TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp:2
&gt;&gt;&gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.
&gt;&gt; 
&gt;&gt; 2010?
&gt; 
&gt; Oops, good catch.
&gt; 
&gt; Thanks Darin!

No fair, you thanked me but Jon noticed the wrong date ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915918</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-08-09 12:57:01 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 208380 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208380&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp:2
&gt; &gt;&gt;&gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.
&gt; &gt;&gt; 
&gt; &gt;&gt; 2010?
&gt; &gt; 
&gt; &gt; Oops, good catch.
&gt; &gt; 
&gt; &gt; Thanks Darin!
&gt; 
&gt; No fair, you thanked me but Jon noticed the wrong date ;-)

Haha, oops! Sorry Jon! Thanks to you too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915919</commentid>
    <comment_count>8</comment_count>
      <attachid>208380</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-09 12:57:18 -0700</bug_when>
    <thetext>Comment on attachment 208380
Patch

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

&gt;&gt;&gt; Source/WebKit2/ChangeLog:22
&gt;&gt;&gt; +        assuming that it was and universally returning true.
&gt;&gt; 
&gt;&gt; Why do we need to fix the boolean result here as part of this patch? Nice fix, but how is it relevant?
&gt; 
&gt; This could be done in a separate patch, and maybe should be. This change is required to get this feature working in some WebKit2 apps that were previously swallowing some events that they can not longer swallow. Those events need to be sent to WK2 in order to support this accessibility feature. But in the non-accessibility case, WK2 needs to accurately report whether it handled the event or not in order to avoid behavioral regressions.

I think it would be neat to land this in two steps: Add the bool first and then add handleKeyboardSelectionMovementForAccessibility. But not absolutely required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915920</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-08-09 12:58:25 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 208380 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208380&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/ChangeLog:22
&gt; &gt;&gt;&gt; +        assuming that it was and universally returning true.
&gt; &gt;&gt; 
&gt; &gt;&gt; Why do we need to fix the boolean result here as part of this patch? Nice fix, but how is it relevant?
&gt; &gt; 
&gt; &gt; This could be done in a separate patch, and maybe should be. This change is required to get this feature working in some WebKit2 apps that were previously swallowing some events that they can not longer swallow. Those events need to be sent to WK2 in order to support this accessibility feature. But in the non-accessibility case, WK2 needs to accurately report whether it handled the event or not in order to avoid behavioral regressions.
&gt; 
&gt; I think it would be neat to land this in two steps: Add the bool first and then add handleKeyboardSelectionMovementForAccessibility. But not absolutely required.

Oops, I just committed right before I read this. Sorry about that.

http://trac.webkit.org/changeset/153907</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208380</attachid>
            <date>2013-08-08 16:28:37 -0700</date>
            <delta_ts>2013-08-09 12:57:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>ax-for-review.txt</filename>
            <type>text/plain</type>
            <size>21240</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mzg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEzLTA4LTA4ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogTm90IGFibGUgdG8gdXNlIGFy
cm93IGtleXMgdG8gcmVhZCB0ZXh0IGluIGEgV0syIGFwcAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NjA1CisgICAgICAgIC1hbmQgY29ycmVzcG9u
ZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MjgxMjc1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY29kZSBmcm9tIGRlZmF1bHRL
ZXlib2FyZEV2ZW50SGFuZGxlcigpIGlzIHRoZSBtYWdpYyB0aGF0IG1ha2VzIHRoaXMgQVggCisg
ICAgICAgIGZ1bmN0aW9uYWxpdHkgd29yay4gVGhpcyBwYXRjaCBtb3ZlcyB0aGF0IGludG8gYSBz
ZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0IHdlIGNhbiAKKyAgICAgICAgY2FsbCBpdCBmcm9tIFdL
Mi4KKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUtleWJvYXJkU2Vs
ZWN0aW9uTW92ZW1lbnRGb3JBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5oOgorCiAyMDEzLTA4LTA4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtFTUVdIHNldE1lZGlhS2V5cyBmdW5jdGlvbiBhcyBkZWZpbmVkIGlu
IHRoZSBFTUUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCB3b3JrCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gMTUzODExKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTE4MzYsNiArMTgzNiw3IEBAIF9fWk43V2ViQ29yZTEyRXZlbnRI
YW5kbGVyMTB3aGVlbEV2ZW50RVAKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTJtb3VzZURy
YWdnZWRFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0Y3VycmVudE5TRXZl
bnRFdgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIzMXBhc3NNb3VzZU1vdmVkRXZlbnRUb1Nj
cm9sbGJhcnNFUDdOU0V2ZW50CitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjQ3aGFuZGxlS2V5
Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudEZvckFjY2Vzc2liaWxpdHlFUE5TXzEzS2V5Ym9hcmRFdmVu
dEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyN21vdXNlVXBFUDdOU0V2ZW50CiBfX1pON1dl
YkNvcmUxMkV2ZW50SGFuZGxlcjhrZXlFdmVudEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZl
bnRIYW5kbGVyOW1vdXNlRG93bkVQN05TRXZlbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAJKHJldmlzaW9uIDE1MzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM0Miw3ICszMzQyLDE2IEBAIHN0YXRp
YyB2b2lkIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW0KICAgICBzZWxlY3Rpb24tPm1vZGlm
eShhbHRlcm5hdGlvbiwgZGlyZWN0aW9uLCBncmFudWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CiAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9Ci0gICAgCisKK3ZvaWQgRXZlbnRIYW5k
bGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50Rm9yQWNjZXNzaWJpbGl0eShLZXli
b2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50KSB7CisgICAgICAgIC8vIHByb3ZpZGVzIEtCIG5hdmlnYXRpb24gYW5k
IHNlbGVjdGlvbiBmb3IgZW5oYW5jZWQgYWNjZXNzaWJpbGl0eSB1c2VycworICAgICAgICBpZiAo
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQo
KSkKKyAgICAgICAgICAgIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQobV9mcmFtZS0+
c2VsZWN0aW9uKCksIGV2ZW50KTsKKyAgICB9Cit9CisKIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZh
dWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewpAQCAtMzM1OSw5
ICszMzY4LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SAogICAg
ICAgICAgICAgICAgIGRlZmF1bHRBcnJvd0V2ZW50SGFuZGxlcihkaXJlY3Rpb24sIGV2ZW50KTsK
ICAgICAgICAgfQogCi0gICAgICAgIC8vIHByb3ZpZGVzIEtCIG5hdmlnYXRpb24gYW5kIHNlbGVj
dGlvbiBmb3IgZW5oYW5jZWQgYWNjZXNzaWJpbGl0eSB1c2VycwotICAgICAgICBpZiAoQVhPYmpl
Y3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQoKSkKLSAg
ICAgICAgICAgIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQobV9mcmFtZS0+c2VsZWN0
aW9uKCksIGV2ZW50KTsKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudEZv
ckFjY2Vzc2liaWxpdHkoZXZlbnQpOwogICAgIH0KICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewogICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5o
YW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaAkocmV2aXNpb24gMTUzODExKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDYgKzIxNiw4IEBAIHB1YmxpYzoKICAgICBib29s
IGtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYpOwogICAgIHZvaWQgZGVmYXVs
dEtleWJvYXJkRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKIAorICAgIHZvaWQgaGFuZGxl
S2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudEZvckFjY2Vzc2liaWxpdHkoS2V5Ym9hcmRFdmVudCop
OworCiAgICAgYm9vbCBoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2
ZW50KiB1bmRlcmx5aW5nRXZlbnQgPSAwLCBUZXh0RXZlbnRJbnB1dFR5cGUgPSBUZXh0RXZlbnRJ
bnB1dEtleWJvYXJkKTsKICAgICB2b2lkIGRlZmF1bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoVGV4
dEV2ZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mzg1OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEzLTA4
LTA4ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogTm90IGFi
bGUgdG8gdXNlIGFycm93IGtleXMgdG8gcmVhZCB0ZXh0IGluIGEgV0syIGFwcAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NjA1CisgICAgICAgIC1h
bmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE0MjgxMjc1PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgYWxsIG9m
IHRoZXNlIHNjcm9sbGluZyBmdW5jdGlvbnMgYWN0dWFsbHkgcmV0dXJuIHRoZSBXZWJDb3JlIGJv
b2xzIHRoYXQgCisgICAgICAgIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHNjcm9sbGluZyBoYXBw
ZW5lZC4gCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjps
b2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2Nyb2xsQnkpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpl
eGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVybmFsKToKKworICAgICAgICBUaGlzIGZ1bmN0aW9u
IG5vdyBnaXZlcyBhY2Nlc3NpYmlsaXR5IGEgY2hhbmNlIHRvIGhhbmRsZSB0aGUgZXZlbnQgdG9v
LiBBbmQgaXQgCisgICAgICAgIGFsc28gYWN0dWFsbHkgdHJhY2tzIHdoZXRoZXIgb3Igbm90IHRo
ZSBldmVudCB3YXMgaGFuZGxlZCBieSBzY3JvbGxpbmcgaW5zdGVhZCBvZiAKKyAgICAgICAgYXNz
dW1pbmcgdGhhdCBpdCB3YXMgYW5kIHVuaXZlcnNhbGx5IHJldHVybmluZyB0cnVlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3Ip
OgorCiAyMDEzLTA4LTA4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBEaXNhYmxlIHN1cHByZXNzaW9uIG9mIHBsdWdpbiBwcm9jZXNzIGZvciBK
YXZhCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCShyZXZpc2lvbiAxNTM4MTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NzMsMTkgKzE5NzMsMTkgQEAgdm9p
ZCBXZWJQYWdlOjp0b3VjaEV2ZW50U3luY0ZvclRlc3RpbmcoYwogfQogI2VuZGlmCiAKLXZvaWQg
V2ViUGFnZTo6c2Nyb2xsKFBhZ2UqIHBhZ2UsIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorYm9vbCBXZWJQYWdlOjpzY3JvbGwoUGFnZSog
cGFnZSwgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCiB7Ci0gICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxh
cml0eSk7CisgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHkpOwogfQogCi12b2lkIFdlYlBhZ2U6OmxvZ2ljYWxTY3JvbGwoUGFnZSogcGFnZSwg
U2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQorYm9vbCBXZWJQYWdlOjpsb2dpY2FsU2Nyb2xsKFBhZ2UqIHBhZ2UsIFNjcm9sbExv
Z2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkK
IHsKLSAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmV2
ZW50SGFuZGxlcigpLT5sb2dpY2FsU2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxh
cml0eSk7CisgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rp
b24sIGdyYW51bGFyaXR5KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpzY3JvbGxCeSh1aW50MzJfdCBz
Y3JvbGxEaXJlY3Rpb24sIHVpbnQzMl90IHNjcm9sbEdyYW51bGFyaXR5KQorYm9vbCBXZWJQYWdl
OjpzY3JvbGxCeSh1aW50MzJfdCBzY3JvbGxEaXJlY3Rpb24sIHVpbnQzMl90IHNjcm9sbEdyYW51
bGFyaXR5KQogewotICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIHN0YXRpY19jYXN0PFNjcm9sbERp
cmVjdGlvbj4oc2Nyb2xsRGlyZWN0aW9uKSwgc3RhdGljX2Nhc3Q8U2Nyb2xsR3JhbnVsYXJpdHk+
KHNjcm9sbEdyYW51bGFyaXR5KSk7CisgICAgcmV0dXJuIHNjcm9sbChtX3BhZ2UuZ2V0KCksIHN0
YXRpY19jYXN0PFNjcm9sbERpcmVjdGlvbj4oc2Nyb2xsRGlyZWN0aW9uKSwgc3RhdGljX2Nhc3Q8
U2Nyb2xsR3JhbnVsYXJpdHk+KHNjcm9sbEdyYW51bGFyaXR5KSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE1MzgxMSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5MCw3ICsxOTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNjcm9sbE1haW5GcmFtZUlmTm90
QXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQp
OwogCi0gICAgdm9pZCBzY3JvbGxCeSh1aW50MzJfdCBzY3JvbGxEaXJlY3Rpb24sIHVpbnQzMl90
IHNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbEJ5KHVpbnQzMl90IHNjcm9sbERp
cmVjdGlvbiwgdWludDMyX3Qgc2Nyb2xsR3JhbnVsYXJpdHkpOwogCiAgICAgdm9pZCBjZW50ZXJT
ZWxlY3Rpb25JblZpc2libGVBcmVhKCk7CiAKQEAgLTQ4MSw3ICs0ODEsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBnZXREYXRhU2VsZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBXVEY6OlN0cmluZyBw
YXN0ZWJvYXJkVHlwZSwgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgdWludDY0X3QmIHNp
emUpOwogICAgIHZvaWQgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KGNvbnN0IFdlYktp
dDo6V2ViTW91c2VFdmVudCYsIGJvb2wmIHJlc3VsdCk7CiAgICAgdm9pZCBhY2NlcHRzRmlyc3RN
b3VzZShpbnQgZXZlbnROdW1iZXIsIGNvbnN0IFdlYktpdDo6V2ViTW91c2VFdmVudCYsIGJvb2wm
IHJlc3VsdCk7Ci0gICAgYm9vbCBwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3Io
Y29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2Vs
ZWN0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQg
aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1l
bnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9ucywgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKICNlbGlmIFBMQVRG
T1JNKEVGTCkKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmIGNvbXBv
c2l0aW9uU3RyaW5nKTsKQEAgLTcyOSw4ICs3MjksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29u
dGV4dE1lbnVIaWRkZW4oKSB7IG1faXNTaG93aW5nQ29udGV4dE1lbnUgPSBmYWxzZTsgfQogI2Vu
ZGlmCiAKLSAgICBzdGF0aWMgdm9pZCBzY3JvbGwoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OlNj
cm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkpOwotICAgIHN0YXRpYyB2
b2lkIGxvZ2ljYWxTY3JvbGwoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OlNjcm9sbExvZ2ljYWxE
aXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBzdGF0aWMgYm9vbCBz
Y3JvbGwoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6
U2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIHN0YXRpYyBib29sIGxvZ2ljYWxTY3JvbGwoV2ViQ29y
ZTo6UGFnZSosIFdlYkNvcmU6OlNjcm9sbExvZ2ljYWxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9s
bEdyYW51bGFyaXR5KTsKIAogICAgIHVpbnQ2NF90IHJlc3RvcmVTZXNzaW9uKGNvbnN0IFNlc3Np
b25TdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZVNlc3Npb25BbmROYXZpZ2F0ZVRvQ3VycmVudEl0
ZW0oY29uc3QgU2Vzc2lvblN0YXRlJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxNTM4MTEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCBib29sIFdlYlBhZ2U6OmV4ZWN1dGVLZXlw
cmVzc0NvbW1hbmRzSW50CiAgICAgICAgICAgICAgICAgYm9vbCBjb21tYW5kRXhlY3V0ZWRCeUVk
aXRvciA9IGNvbW1hbmQuZXhlY3V0ZShldmVudCk7CiAgICAgICAgICAgICAgICAgZXZlbnRXYXNI
YW5kbGVkIHw9IGNvbW1hbmRFeGVjdXRlZEJ5RWRpdG9yOwogICAgICAgICAgICAgICAgIGlmICgh
Y29tbWFuZEV4ZWN1dGVkQnlFZGl0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBwZXJm
b3JtZWROb25FZGl0aW5nQmVoYXZpb3IgPSBldmVudC0+a2V5RXZlbnQoKS0+dHlwZSgpID09IFBs
YXRmb3JtRXZlbnQ6OlJhd0tleURvd24gJiYgcGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNl
bGVjdG9yKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgYm9v
bCBwZXJmb3JtZWROb25FZGl0aW5nQmVoYXZpb3IgPSBldmVudC0+a2V5RXZlbnQoKS0+dHlwZSgp
ID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24gJiYgcGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlv
ckZvclNlbGVjdG9yKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lLCBldmVudCk7CiAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCB8PSBwZXJmb3JtZWROb25FZGl0aW5nQmVoYXZpb3I7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTYyNCw0MCArNjI0
LDQ3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3IKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGF0dHJp
YnV0ZWRTdHJpbmcsIGRpY3Rpb25hcnlQb3B1cEluZm8pKTsKIH0KIAotYm9vbCBXZWJQYWdlOjpw
ZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rv
cikKK2Jvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogeworICAgIC8vIEZp
cnN0IGdpdmUgYWNjZXNzaWJpbGl0eSBhIGNoYW5jZSB0byBoYW5kbGUgdGhlIGV2ZW50LgorICAg
IEZyYW1lKiBmcmFtZSA9IGZyYW1lRm9yRXZlbnQoZXZlbnQpOworICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudEZvckFjY2Vzc2liaWxpdHko
ZXZlbnQpOworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKICAgICAvLyBGSVhNRTogQWxsIHRoZXNlIHNlbGVjdG9ycyBoYXZlIGNvcnJlc3Bv
bmRpbmcgRWRpdG9yIGNvbW1hbmRzLCBidXQgdGhlIGNvbW1hbmRzIG9ubHkgd29yayBpbiBlZGl0
YWJsZSBjb250ZW50LgogICAgIC8vIFNob3VsZCBzdWNoIG5vbi1lZGl0aW5nIGJlaGF2aW9ycyBi
ZSBpbXBsZW1lbnRlZCBpbiBFZGl0b3Igb3IgRXZlbnRIYW5kbGVyOjpkZWZhdWx0QXJyb3dFdmVu
dEhhbmRsZXIoKSBwZXJoYXBzPworICAgIAorICAgIGJvb2wgZGlkUGVyZm9ybUFjdGlvbiA9IGZh
bHNlOworCiAgICAgaWYgKHNlbGVjdG9yID09ICJtb3ZlVXA6IikKLSAgICAgICAgc2Nyb2xsKG1f
cGFnZS5nZXQoKSwgU2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGRpZFBlcmZvcm1B
Y3Rpb24gPSBzY3JvbGwobV9wYWdlLmdldCgpLCBTY3JvbGxVcCwgU2Nyb2xsQnlMaW5lKTsKICAg
ICBlbHNlIGlmIChzZWxlY3RvciA9PSAibW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGg6IikKLSAg
ICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSk7CisgICAg
ICAgIGRpZFBlcmZvcm1BY3Rpb24gPSBzY3JvbGwobV9wYWdlLmdldCgpLCBTY3JvbGxVcCwgU2Ny
b2xsQnlQYWdlKTsKICAgICBlbHNlIGlmIChzZWxlY3RvciA9PSAibW92ZVRvQmVnaW5uaW5nT2ZE
b2N1bWVudDoiKSB7Ci0gICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbFVwLCBTY3Jv
bGxCeURvY3VtZW50KTsKLSAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsTGVmdCwg
U2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIGRpZFBlcmZvcm1BY3Rpb24gPSBzY3JvbGwobV9w
YWdlLmdldCgpLCBTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIGRpZFBlcmZv
cm1BY3Rpb24gfD0gc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1
bWVudCk7CiAgICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PSAibW92ZURvd246IikKLSAgICAgICAg
c2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lKTsKKyAgICAgICAg
ZGlkUGVyZm9ybUFjdGlvbiA9IHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbERvd24sIFNjcm9s
bEJ5TGluZSk7CiAgICAgZWxzZSBpZiAoc2VsZWN0b3IgPT0gIm1vdmVUb0VuZE9mUGFyYWdyYXBo
OiIpCi0gICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbERvd24sIFNjcm9sbEJ5UGFn
ZSk7CisgICAgICAgIGRpZFBlcmZvcm1BY3Rpb24gPSBzY3JvbGwobV9wYWdlLmdldCgpLCBTY3Jv
bGxEb3duLCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYgKHNlbGVjdG9yID09ICJtb3ZlVG9F
bmRPZkRvY3VtZW50OiIpIHsKLSAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsRG93
biwgU2Nyb2xsQnlEb2N1bWVudCk7Ci0gICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9s
bExlZnQsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICBkaWRQZXJmb3JtQWN0aW9uID0gc2Ny
b2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAg
IGRpZFBlcmZvcm1BY3Rpb24gfD0gc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsTGVmdCwgU2Ny
b2xsQnlEb2N1bWVudCk7CiAgICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PSAibW92ZUxlZnQ6IikK
LSAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsTGVmdCwgU2Nyb2xsQnlMaW5lKTsK
KyAgICAgICAgZGlkUGVyZm9ybUFjdGlvbiA9IHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbExl
ZnQsIFNjcm9sbEJ5TGluZSk7CiAgICAgZWxzZSBpZiAoc2VsZWN0b3IgPT0gIm1vdmVXb3JkTGVm
dDoiKQotICAgICAgICBzY3JvbGwobV9wYWdlLmdldCgpLCBTY3JvbGxMZWZ0LCBTY3JvbGxCeVBh
Z2UpOworICAgICAgICBkaWRQZXJmb3JtQWN0aW9uID0gc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Ny
b2xsTGVmdCwgU2Nyb2xsQnlQYWdlKTsKICAgICBlbHNlIGlmIChzZWxlY3RvciA9PSAibW92ZVRv
TGVmdEVuZE9mTGluZToiKQotICAgICAgICBtX3BhZ2UtPmdvQmFjaygpOworICAgICAgICBkaWRQ
ZXJmb3JtQWN0aW9uID0gbV9wYWdlLT5nb0JhY2soKTsKICAgICBlbHNlIGlmIChzZWxlY3RvciA9
PSAibW92ZVJpZ2h0OiIpCi0gICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbFJpZ2h0
LCBTY3JvbGxCeUxpbmUpOworICAgICAgICBkaWRQZXJmb3JtQWN0aW9uID0gc2Nyb2xsKG1fcGFn
ZS5nZXQoKSwgU2Nyb2xsUmlnaHQsIFNjcm9sbEJ5TGluZSk7CiAgICAgZWxzZSBpZiAoc2VsZWN0
b3IgPT0gIm1vdmVXb3JkUmlnaHQ6IikKLSAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Ny
b2xsUmlnaHQsIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIGRpZFBlcmZvcm1BY3Rpb24gPSBzY3Jv
bGwobV9wYWdlLmdldCgpLCBTY3JvbGxSaWdodCwgU2Nyb2xsQnlQYWdlKTsKICAgICBlbHNlIGlm
IChzZWxlY3RvciA9PSAibW92ZVRvUmlnaHRFbmRPZkxpbmU6IikKLSAgICAgICAgbV9wYWdlLT5n
b0ZvcndhcmQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGlk
UGVyZm9ybUFjdGlvbiA9IG1fcGFnZS0+Z29Gb3J3YXJkKCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gZGlkUGVyZm9ybUFjdGlvbjsKIH0KIAogYm9vbCBXZWJQYWdlOjpwZXJmb3Jt
RGVmYXVsdEJlaGF2aW9yRm9yS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNTM4NjApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MCBAQAorMjAxMy0wOC0wOCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgQVg6IE5vdCBhYmxlIHRvIHVzZSBhcnJvdyBrZXlzIHRvIHJlYWQgdGV4dCBpbiBhIFdLMiBh
cHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTYw
NQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
NDI4MTI3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXcgdGVzdCB2ZXJpZmllcyB0aGF0IGRpZE5vdEhhbmRsZUtleUV2ZW50IHdpbGwgYmUgY2Fs
bGVkIHdoZW4gdGhlcmUgaXMgbm90aGluZyAKKyAgICAgICAgdG8gc2Nyb2xsLiAKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkTm90SGFuZGxlS2V5RG93
bi5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGlkRmluaXNoTG9hZEZvckZy
YW1lKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRpZE5vdEhhbmRsZUtleUV2ZW50Q2FsbGJh
Y2spOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTMtMDgtMDggIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3Mg
YnVpbGQgZml4ZXMuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzODEx
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQAogCQk4QUEyOEMxQTE2
RDJGQTdCMDAyRkY0REIgLyogTG9hZFBhZ2VPbkNyYXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBQTI4QzE5MTZEMkZBN0IwMDJGRjREQiAvKiBM
b2FkUGFnZU9uQ3Jhc2guY3BwICovOyB9OwogCQk5MzBBRDQwMjE1MDY5OEQwMDA2Nzk3MEYgLyog
bG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwQUQ0MDExNTA2OThCMzAwNjc5NzBGIC8qIGxvdHMtb2YtdGV4dC5o
dG1sICovOyB9OwogCQk5MzE4Nzc4OTE1RUVDNTc3MDBBOUNDRTMgLyogTmV3Rmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNBMTUwNkYwMzUwMDdGRDU3RSAvKiBOZXdGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwICovOyB9OworCQk5MzMxNDA3QzE3QjQ0
MTkwMDBGMDgzQjEgLyogRGlkTm90SGFuZGxlS2V5RG93bi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMxNDA3QjE3QjQ0MTkwMDBGMDgzQjEgLyog
RGlkTm90SGFuZGxlS2V5RG93bi5jcHAgKi87IH07CiAJCTkzNjEwMDI5MTREQzk1QTcwMDYxMzc5
RCAvKiBsb3RzLW9mLWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzYxMDAyODE0REM5NTdCMDA2MTM3OUQgLyogbG90cy1v
Zi1pZnJhbWVzLmh0bWwgKi87IH07CiAJCTkzOUJBOTE3MTQxMDM0MTIwMDFBMDFCRCAvKiBEZXZp
Y2VTY2FsZUZhY3Rvck9uQmFjay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzOUJBOTE2MTQxMDM0MTIwMDFBMDFCRCAvKiBEZXZpY2VTY2FsZUZhY3Rv
ck9uQmFjay5tbSAqLzsgfTsKIAkJOTNBQkE4MDkxNkREQUI5MTAwMkRCMkZBIC8qIFN0cmluZ0hh
c2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0FCQTgwODE2RERBQjkxMDAyREIyRkEgLyogU3RyaW5nSGFzaGVyLmNwcCAqLzsgfTsKQEAgLTQx
NCw2ICs0MTUsNyBAQAogCQk4QUEyOEMxOTE2RDJGQTdCMDAyRkY0REIgLyogTG9hZFBhZ2VPbkNy
YXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRQYWdlT25D
cmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYw
MEQ5NkI1RSAvKiBUZXN0V2ViS2l0QVBJICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSBUZXN0V2ViS2l0QVBJOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQk5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0
bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi10ZXh0Lmh0bWwiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzMxNDA3QjE3QjQ0MTkwMDBGMDgzQjEgLyogRGlk
Tm90SGFuZGxlS2V5RG93bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaWROb3RIYW5kbGVLZXlEb3duLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTM2MTAwMjgxNERDOTU3QjAwNjEzNzlEIC8qIGxvdHMtb2YtaWZyYW1lcy5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gImxvdHMtb2YtaWZyYW1lcy5odG1sIjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTM5QkE5MTYxNDEwMzQxMjAwMUEwMUJEIC8qIERldmljZVNjYWxl
RmFjdG9yT25CYWNrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RGV2aWNlU2NhbGVGYWN0b3JPbkJhY2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQUJBODA4MTZEREFCOTEwMDJEQjJGQSAvKiBTdHJpbmdIYXNoZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nSGFzaGVyLmNwcDsgcGF0aCA9IFdURi9T
dHJpbmdIYXNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzA3LDYgKzcw
OSw3IEBACiAJCQkJRjZGM0YyOTAxMzM0MkZFQjAwQTZCRjE5IC8qIENvb2tpZU1hbmFnZXIuY3Bw
ICovLAogCQkJCUY2QjdCRTkzMTc0NjkxRUYwMDhBMzQ0NSAvKiBEaWRBc3NvY2lhdGVGb3JtQ29u
dHJvbHMuY3BwICovLAogCQkJCUY2QjdCRTkyMTc0NjkxRUYwMDhBMzQ0NSAvKiBEaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcCAqLywKKwkJCQk5MzMxNDA3QjE3QjQ0MTkwMDBGMDgz
QjEgLyogRGlkTm90SGFuZGxlS2V5RG93bi5jcHAgKi8sCiAJCQkJQkNCNjgwM0YxMjZGQkZFMTAw
NjQyQTYxIC8qIERvY3VtZW50U3RhcnRVc2VyU2NyaXB0QWxlcnRDcmFzaC5jcHAgKi8sCiAJCQkJ
QkNCNjgwNDExMjZGQkZGMTAwNjQyQTYxIC8qIERvY3VtZW50U3RhcnRVc2VyU2NyaXB0QWxlcnRD
cmFzaF9CdW5kbGUuY3BwICovLAogCQkJCTUxMzkzRTFFMTUyMzk0NEEwMDVGMzlDNSAvKiBET01X
aW5kb3dFeHRlbnNpb25CYXNpYy5jcHAgKi8sCkBAIC0xMTU2LDYgKzExNTksNyBAQAogCQkJCTkz
RjdFODZDMTREQzhFNEQwMEM4NEE5OSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRG
cmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MDk3N0ExMjU1NzFBQjAwMDgzNzU2IC8q
IFBhZ2VMb2FkQmFzaWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRDAwNDkxMkE5RkRGQTAw
RTczMkEzIC8qIFBhZ2VMb2FkRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTMzMTQwN0MxN0I0NDE5MDAwRjA4M0IxIC8qIERpZE5vdEhh
bmRsZUtleURvd24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxQjY1MDkxNkFERjlCMTAwN0FB
NUQ5IC8qIFBhZ2VWaXNpYmlsaXR5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3QTM0
RjAxNkFGNjc3MjAwQzI1MDFGIC8qIFBhZ2VWaXNpYmlsaXR5U3RhdGVXaXRoV2luZG93Q2hhbmdl
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUyRTVDRTQ2MTREMjFFOUQwMDNCMkJEOCAvKiBQYXJl
bnRGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mi9EaWROb3RIYW5kbGVLZXlEb3duLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkTm90SGFuZGxlS2V5RG93bi5jcHAJKHJldmlz
aW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkTm90SGFuZGxl
S2V5RG93bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0VGVzdC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisj
aW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CisKK3N0YXRpYyBib29sIGRpZEZpbmlzaFRlc3Q7CitzdGF0aWMgYm9vbCBkaWROb3RIYW5k
bGVLZXlEb3duRXZlbnQ7CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1Bh
Z2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopCit7Cit9CisKK3N0YXRp
YyB2b2lkIGRpZE5vdEhhbmRsZUtleUV2ZW50Q2FsbGJhY2soV0tQYWdlUmVmLCBXS05hdGl2ZUV2
ZW50UHRyIGV2ZW50LCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoVXRpbDo6aXNLZXlEb3duKGV2
ZW50KSkKKyAgICAgICAgZGlkTm90SGFuZGxlS2V5RG93bkV2ZW50ID0gdHJ1ZTsKKyAgICBkaWRG
aW5pc2hUZXN0ID0gdHJ1ZTsKK30KKworVEVTVChXZWJLaXQyLCBEaWROb3RIYW5kbGVLZXlEb3du
KQoreworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dChBZG9wdFdLLCBVdGls
OjpjcmVhdGVDb250ZXh0V2l0aEluamVjdGVkQnVuZGxlKCkpOworICAgIFBsYXRmb3JtV2ViVmll
dyB3ZWJWaWV3KGNvbnRleHQuZ2V0KCkpOworCisgICAgV0tQYWdlTG9hZGVyQ2xpZW50IGxvYWRl
ckNsaWVudDsKKyAgICBtZW1zZXQoJmxvYWRlckNsaWVudCwgMCwgc2l6ZW9mKGxvYWRlckNsaWVu
dCkpOworICAgIAorICAgIGxvYWRlckNsaWVudC52ZXJzaW9uID0gMDsKKyAgICBsb2FkZXJDbGll
bnQuZGlkRmluaXNoTG9hZEZvckZyYW1lID0gZGlkRmluaXNoTG9hZEZvckZyYW1lOworICAgIFdL
UGFnZVNldFBhZ2VMb2FkZXJDbGllbnQod2ViVmlldy5wYWdlKCksICZsb2FkZXJDbGllbnQpOwor
CisgICAgV0tQYWdlVUlDbGllbnQgdWlDbGllbnQ7CisgICAgbWVtc2V0KCZ1aUNsaWVudCwgMCwg
c2l6ZW9mKHVpQ2xpZW50KSk7CisKKyAgICB1aUNsaWVudC5kaWROb3RIYW5kbGVLZXlFdmVudCA9
IGRpZE5vdEhhbmRsZUtleUV2ZW50Q2FsbGJhY2s7CisgICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50
KHdlYlZpZXcucGFnZSgpLCAmdWlDbGllbnQpOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHVybChBZG9wdFdLLCBVdGlsOjpjcmVhdGVVUkxGb3JSZXNvdXJjZSgic2ltcGxlIiwgImh0bWwi
KSk7CisgICAgV0tQYWdlTG9hZFVSTCh3ZWJWaWV3LnBhZ2UoKSwgdXJsLmdldCgpKTsKKworICAg
IHdlYlZpZXcuc2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCk7CisKKyAgICBVdGlsOjpydW4oJmRp
ZEZpbmlzaFRlc3QpOworICAgIEVYUEVDVF9UUlVFKGRpZE5vdEhhbmRsZUtleURvd25FdmVudCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="230291"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>