<?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>65342</bug_id>
          
          <creation_ts>2011-07-28 13:50:00 -0700</creation_ts>
          <short_desc>Implement support for positioned floats in the FloatingObject list of RenderBlock</short_desc>
          <delta_ts>2011-07-31 07:12:05 -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>Layout and Rendering</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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>dbates</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>443644</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-07-28 13:50:00 -0700</bug_when>
    <thetext>Implement support for positioned floats in the FloatingObject list of RenderBlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443655</commentid>
    <comment_count>1</comment_count>
      <attachid>102299</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-07-28 14:26:55 -0700</bug_when>
    <thetext>Created attachment 102299
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443666</commentid>
    <comment_count>2</comment_count>
      <attachid>102303</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-07-28 15:04:30 -0700</bug_when>
    <thetext>Created attachment 102303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444042</commentid>
    <comment_count>3</comment_count>
      <attachid>102303</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-29 12:37:43 -0700</bug_when>
    <thetext>Comment on attachment 102303
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:1364
&gt; +        setChildNeedsLayout(true, false);
&gt; +        layoutBlock(false, pageLogicalHeight, PositionedFloatLayoutPass);
&gt; +    } else
&gt; +        setNeedsLayout(false);

We really need to updated these to not be bools at some point.

&gt; Source/WebCore/rendering/RenderBlock.cpp:1443
&gt; +        if (r-&gt;m_isDescendant &amp;&amp; !r-&gt;m_renderer-&gt;isPositioned())

It might be helpful to indicate in a comment why you can ignore positioned objects here (e.g. where it is actually handled).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444062</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-07-29 13:19:33 -0700</bug_when>
    <thetext>Landed in r92004.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444394</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-07-30 23:32:00 -0700</bug_when>
    <thetext>This broke the Chromium Linux Release Flexbox buildbot (non-core):
&lt;http://build.webkit.org/builders/Chromium%20Linux%20Release%20%28Flexbox%29/builds/1821/steps/compile-webkit/logs/stdio&gt;.

Committed build fix in &lt;http://trac.webkit.org/changeset/92072&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102299</attachid>
            <date>2011-07-28 14:26:55 -0700</date>
            <delta_ts>2011-07-28 15:04:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>32417</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxOTQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDctMjggIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NTM0MgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBwb3NpdGlv
bmVkIGZsb2F0cyBiZWluZyBwbGFjZWQgaW50byBhIFJlbmRlckJsb2NrJ3MgRmxvYXRpbmdPYmpl
Y3QgbGlzdCBhbmQgZm9yCisgICAgICAgIGNvcnJlY3QgcHJvcGFnYXRpb24gb2YgdGhvc2UgZmxv
YXRpbmcgb2JqZWN0cyBpbnRvIGRlc2NlbmRhbnRzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIFRoZSBw
b3NpdGlvbmVkIGZsb2F0IGxheW91dCBhbGdvcml0aG0gaXMgMi1wYXNzLiBZb3UgbGF5IG91dCB3
aXRob3V0IHRoZSBwb3NpdGlvbmVkIG9iamVjdHMsIGFuZCB0aGVuCisgICAgICAgIG9uY2UgdGhl
eSBoYXZlIGJlZW4gcGxhY2VkLCB5b3UgbGF5IG91dCBhZ2FpbiBhbmQgdXNlIHRoYXQgcGxhY2Vt
ZW50IHRvIGRldGVybWluZSB0aGUgZmxvYXQgcG9zaXRpb25zLgorICAgICAgICBsYXlvdXRCbG9j
ayBub3cgaGFzIGFuIGV4dHJhIHBhcmFtZXRlciB0byBpbmRpY2F0ZSB3aGljaCBsYXlvdXQgcGFz
cyB5b3UgYXJlIGluLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyZmxvd0Zyb21GbG9hdHMpOgorICAgICAgICBEb24ndCBhZGQgb3ZlcmZsb3cgZnJvbSBw
b3NpdGlvbmVkIGZsb2F0cyBldmVyLCBzaW5jZSB0aGUgcG9zaXRpb25pbmcgb3ZlcmZsb3cgZnVu
Y3Rpb24gdGFrZXMgY2FyZSBvZiB0aGF0CisgICAgICAgIGFscmVhZHkuCisKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKToKKyAgICAgICAgSW5jbHVkZSBw
b3NpdGlvbmVkIGZsb2F0cyBpbiB0aGUgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tIHdlIGxvb2sg
YXQgc28gdGhhdCBvdmVyaGFuZyBpcyBjb21wdXRlZCBwcm9wZXJseS4KKworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNpbXBsaWZpZWRMYXlvdXQpOgorICAgICAgICBJZiBsYXlvdXRQ
b3NpdGlvbmVkT2JqZWN0cyBpbmRpY2F0ZXMgdGhhdCBhIHBvc2l0aW9uZWQgZmxvYXQgbW92ZWQs
IHRoZW4gd2UgY2FuJ3QgZG8gc2ltcGxpZmllZCBsYXlvdXQuIEJhaWwKKyAgICAgICAgaW5zdGVh
ZCBhbmQgZG8gYSBmdWxsIGxheW91dC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnBvc2l0aW9uZWRGbG9hdHNOZWVkUmVsYXlvdXQpOgorICAgICAgICBIZWxwZXIgZm9yIGxheW91
dEJsb2NrIGluIG9yZGVyIHRvIGJ5cGFzcyB0aGUgMi1wYXNzIG1vZGVsIGlmIHdlIGNhbiBkZXRl
Y3QgdGhhdCBub25lIG9mIHRoZSBwb3NpdGlvbmVkIG9iamVjdHMKKyAgICAgICAgd2lsbCBhY3R1
YWxseSBuZWVkIHRvIGxheSBvdXQgYWdhaW4uIFRoaXMgYWxsb3dzIGluY3JlbWVudGFsIGxheW91
dCB0byBub3QgYWx3YXlzIGZhdWx0IGJhY2sgdG8gMi1wYXNzIGFzIG5vcm1hbAorICAgICAgICBm
bG93IGNvbnRlbnQgc3RyZWFtcyBpbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKToKKyAgICAgICAgTW9kaWZpZWQgdG8gcmV0dXJuIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBwb3NpdGlvbmVkIGZsb2F0IGdvdCBhIGxheW91
dC4gSWYgc28sIHdlIHdpbGwgbGF5IG91dCBhZ2FpbgorICAgICAgICBvbmNlIG91ciBwb3NpdGlv
bmVkIG9iamVjdHMgYXJlIHBsYWNlZC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QgY2Fu
IG5vdyBoYW5kbGUgcG9zaXRpb25lZCBvYmplY3RzIGJlaW5nIGluc2VydGVkLgorCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICBwb3Np
dGlvbk5ld0Zsb2F0cyBkb2Vzbid0IGF0dGVtcHQgdG8gcG9zaXRpb24gdGhpcyBuZXcgdHlwZSBv
ZiBmbG9hdC4gSXQgb25seSBoYW5kbGVzIGxlZnQvcmlnaHQgZmxvYXRzLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkUG9zaXRpb25lZEZsb2F0cyk6CisgICAgICAgIEhlbHBl
ciB0byBhZGQgaW4gdGhlIGZsb2F0aW5nIG9iamVjdHMgZm9yIHBvc2l0aW9uZWQgZmxvYXRzLiBU
aGlzIGlzIHVzZWQgaW5zdGVhZCBvZiBwb3NpdGlvbk5ld0Zsb2F0cyBhbmQKKyAgICAgICAganVz
dCB3YWxrcyB0aGUgcG9zaXRpb25lZCBvYmplY3RzIGluc3RlYWQuCisKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyk6CisgICAgICAgIGNsZWFyRmxvYXRzIG5vdyBo
YW5kbGVzIGFkZGluZyBpbiBwb3NpdGlvbmVkIGZsb2F0cyBpZiB0aGUgbGF5b3V0IHBhc3Mgc2F5
cyB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6Om1hcmdpbkxvZ2ljYWxMZWZ0Rm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Om1hcmdpbkxvZ2ljYWxSaWdodEZvckNoaWxkKToKKyAgICAgICAgTmV3IGhlbHBlcnMg
dXNlZCBieSBhZGRQb3NpdGlvbmVkRmxvYXRzLgorICAgIAorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW5jcmVhc2VPYmplY3RzQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6ZGVjcmVhc2VPYmplY3Rz
Q291bnQpOgorICAgICAgICBNYWtlIHN1cmUgdGhlIG9iamVjdCBjb3VudCB0cmFja2luZyBoYW5k
bGVzIHBvc2l0aW9uZWQgZmxvYXRzIGFzIHdlbGwgYXMgbGVmdC9yaWdodCBmbG9hdHMuCisgICAg
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bG9naWNhbExlZnRGb3JDaGlsZCk6CisgICAgICAgIE5ldyBoZWxwZXIgdXNl
ZCBieSBhZGRQb3NpdGlvbmVkRmxvYXRzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3Q6OkZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgQ2hhbmdlIHRoZSBj
b25zdHJ1Y3RvciB0byB0YWtlIHRoZSBSZW5kZXJTdHlsZSBlbnVtLiBUaGlzIG1ha2VzIHRoZSBj
b25zdHJ1Y3Rpb24gc2ltcGxlci4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhh
c1Bvc2l0aW9uZWRGbG9hdHMpOgorICAgICAgICBBIGJpdCB0cmFja3Mgd2hldGhlciBvciBub3Qg
YSBibG9jayBoYXMgcG9zaXRpb25lZCBmbG9hdHMgaW4gaXRzIHBvc2l0aW9uZWQgb2JqZWN0cyBs
aXN0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9h
dHMpOgorICAgICAgICBNb2RpZmllZCB0byBpbmNsdWRlIHBvc2l0aW9uZWQgZmxvYXRzLgorCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKToK
KyAgICAgICAgVGhpcyBmdW5jdGlvbiBleGNsdWRlcyBwb3NpdGlvbmVkIGZsb2F0cyBieSBkZWZh
dWx0LCBzbyB0aGF0IHBsYWNlcyB0aGF0IC0gZm9yIGV4YW1wbGUgLSBleHBhbmQgdG8KKyAgICAg
ICAgZW5jb21wYXNzIHRoZWlyIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSB3b24ndCBhY2NpZGVu
dGFsbHkgZXhwYW5kIHRvIGVuY29tcGFzcyBwb3NpdGlvbmVkIG9iamVjdHMuCisKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQ
b3NpdGlvbmVkRmxvYXRzKToKKyAgICAgICAgQSBuZXcgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyBw
b3NpdGlvbmVkIGZsb2F0cyBmb3IgY2FsbGVycyB0aGF0IGNhcmUuCisKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpoYXNQb3NpdGlvbmVk
T2JqZWN0cyk6CisgICAgICAgIFRoZSBvYmplY3QgY291bnQgdHJhY2tpbmcgZm9yIHBvc2l0aW9u
ZWQgZmxvYXRzIHdpdGhpbiBhIGJsb2NrJ3MgRmxvYXRpbmdPYmplY3RzIGxpc3QuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6dXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKToKKyAgICAgICAgTWFrZSBzdXJlIGlzRmxv
YXRpbmcgaXMgc2V0IGV2ZW4gaWYgaXNQb3NpdGlvbmVkIGlzIGFsc28gc2V0IGZvciB0aGUgcG9z
aXRpb25lZCBmbG9hdCBjYXNlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxl
eGlibGVCb3g6OmxheW91dEJsb2NrKToKKyAgICAgICAgTW9kaWZpZWQgdG8gZG8gdGhlIGV4dHJh
IGxheW91dCBwYXNzIGlmIG5lZWRlZC4KKwogMjAxMS0wNy0yOCAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY1MzIzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHJldmlzaW9uIDkxNzY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2NSw3ICsxMTY1LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0KCkKICAgICAgICAgY2xlYXJMYXlvdXRPdmVyZmxvdygpOwogfQogCi12
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBw
YWdlTG9naWNhbEhlaWdodCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0LCBCbG9ja0xheW91dFBhc3MgbGF5
b3V0UGFzcykKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKQEAgLTExODgsNyArMTE4
OCwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYg
KG9sZFdpZHRoICE9IGxvZ2ljYWxXaWR0aCgpIHx8IG9sZENvbHVtbldpZHRoICE9IGRlc2lyZWRD
b2x1bW5XaWR0aCgpKQogICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAotICAgIGNs
ZWFyRmxvYXRzKCk7CisgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkIGFib3V0IG91ciBmbG9hdGlu
ZyBwb3NpdGlvbmVkIG9iamVjdHMsIGxldCdzIGdvIGFoZWFkIGFuZCB0cnkgdG8gcGxhY2UgdGhl
bSBhcworICAgIC8vIGZsb2F0cyB0byBhdm9pZCBkb2luZyB0d28gcGFzc2VzLgorICAgIEJsb2Nr
TGF5b3V0UGFzcyBmbG9hdHNMYXlvdXRQYXNzID0gbGF5b3V0UGFzczsKKyAgICBpZiAoZmxvYXRz
TGF5b3V0UGFzcyA9PSBOb3JtYWxMYXlvdXRQYXNzICYmICFyZWxheW91dENoaWxkcmVuICYmICFw
b3NpdGlvbmVkRmxvYXRzTmVlZFJlbGF5b3V0KCkpCisgICAgICAgIGZsb2F0c0xheW91dFBhc3Mg
PSBQb3NpdGlvbmVkRmxvYXRMYXlvdXRQYXNzOworICAgIGNsZWFyRmxvYXRzKGZsb2F0c0xheW91
dFBhc3MpOwogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAg
IHNldExvZ2ljYWxIZWlnaHQoMCk7CkBAIC0xMjgyLDcgKzEyODcsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmICFjaGls
ZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxvY2soY2hpbGQpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpICsgYmxvY2stPmxvZ2ljYWxU
b3AoKSA+IG5ld0hlaWdodCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5sb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkgKyBibG9jay0+bG9n
aWNhbFRvcCgpID4gbmV3SGVpZ2h0KQogICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3Zlcmhh
bmdpbmdGbG9hdHMoYmxvY2ssIC1ibG9jay0+bG9naWNhbExlZnQoKSwgLWJsb2NrLT5sb2dpY2Fs
VG9wKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMjky
LDcgKzEyOTcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAg
ICAgaWYgKHByZXZpb3VzSGVpZ2h0ICE9IG5ld0hlaWdodCkKICAgICAgICAgcmVsYXlvdXRDaGls
ZHJlbiA9IHRydWU7CiAKLSAgICBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxk
cmVuIHx8IGlzUm9vdCgpKTsKKyAgICBib29sIG5lZWRBbm90aGVyTGF5b3V0UGFzcyA9IGxheW91
dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4gfHwgaXNSb290KCkpOwogCiAgICAg
Ly8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRyZW4gKHVubGVzcyB3ZSdyZSBtdWx0aS1jb2x1bW4s
IHNpbmNlIGluIHRoYXQgY2FzZSBhbGwgb3VyIGNoaWxkIG92ZXJmbG93IGlzIGNsaXBwZWQgYW55
d2F5KS4KICAgICBjb21wdXRlT3ZlcmZsb3cob2xkQ2xpZW50QWZ0ZXJFZGdlKTsKQEAgLTEzNTAs
NyArMTM1NSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAg
ICAgICAgICAgICAgICAgcmVwYWludFJlY3RhbmdsZShyZWZsZWN0ZWRSZWN0KHJlcGFpbnRSZWN0
KSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworICAgIAor
ICAgIGlmIChuZWVkQW5vdGhlckxheW91dFBhc3MgJiYgbGF5b3V0UGFzcyA9PSBOb3JtYWxMYXlv
dXRQYXNzKSB7CisgICAgICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAg
ICAgICBsYXlvdXRCbG9jayhmYWxzZSwgcGFnZUxvZ2ljYWxIZWlnaHQsIFBvc2l0aW9uZWRGbG9h
dExheW91dFBhc3MpOworICAgIH0gZWxzZQorICAgICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7
CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUNoaWxkcmVuKCkKQEAgLTE0
MjksNyArMTQzOSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cygK
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9ICppdDsKLSAgICAgICAgaWYgKHItPm1faXNEZXNjZW5kYW50KQorICAgICAgICBpZiAo
ci0+bV9pc0Rlc2NlbmRhbnQgJiYgIXItPm1fcmVuZGVyZXItPmlzUG9zaXRpb25lZCgpKQogICAg
ICAgICAgICAgYWRkT3ZlcmZsb3dGcm9tQ2hpbGQoci0+bV9yZW5kZXJlciwgSW50U2l6ZSh4UG9z
aXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRp
bmdNYXJnaW4ocikpKTsKICAgICB9CiAgICAgcmV0dXJuOwpAQCAtMTk4MSw3ICsxOTkxLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIGVsc2UgaWYgKCFj
aGlsZC0+YXZvaWRzRmxvYXRzKCkgfHwgY2hpbGQtPnNocmlua1RvQXZvaWRGbG9hdHMoKSkgewog
ICAgICAgICAvLyBJZiBhbiBlbGVtZW50IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5j
ZSBvZiBmbG9hdHMsIHRoZW4gYWx3YXlzIG1hcmsgaXQgZm9yCiAgICAgICAgIC8vIGxheW91dC4K
LSAgICAgICAgaW50IGZiID0gbWF4KHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBsb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b20oKSk7CisgICAgICAgIGludCBmYiA9IG1heChwcmV2aW91c0Zsb2F0
TG9naWNhbEJvdHRvbSwgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tSW5jbHVkaW5nUG9zaXRpb25l
ZEZsb2F0cygpKTsKICAgICAgICAgaWYgKGZiID4gbG9naWNhbFRvcEVzdGltYXRlKQogICAgICAg
ICAgICAgbWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0cyA9IHRydWU7CiAgICAgfQpAQCAtMTk5MCw3
ICsyMDAwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAg
ICAgICBpZiAobWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0cykKICAgICAgICAgICAgIGNoaWxkUmVu
ZGVyQmxvY2stPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAg
ICAgaWYgKCFjaGlsZC0+aXNXcml0aW5nTW9kZVJvb3QoKSkKLSAgICAgICAgICAgIHByZXZpb3Vz
RmxvYXRMb2dpY2FsQm90dG9tID0gbWF4KHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBvbGRM
b2dpY2FsVG9wICsgY2hpbGRSZW5kZXJCbG9jay0+bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkp
OworICAgICAgICAgICAgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20gPSBtYXgocHJldmlvdXNG
bG9hdExvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxUb3AgKyBjaGlsZFJlbmRlckJsb2NrLT5sb3dl
c3RGbG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkpOwogICAgIH0K
IAogICAgIGlmICghY2hpbGQtPm5lZWRzTGF5b3V0KCkpCkBAIC0yMTU5LDggKzIxNjksOCBAQCBi
b29sIFJlbmRlckJsb2NrOjpzaW1wbGlmaWVkTGF5b3V0KCkKICAgICAgICAgc2ltcGxpZmllZE5v
cm1hbEZsb3dMYXlvdXQoKTsKIAogICAgIC8vIExheSBvdXQgb3VyIHBvc2l0aW9uZWQgb2JqZWN0
cyBpZiBvdXIgcG9zaXRpb25lZCBjaGlsZCBiaXQgaXMgc2V0LgotICAgIGlmIChwb3NDaGlsZE5l
ZWRzTGF5b3V0KCkpCi0gICAgICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKGZhbHNlKTsKKyAg
ICBpZiAocG9zQ2hpbGROZWVkc0xheW91dCgpICYmIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKGZh
bHNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiBhIHBvc2l0aW9uZWQgZmxvYXQgaXMg
Y2F1c2luZyBvdXIgbm9ybWFsIGZsb3cgdG8gY2hhbmdlLCB0aGVuIHdlIGhhdmUgdG8gYmFpbCBh
bmQgZG8gYSBmdWxsIGxheW91dC4KIAogICAgIC8vIFJlY29tcHV0ZSBvdXIgb3ZlcmZsb3cgaW5m
b3JtYXRpb24uCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGJ5IGNvbXB1
dGluZyBhIHRlbXBvcmFyeSBvdmVyZmxvdyBvYmplY3QgZnJvbSBsYXlvdXRQb3NpdGlvbmVkT2Jq
ZWN0cyBhbmQgb25seQpAQCAtMjE4MCwxNCArMjE5MCw0MSBAQCBib29sIFJlbmRlckJsb2NrOjpz
aW1wbGlmaWVkTGF5b3V0KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQorYm9vbCBS
ZW5kZXJCbG9jazo6cG9zaXRpb25lZEZsb2F0c05lZWRSZWxheW91dCgpCit7CisgICAgaWYgKCFo
YXNQb3NpdGlvbmVkRmxvYXRzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBS
ZW5kZXJCb3gqIHBvc2l0aW9uZWRPYmplY3Q7CisgICAgSXRlcmF0b3IgZW5kID0gbV9wb3NpdGlv
bmVkT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9i
amVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBwb3NpdGlvbmVkT2Jq
ZWN0ID0gKml0OworICAgICAgICBpZiAoIXBvc2l0aW9uZWRPYmplY3QtPmlzRmxvYXRpbmcoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChwb3NpdGlvbmVkT2JqZWN0LT5u
ZWVkc0xheW91dCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHBv
c2l0aW9uZWRPYmplY3QtPnN0eWxlKCktPmhhc1N0YXRpY0Jsb2NrUG9zaXRpb24oaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkgJiYgcG9zaXRpb25lZE9iamVjdC0+cGFyZW50KCkgIT0gdGhpcyAm
JiBwb3NpdGlvbmVkT2JqZWN0LT5wYXJlbnQoKS0+aXNCbG9ja0Zsb3coKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKCkgfHwgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnZUxvZ2ljYWxIZWlnaHQoKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2Fs
T2Zmc2V0KGxvZ2ljYWxUb3AoKSkgIT0gcGFnZUxvZ2ljYWxPZmZzZXQoKSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4pCiB7CiAgICAgaWYgKCFtX3Bvc2l0aW9uZWRPYmplY3RzKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgaWYgKGhhc0NvbHVtbnMoKSkKICAg
ICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5jbGVhclBhZ2luYXRpb25JbmZvcm1hdGlvbigp
OyAvLyBQb3NpdGlvbmVkIG9iamVjdHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb2x1bW4gZmxvdywg
c28gdGhleSBkb24ndCBwYWdpbmF0ZSB3aXRoIHRoZSBjb2x1bW5zLgogCisgICAgYm9vbCBkaWRG
bG9hdGluZ0JveFJlbGF5b3V0ID0gZmFsc2U7CisKICAgICBSZW5kZXJCb3gqIHI7CiAgICAgSXRl
cmF0b3IgZW5kID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgZm9yIChJdGVyYXRv
ciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpA
QCAtMjIwNSw2ICsyMjQyLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRP
YmplY3QKICAgICAgICAgCiAgICAgICAgIGlmICghci0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAg
ICAgIHItPm1hcmtGb3JQYWdpbmF0aW9uUmVsYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gRklYTUU6IFRlY2huaWNhbGx5IHdlIGNvdWxkIGNoZWNrIHRoZSBvbGQgcGxhY2Vt
ZW50IGFuZCB0aGUgbmV3IHBsYWNlbWVudCBvZiB0aGUgYm94IGFuZCBvbmx5IGRvIGludmFsaWRh
dGUgaWYKKyAgICAgICAgLy8gdGhlIG1hcmdpbiBib3ggb2YgdGhlIG9iamVjdCBhY3R1YWxseSBj
aGFuZ2VkLgorICAgICAgICBpZiAoci0+bmVlZHNMYXlvdXQoKSAmJiByLT5pc0Zsb2F0aW5nKCkp
CisgICAgICAgICAgICBkaWRGbG9hdGluZ0JveFJlbGF5b3V0ID0gdHJ1ZTsKIAogICAgICAgICAv
LyBXZSBkb24ndCBoYXZlIHRvIGRvIGEgZnVsbCBsYXlvdXQuICBXZSBqdXN0IGhhdmUgdG8gdXBk
YXRlIG91ciBwb3NpdGlvbi4gVHJ5IHRoYXQgZmlyc3QuIElmIHdlIGhhdmUgc2hyaW5rLXRvLWZp
dCB3aWR0aAogICAgICAgICAvLyBhbmQgd2UgaGl0IHRoZSBhdmFpbGFibGUgd2lkdGggY29uc3Ry
YWludCwgdGhlIGxheW91dElmTmVlZGVkKCkgd2lsbCBjYXRjaCBpdCBhbmQgZG8gYSBmdWxsIGxh
eW91dC4KQEAgLTIyMTUsNiArMjI1Nyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0
aW9uZWRPYmplY3QKICAgICAKICAgICBpZiAoaGFzQ29sdW1ucygpKQogICAgICAgICB2aWV3KCkt
PmxheW91dFN0YXRlKCktPm1fY29sdW1uSW5mbyA9IGNvbHVtbkluZm8oKTsgLy8gRklYTUU6IEtp
bmQgb2YgZ3Jvc3MuIFdlIGp1c3QgcHV0IHRoaXMgYmFjayBpbnRvIHRoZSBsYXlvdXQgc3RhdGUg
c28gdGhhdCBwb3AoKSB3aWxsIHdvcmsuCisgICAgICAgIAorICAgIHJldHVybiBkaWRGbG9hdGlu
Z0JveFJlbGF5b3V0OwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjptYXJrUG9zaXRpb25lZE9iamVj
dHNGb3JMYXlvdXQoKQpAQCAtMzE1NiwyMCArMzIwMCwyMiBAQCBSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3QqIFJlbmRlckJsb2NrCiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwgb2JqZWN0
IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CiAKLSAgICBGbG9hdGluZ09iamVjdCogbmV3
T2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KG8tPnN0eWxlKCktPmZsb2F0aW5nKCkgPT0gTGVmdEZs
b2F0ID8gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCA6IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJp
Z2h0KTsKKyAgICBGbG9hdGluZ09iamVjdCogbmV3T2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KG8t
PnN0eWxlKCktPmZsb2F0aW5nKCkpOwogICAgIAogICAgIC8vIE91ciBsb2NhdGlvbiBpcyBpcnJl
bGV2YW50IGlmIHdlJ3JlIHVuc3BsaXR0YWJsZSBvciBubyBwYWdpbmF0aW9uIGlzIGluIGVmZmVj
dC4KICAgICAvLyBKdXN0IGdvIGFoZWFkIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KLSAgICBib29s
IGlzQ2hpbGRSZW5kZXJCbG9jayA9IG8tPmlzUmVuZGVyQmxvY2soKTsKLSAgICBpZiAoaXNDaGls
ZFJlbmRlckJsb2NrICYmICFvLT5uZWVkc0xheW91dCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKCkpCi0gICAgICAgIG8tPnNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOwotICAgICAgICAKLSAgICBib29sIGFmZmVjdGVkQnlQYWdpbmF0
aW9uID0gaXNDaGlsZFJlbmRlckJsb2NrICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdl
TG9naWNhbEhlaWdodDsKLSAgICBpZiAoIWFmZmVjdGVkQnlQYWdpbmF0aW9uIHx8IGlzV3JpdGlu
Z01vZGVSb290KCkpIC8vIFdlIGFyZSB1bnNwbGl0dGFibGUgaWYgd2UncmUgYSBibG9jayBmbG93
IHJvb3QuCi0gICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IG8tPmNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgby0+Y29tcHV0ZUJsb2NrRGlyZWN0
aW9uTWFyZ2lucyh0aGlzKTsKKyAgICBpZiAoIW8tPmlzUG9zaXRpb25lZCgpKSB7CisgICAgICAg
IGJvb2wgaXNDaGlsZFJlbmRlckJsb2NrID0gby0+aXNSZW5kZXJCbG9jaygpOworICAgICAgICBp
ZiAoaXNDaGlsZFJlbmRlckJsb2NrICYmICFvLT5uZWVkc0xheW91dCgpICYmIHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKCkpCisgICAgICAgICAgICBvLT5z
ZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICBi
b29sIGFmZmVjdGVkQnlQYWdpbmF0aW9uID0gaXNDaGlsZFJlbmRlckJsb2NrICYmIHZpZXcoKS0+
bGF5b3V0U3RhdGUoKS0+bV9wYWdlTG9naWNhbEhlaWdodDsKKyAgICAgICAgaWYgKCFhZmZlY3Rl
ZEJ5UGFnaW5hdGlvbiB8fCBpc1dyaXRpbmdNb2RlUm9vdCgpKSAvLyBXZSBhcmUgdW5zcGxpdHRh
YmxlIGlmIHdlJ3JlIGEgYmxvY2sgZmxvdyByb290LgorICAgICAgICAgICAgby0+bGF5b3V0SWZO
ZWVkZWQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvLT5jb21wdXRlTG9naWNhbFdp
ZHRoKCk7CisgICAgICAgICAgICBvLT5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMp
OworICAgICAgICB9CiAgICAgfQogICAgIHNldExvZ2ljYWxXaWR0aEZvckZsb2F0KG5ld09iaiwg
bG9naWNhbFdpZHRoRm9yQ2hpbGQobykgKyBtYXJnaW5TdGFydEZvckNoaWxkKG8pICsgbWFyZ2lu
RW5kRm9yQ2hpbGQobykpOwogCkBAIC0zMjc2LDggKzMzMjIsOSBAQCBib29sIFJlbmRlckJsb2Nr
Ojpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OwogICAgICAgICAvLyBU
aGUgY29udGFpbmluZyBibG9jayBpcyByZXNwb25zaWJsZSBmb3IgcG9zaXRpb25pbmcgZmxvYXRz
LCBzbyBpZiB3ZSBoYXZlIGZsb2F0cyBpbiBvdXIKLSAgICAgICAgLy8gbGlzdCB0aGF0IGNvbWUg
ZnJvbSBzb21ld2hlcmUgZWxzZSwgZG8gbm90IGF0dGVtcHQgdG8gcG9zaXRpb24gdGhlbS4KLSAg
ICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKSAh
PSB0aGlzKQorICAgICAgICAvLyBsaXN0IHRoYXQgY29tZSBmcm9tIHNvbWV3aGVyZSBlbHNlLCBk
byBub3QgYXR0ZW1wdCB0byBwb3NpdGlvbiB0aGVtLiBBbHNvIGRvbid0IGF0dGVtcHQgdG8gaGFu
ZGxlCisgICAgICAgIC8vIHBvc2l0aW9uZWQgZmxvYXRzLCBzaW5jZSB0aGUgcG9zaXRpb25pbmcg
bGF5b3V0IGNvZGUgaGFuZGxlcyB0aG9zZS4KKyAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5y
ZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKSAhPSB0aGlzIHx8IGZsb2F0aW5nT2JqZWN0LT5y
ZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIFJlbmRlckJveCogY2hpbGRCb3ggPSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKQEAg
LTM1OTIsMTQgKzM2MzksNDIgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0xpbmVzRGlydHlJbkJs
b2NrUgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQordm9pZCBS
ZW5kZXJCbG9jazo6YWRkUG9zaXRpb25lZEZsb2F0cygpCiB7CisgICAgSXRlcmF0b3IgZW5kID0g
bV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9z
aXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5k
ZXJCb3gqIHBvc2l0aW9uZWRPYmplY3QgPSAqaXQ7CisgICAgICAgIGlmICghcG9zaXRpb25lZE9i
amVjdC0+aXNGbG9hdGluZygpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQVNT
RVJUKCFwb3NpdGlvbmVkT2JqZWN0LT5uZWVkc0xheW91dCgpKTsKKworICAgICAgICAvLyBJZiB3
ZSdyZSBhIHBvc2l0aW9uZWQgZmxvYXQsIHRoZW4gd2UgbmVlZCB0byBpbnNlcnQgb3Vyc2VsdmVz
IGFzIGEgZmxvYXRpbmcgb2JqZWN0IGFsc28uIFdlIG9ubHkgZG8KKyAgICAgICAgLy8gdGhpcyBh
ZnRlciB0aGUgcG9zaXRpb25lZCBvYmplY3QgaGFzIHJlY2VpdmVkIGEgbGF5b3V0LCBzaW5jZSBv
dGhlcndpc2UgdGhlIGRpbWVuc2lvbnMgYW5kIHBsYWNlbWVudAorICAgICAgICAvLyB3b24ndCBi
ZSBjb3JyZWN0LgorICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpbnNl
cnRGbG9hdGluZ09iamVjdChwb3NpdGlvbmVkT2JqZWN0KTsKKyAgICAgICAgc2V0TG9naWNhbExl
ZnRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbExlZnRGb3JDaGlsZChwb3NpdGlvbmVk
T2JqZWN0KSAtIG1hcmdpbkxvZ2ljYWxMZWZ0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOwor
ICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3BG
b3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9u
ZWRPYmplY3QpKTsKKyAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2Jq
ZWN0LCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5CZWZv
cmVGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQocG9zaXRp
b25lZE9iamVjdCkpOworICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7
CisgICAgICAgIAorICAgICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSB0cnVlOworICAgIH0K
K30KKwordm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoQmxvY2tMYXlvdXRQYXNzIGxheW91
dFBhc3MpCit7CisgICAgLy8gQ2xlYXIgb3VyIHBvc2l0aW9uZWQgZmxvYXRzIGJvb2xlYW4uCisg
ICAgbV9oYXNQb3NpdGlvbmVkRmxvYXRzID0gZmFsc2U7CisKICAgICAvLyBJbmxpbmUgYmxvY2tz
IGFyZSBjb3ZlcmVkIGJ5IHRoZSBpc1JlcGxhY2VkKCkgY2hlY2sgaW4gdGhlIGF2b2lkRmxvYXRz
IG1ldGhvZC4KICAgICBpZiAoYXZvaWRzRmxvYXRzKCkgfHwgaXNSb290KCkgfHwgaXNSZW5kZXJW
aWV3KCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGlzVGFibGVDZWxsKCkpIHsKICAg
ICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgICAgICBkZWxldGVBbGxWYWx1
ZXMobV9mbG9hdGluZ09iamVjdHMtPnNldCgpKTsKICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmpl
Y3RzLT5jbGVhcigpOwogICAgICAgICB9CisgICAgICAgIGlmIChsYXlvdXRQYXNzID09IFBvc2l0
aW9uZWRGbG9hdExheW91dFBhc3MpCisgICAgICAgICAgICBhZGRQb3NpdGlvbmVkRmxvYXRzKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM2MTksNiArMzY5NCw5IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFy
KCk7CiAgICAgfQogCisgICAgaWYgKGxheW91dFBhc3MgPT0gUG9zaXRpb25lZEZsb2F0TGF5b3V0
UGFzcykKKyAgICAgICAgYWRkUG9zaXRpb25lZEZsb2F0cygpOworCiAgICAgLy8gV2Ugc2hvdWxk
IG5vdCBwcm9jZXNzIGZsb2F0cyBpZiB0aGUgcGFyZW50IG5vZGUgaXMgbm90IGEgUmVuZGVyQmxv
Y2suIE90aGVyd2lzZSwgd2Ugd2lsbCBhZGQgCiAgICAgLy8gZmxvYXRzIGluIGFuIGludmFsaWQg
Y29udGV4dC4gVGhpcyB3aWxsIGNhdXNlIGEgY3Jhc2ggYXJpc2luZyBmcm9tIGEgYmFkIGNhc3Qg
b24gdGhlIHBhcmVudC4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzgwNDk3NTM+LCB3aGVy
ZSBmbG9hdCBwcm9wZXJ0eSBpcyBhcHBsaWVkIG9uIGEgdGV4dCBub2RlIGluIGEgU1ZHLgpAQCAt
MzYyOCw4ICszNzA2LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogICAgIC8v
IEF0dGVtcHQgdG8gbG9jYXRlIGEgcHJldmlvdXMgc2libGluZyB3aXRoIG92ZXJoYW5naW5nIGZs
b2F0cy4gIFdlIHNraXAgYW55IGVsZW1lbnRzIHRoYXQgYXJlCiAgICAgLy8gb3V0IG9mIGZsb3cg
KGxpa2UgZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50cyksIGFuZCB3ZSBhbHNvIHNraXAgb3Zl
ciBhbnkgb2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQKICAgICAvLyB0byBhdm9pZCBmbG9h
dHMuCi0gICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBmYWxzZTsKICAgICBSZW5kZXJCbG9jayog
cGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudCgpKTsKKyAgICBib29sIHBhcmVudEhh
c0Zsb2F0cyA9IHBhcmVudEJsb2NrLT5oYXNQb3NpdGlvbmVkRmxvYXRzKCk7CiAgICAgUmVuZGVy
T2JqZWN0KiBwcmV2ID0gcHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKHByZXYgJiYgKHBy
ZXYtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCAhcHJldi0+aXNCb3goKSB8fCAhcHJldi0+
aXNSZW5kZXJCbG9jaygpIHx8IHRvUmVuZGVyQmxvY2socHJldiktPmF2b2lkc0Zsb2F0cygpKSkg
ewogICAgICAgICBpZiAocHJldi0+aXNGbG9hdGluZygpKQpAQCAtMzY0NSw3ICszNzIzLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogICAgIGludCBsb2dpY2FsTGVmdE9mZnNl
dCA9IDA7CiAgICAgaWYgKHByZXYpCiAgICAgICAgIGxvZ2ljYWxUb3BPZmZzZXQgLT0gdG9SZW5k
ZXJCb3gocHJldiktPmxvZ2ljYWxUb3AoKTsKLSAgICBlbHNlIHsKKyAgICBlbHNlIGlmICghcGFy
ZW50SGFzRmxvYXRzKSB7CiAgICAgICAgIHByZXYgPSBwYXJlbnRCbG9jazsKICAgICAgICAgbG9n
aWNhbExlZnRPZmZzZXQgKz0gcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dCgpOwogICAgIH0KQEAgLTM2NTUsNyArMzczMyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFy
RmxvYXRzKCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlbmRlckJsb2NrKiBibG9jayA9
IHRvUmVuZGVyQmxvY2socHJldik7Ci0gICAgaWYgKGJsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cyAm
JiBibG9jay0+bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wT2Zmc2V0KQor
ICAgIGlmIChibG9jay0+bV9mbG9hdGluZ09iamVjdHMgJiYgYmxvY2stPmxvd2VzdEZsb2F0TG9n
aWNhbEJvdHRvbUluY2x1ZGluZ1Bvc2l0aW9uZWRGbG9hdHMoKSA+IGxvZ2ljYWxUb3BPZmZzZXQp
CiAgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhibG9jaywgbG9naWNhbExlZnRPZmZzZXQsIGxv
Z2ljYWxUb3BPZmZzZXQpOwogCiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKQEAgLTYxODIs
NyArNjI2MCwyMSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjptYXJnaW5BZnRlckZvckNoCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGNoaWxkLT5tYXJnaW5Cb3R0b20o
KTsKIH0KLSAgICAKKworTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bWFyZ2luTG9naWNhbExlZnRG
b3JDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0Cit7CisgICAgaWYgKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJldHVybiBjaGlsZC0+bWFyZ2luTGVm
dCgpOworICAgIHJldHVybiBjaGlsZC0+bWFyZ2luVG9wKCk7Cit9CisKK0xheW91dFVuaXQgUmVu
ZGVyQmxvY2s6Om1hcmdpbkxvZ2ljYWxSaWdodEZvckNoaWxkKFJlbmRlckJveE1vZGVsT2JqZWN0
KiBjaGlsZCkgY29uc3QKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIGNoaWxkLT5tYXJnaW5SaWdodCgpOworICAgIHJldHVybiBjaGlsZC0+bWFy
Z2luQm90dG9tKCk7Cit9CisKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Om1hcmdpblN0YXJ0Rm9y
Q2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdAogewogICAgIGlmIChpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtNjM1MiwyMiArNjQ0NCwyNyBAQCBpbmxpbmUgdm9p
ZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzCiAgICAgbV9zZXQuY2xlYXIoKTsKICAgICBt
X2xlZnRPYmplY3RzQ291bnQgPSAwOwogICAgIG1fcmlnaHRPYmplY3RzQ291bnQgPSAwOworICAg
IG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCA9IDA7CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmluY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0
OjpUeXBlIHR5cGUpCiB7ICAgIAogICAgIGlmICh0eXBlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9h
dExlZnQpCiAgICAgICAgIG1fbGVmdE9iamVjdHNDb3VudCsrOwotICAgIGVsc2UKKyAgICBlbHNl
IGlmICh0eXBlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0KQogICAgICAgICBtX3JpZ2h0
T2JqZWN0c0NvdW50Kys7CisgICAgZWxzZQorICAgICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291
bnQrKzsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6ZGVj
cmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUgdHlwZSkKIHsKICAgICBpZiAo
dHlwZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KQogICAgICAgICBtX2xlZnRPYmplY3Rz
Q291bnQtLTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVjdDo6
RmxvYXRSaWdodCkKICAgICAgICAgbV9yaWdodE9iamVjdHNDb3VudC0tOworICAgIGVsc2UKKyAg
ICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50LS07CiB9CiAKIFRleHRSdW4gUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBm
bGFncykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lv
biA5MTc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSw3ICs4OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9
IDApOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdl
TG9naWNhbEhlaWdodCA9IDApOworICAgIGVudW0gQmxvY2tMYXlvdXRQYXNzIHsgTm9ybWFsTGF5
b3V0UGFzcywgUG9zaXRpb25lZEZsb2F0TGF5b3V0UGFzcyB9OworICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlTG9naWNhbEhlaWdodCA9
IDAsIEJsb2NrTGF5b3V0UGFzcyA9IE5vcm1hbExheW91dFBhc3MpOwogCiAgICAgdm9pZCBpbnNl
cnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCopOwogICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25l
ZE9iamVjdChSZW5kZXJCb3gqKTsKQEAgLTE5OCwxMiArMTk5LDE1IEBAIHB1YmxpYzoKICAgICBp
bnQgbG9naWNhbFdpZHRoRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkgeyByZXR1cm4gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT53aWR0aCgpIDogY2hpbGQtPmhlaWdodCgpOyB9
CiAgICAgaW50IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVy
biBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPmhlaWdodCgpIDogY2hpbGQtPndp
ZHRoKCk7IH0KICAgICBpbnQgbG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngo
KTsgfQorICAgIGludCBsb2dpY2FsTGVmdEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eCgpIDogY2hpbGQtPnkoKTsg
fQogICAgIHZvaWQgc2V0TG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQg
bG9naWNhbExlZnQsIEFwcGx5TGF5b3V0RGVsdGFNb2RlID0gRG9Ob3RBcHBseUxheW91dERlbHRh
KTsKICAgICB2b2lkIHNldExvZ2ljYWxUb3BGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQg
bG9naWNhbFRvcCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5b3V0RGVsdGEp
OwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGNoaWxkKSBjb25zdDsKICAgICBMYXlvdXRVbml0IG1hcmdpbkFmdGVyRm9yQ2hpbGQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKICAgICBMYXlvdXRVbml0IG1hcmdpblN0
YXJ0Rm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IG1hcmdpbkVuZEZvckNoaWxkKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCkgY29u
c3Q7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5Mb2dpY2FsTGVmdEZvckNoaWxkKFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBjaGlsZCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5Mb2dpY2FsUmln
aHRGb3JDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0OwogICAgIHZvaWQg
c2V0TWFyZ2luU3RhcnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0KTsKICAg
ICB2b2lkIHNldE1hcmdpbkVuZEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQp
OwogICAgIHZvaWQgc2V0TWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pdCk7CkBAIC0yOTUsNyArMjk5LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogCi0gICAgdm9pZCBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhib29sIHJl
bGF5b3V0Q2hpbGRyZW4pOworICAgIGJvb2wgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCBy
ZWxheW91dENoaWxkcmVuKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwpAQCAtNDA2LDE4ICs0MTAsMjUgQEAgcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3QgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShGbG9hdGluZ09iamVjdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoK
LSAgICAgICAgLy8gTm90ZSB0aGF0IFR5cGUgdXNlcyBiaXRzIHNvIHlvdSBjYW4gdXNlIEZsb2F0
Qm90aCBhcyBhIG1hc2sgdG8gcXVlcnkgZm9yIGJvdGggbGVmdCBhbmQgcmlnaHQuCi0gICAgICAg
IGVudW0gVHlwZSB7IEZsb2F0TGVmdCA9IDEsIEZsb2F0UmlnaHQgPSAyLCBGbG9hdEJvdGggPSAz
IH07CisgICAgICAgIC8vIEZsb2F0TGVmdFJpZ2h0IGlzIGEgbWFzayB0byBxdWVyeSBmb3IgYm90
aCBsZWZ0IGFuZCByaWdodCBidXQgbm90IHBvc2l0aW9uZWQuCisgICAgICAgIC8vIEZsb2F0QWxs
IGlzIGEgbWFzayB0byBxdWVyeSBmb3IgYWxsIHR5cGVzIG9mIGZsb2F0cy4KKyAgICAgICAgZW51
bSBUeXBlIHsgRmxvYXRMZWZ0ID0gMSwgRmxvYXRSaWdodCA9IDIsIEZsb2F0TGVmdFJpZ2h0ID0g
MywgRmxvYXRQb3NpdGlvbmVkID0gNCwgRmxvYXRBbGwgPSA3IH07CiAKLSAgICAgICAgRmxvYXRp
bmdPYmplY3QoVHlwZSB0eXBlKQorICAgICAgICBGbG9hdGluZ09iamVjdChFRmxvYXQgdHlwZSkK
ICAgICAgICAgICAgIDogbV9yZW5kZXJlcigwKQogICAgICAgICAgICAgLCBtX29yaWdpbmF0aW5n
TGluZSgwKQogICAgICAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQotICAgICAgICAgICAg
LCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV9zaG91bGRQYWludCh0cnVlKQorICAgICAg
ICAgICAgLCBtX3Nob3VsZFBhaW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFu
dChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc1BsYWNlZChmYWxzZSkKICAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHR5cGUgIT0gTm9GbG9hdCk7CisgICAgICAgICAgICBpZiAodHlwZSA9
PSBMZWZ0RmxvYXQpCisgICAgICAgICAgICAgICAgbV90eXBlID0gRmxvYXRMZWZ0OworICAgICAg
ICAgICAgZWxzZSBpZiAodHlwZSA9PSBSaWdodEZsb2F0KQorICAgICAgICAgICAgICAgIG1fdHlw
ZSA9IEZsb2F0UmlnaHQ7CisgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IFBvc2l0aW9uZWRG
bG9hdCkKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBGbG9hdFBvc2l0aW9uZWQ7CiAgICAgICAg
IH0KIAogICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIGZy
YW1lUmVjdCkKQEAgLTQyNiw3ICs0MzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX2Zy
YW1lUmVjdChmcmFtZVJlY3QpCiAgICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDApCiAg
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHRy
dWUpCisgICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHlwZSAhPSBGbG9hdFBvc2l0aW9uZWQp
CiAgICAgICAgICAgICAsIG1faXNEZXNjZW5kYW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lz
UGxhY2VkKHRydWUpCiAgICAgICAgIHsKQEAgLTQ1Nyw3ICs0NjgsNyBAQCBwcml2YXRlOgogICAg
ICAgICBSb290SW5saW5lQm94KiBtX29yaWdpbmF0aW5nTGluZTsKICAgICAgICAgSW50UmVjdCBt
X2ZyYW1lUmVjdDsKICAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OwotICAgICAgICB1bnNp
Z25lZCBtX3R5cGUgOiAyOyAvLyBUeXBlIChsZWZ0IG9yIHJpZ2h0IGFsaWduZWQpCisgICAgICAg
IHVuc2lnbmVkIG1fdHlwZSA6IDM7IC8vIFR5cGUgKGxlZnQvcmlnaHQgYWxpZ25lZCBvciBwb3Np
dGlvbmVkKQogICAgICAgICBib29sIG1fc2hvdWxkUGFpbnQgOiAxOwogICAgICAgICBib29sIG1f
aXNEZXNjZW5kYW50IDogMTsKICAgICAgICAgYm9vbCBtX2lzUGxhY2VkIDogMTsKQEAgLTU4MSwx
NyArNTkyLDIzIEBAIHByaXZhdGU6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlm
IGl0IGhhcyBwb3NpdGlvbmVkIGFueSBmbG9hdHMuCiAgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0
cygpOwogCi0gICAgdm9pZCBjbGVhckZsb2F0cygpOworICAgIGJvb2wgaGFzUG9zaXRpb25lZEZs
b2F0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUG9zaXRpb25lZEZsb2F0czsgfQorICAgIHZvaWQg
YWRkUG9zaXRpb25lZEZsb2F0cygpOworICAgIGJvb2wgcG9zaXRpb25lZEZsb2F0c05lZWRSZWxh
eW91dCgpOworCisgICAgdm9pZCBjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MpOwogICAgIGlu
dCBnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzT3ZlcmhhbmdpbmdG
bG9hdHMoKSB7IHJldHVybiBwYXJlbnQoKSAmJiAhaGFzQ29sdW1ucygpICYmIGNvbnRhaW5zRmxv
YXRzKCkgJiYgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsSGVpZ2h0KCk7IH0K
KyAgICBib29sIGhhc092ZXJoYW5naW5nRmxvYXRzKCkgeyByZXR1cm4gcGFyZW50KCkgJiYgIWhh
c0NvbHVtbnMoKSAmJiBjb250YWluc0Zsb2F0cygpICYmIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRv
bUluY2x1ZGluZ1Bvc2l0aW9uZWRGbG9hdHMoKSA+IGxvZ2ljYWxIZWlnaHQoKTsgfQogICAgIGJv
b2wgaGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIGFkZEludHJ1ZGlu
Z0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0KTsKICAg
ICBpbnQgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBpbnQgeG9mZnNl
dCwgaW50IHlvZmZzZXQsIGJvb2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyk7CiAKLSAgICBp
bnQgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlID0gRmxvYXRp
bmdPYmplY3Q6OkZsb2F0Qm90aCkgY29uc3Q7CisgICAgaW50IGxvd2VzdEZsb2F0TG9naWNhbEJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09i
amVjdDo6RmxvYXRMZWZ0UmlnaHQpOyB9CisgICAgaW50IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRv
bUluY2x1ZGluZ1Bvc2l0aW9uZWRGbG9hdHMoKSBjb25zdCB7IHJldHVybiBsb3dlc3RGbG9hdExv
Z2ljYWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6OkZsb2F0QWxsKTsgfQorICAgIGludCBsb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6OlR5cGUpIGNvbnN0OwogICAgIGludCBu
ZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coaW50KSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFs
IGJvb2wgaGl0VGVzdENvbHVtbnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CkBAIC03ODMsNiArODAwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgRmxvYXRpbmdPYmplY3RzKCkKICAgICAgICAgICAgIDogbV9sZWZ0
T2JqZWN0c0NvdW50KDApCiAgICAgICAgICAgICAsIG1fcmlnaHRPYmplY3RzQ291bnQoMCkKKyAg
ICAgICAgICAgICwgbV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50KDApCiAgICAgICAgIHsKICAgICAg
ICAgfQogCkBAIC03OTEsMTIgKzgwOSwxNCBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIGRlY3Jl
YXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKICAgICAgICAgYm9vbCBoYXNM
ZWZ0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdE9iamVjdHNDb3VudCA+IDA7IH0KICAg
ICAgICAgYm9vbCBoYXNSaWdodE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0T2JqZWN0
c0NvdW50ID4gMDsgfQorICAgICAgICBib29sIGhhc1Bvc2l0aW9uZWRPYmplY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9wb3NpdGlvbmVkT2JqZWN0c0NvdW50ID4gMDsgfQogICAgICAgICBGbG9hdGlu
Z09iamVjdFNldCYgc2V0KCkgeyByZXR1cm4gbV9zZXQ7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0IG1fc2V0OwogICAgICAgICB1bnNpZ25lZCBtX2xlZnRPYmpl
Y3RzQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3RzQ291bnQ7CisgICAgICAg
IHVuc2lnbmVkIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudDsKICAgICB9OwogICAgIE93blB0cjxG
bG9hdGluZ09iamVjdHM+IG1fZmxvYXRpbmdPYmplY3RzOwogICAgIApAQCAtODQyLDggKzg2Miw5
IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAg
UmVuZGVyTGluZUJveExpc3QgbV9saW5lQm94ZXM7ICAgLy8gQWxsIG9mIHRoZSByb290IGxpbmUg
Ym94ZXMgY3JlYXRlZCBmb3IgdGhpcyBibG9jayBmbG93LiAgRm9yIGV4YW1wbGUsIDxkaXY+SGVs
bG88YnI+d29ybGQuPC9kaXY+IHdpbGwgaGF2ZSB0d28gdG90YWwgbGluZXMgZm9yIHRoZSA8ZGl2
Pi4KIAotICAgIG11dGFibGUgc2lnbmVkIG1fbGluZUhlaWdodCA6IDMxOworICAgIG11dGFibGUg
c2lnbmVkIG1fbGluZUhlaWdodCA6IDMwOwogICAgIGJvb2wgbV9iZWluZ0Rlc3Ryb3llZCA6IDE7
CisgICAgYm9vbCBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgOiAxOwogCiAgICAgLy8gUmVuZGVyUnVi
eUJhc2Ugb2JqZWN0cyBuZWVkIHRvIGJlIGFibGUgdG8gc3BsaXQgYW5kIG1lcmdlLCBtb3Zpbmcg
dGhlaXIgY2hpbGRyZW4gYXJvdW5kCiAgICAgLy8gKGNhbGxpbmcgbW92ZUNoaWxkVG8sIG1vdmVB
bGxDaGlsZHJlblRvLCBhbmQgbWFrZUNoaWxkcmVuTm9uSW5saW5lKS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA5MTc2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNyAr
MzU0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdAogICAgICAg
ICBzZXRIYXNCb3hEZWNvcmF0aW9ucyh0cnVlKTsKIAogICAgIHNldFBvc2l0aW9uZWQoc3R5bGUo
KS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uIHx8IHN0eWxlKCktPnBvc2l0aW9uKCkg
PT0gRml4ZWRQb3NpdGlvbik7Ci0gICAgc2V0RmxvYXRpbmcoIWlzUG9zaXRpb25lZCgpICYmIHN0
eWxlKCktPmlzRmxvYXRpbmcoKSk7CisgICAgc2V0RmxvYXRpbmcoc3R5bGUoKS0+aXNGbG9hdGlu
ZygpICYmICghaXNQb3NpdGlvbmVkKCkgfHwgc3R5bGUoKS0+ZmxvYXRpbmcoKSA9PSBQb3NpdGlv
bmVkRmxvYXQpKTsKIAogICAgIC8vIFdlIGFsc28gaGFuZGxlIDxib2R5PiBhbmQgPGh0bWw+LCB3
aG9zZSBvdmVyZmxvdyBhcHBsaWVzIHRvIHRoZSB2aWV3cG9ydC4KICAgICBpZiAoc3R5bGUoKS0+
b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUgJiYgIWlzUm9vdE9iamVjdCAmJiAoaXNSZW5kZXJCbG9j
aygpIHx8IGlzVGFibGVSb3coKSB8fCBpc1RhYmxlU2VjdGlvbigpKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJs
ZUJveC5jcHAJKHJldmlzaW9uIDkxNzY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsx
OTgsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6Y29tcHV0CiAgICAgc2V0
UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50
IC8qcGFnZUhlaWdodCBGSVhNRTogSW1wbGVtZW50ICovKQordm9pZCBSZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VM
b2dpY2FsSGVpZ2h0LCBCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7CiAKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveDo6bGF5b3V0CiAgICAgaWYgKHByZXZpb3VzU2l6ZS5oZWlnaHQoKSAhPSBo
ZWlnaHQoKSkKICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAKLSAgICBsYXlvdXRQ
b3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxkcmVuIHx8IGlzUm9vdCgpKTsKKyAgICBib29s
IG5lZWRBbm90aGVyTGF5b3V0UGFzcyA9IGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0
Q2hpbGRyZW4gfHwgaXNSb290KCkpOwogCiAgICAgaWYgKCFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVk
KCkgJiYgaGVpZ2h0KCkgPT0gMCkgewogICAgICAgICAvLyBXZSBhcmUgYSBibG9jayB3aXRoIG5v
IGJvcmRlciBhbmQgcGFkZGluZyBhbmQgYSBjb21wdXRlZCBoZWlnaHQKQEAgLTI4Miw3ICsyODIs
MTEgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dAogICAgIC8vIFJl
cGFpbnQgd2l0aCBvdXIgbmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIg
b2xkIGJvdW5kcy4KICAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiAKLSAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7CisgICAgaWYgKG5lZWRBbm90aGVyTGF5b3V0UGFzcyAmJiBs
YXlvdXRQYXNzID09IE5vcm1hbExheW91dFBhc3MpIHsKKyAgICAgICAgc2V0Q2hpbGROZWVkc0xh
eW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAgIGxheW91dEJsb2NrKGZhbHNlLCBwYWdlTG9naWNh
bEhlaWdodCk7CisgICAgfSBlbHNlCisgICAgICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0K
IAogLy8gVGhlIGZpcnN0IHdhbGsgb3ZlciBvdXIga2lkcyBpcyB0byBmaW5kIG91dCBpZiB3ZSBo
YXZlIGFueSBmbGV4aWJsZSBjaGlsZHJlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgJKHJldmlzaW9uIDkx
NzY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJs
ZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOwogICAgIHZvaWQgY2FsY1ZlcnRpY2FsUHJlZldp
ZHRocygpOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgaW50IHBhZ2VIZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0ID0gMCwgQmxvY2tMYXlvdXRQYXNzID0g
Tm9ybWFsTGF5b3V0UGFzcyk7CiAgICAgdm9pZCBsYXlvdXRIb3Jpem9udGFsQm94KGJvb2wgcmVs
YXlvdXRDaGlsZHJlbik7CiAgICAgdm9pZCBsYXlvdXRWZXJ0aWNhbEJveChib29sIHJlbGF5b3V0
Q2hpbGRyZW4pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guaAkocmV2aXNpb24gOTE3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGbGV4aWJsZUJveCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIGludCBwYWdlTG9naWNhbEhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCwgQmxvY2tM
YXlvdXRQYXNzID0gTm9ybWFsTGF5b3V0UGFzcyk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDkxNzY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI0MSw3ICsyMjQxLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlU2Nyb2xsSW5mb0FmdGVyTAogICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogYmxv
Y2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgICAgICBibG9j
ay0+c2Nyb2xsYmFyc0NoYW5nZWQoYm94LT5oYXNBdXRvSG9yaXpvbnRhbFNjcm9sbGJhcigpICYm
IGhhdmVIb3Jpem9udGFsQmFyICE9IGhvcml6b250YWxPdmVyZmxvdywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+aGFzQXV0b1ZlcnRpY2FsU2Nyb2xs
YmFyKCkgJiYgaGF2ZVZlcnRpY2FsQmFyICE9IHZlcnRpY2FsT3ZlcmZsb3cpOwotICAgICAgICAg
ICAgICAgICAgICBibG9jay0+bGF5b3V0QmxvY2sodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5sYXlvdXRCbG9jayh0cnVlKTsgLy8gRklYTUU6IE5lZWQgdG8gaGFuZGxlIHBvc2l0
aW9uZWQgZmxvYXRzIHRyaWdnZXJpbmcgZXh0cmEgcmVsYXlvdXRzLgogICAgICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5sYXlvdXQoKTsKICAgICAg
ICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102303</attachid>
            <date>2011-07-28 15:04:30 -0700</date>
            <delta_ts>2011-07-29 12:39:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>33102</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxOTQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDctMjggIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NTM0MgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBwb3NpdGlv
bmVkIGZsb2F0cyBiZWluZyBwbGFjZWQgaW50byBhIFJlbmRlckJsb2NrJ3MgRmxvYXRpbmdPYmpl
Y3QgbGlzdCBhbmQgZm9yCisgICAgICAgIGNvcnJlY3QgcHJvcGFnYXRpb24gb2YgdGhvc2UgZmxv
YXRpbmcgb2JqZWN0cyBpbnRvIGRlc2NlbmRhbnRzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIFRoZSBw
b3NpdGlvbmVkIGZsb2F0IGxheW91dCBhbGdvcml0aG0gaXMgMi1wYXNzLiBZb3UgbGF5IG91dCB3
aXRob3V0IHRoZSBwb3NpdGlvbmVkIG9iamVjdHMsIGFuZCB0aGVuCisgICAgICAgIG9uY2UgdGhl
eSBoYXZlIGJlZW4gcGxhY2VkLCB5b3UgbGF5IG91dCBhZ2FpbiBhbmQgdXNlIHRoYXQgcGxhY2Vt
ZW50IHRvIGRldGVybWluZSB0aGUgZmxvYXQgcG9zaXRpb25zLgorICAgICAgICBsYXlvdXRCbG9j
ayBub3cgaGFzIGFuIGV4dHJhIHBhcmFtZXRlciB0byBpbmRpY2F0ZSB3aGljaCBsYXlvdXQgcGFz
cyB5b3UgYXJlIGluLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyZmxvd0Zyb21GbG9hdHMpOgorICAgICAgICBEb24ndCBhZGQgb3ZlcmZsb3cgZnJvbSBw
b3NpdGlvbmVkIGZsb2F0cyBldmVyLCBzaW5jZSB0aGUgcG9zaXRpb25pbmcgb3ZlcmZsb3cgZnVu
Y3Rpb24gdGFrZXMgY2FyZSBvZiB0aGF0CisgICAgICAgIGFscmVhZHkuCisKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKToKKyAgICAgICAgSW5jbHVkZSBw
b3NpdGlvbmVkIGZsb2F0cyBpbiB0aGUgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tIHdlIGxvb2sg
YXQgc28gdGhhdCBvdmVyaGFuZyBpcyBjb21wdXRlZCBwcm9wZXJseS4KKworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNpbXBsaWZpZWRMYXlvdXQpOgorICAgICAgICBJZiBsYXlvdXRQ
b3NpdGlvbmVkT2JqZWN0cyBpbmRpY2F0ZXMgdGhhdCBhIHBvc2l0aW9uZWQgZmxvYXQgbW92ZWQs
IHRoZW4gd2UgY2FuJ3QgZG8gc2ltcGxpZmllZCBsYXlvdXQuIEJhaWwKKyAgICAgICAgaW5zdGVh
ZCBhbmQgZG8gYSBmdWxsIGxheW91dC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnBvc2l0aW9uZWRGbG9hdHNOZWVkUmVsYXlvdXQpOgorICAgICAgICBIZWxwZXIgZm9yIGxheW91
dEJsb2NrIGluIG9yZGVyIHRvIGJ5cGFzcyB0aGUgMi1wYXNzIG1vZGVsIGlmIHdlIGNhbiBkZXRl
Y3QgdGhhdCBub25lIG9mIHRoZSBwb3NpdGlvbmVkIG9iamVjdHMKKyAgICAgICAgd2lsbCBhY3R1
YWxseSBuZWVkIHRvIGxheSBvdXQgYWdhaW4uIFRoaXMgYWxsb3dzIGluY3JlbWVudGFsIGxheW91
dCB0byBub3QgYWx3YXlzIGZhdWx0IGJhY2sgdG8gMi1wYXNzIGFzIG5vcm1hbAorICAgICAgICBm
bG93IGNvbnRlbnQgc3RyZWFtcyBpbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKToKKyAgICAgICAgTW9kaWZpZWQgdG8gcmV0dXJuIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBwb3NpdGlvbmVkIGZsb2F0IGdvdCBhIGxheW91
dC4gSWYgc28sIHdlIHdpbGwgbGF5IG91dCBhZ2FpbgorICAgICAgICBvbmNlIG91ciBwb3NpdGlv
bmVkIG9iamVjdHMgYXJlIHBsYWNlZC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QgY2Fu
IG5vdyBoYW5kbGUgcG9zaXRpb25lZCBvYmplY3RzIGJlaW5nIGluc2VydGVkLgorCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICBwb3Np
dGlvbk5ld0Zsb2F0cyBkb2Vzbid0IGF0dGVtcHQgdG8gcG9zaXRpb24gdGhpcyBuZXcgdHlwZSBv
ZiBmbG9hdC4gSXQgb25seSBoYW5kbGVzIGxlZnQvcmlnaHQgZmxvYXRzLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkUG9zaXRpb25lZEZsb2F0cyk6CisgICAgICAgIEhlbHBl
ciB0byBhZGQgaW4gdGhlIGZsb2F0aW5nIG9iamVjdHMgZm9yIHBvc2l0aW9uZWQgZmxvYXRzLiBU
aGlzIGlzIHVzZWQgaW5zdGVhZCBvZiBwb3NpdGlvbk5ld0Zsb2F0cyBhbmQKKyAgICAgICAganVz
dCB3YWxrcyB0aGUgcG9zaXRpb25lZCBvYmplY3RzIGluc3RlYWQuCisKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyk6CisgICAgICAgIGNsZWFyRmxvYXRzIG5vdyBo
YW5kbGVzIGFkZGluZyBpbiBwb3NpdGlvbmVkIGZsb2F0cyBpZiB0aGUgbGF5b3V0IHBhc3Mgc2F5
cyB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6Om1hcmdpbkxvZ2ljYWxMZWZ0Rm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Om1hcmdpbkxvZ2ljYWxSaWdodEZvckNoaWxkKToKKyAgICAgICAgTmV3IGhlbHBlcnMg
dXNlZCBieSBhZGRQb3NpdGlvbmVkRmxvYXRzLgorICAgIAorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW5jcmVhc2VPYmplY3RzQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6ZGVjcmVhc2VPYmplY3Rz
Q291bnQpOgorICAgICAgICBNYWtlIHN1cmUgdGhlIG9iamVjdCBjb3VudCB0cmFja2luZyBoYW5k
bGVzIHBvc2l0aW9uZWQgZmxvYXRzIGFzIHdlbGwgYXMgbGVmdC9yaWdodCBmbG9hdHMuCisgICAg
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bG9naWNhbExlZnRGb3JDaGlsZCk6CisgICAgICAgIE5ldyBoZWxwZXIgdXNl
ZCBieSBhZGRQb3NpdGlvbmVkRmxvYXRzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3Q6OkZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgQ2hhbmdlIHRoZSBj
b25zdHJ1Y3RvciB0byB0YWtlIHRoZSBSZW5kZXJTdHlsZSBlbnVtLiBUaGlzIG1ha2VzIHRoZSBj
b25zdHJ1Y3Rpb24gc2ltcGxlci4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhh
c1Bvc2l0aW9uZWRGbG9hdHMpOgorICAgICAgICBBIGJpdCB0cmFja3Mgd2hldGhlciBvciBub3Qg
YSBibG9jayBoYXMgcG9zaXRpb25lZCBmbG9hdHMgaW4gaXRzIHBvc2l0aW9uZWQgb2JqZWN0cyBs
aXN0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9h
dHMpOgorICAgICAgICBNb2RpZmllZCB0byBpbmNsdWRlIHBvc2l0aW9uZWQgZmxvYXRzLgorCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKToK
KyAgICAgICAgVGhpcyBmdW5jdGlvbiBleGNsdWRlcyBwb3NpdGlvbmVkIGZsb2F0cyBieSBkZWZh
dWx0LCBzbyB0aGF0IHBsYWNlcyB0aGF0IC0gZm9yIGV4YW1wbGUgLSBleHBhbmQgdG8KKyAgICAg
ICAgZW5jb21wYXNzIHRoZWlyIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSB3b24ndCBhY2NpZGVu
dGFsbHkgZXhwYW5kIHRvIGVuY29tcGFzcyBwb3NpdGlvbmVkIG9iamVjdHMuCisKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQ
b3NpdGlvbmVkRmxvYXRzKToKKyAgICAgICAgQSBuZXcgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyBw
b3NpdGlvbmVkIGZsb2F0cyBmb3IgY2FsbGVycyB0aGF0IGNhcmUuCisKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpoYXNQb3NpdGlvbmVk
T2JqZWN0cyk6CisgICAgICAgIFRoZSBvYmplY3QgY291bnQgdHJhY2tpbmcgZm9yIHBvc2l0aW9u
ZWQgZmxvYXRzIHdpdGhpbiBhIGJsb2NrJ3MgRmxvYXRpbmdPYmplY3RzIGxpc3QuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6dXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKToKKyAgICAgICAgTWFrZSBzdXJlIGlzRmxv
YXRpbmcgaXMgc2V0IGV2ZW4gaWYgaXNQb3NpdGlvbmVkIGlzIGFsc28gc2V0IGZvciB0aGUgcG9z
aXRpb25lZCBmbG9hdCBjYXNlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxl
eGlibGVCb3g6OmxheW91dEJsb2NrKToKKyAgICAgICAgTW9kaWZpZWQgdG8gZG8gdGhlIGV4dHJh
IGxheW91dCBwYXNzIGlmIG5lZWRlZC4KKwogMjAxMS0wNy0yOCAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY1MzIzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHJldmlzaW9uIDkxNzY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBAIFJlbmRlckJsb2Nr
OjpSZW5kZXJCbG9jayhOb2RlKiBub2RlKQogICAgICAgOiBSZW5kZXJCb3gobm9kZSkKICAgICAg
ICwgbV9saW5lSGVpZ2h0KC0xKQogICAgICAgLCBtX2JlaW5nRGVzdHJveWVkKGZhbHNlKQorICAg
ICAgLCBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMoZmFsc2UpCiB7CiAgICAgc2V0Q2hpbGRyZW5Jbmxp
bmUodHJ1ZSk7CiB9CkBAIC0xMTY1LDcgKzExNjYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXQoKQogICAgICAgICBjbGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VMb2dpY2FsSGVp
Z2h0KQordm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
LCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQsIEJsb2NrTGF5b3V0UGFzcyBsYXlvdXRQYXNzKQogewog
ICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApAQCAtMTE4OCw3ICsxMTg5LDEyIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICBpZiAob2xkV2lkdGggIT0g
bG9naWNhbFdpZHRoKCkgfHwgb2xkQ29sdW1uV2lkdGggIT0gZGVzaXJlZENvbHVtbldpZHRoKCkp
CiAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgY2xlYXJGbG9hdHMoKTsK
KyAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQgYWJvdXQgb3VyIGZsb2F0aW5nIHBvc2l0aW9uZWQg
b2JqZWN0cywgbGV0J3MgZ28gYWhlYWQgYW5kIHRyeSB0byBwbGFjZSB0aGVtIGFzCisgICAgLy8g
ZmxvYXRzIHRvIGF2b2lkIGRvaW5nIHR3byBwYXNzZXMuCisgICAgQmxvY2tMYXlvdXRQYXNzIGZs
b2F0c0xheW91dFBhc3MgPSBsYXlvdXRQYXNzOworICAgIGlmIChmbG9hdHNMYXlvdXRQYXNzID09
IE5vcm1hbExheW91dFBhc3MgJiYgIXJlbGF5b3V0Q2hpbGRyZW4gJiYgIXBvc2l0aW9uZWRGbG9h
dHNOZWVkUmVsYXlvdXQoKSkKKyAgICAgICAgZmxvYXRzTGF5b3V0UGFzcyA9IFBvc2l0aW9uZWRG
bG9hdExheW91dFBhc3M7CisgICAgY2xlYXJGbG9hdHMoZmxvYXRzTGF5b3V0UGFzcyk7CiAKICAg
ICBpbnQgcHJldmlvdXNIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgc2V0TG9naWNhbEhl
aWdodCgwKTsKQEAgLTEyODIsNyArMTI4OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5n
T3JQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2Nr
ID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+
bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgKyBibG9jay0+bG9naWNhbFRvcCgpID4gbmV3SGVp
Z2h0KQorICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJv
dHRvbUluY2x1ZGluZ1Bvc2l0aW9uZWRGbG9hdHMoKSArIGJsb2NrLT5sb2dpY2FsVG9wKCkgPiBu
ZXdIZWlnaHQpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRPdmVyaGFuZ2luZ0Zsb2F0cyhi
bG9jaywgLWJsb2NrLT5sb2dpY2FsTGVmdCgpLCAtYmxvY2stPmxvZ2ljYWxUb3AoKSwgZmFsc2Up
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEyOTIsNyArMTI5OCw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICBpZiAocHJldmlv
dXNIZWlnaHQgIT0gbmV3SGVpZ2h0KQogICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsK
IAotICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4gfHwgaXNSb290
KCkpOworICAgIGJvb2wgbmVlZEFub3RoZXJMYXlvdXRQYXNzID0gbGF5b3V0UG9zaXRpb25lZE9i
amVjdHMocmVsYXlvdXRDaGlsZHJlbiB8fCBpc1Jvb3QoKSk7CiAKICAgICAvLyBBZGQgb3ZlcmZs
b3cgZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2UgaW4gdGhh
dCBjYXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgogICAgIGNv
bXB1dGVPdmVyZmxvdyhvbGRDbGllbnRBZnRlckVkZ2UpOwpAQCAtMTM1MCw3ICsxMzU2LDEyIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgICAg
ICByZXBhaW50UmVjdGFuZ2xlKHJlZmxlY3RlZFJlY3QocmVwYWludFJlY3QpKTsKICAgICAgICAg
fQogICAgIH0KLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CisgICAgCisgICAgaWYgKG5lZWRB
bm90aGVyTGF5b3V0UGFzcyAmJiBsYXlvdXRQYXNzID09IE5vcm1hbExheW91dFBhc3MpIHsKKyAg
ICAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAgIGxheW91dEJs
b2NrKGZhbHNlLCBwYWdlTG9naWNhbEhlaWdodCwgUG9zaXRpb25lZEZsb2F0TGF5b3V0UGFzcyk7
CisgICAgfSBlbHNlCisgICAgICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAogdm9pZCBS
ZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tQ2hpbGRyZW4oKQpAQCAtMTQyOSw3ICsxNDQwLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKAogICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9y
IChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0Owot
ICAgICAgICBpZiAoci0+bV9pc0Rlc2NlbmRhbnQpCisgICAgICAgIGlmIChyLT5tX2lzRGVzY2Vu
ZGFudCAmJiAhci0+bV9yZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBhZGRP
dmVyZmxvd0Zyb21DaGlsZChyLT5tX3JlbmRlcmVyLCBJbnRTaXplKHhQb3NpdGlvbkZvckZsb2F0
SW5jbHVkaW5nTWFyZ2luKHIpLCB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSkp
OwogICAgIH0KICAgICByZXR1cm47CkBAIC0xOTgxLDcgKzE5OTIsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgZWxzZSBpZiAoIWNoaWxkLT5hdm9pZHNG
bG9hdHMoKSB8fCBjaGlsZC0+c2hyaW5rVG9Bdm9pZEZsb2F0cygpKSB7CiAgICAgICAgIC8vIElm
IGFuIGVsZW1lbnQgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIGZsb2F0cywg
dGhlbiBhbHdheXMgbWFyayBpdCBmb3IKICAgICAgICAgLy8gbGF5b3V0LgotICAgICAgICBpbnQg
ZmIgPSBtYXgocHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIGxvd2VzdEZsb2F0TG9naWNhbEJv
dHRvbSgpKTsKKyAgICAgICAgaW50IGZiID0gbWF4KHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9t
LCBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkpOwog
ICAgICAgICBpZiAoZmIgPiBsb2dpY2FsVG9wRXN0aW1hdGUpCiAgICAgICAgICAgICBtYXJrRGVz
Y2VuZGFudHNXaXRoRmxvYXRzID0gdHJ1ZTsKICAgICB9CkBAIC0xOTkwLDcgKzIwMDEsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgICAgIGlmIChtYXJr
RGVzY2VuZGFudHNXaXRoRmxvYXRzKQogICAgICAgICAgICAgY2hpbGRSZW5kZXJCbG9jay0+bWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwogICAgICAgICBpZiAoIWNoaWxk
LT5pc1dyaXRpbmdNb2RlUm9vdCgpKQotICAgICAgICAgICAgcHJldmlvdXNGbG9hdExvZ2ljYWxC
b3R0b20gPSBtYXgocHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxUb3AgKyBj
aGlsZFJlbmRlckJsb2NrLT5sb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSk7CisgICAgICAgICAg
ICBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSA9IG1heChwcmV2aW91c0Zsb2F0TG9naWNhbEJv
dHRvbSwgb2xkTG9naWNhbFRvcCArIGNoaWxkUmVuZGVyQmxvY2stPmxvd2VzdEZsb2F0TG9naWNh
bEJvdHRvbUluY2x1ZGluZ1Bvc2l0aW9uZWRGbG9hdHMoKSk7CiAgICAgfQogCiAgICAgaWYgKCFj
aGlsZC0+bmVlZHNMYXlvdXQoKSkKQEAgLTIxNTksOCArMjE3MCw4IEBAIGJvb2wgUmVuZGVyQmxv
Y2s6OnNpbXBsaWZpZWRMYXlvdXQoKQogICAgICAgICBzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91
dCgpOwogCiAgICAgLy8gTGF5IG91dCBvdXIgcG9zaXRpb25lZCBvYmplY3RzIGlmIG91ciBwb3Np
dGlvbmVkIGNoaWxkIGJpdCBpcyBzZXQuCi0gICAgaWYgKHBvc0NoaWxkTmVlZHNMYXlvdXQoKSkK
LSAgICAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMoZmFsc2UpOworICAgIGlmIChwb3NDaGls
ZE5lZWRzTGF5b3V0KCkgJiYgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMoZmFsc2UpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIElmIGEgcG9zaXRpb25lZCBmbG9hdCBpcyBjYXVzaW5nIG91ciBu
b3JtYWwgZmxvdyB0byBjaGFuZ2UsIHRoZW4gd2UgaGF2ZSB0byBiYWlsIGFuZCBkbyBhIGZ1bGwg
bGF5b3V0LgogCiAgICAgLy8gUmVjb21wdXRlIG91ciBvdmVyZmxvdyBpbmZvcm1hdGlvbi4KICAg
ICAvLyBGSVhNRTogV2UgY291bGQgZG8gYmV0dGVyIGhlcmUgYnkgY29tcHV0aW5nIGEgdGVtcG9y
YXJ5IG92ZXJmbG93IG9iamVjdCBmcm9tIGxheW91dFBvc2l0aW9uZWRPYmplY3RzIGFuZCBvbmx5
CkBAIC0yMTgwLDE0ICsyMTkxLDQxIEBAIGJvb2wgUmVuZGVyQmxvY2s6OnNpbXBsaWZpZWRMYXlv
dXQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3Np
dGlvbmVkT2JqZWN0cyhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCitib29sIFJlbmRlckJsb2NrOjpw
b3NpdGlvbmVkRmxvYXRzTmVlZFJlbGF5b3V0KCkKK3sKKyAgICBpZiAoIWhhc1Bvc2l0aW9uZWRG
bG9hdHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJlbmRlckJveCogcG9z
aXRpb25lZE9iamVjdDsKKyAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5l
bmQoKTsKKyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIHBvc2l0aW9uZWRPYmplY3QgPSAqaXQ7Cisg
ICAgICAgIGlmICghcG9zaXRpb25lZE9iamVjdC0+aXNGbG9hdGluZygpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRPYmplY3QtPm5lZWRzTGF5b3V0KCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAocG9zaXRpb25lZE9iamVj
dC0+c3R5bGUoKS0+aGFzU3RhdGljQmxvY2tQb3NpdGlvbihpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSAmJiBwb3NpdGlvbmVkT2JqZWN0LT5wYXJlbnQoKSAhPSB0aGlzICYmIHBvc2l0aW9uZWRP
YmplY3QtPnBhcmVudCgpLT5pc0Jsb2NrRmxvdygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgICAgICBpZiAodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNh
bEhlaWdodENoYW5nZWQoKSB8fCAodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbEhl
aWdodCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxPZmZzZXQobG9naWNh
bFRvcCgpKSAhPSBwYWdlTG9naWNhbE9mZnNldCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyQmxvY2s6
OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKICAgICBp
ZiAoIW1fcG9zaXRpb25lZE9iamVjdHMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAKICAgICBpZiAoaGFzQ29sdW1ucygpKQogICAgICAgICB2aWV3KCkt
PmxheW91dFN0YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCk7IC8vIFBvc2l0aW9u
ZWQgb2JqZWN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVtbiBmbG93LCBzbyB0aGV5IGRvbid0
IHBhZ2luYXRlIHdpdGggdGhlIGNvbHVtbnMuCiAKKyAgICBib29sIGRpZEZsb2F0aW5nQm94UmVs
YXlvdXQgPSBmYWxzZTsKKwogICAgIFJlbmRlckJveCogcjsKICAgICBJdGVyYXRvciBlbmQgPSBt
X3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3Np
dGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0yMjA1LDYgKzIy
NDMsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAg
ICAKICAgICAgICAgaWYgKCFyLT5uZWVkc0xheW91dCgpKQogICAgICAgICAgICAgci0+bWFya0Zv
clBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogVGVjaG5pY2FsbHkgd2UgY291bGQgY2hlY2sgdGhlIG9sZCBwbGFjZW1lbnQgYW5kIHRoZSBu
ZXcgcGxhY2VtZW50IG9mIHRoZSBib3ggYW5kIG9ubHkgaW52YWxpZGF0ZSBpZgorICAgICAgICAv
LyB0aGUgbWFyZ2luIGJveCBvZiB0aGUgb2JqZWN0IGFjdHVhbGx5IGNoYW5nZWQuCisgICAgICAg
IGlmIChyLT5uZWVkc0xheW91dCgpICYmIHItPmlzRmxvYXRpbmcoKSkKKyAgICAgICAgICAgIGRp
ZEZsb2F0aW5nQm94UmVsYXlvdXQgPSB0cnVlOwogCiAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUg
dG8gZG8gYSBmdWxsIGxheW91dC4gIFdlIGp1c3QgaGF2ZSB0byB1cGRhdGUgb3VyIHBvc2l0aW9u
LiBUcnkgdGhhdCBmaXJzdC4gSWYgd2UgaGF2ZSBzaHJpbmstdG8tZml0IHdpZHRoCiAgICAgICAg
IC8vIGFuZCB3ZSBoaXQgdGhlIGF2YWlsYWJsZSB3aWR0aCBjb25zdHJhaW50LCB0aGUgbGF5b3V0
SWZOZWVkZWQoKSB3aWxsIGNhdGNoIGl0IGFuZCBkbyBhIGZ1bGwgbGF5b3V0LgpAQCAtMjIxNSw2
ICsyMjU4LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAg
IAogICAgIGlmIChoYXNDb2x1bW5zKCkpCiAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
bV9jb2x1bW5JbmZvID0gY29sdW1uSW5mbygpOyAvLyBGSVhNRTogS2luZCBvZiBncm9zcy4gV2Ug
anVzdCBwdXQgdGhpcyBiYWNrIGludG8gdGhlIGxheW91dCBzdGF0ZSBzbyB0aGF0IHBvcCgpIHdp
bGwgd29yay4KKyAgICAgICAgCisgICAgcmV0dXJuIGRpZEZsb2F0aW5nQm94UmVsYXlvdXQ7CiB9
CiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtQb3NpdGlvbmVkT2JqZWN0c0ZvckxheW91dCgpCkBA
IC0zMTU2LDIwICszMjAxLDIyIEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogUmVuZGVy
QmxvY2sKIAogICAgIC8vIENyZWF0ZSB0aGUgc3BlY2lhbCBvYmplY3QgZW50cnkgJiBhcHBlbmQg
aXQgdG8gdGhlIGxpc3QKIAotICAgIEZsb2F0aW5nT2JqZWN0KiBuZXdPYmogPSBuZXcgRmxvYXRp
bmdPYmplY3Qoby0+c3R5bGUoKS0+ZmxvYXRpbmcoKSA9PSBMZWZ0RmxvYXQgPyBGbG9hdGluZ09i
amVjdDo6RmxvYXRMZWZ0IDogRmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQpOworICAgIEZsb2F0
aW5nT2JqZWN0KiBuZXdPYmogPSBuZXcgRmxvYXRpbmdPYmplY3Qoby0+c3R5bGUoKS0+ZmxvYXRp
bmcoKSk7CiAgICAgCiAgICAgLy8gT3VyIGxvY2F0aW9uIGlzIGlycmVsZXZhbnQgaWYgd2UncmUg
dW5zcGxpdHRhYmxlIG9yIG5vIHBhZ2luYXRpb24gaXMgaW4gZWZmZWN0LgogICAgIC8vIEp1c3Qg
Z28gYWhlYWQgYW5kIGxheSBvdXQgdGhlIGZsb2F0LgotICAgIGJvb2wgaXNDaGlsZFJlbmRlckJs
b2NrID0gby0+aXNSZW5kZXJCbG9jaygpOwotICAgIGlmIChpc0NoaWxkUmVuZGVyQmxvY2sgJiYg
IW8tPm5lZWRzTGF5b3V0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbEhl
aWdodENoYW5nZWQoKSkKLSAgICAgICAgby0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxz
ZSk7Ci0gICAgICAgIAotICAgIGJvb2wgYWZmZWN0ZWRCeVBhZ2luYXRpb24gPSBpc0NoaWxkUmVu
ZGVyQmxvY2sgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0Owot
ICAgIGlmICghYWZmZWN0ZWRCeVBhZ2luYXRpb24gfHwgaXNXcml0aW5nTW9kZVJvb3QoKSkgLy8g
V2UgYXJlIHVuc3BsaXR0YWJsZSBpZiB3ZSdyZSBhIGJsb2NrIGZsb3cgcm9vdC4KLSAgICAgICAg
by0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgby0+Y29tcHV0ZUxvZ2lj
YWxXaWR0aCgpOwotICAgICAgICBvLT5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMp
OworICAgIGlmICghby0+aXNQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgYm9vbCBpc0NoaWxkUmVu
ZGVyQmxvY2sgPSBvLT5pc1JlbmRlckJsb2NrKCk7CisgICAgICAgIGlmIChpc0NoaWxkUmVuZGVy
QmxvY2sgJiYgIW8tPm5lZWRzTGF5b3V0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdl
TG9naWNhbEhlaWdodENoYW5nZWQoKSkKKyAgICAgICAgICAgIG8tPnNldENoaWxkTmVlZHNMYXlv
dXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgIGJvb2wgYWZmZWN0ZWRCeVBh
Z2luYXRpb24gPSBpc0NoaWxkUmVuZGVyQmxvY2sgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5t
X3BhZ2VMb2dpY2FsSGVpZ2h0OworICAgICAgICBpZiAoIWFmZmVjdGVkQnlQYWdpbmF0aW9uIHx8
IGlzV3JpdGluZ01vZGVSb290KCkpIC8vIFdlIGFyZSB1bnNwbGl0dGFibGUgaWYgd2UncmUgYSBi
bG9jayBmbG93IHJvb3QuCisgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIG8tPmNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAg
ICAgIG8tPmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnModGhpcyk7CisgICAgICAgIH0KICAg
ICB9CiAgICAgc2V0TG9naWNhbFdpZHRoRm9yRmxvYXQobmV3T2JqLCBsb2dpY2FsV2lkdGhGb3JD
aGlsZChvKSArIG1hcmdpblN0YXJ0Rm9yQ2hpbGQobykgKyBtYXJnaW5FbmRGb3JDaGlsZChvKSk7
CiAKQEAgLTMyNzYsOCArMzMyMyw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3Rmxv
YXRzKCkKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICBGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CiAgICAgICAgIC8vIFRoZSBjb250YWluaW5nIGJs
b2NrIGlzIHJlc3BvbnNpYmxlIGZvciBwb3NpdGlvbmluZyBmbG9hdHMsIHNvIGlmIHdlIGhhdmUg
ZmxvYXRzIGluIG91cgotICAgICAgICAvLyBsaXN0IHRoYXQgY29tZSBmcm9tIHNvbWV3aGVyZSBl
bHNlLCBkbyBub3QgYXR0ZW1wdCB0byBwb3NpdGlvbiB0aGVtLgotICAgICAgICBpZiAoZmxvYXRp
bmdPYmplY3QtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpICE9IHRoaXMpCisgICAgICAg
IC8vIGxpc3QgdGhhdCBjb21lIGZyb20gc29tZXdoZXJlIGVsc2UsIGRvIG5vdCBhdHRlbXB0IHRv
IHBvc2l0aW9uIHRoZW0uIEFsc28gZG9uJ3QgYXR0ZW1wdCB0byBoYW5kbGUKKyAgICAgICAgLy8g
cG9zaXRpb25lZCBmbG9hdHMsIHNpbmNlIHRoZSBwb3NpdGlvbmluZyBsYXlvdXQgY29kZSBoYW5k
bGVzIHRob3NlLgorICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCktPmNvbnRh
aW5pbmdCbG9jaygpICE9IHRoaXMgfHwgZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCktPmlzUG9z
aXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgUmVuZGVyQm94KiBj
aGlsZEJveCA9IGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpOwpAQCAtMzU5MiwxNCArMzY0MCw0
NSBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrTGluZXNEaXJ0eUluQmxvY2tSCiAgICAgfQogfQog
Ci12b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCit2b2lkIFJlbmRlckJsb2NrOjphZGRQ
b3NpdGlvbmVkRmxvYXRzKCkKK3sKKyAgICBpZiAoIW1fcG9zaXRpb25lZE9iamVjdHMpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3Rz
LT5lbmQoKTsKKyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlckJveCogcG9zaXRpb25lZE9i
amVjdCA9ICppdDsKKyAgICAgICAgaWYgKCFwb3NpdGlvbmVkT2JqZWN0LT5pc0Zsb2F0aW5nKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBBU1NFUlQoIXBvc2l0aW9uZWRPYmpl
Y3QtPm5lZWRzTGF5b3V0KCkpOworCisgICAgICAgIC8vIElmIHdlJ3JlIGEgcG9zaXRpb25lZCBm
bG9hdCwgdGhlbiB3ZSBuZWVkIHRvIGluc2VydCBvdXJzZWx2ZXMgYXMgYSBmbG9hdGluZyBvYmpl
Y3QgYWxzby4gV2Ugb25seSBkbworICAgICAgICAvLyB0aGlzIGFmdGVyIHRoZSBwb3NpdGlvbmVk
IG9iamVjdCBoYXMgcmVjZWl2ZWQgYSBsYXlvdXQsIHNpbmNlIG90aGVyd2lzZSB0aGUgZGltZW5z
aW9ucyBhbmQgcGxhY2VtZW50CisgICAgICAgIC8vIHdvbid0IGJlIGNvcnJlY3QuCisgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGluc2VydEZsb2F0aW5nT2JqZWN0KHBv
c2l0aW9uZWRPYmplY3QpOworICAgICAgICBzZXRMb2dpY2FsTGVmdEZvckZsb2F0KGZsb2F0aW5n
T2JqZWN0LCBsb2dpY2FsTGVmdEZvckNoaWxkKHBvc2l0aW9uZWRPYmplY3QpIC0gbWFyZ2luTG9n
aWNhbExlZnRGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSk7CisgICAgICAgIHNldExvZ2ljYWxU
b3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbFRvcEZvckNoaWxkKHBvc2l0aW9uZWRP
YmplY3QpIC0gbWFyZ2luQmVmb3JlRm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOworICAgICAg
ICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRG
b3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9u
ZWRPYmplY3QpICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSk7CisgICAg
ICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc1BsYWNlZCh0cnVlKTsKKyAgICAgICAgCisgICAgICAg
IG1faGFzUG9zaXRpb25lZEZsb2F0cyA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFJlbmRlckJs
b2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKIHsKKyAgICAvLyBD
bGVhciBvdXIgcG9zaXRpb25lZCBmbG9hdHMgYm9vbGVhbi4KKyAgICBtX2hhc1Bvc2l0aW9uZWRG
bG9hdHMgPSBmYWxzZTsKKwogICAgIC8vIElubGluZSBibG9ja3MgYXJlIGNvdmVyZWQgYnkgdGhl
IGlzUmVwbGFjZWQoKSBjaGVjayBpbiB0aGUgYXZvaWRGbG9hdHMgbWV0aG9kLgogICAgIGlmIChh
dm9pZHNGbG9hdHMoKSB8fCBpc1Jvb3QoKSB8fCBpc1JlbmRlclZpZXcoKSB8fCBpc0Zsb2F0aW5n
T3JQb3NpdGlvbmVkKCkgfHwgaXNUYWJsZUNlbGwoKSkgewogICAgICAgICBpZiAobV9mbG9hdGlu
Z09iamVjdHMpIHsKICAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCkpOwogICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CiAgICAg
ICAgIH0KKyAgICAgICAgaWYgKGxheW91dFBhc3MgPT0gUG9zaXRpb25lZEZsb2F0TGF5b3V0UGFz
cykKKyAgICAgICAgICAgIGFkZFBvc2l0aW9uZWRGbG9hdHMoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzYxOSw2ICszNjk4LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9h
dHMoKQogICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKICAgICB9CiAKKyAgICBp
ZiAobGF5b3V0UGFzcyA9PSBQb3NpdGlvbmVkRmxvYXRMYXlvdXRQYXNzKQorICAgICAgICBhZGRQ
b3NpdGlvbmVkRmxvYXRzKCk7CisKICAgICAvLyBXZSBzaG91bGQgbm90IHByb2Nlc3MgZmxvYXRz
IGlmIHRoZSBwYXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3RoZXJ3aXNlLCB3ZSB3
aWxsIGFkZCAKICAgICAvLyBmbG9hdHMgaW4gYW4gaW52YWxpZCBjb250ZXh0LiBUaGlzIHdpbGwg
Y2F1c2UgYSBjcmFzaCBhcmlzaW5nIGZyb20gYSBiYWQgY2FzdCBvbiB0aGUgcGFyZW50LgogICAg
IC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vODA0OTc1Mz4sIHdoZXJlIGZsb2F0IHByb3BlcnR5IGlz
IGFwcGxpZWQgb24gYSB0ZXh0IG5vZGUgaW4gYSBTVkcuCkBAIC0zNjI4LDEzICszNzEwLDEzIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAgICAvLyBBdHRlbXB0IHRvIGxvY2F0
ZSBhIHByZXZpb3VzIHNpYmxpbmcgd2l0aCBvdmVyaGFuZ2luZyBmbG9hdHMuICBXZSBza2lwIGFu
eSBlbGVtZW50cyB0aGF0IGFyZQogICAgIC8vIG91dCBvZiBmbG93IChsaWtlIGZsb2F0aW5nL3Bv
c2l0aW9uZWQgZWxlbWVudHMpLCBhbmQgd2UgYWxzbyBza2lwIG92ZXIgYW55IG9iamVjdHMgdGhh
dCBtYXkgaGF2ZSBzaGlmdGVkCiAgICAgLy8gdG8gYXZvaWQgZmxvYXRzLgotICAgIGJvb2wgcGFy
ZW50SGFzRmxvYXRzID0gZmFsc2U7CiAgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gdG9S
ZW5kZXJCbG9jayhwYXJlbnQoKSk7CisgICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBwYXJlbnRC
bG9jay0+aGFzUG9zaXRpb25lZEZsb2F0cygpOwogICAgIFJlbmRlck9iamVjdCogcHJldiA9IHBy
ZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChwcmV2ICYmIChwcmV2LT5pc0Zsb2F0aW5nT3JQ
b3NpdGlvbmVkKCkgfHwgIXByZXYtPmlzQm94KCkgfHwgIXByZXYtPmlzUmVuZGVyQmxvY2soKSB8
fCB0b1JlbmRlckJsb2NrKHByZXYpLT5hdm9pZHNGbG9hdHMoKSkpIHsKICAgICAgICAgaWYgKHBy
ZXYtPmlzRmxvYXRpbmcoKSkKICAgICAgICAgICAgIHBhcmVudEhhc0Zsb2F0cyA9IHRydWU7Ci0g
ICAgICAgICBwcmV2ID0gcHJldi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIHByZXYgPSBw
cmV2LT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB9CiAKICAgICAvLyBGaXJzdCBhZGQgaW4gZmxv
YXRzIGZyb20gdGhlIHBhcmVudC4KQEAgLTM2NDUsMTcgKzM3MjcsMTQgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2xlYXJGbG9hdHMoKQogICAgIGludCBsb2dpY2FsTGVmdE9mZnNldCA9IDA7CiAgICAg
aWYgKHByZXYpCiAgICAgICAgIGxvZ2ljYWxUb3BPZmZzZXQgLT0gdG9SZW5kZXJCb3gocHJldikt
PmxvZ2ljYWxUb3AoKTsKLSAgICBlbHNlIHsKKyAgICBlbHNlIGlmICghcGFyZW50SGFzRmxvYXRz
KSB7CiAgICAgICAgIHByZXYgPSBwYXJlbnRCbG9jazsKICAgICAgICAgbG9naWNhbExlZnRPZmZz
ZXQgKz0gcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwogICAgIH0K
IAotICAgIC8vIEFkZCBvdmVyaGFuZ2luZyBmbG9hdHMgZnJvbSB0aGUgcHJldmlvdXMgUmVuZGVy
QmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGZsb2F0IHRoYXQgaW50cnVkZXMgaW50byBvdXIg
c3BhY2UuCi0gICAgaWYgKCFwcmV2IHx8ICFwcmV2LT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKKyAgICAvLyBBZGQgb3ZlcmhhbmdpbmcgZmxvYXRzIGZyb20gdGhlIHBy
ZXZpb3VzIFJlbmRlckJsb2NrLCBidXQgb25seSBpZiBpdCBoYXMgYSBmbG9hdCB0aGF0IGludHJ1
ZGVzIGludG8gb3VyIHNwYWNlLiAgICAKICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRl
ckJsb2NrKHByZXYpOwotICAgIGlmIChibG9jay0+bV9mbG9hdGluZ09iamVjdHMgJiYgYmxvY2st
Pmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gbG9naWNhbFRvcE9mZnNldCkKKyAgICBpZiAo
YmxvY2sgJiYgYmxvY2stPm1fZmxvYXRpbmdPYmplY3RzICYmIGJsb2NrLT5sb3dlc3RGbG9hdExv
Z2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkgPiBsb2dpY2FsVG9wT2Zmc2V0
KQogICAgICAgICBhZGRJbnRydWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBs
b2dpY2FsVG9wT2Zmc2V0KTsKIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CkBAIC02MTgy
LDcgKzYyNjEsMjEgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bWFyZ2luQWZ0ZXJGb3JDaAog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBjaGlsZC0+bWFyZ2luQm90dG9t
KCk7CiB9Ci0gICAgCisKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6Om1hcmdpbkxvZ2ljYWxMZWZ0
Rm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdAoreworICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gY2hpbGQtPm1hcmdpbkxl
ZnQoKTsKKyAgICByZXR1cm4gY2hpbGQtPm1hcmdpblRvcCgpOworfQorCitMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjptYXJnaW5Mb2dpY2FsUmlnaHRGb3JDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVj
dCogY2hpbGQpIGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisg
ICAgICAgIHJldHVybiBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKKyAgICByZXR1cm4gY2hpbGQtPm1h
cmdpbkJvdHRvbSgpOworfQorCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjptYXJnaW5TdGFydEZv
ckNoaWxkKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCkgY29uc3QKIHsKICAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTYzNTIsMjIgKzY0NDUsMjcgQEAgaW5saW5lIHZv
aWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0cwogICAgIG1fc2V0LmNsZWFyKCk7CiAgICAg
bV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50ID0gMDsKKyAg
ICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPSAwOwogfQogCiBpbmxpbmUgdm9pZCBSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3RzOjppbmNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVj
dDo6VHlwZSB0eXBlKQogeyAgICAKICAgICBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVjdDo6Rmxv
YXRMZWZ0KQogICAgICAgICBtX2xlZnRPYmplY3RzQ291bnQrKzsKLSAgICBlbHNlCisgICAgZWxz
ZSBpZiAodHlwZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodCkKICAgICAgICAgbV9yaWdo
dE9iamVjdHNDb3VudCsrOworICAgIGVsc2UKKyAgICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0c0Nv
dW50Kys7CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmRl
Y3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlIHR5cGUpCiB7CiAgICAgaWYg
KHR5cGUgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkKICAgICAgICAgbV9sZWZ0T2JqZWN0
c0NvdW50LS07Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHR5cGUgPT0gRmxvYXRpbmdPYmplY3Q6
OkZsb2F0UmlnaHQpCiAgICAgICAgIG1fcmlnaHRPYmplY3RzQ291bnQtLTsKKyAgICBlbHNlCisg
ICAgICAgIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudC0tOwogfQogCiBUZXh0UnVuIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0eWxlKiBz
dHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3Mg
ZmxhZ3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNp
b24gOTE3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtODksNyArODksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFn
ZUxvZ2ljYWxIZWlnaHQgPSAwKTsKKyAgICBlbnVtIEJsb2NrTGF5b3V0UGFzcyB7IE5vcm1hbExh
eW91dFBhc3MsIFBvc2l0aW9uZWRGbG9hdExheW91dFBhc3MgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwLCBCbG9ja0xheW91dFBhc3MgPSBOb3JtYWxMYXlvdXRQYXNzKTsKIAogICAgIHZvaWQgaW5z
ZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIHJlbW92ZVBvc2l0aW9u
ZWRPYmplY3QoUmVuZGVyQm94Kik7CkBAIC0xOTgsMTIgKzE5OSwxNSBAQCBwdWJsaWM6CiAgICAg
aW50IGxvZ2ljYWxXaWR0aEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsg
fQogICAgIGludCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkgeyByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5oZWlnaHQoKSA6IGNoaWxkLT53
aWR0aCgpOyB9CiAgICAgaW50IGxvZ2ljYWxUb3BGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7
IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPnkoKSA6IGNoaWxkLT54
KCk7IH0KKyAgICBpbnQgbG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPngoKSA6IGNoaWxkLT55KCk7
IH0KICAgICB2b2lkIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50
IGxvZ2ljYWxMZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSA9IERvTm90QXBwbHlMYXlvdXREZWx0
YSk7CiAgICAgdm9pZCBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50
IGxvZ2ljYWxUb3AsIEFwcGx5TGF5b3V0RGVsdGFNb2RlID0gRG9Ob3RBcHBseUxheW91dERlbHRh
KTsKICAgICBMYXlvdXRVbml0IG1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjaGlsZCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5BZnRlckZvckNoaWxkKFJl
bmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5T
dGFydEZvckNoaWxkKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCkgY29uc3Q7CiAgICAgTGF5
b3V0VW5pdCBtYXJnaW5FbmRGb3JDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNv
bnN0OworICAgIExheW91dFVuaXQgbWFyZ2luTG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3hN
b2RlbE9iamVjdCogY2hpbGQpIGNvbnN0OworICAgIExheW91dFVuaXQgbWFyZ2luTG9naWNhbFJp
Z2h0Rm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKICAgICB2b2lk
IHNldE1hcmdpblN0YXJ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCk7CiAg
ICAgdm9pZCBzZXRNYXJnaW5FbmRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0
KTsKICAgICB2b2lkIHNldE1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExh
eW91dFVuaXQpOwpAQCAtMjk1LDcgKzI5OSw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKIAotICAgIHZvaWQgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCBy
ZWxheW91dENoaWxkcmVuKTsKKyAgICBib29sIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKQEAgLTQwNiwxOCArNDEwLDI1IEBAIHByaXZhdGU6
CiAgICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRmxvYXRpbmdPYmplY3QpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6
Ci0gICAgICAgIC8vIE5vdGUgdGhhdCBUeXBlIHVzZXMgYml0cyBzbyB5b3UgY2FuIHVzZSBGbG9h
dEJvdGggYXMgYSBtYXNrIHRvIHF1ZXJ5IGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0LgotICAgICAg
ICBlbnVtIFR5cGUgeyBGbG9hdExlZnQgPSAxLCBGbG9hdFJpZ2h0ID0gMiwgRmxvYXRCb3RoID0g
MyB9OworICAgICAgICAvLyBGbG9hdExlZnRSaWdodCBpcyBhIG1hc2sgdG8gcXVlcnkgZm9yIGJv
dGggbGVmdCBhbmQgcmlnaHQgYnV0IG5vdCBwb3NpdGlvbmVkLgorICAgICAgICAvLyBGbG9hdEFs
bCBpcyBhIG1hc2sgdG8gcXVlcnkgZm9yIGFsbCB0eXBlcyBvZiBmbG9hdHMuCisgICAgICAgIGVu
dW0gVHlwZSB7IEZsb2F0TGVmdCA9IDEsIEZsb2F0UmlnaHQgPSAyLCBGbG9hdExlZnRSaWdodCA9
IDMsIEZsb2F0UG9zaXRpb25lZCA9IDQsIEZsb2F0QWxsID0gNyB9OwogCi0gICAgICAgIEZsb2F0
aW5nT2JqZWN0KFR5cGUgdHlwZSkKKyAgICAgICAgRmxvYXRpbmdPYmplY3QoRUZsb2F0IHR5cGUp
CiAgICAgICAgICAgICA6IG1fcmVuZGVyZXIoMCkKICAgICAgICAgICAgICwgbV9vcmlnaW5hdGlu
Z0xpbmUoMCkKICAgICAgICAgICAgICwgbV9wYWdpbmF0aW9uU3RydXQoMCkKLSAgICAgICAgICAg
ICwgbV90eXBlKHR5cGUpCi0gICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKKyAgICAg
ICAgICAgICwgbV9zaG91bGRQYWludChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0Rlc2NlbmRh
bnQoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNQbGFjZWQoZmFsc2UpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVCh0eXBlICE9IE5vRmxvYXQpOworICAgICAgICAgICAgaWYgKHR5cGUg
PT0gTGVmdEZsb2F0KQorICAgICAgICAgICAgICAgIG1fdHlwZSA9IEZsb2F0TGVmdDsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUmlnaHRGbG9hdCkKKyAgICAgICAgICAgICAgICBtX3R5
cGUgPSBGbG9hdFJpZ2h0OworICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBQb3NpdGlvbmVk
RmxvYXQpCisgICAgICAgICAgICAgICAgbV90eXBlID0gRmxvYXRQb3NpdGlvbmVkOwogICAgICAg
ICB9CiAKICAgICAgICAgRmxvYXRpbmdPYmplY3QoVHlwZSB0eXBlLCBjb25zdCBJbnRSZWN0JiBm
cmFtZVJlY3QpCkBAIC00MjYsNyArNDM3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgbV9m
cmFtZVJlY3QoZnJhbWVSZWN0KQogICAgICAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQog
ICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV9zaG91bGRQYWludCh0
cnVlKQorICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHR5cGUgIT0gRmxvYXRQb3NpdGlvbmVk
KQogICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxzZSkKICAgICAgICAgICAgICwgbV9p
c1BsYWNlZCh0cnVlKQogICAgICAgICB7CkBAIC00NTcsNyArNDY4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgUm9vdElubGluZUJveCogbV9vcmlnaW5hdGluZ0xpbmU7CiAgICAgICAgIEludFJlY3Qg
bV9mcmFtZVJlY3Q7CiAgICAgICAgIGludCBtX3BhZ2luYXRpb25TdHJ1dDsKLSAgICAgICAgdW5z
aWduZWQgbV90eXBlIDogMjsgLy8gVHlwZSAobGVmdCBvciByaWdodCBhbGlnbmVkKQorICAgICAg
ICB1bnNpZ25lZCBtX3R5cGUgOiAzOyAvLyBUeXBlIChsZWZ0L3JpZ2h0IGFsaWduZWQgb3IgcG9z
aXRpb25lZCkKICAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKICAgICAgICAgYm9vbCBt
X2lzRGVzY2VuZGFudCA6IDE7CiAgICAgICAgIGJvb2wgbV9pc1BsYWNlZCA6IDE7CkBAIC01ODEs
MTcgKzU5MiwyMyBAQCBwcml2YXRlOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBp
ZiBpdCBoYXMgcG9zaXRpb25lZCBhbnkgZmxvYXRzLgogICAgIGJvb2wgcG9zaXRpb25OZXdGbG9h
dHMoKTsKIAotICAgIHZvaWQgY2xlYXJGbG9hdHMoKTsKKyAgICBib29sIGhhc1Bvc2l0aW9uZWRG
bG9hdHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1Bvc2l0aW9uZWRGbG9hdHM7IH0KKyAgICB2b2lk
IGFkZFBvc2l0aW9uZWRGbG9hdHMoKTsKKyAgICBib29sIHBvc2l0aW9uZWRGbG9hdHNOZWVkUmVs
YXlvdXQoKTsKKworICAgIHZvaWQgY2xlYXJGbG9hdHMoQmxvY2tMYXlvdXRQYXNzKTsKICAgICBp
bnQgZ2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcyk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc092ZXJoYW5naW5n
RmxvYXRzKCkgeyByZXR1cm4gcGFyZW50KCkgJiYgIWhhc0NvbHVtbnMoKSAmJiBjb250YWluc0Zs
b2F0cygpICYmIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gbG9naWNhbEhlaWdodCgpOyB9
CisgICAgYm9vbCBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygpIHsgcmV0dXJuIHBhcmVudCgpICYmICFo
YXNDb2x1bW5zKCkgJiYgY29udGFpbnNGbG9hdHMoKSAmJiBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0
b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkgPiBsb2dpY2FsSGVpZ2h0KCk7IH0KICAgICBi
b29sIGhhc092ZXJoYW5naW5nRmxvYXQoUmVuZGVyQm94Kik7CiAgICAgdm9pZCBhZGRJbnRydWRp
bmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCk7CiAg
ICAgaW50IGFkZE92ZXJoYW5naW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGlsZCwgaW50IHhvZmZz
ZXQsIGludCB5b2Zmc2V0LCBib29sIG1ha2VDaGlsZFBhaW50T3RoZXJGbG9hdHMpOwogCi0gICAg
aW50IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSA9IEZsb2F0
aW5nT2JqZWN0OjpGbG9hdEJvdGgpIGNvbnN0OworICAgIGludCBsb3dlc3RGbG9hdExvZ2ljYWxC
b3R0b20oKSBjb25zdCB7IHJldHVybiBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdP
YmplY3Q6OkZsb2F0TGVmdFJpZ2h0KTsgfQorICAgIGludCBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0
b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkgY29uc3QgeyByZXR1cm4gbG93ZXN0RmxvYXRM
b2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpGbG9hdEFsbCk7IH0KKyAgICBpbnQgbG93ZXN0
RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlKSBjb25zdDsKICAgICBpbnQg
bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KGludCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVh
bCBib29sIGhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwpAQCAtNzgzLDYgKzgwMCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0cygpCiAgICAgICAgICAgICA6IG1fbGVm
dE9iamVjdHNDb3VudCgwKQogICAgICAgICAgICAgLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCisg
ICAgICAgICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCgwKQogICAgICAgICB7CiAgICAg
ICAgIH0KIApAQCAtNzkxLDEyICs4MDksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBkZWNy
ZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CiAgICAgICAgIGJvb2wgaGFz
TGVmdE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPYmplY3RzQ291bnQgPiAwOyB9CiAg
ICAgICAgIGJvb2wgaGFzUmlnaHRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodE9iamVj
dHNDb3VudCA+IDA7IH0KKyAgICAgICAgYm9vbCBoYXNQb3NpdGlvbmVkT2JqZWN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCA+IDA7IH0KICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXQmIHNldCgpIHsgcmV0dXJuIG1fc2V0OyB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBGbG9hdGluZ09iamVjdFNldCBtX3NldDsKICAgICAgICAgdW5zaWduZWQgbV9sZWZ0T2Jq
ZWN0c0NvdW50OwogICAgICAgICB1bnNpZ25lZCBtX3JpZ2h0T2JqZWN0c0NvdW50OworICAgICAg
ICB1bnNpZ25lZCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQ7CiAgICAgfTsKICAgICBPd25QdHI8
RmxvYXRpbmdPYmplY3RzPiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKQEAgLTg0Miw4ICs4NjIs
OSBAQCBwcml2YXRlOgogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAg
IFJlbmRlckxpbmVCb3hMaXN0IG1fbGluZUJveGVzOyAgIC8vIEFsbCBvZiB0aGUgcm9vdCBsaW5l
IGJveGVzIGNyZWF0ZWQgZm9yIHRoaXMgYmxvY2sgZmxvdy4gIEZvciBleGFtcGxlLCA8ZGl2Pkhl
bGxvPGJyPndvcmxkLjwvZGl2PiB3aWxsIGhhdmUgdHdvIHRvdGFsIGxpbmVzIGZvciB0aGUgPGRp
dj4uCiAKLSAgICBtdXRhYmxlIHNpZ25lZCBtX2xpbmVIZWlnaHQgOiAzMTsKKyAgICBtdXRhYmxl
IHNpZ25lZCBtX2xpbmVIZWlnaHQgOiAzMDsKICAgICBib29sIG1fYmVpbmdEZXN0cm95ZWQgOiAx
OworICAgIGJvb2wgbV9oYXNQb3NpdGlvbmVkRmxvYXRzIDogMTsKIAogICAgIC8vIFJlbmRlclJ1
YnlCYXNlIG9iamVjdHMgbmVlZCB0byBiZSBhYmxlIHRvIHNwbGl0IGFuZCBtZXJnZSwgbW92aW5n
IHRoZWlyIGNoaWxkcmVuIGFyb3VuZAogICAgIC8vIChjYWxsaW5nIG1vdmVDaGlsZFRvLCBtb3Zl
QWxsQ2hpbGRyZW5UbywgYW5kIG1ha2VDaGlsZHJlbk5vbklubGluZSkuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gOTE3NjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcg
KzM1NCw3IEBAIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3QKICAgICAg
ICAgc2V0SGFzQm94RGVjb3JhdGlvbnModHJ1ZSk7CiAKICAgICBzZXRQb3NpdGlvbmVkKHN0eWxl
KCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbiB8fCBzdHlsZSgpLT5wb3NpdGlvbigp
ID09IEZpeGVkUG9zaXRpb24pOwotICAgIHNldEZsb2F0aW5nKCFpc1Bvc2l0aW9uZWQoKSAmJiBz
dHlsZSgpLT5pc0Zsb2F0aW5nKCkpOworICAgIHNldEZsb2F0aW5nKHN0eWxlKCktPmlzRmxvYXRp
bmcoKSAmJiAoIWlzUG9zaXRpb25lZCgpIHx8IHN0eWxlKCktPmZsb2F0aW5nKCkgPT0gUG9zaXRp
b25lZEZsb2F0KSk7CiAKICAgICAvLyBXZSBhbHNvIGhhbmRsZSA8Ym9keT4gYW5kIDxodG1sPiwg
d2hvc2Ugb3ZlcmZsb3cgYXBwbGllcyB0byB0aGUgdmlld3BvcnQuCiAgICAgaWYgKHN0eWxlKCkt
Pm92ZXJmbG93WCgpICE9IE9WSVNJQkxFICYmICFpc1Jvb3RPYmplY3QgJiYgKGlzUmVuZGVyQmxv
Y2soKSB8fCBpc1RhYmxlUm93KCkgfHwgaXNUYWJsZVNlY3Rpb24oKSkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3guY3BwCShyZXZpc2lvbiA5MTc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyAr
MTk4LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmNvbXB1dAogICAgIHNl
dFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyRGVw
cmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGlu
dCAvKnBhZ2VIZWlnaHQgRklYTUU6IEltcGxlbWVudCAqLykKK3ZvaWQgUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdl
TG9naWNhbEhlaWdodCwgQmxvY2tMYXlvdXRQYXNzIGxheW91dFBhc3MpCiB7CiAgICAgQVNTRVJU
KG5lZWRzTGF5b3V0KCkpOwogCkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3g6OmxheW91dAogICAgIGlmIChwcmV2aW91c1NpemUuaGVpZ2h0KCkgIT0g
aGVpZ2h0KCkpCiAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgbGF5b3V0
UG9zaXRpb25lZE9iamVjdHMocmVsYXlvdXRDaGlsZHJlbiB8fCBpc1Jvb3QoKSk7CisgICAgYm9v
bCBuZWVkQW5vdGhlckxheW91dFBhc3MgPSBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhyZWxheW91
dENoaWxkcmVuIHx8IGlzUm9vdCgpKTsKIAogICAgIGlmICghaXNGbG9hdGluZ09yUG9zaXRpb25l
ZCgpICYmIGhlaWdodCgpID09IDApIHsKICAgICAgICAgLy8gV2UgYXJlIGEgYmxvY2sgd2l0aCBu
byBib3JkZXIgYW5kIHBhZGRpbmcgYW5kIGEgY29tcHV0ZWQgaGVpZ2h0CkBAIC0yODIsNyArMjgy
LDExIEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXQKICAgICAvLyBS
ZXBhaW50IHdpdGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gb3Vy
IG9sZCBib3VuZHMuCiAgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogCi0gICAg
c2V0TmVlZHNMYXlvdXQoZmFsc2UpOworICAgIGlmIChuZWVkQW5vdGhlckxheW91dFBhc3MgJiYg
bGF5b3V0UGFzcyA9PSBOb3JtYWxMYXlvdXRQYXNzKSB7CisgICAgICAgIHNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICBsYXlvdXRCbG9jayhmYWxzZSwgcGFnZUxvZ2lj
YWxIZWlnaHQpOworICAgIH0gZWxzZQorICAgICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9
CiAKIC8vIFRoZSBmaXJzdCB3YWxrIG92ZXIgb3VyIGtpZHMgaXMgdG8gZmluZCBvdXQgaWYgd2Ug
aGF2ZSBhbnkgZmxleGlibGUgY2hpbGRyZW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oCShyZXZpc2lvbiA5
MTc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjYWxjSG9yaXpvbnRhbFByZWZXaWR0aHMoKTsKICAgICB2b2lkIGNhbGNWZXJ0aWNhbFByZWZX
aWR0aHMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4sIGludCBwYWdlSGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUhlaWdodCA9IDAsIEJsb2NrTGF5b3V0UGFzcyA9
IE5vcm1hbExheW91dFBhc3MpOwogICAgIHZvaWQgbGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJl
bGF5b3V0Q2hpbGRyZW4pOwogICAgIHZvaWQgbGF5b3V0VmVydGljYWxCb3goYm9vbCByZWxheW91
dENoaWxkcmVuKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhp
YmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmgJKHJldmlzaW9uIDkxNzY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRmxleGlibGVCb3goKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuLCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9j
ayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlTG9naWNhbEhlaWdodCA9IDAsIEJsb2Nr
TGF5b3V0UGFzcyA9IE5vcm1hbExheW91dFBhc3MpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZp
c2lvbiA5MTc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyNDEsNyArMjI0MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZVNjcm9sbEluZm9BZnRlckwKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJs
b2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnNjcm9sbGJhcnNDaGFuZ2VkKGJveC0+aGFzQXV0b0hvcml6b250YWxTY3JvbGxiYXIoKSAm
JiBoYXZlSG9yaXpvbnRhbEJhciAhPSBob3Jpem9udGFsT3ZlcmZsb3csCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtPmhhc0F1dG9WZXJ0aWNhbFNjcm9s
bGJhcigpICYmIGhhdmVWZXJ0aWNhbEJhciAhPSB2ZXJ0aWNhbE92ZXJmbG93KTsKLSAgICAgICAg
ICAgICAgICAgICAgYmxvY2stPmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgICAg
ICBibG9jay0+bGF5b3V0QmxvY2sodHJ1ZSk7IC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSBwb3Np
dGlvbmVkIGZsb2F0cyB0cmlnZ2VyaW5nIGV4dHJhIHJlbGF5b3V0cy4KICAgICAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+bGF5b3V0KCk7CiAgICAg
ICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsK
</data>
<flag name="review"
          id="97524"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>