<?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>138720</bug_id>
          
          <creation_ts>2014-11-13 17:45:38 -0800</creation_ts>
          <short_desc>Refactor iOS selection gestures</short_desc>
          <delta_ts>2014-11-19 13:59:50 -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>iOS 8.0</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="Enrica Casucci">enrica</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1048577</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-11-13 17:45:38 -0800</bug_when>
    <thetext>This bug track the work to refactor the selection gestures on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048580</commentid>
    <comment_count>1</comment_count>
      <attachid>241522</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-11-13 17:50:38 -0800</bug_when>
    <thetext>Created attachment 241522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048583</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-13 17:53:31 -0800</bug_when>
    <thetext>Attachment 241522 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:428:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:429:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:430:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:431:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:432:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:438:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:449:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:460:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:471:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:482:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 10 in 9 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>1048594</commentid>
    <comment_count>3</comment_count>
      <attachid>241522</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-13 18:33:51 -0800</bug_when>
    <thetext>Comment on attachment 241522
Patch

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

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:1786
&gt; +    _page-&gt;selectPositionAtPoint(WebCore::IntPoint(point), [selectionHandler](CallbackBase::Error error) {
&gt; +        selectionHandler();

No need to account for errors? (same for the ones below).

For example, if the WebProcess dies during a gesture, you may want to fallback safely?

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:2658
&gt; +    [self reloadInputViews];
&gt; +    

This change is odd. I would expect [reloadInputViews] to be the last thing done after updating the internal state.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:303
&gt; +    , m_selectionBaseIsStart(false)

This should be along the other state booleans of WebPage.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1617
&gt; +    m_selectionBaseIsStart = baseIsStart; // FIXME: do we need to flip this for RTL?
&gt; +    send(Messages::WebPageProxy::UnsignedCallback(baseIsStart, callbackID));

This does not look right.

There is one message just to set a boolean state on WebPage, but that boolean is only used when interpreting other messages.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1641
&gt; +            m_selectionBaseIsStart = !m_selectionBaseIsStart;

m_selectionBaseIsStart = false;

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1650
&gt; +            m_selectionBaseIsStart = !m_selectionBaseIsStart;

m_selectionBaseIsStart = true;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048803</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-11-14 11:24:08 -0800</bug_when>
    <thetext>&gt; No need to account for errors? (same for the ones below).
&gt; 
&gt; For example, if the WebProcess dies during a gesture, you may want to
&gt; fallback safely?
&gt; 
what is important is to call the completion handler, which will prevent any deadlocks.

&gt; &gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:2658
&gt; &gt; +    [self reloadInputViews];
&gt; &gt; +    
&gt; 
&gt; This change is odd. I would expect [reloadInputViews] to be the last thing
&gt; done after updating the internal state.
&gt; 
Actually it was wrong to call _startAssistingKeyboard before calling reloadInputViews.
It could affect how gesture recognizers are installed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:303
&gt; &gt; +    , m_selectionBaseIsStart(false)
&gt; 
&gt; This should be along the other state booleans of WebPage.
Ok, will do.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1617
&gt; &gt; +    m_selectionBaseIsStart = baseIsStart; // FIXME: do we need to flip this for RTL?
&gt; &gt; +    send(Messages::WebPageProxy::UnsignedCallback(baseIsStart, callbackID));
&gt; 
&gt; This does not look right.
&gt; 
&gt; There is one message just to set a boolean state on WebPage, but that
&gt; boolean is only used when interpreting other messages.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1641
&gt; &gt; +            m_selectionBaseIsStart = !m_selectionBaseIsStart;
&gt; 
&gt; m_selectionBaseIsStart = false;
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1650
&gt; &gt; +            m_selectionBaseIsStart = !m_selectionBaseIsStart;
&gt; 
&gt; m_selectionBaseIsStart = true;

At the beginning I need to know the direction of the gesture and I use it later to decide in which direction to extend the gesture and when to flip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049291</commentid>
    <comment_count>5</comment_count>
      <attachid>241522</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-17 13:07:46 -0800</bug_when>
    <thetext>Comment on attachment 241522
Patch

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

Ok, rs=me.

Still not a fan of m_selectionBaseIsStart.
What about an enum?

    enum class SelectorAnchor {
        Start,
        End
    }
? (assuming &quot;selection anchor&quot; does not have another meaning in the selection code)

&quot;beginSelectionInDirection&quot; -&gt; the name is also confusing. The &quot;InDirection&quot; is only loosely coupled with baseIsStart.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1616
&gt; +    m_selectionBaseIsStart = baseIsStart; // FIXME: do we need to flip this for RTL?

I would find out and fix it instead of having a FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049331</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-11-17 15:30:16 -0800</bug_when>
    <thetext>&gt; 
&gt; &quot;beginSelectionInDirection&quot; -&gt; the name is also confusing. The &quot;InDirection&quot;
&gt; is only loosely coupled with baseIsStart.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1616
&gt; &gt; +    m_selectionBaseIsStart = baseIsStart; // FIXME: do we need to flip this for RTL?
&gt; 
&gt; I would find out and fix it instead of having a FIXME.

I agree with you. I&apos;ll change it to be direction (Forward/Backward in the interface) and change the bool to an enum to indicate which end of the selection is moving.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049902</commentid>
    <comment_count>7</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-11-19 13:59:50 -0800</bug_when>
    <thetext>I&apos;ve addressed the last comments from Ben and landed the change.
http://trac.webkit.org/changeset/176337</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241522</attachid>
            <date>2014-11-13 17:50:38 -0800</date>
            <delta_ts>2014-11-17 13:07:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>selection-refactor.txt</filename>
            <type>text/plain</type>
            <size>23728</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjExMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTExLTEzICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgaU9TIHNlbGVj
dGlvbiBnZXN0dXJlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzODcyMAorICAgICAgICByZGFyOi8vcHJvYmxlbS8xODk2NDM1OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBmaXJzdCBz
dGVwIHRvd2FyZHMgcmVmYWN0b3JpbmcgdGhlIHNlbGVjdGlvbiBnZXN0dXJlcyBjb2RlLgorICAg
ICAgICBJdCBpbnRyb2R1Y2VzIG1vcmUgZ2VuZXJhbCBzZWxlY3Rpb24gbW92ZW1lbnQgZnVuY3Rp
b25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQKKyAgICAgICAgdGhlIGdlc3R1cmVzLgorCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICh0b1dLVGV4dEdyYW51bGFyaXR5
KToKKyAgICAgICAgKHRvV0tTZWxlY3Rpb25EaXJlY3Rpb24pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IHNlbGVjdFBvc2l0aW9uQXRQb2ludDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnk6aW5EaXJlY3Rpb246
ZnJvbVBvaW50OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IHNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHk6YXRQb2ludDpjb21wbGV0aW9uSGFuZGxlcjpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBiZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVwZGF0ZVNlbGVjdGlv
bldpdGhFeHRlbnRQb2ludDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBfc3RhcnRBc3Npc3RpbmdOb2RlOnVzZXJJc0ludGVyYWN0aW5nOmJsdXJQcmV2aW91
c05vZGU6dXNlck9iamVjdDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94
eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZWxlY3RUZXh0V2l0aEdy
YW51bGFyaXR5QXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2VsZWN0
UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpiZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
V2ViUGFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dmlz
aWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6YmVnaW5TZWxlY3Rpb25JbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludCk6CisKIDIwMTQtMTEt
MTMgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dGV4dCBtZW51cyBzaG91bGQgbm90IG9mZmVyIHRoZSAiRG93bmxvYWQgdmlkZW8iIG9wdGlvbiBm
b3IgdmlkZW9zIHRoYXQgY2Fubm90IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAkocmV2aXNpb24gMTc2MDc5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRHcmFudWxh
cml0eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlld1N0YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9WaXNpYmxlU2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTQyNCw2ICs0MjUsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFudWxhcml0
eSk7CiAgICAgdm9pZCBzZWxlY3RXb3JkQmFja3dhcmQoKTsKICAgICB2b2lkIG1vdmVTZWxlY3Rp
b25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jh
c2U6OkVycm9yKT4pOworICAgIHZvaWQgc2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgc3RkOjpm
dW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgc2VsZWN0UG9z
aXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0Qm91bmRh
cnlXaXRoRGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBXZWJDb3JlOjpUZXh0R3Jh
bnVsYXJpdHksIFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lk
IChDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgYmVnaW5TZWxlY3Rpb25JbkRpcmVj
dGlvbihib29sIGJhc2VJc1N0YXJ0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHVpbnQ2NF90LCBDYWxs
YmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHVpbnQ2NF90
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOwogICAgIHZvaWQgcmVxdWVzdEF1dG9jb3JyZWN0aW9u
RGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgc3RkOjpmdW5jdGlvbjx2
b2lkIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGNvbnN0IFN0cmluZyYsIGRv
dWJsZSwgdWludDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAgdm9pZCBhcHBseUF1
dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmln
aW5hbFRleHQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNl
OjpFcnJvcik+KTsKICAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
LmgJKHJldmlzaW9uIDE3NjA3OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDggQEAg
Y2xhc3MgV2ViUGFnZVByb3h5OwogdHlwZWRlZiB2b2lkICheVUlXS0F1dG9jb3JyZWN0aW9uQ29t
cGxldGlvbkhhbmRsZXIpKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0c0ZvcklucHV0KTsK
IHR5cGVkZWYgdm9pZCAoXlVJV0tBdXRvY29ycmVjdGlvbkNvbnRleHRIYW5kbGVyKShVSVdLQXV0
b2NvcnJlY3Rpb25Db250ZXh0ICphdXRvY29ycmVjdGlvbkNvbnRleHQpOwogdHlwZWRlZiB2b2lk
ICheVUlXS0RpY3RhdGlvbkNvbnRleHRIYW5kbGVyKShOU1N0cmluZyAqc2VsZWN0ZWRUZXh0LCBO
U1N0cmluZyAqYmVmb3JlVGV4dCwgTlNTdHJpbmcgKmFmdGVyVGV4dCk7Cit0eXBlZGVmIHZvaWQg
KF5VSVdLU2VsZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIpKHZvaWQpOwordHlwZWRlZiB2b2lkIChe
VUlXS1NlbGVjdGlvbldpdGhEaXJlY3Rpb25Db21wbGV0aW9uSGFuZGxlcikoQk9PTCBzZWxlY3Rp
b25FbmRJc01vdmluZyk7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogc3RydWN0IFdLQXV0b0NvcnJl
Y3Rpb25EYXRhIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAxNzYwNzkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTYzMiw2ICsxNjMyLDQwIEBAIHN0YXRpYyBpbmxpbmUgU2VsZWN0
aW9uSGFuZGxlUG9zaXRpb24gdG8KICAgICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgV2ViQ29yZTo6
VGV4dEdyYW51bGFyaXR5IHRvV0tUZXh0R3JhbnVsYXJpdHkoVUlUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpCit7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgVUlUZXh0
R3JhbnVsYXJpdHlDaGFyYWN0ZXI6CisgICAgICAgIHJldHVybiBDaGFyYWN0ZXJHcmFudWxhcml0
eTsKKyAgICBjYXNlIFVJVGV4dEdyYW51bGFyaXR5V29yZDoKKyAgICAgICAgcmV0dXJuIFdvcmRH
cmFudWxhcml0eTsKKyAgICBjYXNlIFVJVGV4dEdyYW51bGFyaXR5U2VudGVuY2U6CisgICAgICAg
IHJldHVybiBTZW50ZW5jZUdyYW51bGFyaXR5OworICAgIGNhc2UgVUlUZXh0R3JhbnVsYXJpdHlQ
YXJhZ3JhcGg6CisgICAgICAgIHJldHVybiBQYXJhZ3JhcGhHcmFudWxhcml0eTsKKyAgICBjYXNl
IFVJVGV4dEdyYW51bGFyaXR5TGluZToKKyAgICAgICAgcmV0dXJuIExpbmVHcmFudWxhcml0eTsK
KyAgICBjYXNlIFVJVGV4dEdyYW51bGFyaXR5RG9jdW1lbnQ6CisgICAgICAgIHJldHVybiBEb2N1
bWVudEdyYW51bGFyaXR5OworICAgIH0KK30KKworc3RhdGljIGlubGluZSBXZWJDb3JlOjpTZWxl
Y3Rpb25EaXJlY3Rpb24gdG9XS1NlbGVjdGlvbkRpcmVjdGlvbihVSVRleHREaXJlY3Rpb24gZGly
ZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBVSVRleHRMYXlv
dXREaXJlY3Rpb25Eb3duOgorICAgIGNhc2UgVUlUZXh0TGF5b3V0RGlyZWN0aW9uUmlnaHQ6Cisg
ICAgICAgIHJldHVybiBEaXJlY3Rpb25SaWdodDsKKyAgICBjYXNlIFVJVGV4dExheW91dERpcmVj
dGlvblVwOgorICAgIGNhc2UgVUlUZXh0TGF5b3V0RGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0
dXJuIERpcmVjdGlvbkxlZnQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gVUlUZXh0RGlyZWN0
aW9uIGlzIG5vdCBhbiBlbnVtLCBidXQgd2Ugb25seSB3YW50IHRvIGFjY2VwdCB2YWx1ZXMgZnJv
bSBVSVRleHRMYXlvdXREaXJlY3Rpb24uCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gRGlyZWN0aW9uUmlnaHQ7CisgICAgfQorfQorCiBzdGF0aWMgdm9pZCBz
ZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoV0tDb250ZW50VmlldyAqdmlldywgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2Vz
dHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikKIHsK
ICAgICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgewpAQCAtMTc0NCw2
ICsxNzc4LDU2IEBAIC0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHIKICAg
ICB9KTsKIH0KIAorLSAodm9pZClzZWxlY3RQb3NpdGlvbkF0UG9pbnQ6KENHUG9pbnQpcG9pbnQg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7Cisg
ICAgVUlXS1NlbGVjdGlvbkNvbXBsZXRpb25IYW5kbGVyIHNlbGVjdGlvbkhhbmRsZXIgPSBbY29t
cGxldGlvbkhhbmRsZXIgY29weV07CisgICAgCisgICAgX3BhZ2UtPnNlbGVjdFBvc2l0aW9uQXRQ
b2ludChXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIFtzZWxlY3Rpb25IYW5kbGVyXShDYWxsYmFj
a0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIHNlbGVjdGlvbkhhbmRsZXIoKTsKKyAgICAg
ICAgW3NlbGVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgfSk7Cit9CisKKy0gKHZvaWQpc2Vs
ZWN0UG9zaXRpb25BdEJvdW5kYXJ5OihVSVRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRp
cmVjdGlvbjooVUlUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbiBmcm9tUG9pbnQ6KENHUG9pbnQpcG9p
bnQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7
CisgICAgVUlXS1NlbGVjdGlvbkNvbXBsZXRpb25IYW5kbGVyIHNlbGVjdGlvbkhhbmRsZXIgPSBb
Y29tcGxldGlvbkhhbmRsZXIgY29weV07CisgICAgCisgICAgX3BhZ2UtPnNlbGVjdFBvc2l0aW9u
QXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCB0b1dLVGV4
dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwgdG9XS1NlbGVjdGlvbkRpcmVjdGlvbihkaXJlY3Rp
b24pLCBbc2VsZWN0aW9uSGFuZGxlcl0oQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAg
ICAgICBzZWxlY3Rpb25IYW5kbGVyKCk7CisgICAgICAgIFtzZWxlY3Rpb25IYW5kbGVyIHJlbGVh
c2VdOworICAgIH0pOworfQorCistICh2b2lkKXNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHk6KFVJ
VGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgVUlX
S1NlbGVjdGlvbkNvbXBsZXRpb25IYW5kbGVyIHNlbGVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlv
bkhhbmRsZXIgY29weV07CisKKyAgICBfcGFnZS0+c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0
UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCB0b1dLVGV4dEdyYW51bGFyaXR5KGdyYW51
bGFyaXR5KSwgW3NlbGVjdGlvbkhhbmRsZXJdKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsK
KyAgICAgICAgc2VsZWN0aW9uSGFuZGxlcigpOworICAgICAgICBbc2VsZWN0aW9uSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICB9KTsKK30KKworLSAodm9pZCliZWdpblNlbGVjdGlvbkluRGlyZWN0aW9u
OihCT09MKWJhc2VJc1N0YXJ0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIGVuZElz
TW92aW5nKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVJV0tTZWxlY3Rpb25XaXRoRGlyZWN0
aW9uQ29tcGxldGlvbkhhbmRsZXIgc2VsZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxl
ciBjb3B5XTsKKworICAgIF9wYWdlLT5iZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKGJhc2VJc1N0
YXJ0LCBbc2VsZWN0aW9uSGFuZGxlcl0oYm9vbCBlbmRJc01vdmluZywgQ2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikgeworICAgICAgICBzZWxlY3Rpb25IYW5kbGVyKGVuZElzTW92aW5nKTsKKyAg
ICAgICAgW3NlbGVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgfSk7Cit9CisKKy0gKHZvaWQp
dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50OihDR1BvaW50KXBvaW50IGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShCT09MIGVuZElzTW92aW5nKSljb21wbGV0aW9uSGFuZGxlcgorewor
ICAgIFVJV0tTZWxlY3Rpb25XaXRoRGlyZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIgc2VsZWN0aW9u
SGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKKyAgICAKKyAgICBfcGFnZS0+dXBk
YXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgW3Nl
bGVjdGlvbkhhbmRsZXJdKGJvb2wgZW5kSXNNb3ZpbmcsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJy
b3IpIHsKKyAgICAgICAgc2VsZWN0aW9uSGFuZGxlcihlbmRJc01vdmluZyk7CisgICAgICAgIFtz
ZWxlY3Rpb25IYW5kbGVyIHJlbGVhc2VdOworICAgIH0pOworfQorCiAtIChVVEYzMkNoYXIpX2No
YXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uCiB7CiAgICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmNoYXJhY3RlckJlZm9yZVNlbGVjdGlvbjsKQEAgLTI1NzAsNiArMjY1NCw4IEBAIC0g
KHZvaWQpX3N0YXJ0QXNzaXN0aW5nTm9kZTooY29uc3QgQXNzaXMKICAgICBpZiAoIVtzZWxmIGlz
Rmlyc3RSZXNwb25kZXJdKQogICAgICAgICBbc2VsZiBiZWNvbWVGaXJzdFJlc3BvbmRlcl07CiAK
KyAgICBbc2VsZiByZWxvYWRJbnB1dFZpZXdzXTsKKyAgICAKICAgICBzd2l0Y2ggKGluZm9ybWF0
aW9uLmVsZW1lbnRUeXBlKSB7CiAgICAgY2FzZSBJbnB1dFR5cGU6OlNlbGVjdDoKICAgICBjYXNl
IElucHV0VHlwZTo6RGF0ZVRpbWVMb2NhbDoKQEAgLTI1ODQsOCArMjY3MCw3IEBAIC0gKHZvaWQp
X3N0YXJ0QXNzaXN0aW5nTm9kZTooY29uc3QgQXNzaXMKICAgICAKICAgICBpZiAoaW5mb3JtYXRp
b24uaW5zaWRlRml4ZWRQb3NpdGlvbikKICAgICAgICAgW193ZWJWaWV3IF91cGRhdGVWaXNpYmxl
Q29udGVudFJlY3RzXTsKLQotICAgIFtzZWxmIHJlbG9hZElucHV0Vmlld3NdOworICAgIAogICAg
IFtzZWxmIF9kaXNwbGF5Rm9ybU5vZGVJbnB1dFZpZXddOwogCiAgICAgLy8gX2lucHV0UGVyaXBo
ZXJhbCBoYXMgYmVlbiBpbml0aWFsaXplZCBpbiBpbnB1dFZpZXcgY2FsbGVkIGJ5IHJlbG9hZElu
cHV0Vmlld3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94
eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbQkocmV2aXNpb24gMTc2MDc5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyMyw2ICs0MjMs
NjIgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmFwcGx5QXV0b2NvcnJlY3Rpb24oYwogICAgIHJldHVy
biBhdXRvY29ycmVjdGlvbkFwcGxpZWQ7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RU
ZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQoreworICAgIGlmICghaXNW
YWxpZCgpKSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpFcnJvcjo6
VW5rbm93bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEY6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIHN0
ZDo6bWFrZV91bmlxdWU8UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5VG9rZW4+
KG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkpKTsKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KHBvaW50LCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oZ3JhbnVsYXJpdHkpLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworfQor
Cit2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlv
bihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQor
eworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJh
Y2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEY6Om1vdmUoY2FsbGJh
Y2tGdW5jdGlvbiksIHN0ZDo6bWFrZV91bmlxdWU8UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3Vu
ZEFjdGl2aXR5VG9rZW4+KG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkpKTsKKyAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJl
Y3Rpb24ocG9pbnQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihncmFudWxhcml0eSksIHN0YXRpY19j
YXN0PHVpbnQzMl90PihkaXJlY3Rpb24pLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworfQorCit2
b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiBj
YWxsYmFja0Z1bmN0aW9uKQoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIGNhbGxi
YWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1
dChXVEY6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIHN0ZDo6bWFrZV91bmlxdWU8UHJvY2Vzc1Ro
cm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5VG9rZW4+KG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkp
KTsKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdFBvc2l0aW9u
QXRQb2ludChwb2ludCwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OmJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24oYm9vbCBiYXNlSXNTdGFydCwgc3RkOjpm
dW5jdGlvbjx2b2lkICh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVu
Y3Rpb24pCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlv
bigwLCBDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURjo6
bW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgc3RkOjptYWtlX3VuaXF1ZTxQcm9jZXNzVGhyb3R0bGVy
OjpCYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbj4obV9wcm9jZXNzLT50aHJvdHRsZXIoKSkpOworICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QmVnaW5TZWxlY3Rpb25JbkRpcmVj
dGlvbihiYXNlSXNTdGFydCwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQ
YWdlUHJveHk6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCBwb2ludCwgc3RkOjpmdW5jdGlvbjx2b2lkICh1aW50NjRfdCwgQ2FsbGJhY2tCYXNl
OjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbigwLCBDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
bV9jYWxsYmFja3MucHV0KFdURjo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgc3RkOjptYWtlX3Vu
aXF1ZTxQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbj4obV9wcm9jZXNz
LT50aHJvdHRsZXIoKSkpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
VXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KHBvaW50LCBjYWxsYmFja0lEKSwgbV9wYWdl
SUQpOworICAgIAorfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdERpY3RhdGlvbkNvbnRl
eHQoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKICAg
ICBpZiAoIWlzVmFsaWQoKSkgewpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTc2MDc5KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiAr
MzAwLDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IAogICAgICwg
bV9pc1Nob3dpbmdDb250ZXh0TWVudShmYWxzZSkKICNlbmRpZgogI2lmIFBMQVRGT1JNKElPUykK
KyAgICAsIG1fc2VsZWN0aW9uQmFzZUlzU3RhcnQoZmFsc2UpCiAgICAgLCBtX2ZpcnN0TGF5ZXJU
cmVlVHJhbnNhY3Rpb25JREFmdGVyRGlkQ29tbWl0TG9hZCgwKQogICAgICwgbV9oYXNSZWNlaXZl
ZFZpc2libGVDb250ZW50UmVjdHNBZnRlckRpZENvbW1pdExvYWQoZmFsc2UpCiAgICAgLCBtX3Nj
YWxlV2FzU2V0QnlVSVByb2Nlc3MoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE3NjA3OSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw2
ICs0ODcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKHVpbnQzMl90IGdy
YW51bGFyaXR5KTsKICAgICB2b2lkIHNlbGVjdFdvcmRCYWNrd2FyZCgpOwogICAgIHZvaWQgbW92
ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zmc2V0LCB1aW50NjRfdCBjYWxsYmFja0lEKTsK
KyAgICB2b2lkIHNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwor
ICAgIHZvaWQgc2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24s
IHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgc2VsZWN0UG9zaXRpb25BdFBvaW50KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBi
ZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKGJvb2wgYmFzZUlzU3RhcnQsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpOworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CisKICAgICB2b2lkIGVsZW1l
bnREaWRGb2N1cyhXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBlbGVtZW50RGlkQmx1cihXZWJD
b3JlOjpOb2RlKik7CiAgICAgdm9pZCByZXF1ZXN0RGljdGF0aW9uQ29udGV4dCh1aW50NjRfdCBj
YWxsYmFja0lEKTsKQEAgLTg3Niw2ICs4ODIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGxl
dGVTeW50aGV0aWNDbGljayhXZWJDb3JlOjpOb2RlKiBub2RlUmVzcG9uZGluZ1RvQ2xpY2ssIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uKTsKICAgICB2b2lkIHNlbmRUYXBIaWdo
bGlnaHRGb3JOb2RlSWZOZWNlc3NhcnkodWludDY0X3QgcmVxdWVzdElELCBXZWJDb3JlOjpOb2Rl
Kik7CiAgICAgdm9pZCByZXNldFRleHRBdXRvc2l6aW5nQmVmb3JlTGF5b3V0SWZOZWVkZWQoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBvbGRTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
IG5ld1NpemUpOworICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25J
bkZvY3VzZWROb2RlRm9yUG9pbnQoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwogI2VuZGlmCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBpbnRlcnByZXRLZXlFdmVudChjb25zdCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CkBA
IC0xMjM3LDYgKzEyNDQsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4g
bV9jdXJyZW50V29yZFJhbmdlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2ludGVyYWN0
aW9uTm9kZTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RJbnRlcmFjdGlvbkxvY2F0aW9u
OworICAgIGJvb2wgbV9zZWxlY3Rpb25CYXNlSXNTdGFydDsKIAogICAgIFJlZlB0cjxXZWJDb3Jl
OjpOb2RlPiBtX3BvdGVudGlhbFRhcE5vZGU7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3Bv
dGVudGlhbFRhcExvY2F0aW9uOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE3NjA3OSkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2Fj
eVJlY2VpdmVyIHsKICAgICBFeHRlbmRTZWxlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHkpCiAg
ICAgU2VsZWN0V29yZEJhY2t3YXJkKCkKICAgICBNb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJf
dCBvZmZzZXQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgU2VsZWN0VGV4dFdpdGhHcmFudWxh
cml0eUF0UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5
LCB1aW50NjRfdCBjYWxsYmFja0lEKQorICAgIFNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhE
aXJlY3Rpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1
aW50MzJfdCBkaXJlY3Rpb24sIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgU2VsZWN0UG9zaXRp
b25BdFBvaW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50NjRfdCBjYWxsYmFja0lEKQor
ICAgIEJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24oYm9vbCBiYXNlSXNTdGFydCwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKKyAgICBVcGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoV2ViQ29yZTo6
SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgUmVxdWVzdERpY3RhdGlv
bkNvbnRleHQodWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBSZXBsYWNlRGljdGF0ZWRUZXh0KFN0
cmluZyBvbGRUZXh0LCBTdHJpbmcgbmV3VGV4dCkKICAgICBSZXBsYWNlU2VsZWN0ZWRUZXh0KFN0
cmluZyBvbGRUZXh0LCBTdHJpbmcgbmV3VGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE3NjA3
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtODIwLDEwICs4MjAsOCBAQCBQYXNzUmVmUHRyPFJhbmdlPiBX
ZWJQYWdlOjpyYW5nZUZvckJsb2NrCiB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNv
bnN0IEludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1
cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAg
ICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKLSAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZp
ZXdUb0NvbnRlbnRzKHBvaW50KSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlz
aWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCk7CiAKLSAgICBJ
bnRQb2ludCBjb25zdHJhaW5lZFBvaW50ID0gbV9hc3Npc3RlZE5vZGUgPyBjb25zdHJhaW5Qb2lu
dChhZGp1c3RlZFBvaW50LCAmZnJhbWUsIG1fYXNzaXN0ZWROb2RlLmdldCgpKSA6IGFkanVzdGVk
UG9pbnQ7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQoY29uc3RyYWluZWRQb2ludCk7CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgp
KSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNr
KHBvaW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCAwLCBjYWxsYmFja0lEKSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTg1NywxMiArODU1LDExIEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0
aEdlc3R1cmUoY29uc3QgSW4KICAgICAgICAgICAgIC8vIERvbid0IGNyb3NzIGxpbmUgYm91bmRh
cmllcy4KICAgICAgICAgICAgIHJlc3VsdCA9IHBvc2l0aW9uOwogICAgICAgICB9IGVsc2UgaWYg
KHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBE
aXJlY3Rpb25Gb3J3YXJkKSkgewotICAgICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGxpZXMgd2l0
aGluIGEgd29yZC4KLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBXb3JkR3JhbnVsYXJpdHksIERpcmVj
dGlvbkZvcndhcmQpOwotCi0gICAgICAgICAgICByZXN1bHQgPSB3b3JkUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKTsKLSAgICAgICAgICAgIGlmIChkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMocG9zaXRp
b24sIHJlc3VsdCkgPiAxKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdvcmRSYW5nZS0+ZW5k
UG9zaXRpb24oKTsKKyAgICAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBsaWVzIHdpdGhpbiBhIHdv
cmQsIHdlIHdhbnQgdG8gc2VsZWN0IHRoZSB3b3JkLgorICAgICAgICAgICAgaWYgKGZyYW1lLnNl
bGVjdGlvbigpLmlzQ2FyZXQoKSkKKyAgICAgICAgICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1Rl
eHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25G
b3J3YXJkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSAmJiAocG9zaXRpb24gPCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpIHx8
IHBvc2l0aW9uID4gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpKQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHBvc2l0aW9uOwogICAgICAgICB9IGVsc2UgaWYgKGF0Qm91bmRh
cnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBXb3JkR3JhbnVsYXJpdHksIERpcmVjdGlvbkJhY2t3
YXJkKSkgewogICAgICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3
b3JkLgogICAgICAgICAgICAgcmVzdWx0ID0gcG9zaXRpb247CkBAIC0xNTU3LDYgKzE1NTQsMTEx
IEBAIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMKICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7CiB9CiAKK1Zp
c2libGVQb3NpdGlvbiBXZWJQYWdlOjp2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9p
bnQoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgSW50UG9pbnQg
YWRqdXN0ZWRQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhwb2ludCkpOwor
ICAgIEludFBvaW50IGNvbnN0cmFpbmVkUG9pbnQgPSBtX2Fzc2lzdGVkTm9kZSA/IGNvbnN0cmFp
blBvaW50KGFkanVzdGVkUG9pbnQsICZmcmFtZSwgbV9hc3Npc3RlZE5vZGUuZ2V0KCkpIDogYWRq
dXN0ZWRQb2ludDsKKyAgICByZXR1cm4gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29u
c3RyYWluZWRQb2ludCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sK
KyAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQpOworICAgIAorICAgIGlmIChwb3Np
dGlvbi5pc05vdE51bGwoKSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24p
LmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24s
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoZnJhbWUsIHBv
aW50KTsKKworICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSkgeworICAgICAgICBwb3NpdGlv
biA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgc3RhdGljX2Nhc3Q8
U2VsZWN0aW9uRGlyZWN0aW9uPihkaXJlY3Rpb24pKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uLmlz
Tm90TnVsbCgpKQorICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLmdl
dCgpLCBVUFNUUkVBTSwgdHJ1ZSk7CisgICAgfQorICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKK30KKwordm9pZCBXZWJQYWdlOjpzZWxl
Y3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9p
bnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIEZy
YW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1
c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCk7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
OworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5PihncmFu
dWxhcml0eSkpIHsKKyAgICBjYXNlIFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcmFuZ2UgPSB3
b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNlbnRlbmNlR3JhbnVsYXJpdHk6CisgICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRP
ZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBTZW50ZW5jZUdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3
YXJkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXJhZ3JhcGhHcmFudWxhcml0eToKKyAg
ICAgICAgcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFBh
cmFncmFwaEdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBEb2N1bWVudEdyYW51bGFyaXR5OgorICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3RBbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGlmIChyYW5nZSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKK30KKwordm9pZCBX
ZWJQYWdlOjpiZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKGJvb2wgYmFzZUlzU3RhcnQsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCit7CisgICAgbV9zZWxlY3Rpb25CYXNlSXNTdGFydCA9IGJhc2VJc1N0
YXJ0OyAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBmbGlwIHRoaXMgZm9yIFJUTD8KKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soYmFzZUlzU3RhcnQsIGNh
bGxiYWNrSUQpKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4
dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDY0X3QgY2FsbGJh
Y2tJRCkKK3sKKyAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2li
bGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQpOworCisgICAgaWYg
KHBvc2l0aW9uLmlzTnVsbCgpKSB7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6VW5zaWduZWRDYWxsYmFjayhmYWxzZSwgY2FsbGJhY2tJRCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHNlbGVjdGlvblN0YXJ0OworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQ7Cisg
ICAgCisgICAgaWYgKG1fc2VsZWN0aW9uQmFzZUlzU3RhcnQpIHsKKyAgICAgICAgc2VsZWN0aW9u
U3RhcnQgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAg
ICAgICAgc2VsZWN0aW9uRW5kID0gcG9zaXRpb247CisKKyAgICAgICAgaWYgKHBvc2l0aW9uIDw9
IHNlbGVjdGlvblN0YXJ0KSB7CisgICAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlv
blN0YXJ0LnByZXZpb3VzKCk7CisgICAgICAgICAgICBzZWxlY3Rpb25FbmQgPSBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CisgICAgICAgICAgICBtX3NlbGVjdGlv
bkJhc2VJc1N0YXJ0ID0gIW1fc2VsZWN0aW9uQmFzZUlzU3RhcnQ7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHBvc2l0aW9uOworICAgICAgICBzZWxl
Y3Rpb25FbmQgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocG9zaXRpb24gPj0gc2VsZWN0aW9uRW5kKSB7CisgICAgICAg
ICAgICBzZWxlY3Rpb25TdGFydCA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpOworICAgICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kLm5leHQo
KTsKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uQmFzZUlzU3RhcnQgPSAhbV9zZWxlY3Rpb25CYXNl
SXNTdGFydDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoc2VsZWN0aW9uU3RhcnQu
aXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uRW5kLmlzTm90TnVsbCgpKQorICAgICAgICByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rp
b25FbmQpOworICAgIGlmIChyYW5nZSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUpOworCisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKG1fc2VsZWN0aW9uQmFzZUlzU3Rh
cnQsIGNhbGxiYWNrSUQpKTsKK30KKwogdm9pZCBXZWJQYWdlOjpjb252ZXJ0U2VsZWN0aW9uUmVj
dHNUb1Jvb3RWaWV3KEZyYW1lVmlldyogdmlldywgVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiBzZWxl
Y3Rpb25SZWN0cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlbGVjdGlvblJlY3Rz
LnNpemUoKTsgKytpKSB7Cg==
</data>
<flag name="review"
          id="266401"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="266602"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>