<?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>62177</bug_id>
          
          <creation_ts>2011-06-06 19:11:06 -0700</creation_ts>
          <short_desc>Switch paint to use IntPoint</short_desc>
          <delta_ts>2011-06-07 11:56:53 -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>
          
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>416224</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-06 19:11:06 -0700</bug_when>
    <thetext>Ongoing tx/ty removal. This is the &quot;big one&quot; for paint?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416225</commentid>
    <comment_count>1</comment_count>
      <attachid>96176</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-06 19:12:48 -0700</bug_when>
    <thetext>Created attachment 96176
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416629</commentid>
    <comment_count>2</comment_count>
      <attachid>96261</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-07 10:46:04 -0700</bug_when>
    <thetext>Created attachment 96261
WIP that works :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416631</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 10:48:37 -0700</bug_when>
    <thetext>Attachment 96261 did not pass style-queue:

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

Source/WebCore/rendering/RenderEmbeddedObject.h:60:  The parameter name &quot;paintInfo&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 73 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416669</commentid>
    <comment_count>4</comment_count>
      <attachid>96269</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-07 11:37:28 -0700</bug_when>
    <thetext>Created attachment 96269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416682</commentid>
    <comment_count>5</comment_count>
      <attachid>96269</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-07 11:47:11 -0700</bug_when>
    <thetext>Comment on attachment 96269
Patch

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

LGTM.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:699
&gt; +            IntSize localOffset = isBox() ? toRenderBox(this)-&gt;locationOffset() : IntSize();

I could have sworn there is a renderBoxRect() method somewhere which does something like this.  This is fine, just there may already be a helper for this.

&gt; Source/WebCore/rendering/RenderObject.cpp:1148
&gt; +void RenderObject::paint(PaintInfo&amp; /*paintInfo*/, const IntPoint&amp; /*paintOffset*/)

I don&apos;t think these comments add much of anything.

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:102
&gt; +    info.context-&gt;drawLine(IntPoint(adjustedPaintOffset.x(), adjustedPaintOffset.y() + topStart), IntPoint(adjustedPaintOffset.x() + offsetWidth(), adjustedPaintOffset.y() + topStart));

Locals or IntSize additions might make this cleaner. Can be done in later passes.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp:135
&gt; +    RenderSVGContainer::paint(info, IntPoint());

I wonder if paint() should take a default argument for this point now. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416689</commentid>
    <comment_count>6</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-07 11:54:32 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 96269 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96269&amp;action=review
&gt; 
&gt; LGTM.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:699
&gt; &gt; +            IntSize localOffset = isBox() ? toRenderBox(this)-&gt;locationOffset() : IntSize();
&gt; 
&gt; I could have sworn there is a renderBoxRect() method somewhere which does something like this.  This is fine, just there may already be a helper for this.

I just looked through the classes and didn&apos;t find anything that does this for me, but that doesn&apos;t mean I didn&apos;t miss it.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1148
&gt; &gt; +void RenderObject::paint(PaintInfo&amp; /*paintInfo*/, const IntPoint&amp; /*paintOffset*/)
&gt; 
&gt; I don&apos;t think these comments add much of anything.

I&apos;ll take them out :)

&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:102
&gt; &gt; +    info.context-&gt;drawLine(IntPoint(adjustedPaintOffset.x(), adjustedPaintOffset.y() + topStart), IntPoint(adjustedPaintOffset.x() + offsetWidth(), adjustedPaintOffset.y() + topStart));
&gt; 
&gt; Locals or IntSize additions might make this cleaner. Can be done in later passes.

You&apos;re right. I agree.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp:135
&gt; &gt; +    RenderSVGContainer::paint(info, IntPoint());
&gt; 
&gt; I wonder if paint() should take a default argument for this point now. :)

I smell another cleanup bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416692</commentid>
    <comment_count>7</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-07 11:56:53 -0700</bug_when>
    <thetext>Committed r88250: &lt;http://trac.webkit.org/changeset/88250&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96176</attachid>
            <date>2011-06-06 19:12:48 -0700</date>
            <delta_ts>2011-06-07 10:46:04 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>84064</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMxLDcg
KzIzMzEsNyBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpCiAgICAg
fQogCiAgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIGNvcm5lclJlY3QueCgpLCBjb3JuZXJSZWN0LnkoKSwgY29y
bmVyUmVjdCk7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQs
IGNvcm5lclJlY3QubG9jYXRpb24oKSwgY29ybmVyUmVjdCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lv
biA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDcsMTYgKzIwNywxNiBAQCB2b2lkIElubGluZUJveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluCiAgICAgYm9vbCBwcmVzZXJ2ZVBoYXNlID0gcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxlY3Rpb24gfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VU
ZXh0Q2xpcDsKICAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOwogICAgIGluZm8ucGhhc2Ug
PSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFpbnRQaGFzZUJsb2NrQmFja2dy
b3VuZDsKLSAgICByZW5kZXJlcigpLT5wYWludChpbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQ
b2ludC55KCkpOworICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAg
IGlmICghcHJlc2VydmVQaGFzZSkgewogICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNo
aWxkQmxvY2tCYWNrZ3JvdW5kczsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQoaW5mbywgY2hp
bGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQo
aW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxvYXQ7
Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBv
aW50LnkoKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwog
ICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91bmQ7Ci0gICAgICAgIHJlbmRl
cmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAg
ICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICBpbmZvLnBo
YXNlID0gUGFpbnRQaGFzZU91dGxpbmU7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8s
IGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnBh
aW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMzgsMTAg
KzIyMzgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hCiAgICAg
fQogfQogIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICB0eCArPSB4KCk7Ci0gICAg
dHkgKz0geSgpOworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNl
dCArIGxvY2F0aW9uKCk7CiAgICAgCiAgICAgUGFpbnRQaGFzZSBwaGFzZSA9IHBhaW50SW5mby5w
aGFzZTsKIApAQCAtMjI1MiwyMSArMjI1MSwyMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQ
YWludEluZm8mIHBhaW50CiAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVy
Zmxvd1JlY3QoKTsKICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93Qm94KTsKICAg
ICAgICAgb3ZlcmZsb3dCb3guaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBo
YXNlKSk7Ci0gICAgICAgIG92ZXJmbG93Qm94Lm1vdmUodHgsIHR5KTsKKyAgICAgICAgb3ZlcmZs
b3dCb3gubW92ZUJ5KGFkanVzdGVkUGFpbnRPZmZzZXQpOwogICAgICAgICBpZiAoIW92ZXJmbG93
Qm94LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGJvb2wgcHVzaGVkQ2xpcCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCBJ
bnRQb2ludCh0eCwgdHkpKTsKLSAgICBwYWludE9iamVjdChwYWludEluZm8sIEludFBvaW50KHR4
LCB0eSkpOworICAgIGJvb2wgcHVzaGVkQ2xpcCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZv
LCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICBwYWludE9iamVjdChwYWludEluZm8sIGFkanVz
dGVkUGFpbnRPZmZzZXQpOwogICAgIGlmIChwdXNoZWRDbGlwKQotICAgICAgICBwb3BDb250ZW50
c0NsaXAocGFpbnRJbmZvLCBwaGFzZSwgSW50UG9pbnQodHgsIHR5KSk7CisgICAgICAgIHBvcENv
bnRlbnRzQ2xpcChwYWludEluZm8sIHBoYXNlLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIAogICAg
IC8vIE91ciBzY3JvbGxiYXIgd2lkZ2V0cyBwYWludCBleGFjdGx5IHdoZW4gd2UgdGVsbCB0aGVt
IHRvLCBzbyB0aGF0IHRoZXkgd29yayBwcm9wZXJseSB3aXRoCiAgICAgLy8gei1pbmRleC4gIFdl
IHBhaW50IGFmdGVyIHdlIHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRo
ZSBzY3JvbGxiYXJzIHdpbGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVy
LgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSAmJiAocGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwaGFzZSA9
PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpICYmIHBhaW50SW5mby5zaG91bGRQYWlu
dFdpdGhpblJvb3QodGhpcykpCi0gICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9s
cyhwYWludEluZm8uY29udGV4dCwgSW50UG9pbnQodHgsIHR5KSwgcGFpbnRJbmZvLnJlY3QpOwor
ICAgICAgICBsYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQs
IGFkanVzdGVkUGFpbnRPZmZzZXQsIHBhaW50SW5mby5yZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0KQpAQCAtMjM3Miw3ICsyMzcxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRDb250ZW50cyhQYWludEluZgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY2hpbGRy
ZW5JbmxpbmUoKSkKLSAgICAgICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZvLCBw
YWludE9mZnNldC54KCksIHBhaW50T2Zmc2V0LnkoKSk7CisgICAgICAgIG1fbGluZUJveGVzLnBh
aW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgIGVsc2UKICAgICAgICAgcGFp
bnRDaGlsZHJlbihwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIH0KQEAgLTI0MTYsNyArMjQxNSw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKIAogICAgICAgICBJ
bnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKGNoaWxkLCBwYWludE9mZnNl
dCwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CiAgICAgICAgIGlmICghY2hpbGQt
Pmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nKCkpCi0gICAgICAg
ICAgICBjaGlsZC0+cGFpbnQoaW5mbywgY2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpKTsK
KyAgICAgICAgICAgIGNoaWxkLT5wYWludChpbmZvLCBjaGlsZFBvaW50KTsKIAogICAgICAgICAv
LyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJy
ZWFrIGFuZCBiYWlsLgogICAgICAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5J
bmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRl
cigpID09IFBCQUxXQVlTKTsKQEAgLTI1NjcsMTYgKzI1NjYsMTYgQEAgdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJgogICAgICAgICAgICAgUGFpbnRJbmZvIGN1cnJlbnRQ
YWludEluZm8ocGFpbnRJbmZvKTsKICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2Ug
PSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFpbnRQaGFzZUJsb2NrQmFja2dy
b3VuZDsKICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRmxvYXRGb3JXcml0
aW5nTW9kZShyLCBJbnRQb2ludChwYWludE9mZnNldC54KCkgKyB4UG9zaXRpb25Gb3JGbG9hdElu
Y2x1ZGluZ01hcmdpbihyKSAtIHItPm1fcmVuZGVyZXItPngoKSwgcGFpbnRPZmZzZXQueSgpICsg
eVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5tX3JlbmRlcmVyLT55KCkp
KTsKLSAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNo
aWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAgICAgICByLT5tX3JlbmRlcmVy
LT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKICAgICAgICAgICAgIGlmICgh
cHJlc2VydmVQaGFzZSkgewogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2Ug
PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwotICAgICAgICAgICAgICAgIHItPm1f
cmVuZGVyZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBv
aW50LnkoKSk7CisgICAgICAgICAgICAgICAgci0+bV9yZW5kZXJlci0+cGFpbnQoY3VycmVudFBh
aW50SW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5w
aGFzZSA9IFBhaW50UGhhc2VGbG9hdDsKLSAgICAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT5w
YWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCkpOwor
ICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNo
aWxkUG9pbnQpOwogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWlu
dFBoYXNlRm9yZWdyb3VuZDsKLSAgICAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT5wYWludChj
dXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCkpOworICAgICAg
ICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9p
bnQpOwogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNl
T3V0bGluZTsKLSAgICAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFp
bnRJbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCkpOworICAgICAgICAgICAgICAg
IHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBwcm90
ZWN0ZWQ6CiAKICAgICB2b2lkIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2lu
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBJbnRQ
b2ludCYpOwogCiAgICAgaW50IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaW50IHBvc2l0aW9u
LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50ID0gdHJ1ZSwgaW50KiBsb2dp
Y2FsSGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDE2ICs3NjcsMTQgQEAg
Ym9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlcwogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0gcGFpbnRpbmcgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi12b2lkIFJlbmRlckJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5KQordm9pZCBSZW5kZXJCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHko
KTsKLQorICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxv
Y2F0aW9uKCk7CiAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gSnVzdCBwYXNzIHBhaW50
IHRocm91Z2ggdG8gdGhlIGNoaWxkcmVuCiAgICAgUGFpbnRJbmZvIGNoaWxkSW5mbyhwYWludElu
Zm8pOwogICAgIGNoaWxkSW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsK
ICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRJbmZv
LCB0eCwgdHkpOworICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRJbmZvLCBhZGp1c3RlZFBhaW50
T2Zmc2V0KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveEZpbGxMYXllcnMoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICBJ
bnRSZWN0IHJlZmxlY3RlZFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQg
dHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IElu
dFBvaW50Jik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Niw5ICs2OTYs
OCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAgICAgICAg
ICBSb290SW5saW5lQm94KiByb290ID0gYm94LT5yb290KCk7CiAgICAgICAgICAgICBib3gtPnBh
aW50KGluZm8sIEludFBvaW50KHNjcm9sbGVkUGFpbnRSZWN0LngoKSAtIGJveC0+eCgpLCBzY3Jv
bGxlZFBhaW50UmVjdC55KCkgLSBib3gtPnkoKSksIHJvb3QtPmxpbmVUb3AoKSwgcm9vdC0+bGlu
ZUJvdHRvbSgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCB4ID0gaXNCb3go
KSA/IHRvUmVuZGVyQm94KHRoaXMpLT54KCkgOiAwOwotICAgICAgICAgICAgaW50IHkgPSBpc0Jv
eCgpID8gdG9SZW5kZXJCb3godGhpcyktPnkoKSA6IDA7Ci0gICAgICAgICAgICBwYWludChpbmZv
LCBzY3JvbGxlZFBhaW50UmVjdC54KCkgLSB4LCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSB5KTsK
KyAgICAgICAgICAgIEludFNpemUgbG9jYWxPZmZzZXQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3go
dGhpcyktPmxvY2F0aW9uT2Zmc2V0KCkgOiBJbnRTaXplKCk7CisgICAgICAgICAgICBwYWludChp
bmZvLCBzY3JvbGxlZFBhaW50UmVjdC5sb2NhdGlvbigpIC0gbG9jYWxPZmZzZXQpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgbWFzayBoYXMgYmVlbiBjcmVhdGVkLiAgTm93
IHdlIGp1c3QgbmVlZCB0byBjbGlwIHRvIGl0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMCwxNCArMTIwLDE0IEBAIFBhdGggUmVuZGVyRGV0YWlsc01hcmtlcjo6Z2V0
UGF0aChjb25zdCAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlbmRlckRldGFpbHNN
YXJrZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQg
UmVuZGVyRGV0YWlsc01hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7Ci0g
ICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAgIFJl
bmRlckJsb2NrOjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEludFBvaW50IGJveE9yaWdpbih0eCArIHgoKSwgdHkgKyB5KCkpOwor
ICAgIEludFBvaW50IGJveE9yaWdpbihwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgIElu
dFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpKTsKICAgICBvdmVyZmxvd1Jl
Y3QubW92ZUJ5KGJveE9yaWdpbik7CiAgICAgb3ZlcmZsb3dSZWN0LmluZmxhdGUobWF4aW1hbE91
dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckRldGFpbHNNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5oCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRGV0YWlsc01hcmtlciI7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNEZXRhaWxzTWFya2VyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAg
ICBib29sIGlzT3BlbigpIGNvbnN0OwogICAgIFBhdGggZ2V0Q2Fub25pY2FsUGF0aCgpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxNCArMTM1LDE0
IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldE1pc3NpbmdQbHUKICAgICByZXBhaW50
KCk7CiB9CiAKLXZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAg
ICAgaWYgKHBsdWdpbkNyYXNoZWRPcldhc01pc3NpbmcoKSkgewotICAgICAgICBSZW5kZXJSZXBs
YWNlZDo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICBSZW5kZXJSZXBsYWNlZDo6
cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgUmVuZGVyUGFydDo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgIFJlbmRl
clBhcnQ6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogfQogCiB2b2lkIFJlbmRlckVt
YmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRQb2ludCYgcGFpbnRPZmZzZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0VtYmVkZGVkT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFj
ZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50Jik7CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAko
cmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBSZW5kZXJGcmFt
ZVNldDo6cGFpbnRSb3dCb3JkZXIoY29ucwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJGcmFtZVNl
dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5k
ZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBw
YWludE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kKQogICAgICAgICByZXR1cm47CkBAIC0xMjcsOSArMTI3LDcgQEAgdm9pZCBSZW5kZXJG
cmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgIGlmICghY2hpbGQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIC8vIEFkZCBpbiBvdXIgb2Zmc2V0cy4KLSAgICB0eCArPSB4KCk7Ci0gICAg
dHkgKz0geSgpOworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNl
dCArIGxvY2F0aW9uKCk7CiAKICAgICBpbnQgcm93cyA9IGZyYW1lU2V0KCktPnRvdGFsUm93cygp
OwogICAgIGludCBjb2xzID0gZnJhbWVTZXQoKS0+dG90YWxDb2xzKCk7CkBAIC0xMzksMTAgKzEz
NywxMCBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludChQYWludEluZm8mIHBhCiAgICAgZm9y
IChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspIHsKICAgICAgICAgaW50IHhQb3MgPSAwOwogICAg
ICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbHM7IGMrKykgewotICAgICAgICAgICAgY2hpbGQt
PnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgIGNoaWxkLT5wYWludChwYWlu
dEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgeFBvcyArPSBtX2NvbHMu
bV9zaXplc1tjXTsKICAgICAgICAgICAgIGlmIChib3JkZXJUaGlja25lc3MgJiYgbV9jb2xzLm1f
YWxsb3dCb3JkZXJbYyArIDFdKSB7Ci0gICAgICAgICAgICAgICAgcGFpbnRDb2x1bW5Cb3JkZXIo
cGFpbnRJbmZvLCBJbnRSZWN0KHR4ICsgeFBvcywgdHkgKyB5UG9zLCBib3JkZXJUaGlja25lc3Ms
IGhlaWdodCgpKSk7CisgICAgICAgICAgICAgICAgcGFpbnRDb2x1bW5Cb3JkZXIocGFpbnRJbmZv
LCBJbnRSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgeFBvcywgYWRqdXN0ZWRQYWludE9m
ZnNldC55KCkgKyB5UG9zLCBib3JkZXJUaGlja25lc3MsIGhlaWdodCgpKSk7CiAgICAgICAgICAg
ICAgICAgeFBvcyArPSBib3JkZXJUaGlja25lc3M7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwpAQCAtMTUxLDcgKzE0OSw3IEBAIHZvaWQg
UmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgfQogICAgICAgICB5
UG9zICs9IG1fcm93cy5tX3NpemVzW3JdOwogICAgICAgICBpZiAoYm9yZGVyVGhpY2tuZXNzICYm
IG1fcm93cy5tX2FsbG93Qm9yZGVyW3IgKyAxXSkgewotICAgICAgICAgICAgcGFpbnRSb3dCb3Jk
ZXIocGFpbnRJbmZvLCBJbnRSZWN0KHR4LCB0eSArIHlQb3MsIHdpZHRoKCksIGJvcmRlclRoaWNr
bmVzcykpOworICAgICAgICAgICAgcGFpbnRSb3dCb3JkZXIocGFpbnRJbmZvLCBJbnRSZWN0KGFk
anVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHlQb3MsIHdp
ZHRoKCksIGJvcmRlclRoaWNrbmVzcykpOwogICAgICAgICAgICAgeVBvcyArPSBib3JkZXJUaGlj
a25lc3M7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWVTZXQuaAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAgICAg
dmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikg
Y29uc3Q7CiAKICAgICBpbmxpbmUgSFRNTEZyYW1lU2V0RWxlbWVudCogZnJhbWVTZXQoKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNp
b24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDksOSArMzA5LDkgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRS
ZXBsYWNlZChQYWludEluZgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJJbWFnZTo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsK
LSAgICBSZW5kZXJSZXBsYWNlZDo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgIFJlbmRl
clJlcGxhY2VkOjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAKICAgICBpZiAo
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lKQogICAgICAgICBwYWludEFyZWFF
bGVtZW50Rm9jdXNSaW5nKHBhaW50SW5mbyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuaAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0
IEludFJlY3QqID0gMCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRJbnRvUmVjdChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIGJvb2wgaXNMb2dpY2FsV2lkdGhTcGVjaWZpZWQo
KSBjb25zdDsKICAgICBib29sIGlzTG9naWNhbEhlaWdodFNwZWNpZmllZCgpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDg4
MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2MCw5ICs0NjAsOSBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRU
b0NvbnRpbnVhdGlvCiAgICAgfQogfQogCi12b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0g
ICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZvLCB0eCwgdHkpOworICAgIG1fbGlu
ZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogfQogCiB2b2lkIFJl
bmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfSAvLyBEbyBub3RoaW5nIGZvciBsYXlvdXQoKQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDg4MjAy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMzNCw3ICsyMzM0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxD
b3JuZXIoR3JhcAogICAgIH0KIAogICAgIGlmIChtX3Njcm9sbENvcm5lcikgewotICAgICAgICBt
X3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldC54KCksIHBh
aW50T2Zmc2V0LnkoKSwgYWJzUmVjdCk7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludElu
dG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMjM2Myw3ICsyMzYzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNp
emVyKEdyYXBoaWNzQwogICAgIH0KICAgICAKICAgICBpZiAobV9yZXNpemVyKSB7Ci0gICAgICAg
IG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldC54KCksIHBhaW50
T2Zmc2V0LnkoKSwgYWJzUmVjdCk7CisgICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChj
b250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTI1OTcsMTAgKzI1OTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRl
ckxheWVyCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCiAg
ICAgSW50UmVjdCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRs
aW5lUmVjdDsKICAgICBjYWxjdWxhdGVSZWN0cyhyb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LCBs
YXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgbG9j
YWxQYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cyk7Ci0gICAgaW50IHgg
PSBsYXllckJvdW5kcy54KCk7Ci0gICAgaW50IHkgPSBsYXllckJvdW5kcy55KCk7Ci0gICAgaW50
IHR4ID0geCAtIHJlbmRlckJveFgoKTsKLSAgICBpbnQgdHkgPSB5IC0gcmVuZGVyQm94WSgpOwor
ICAgIEludFBvaW50IHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2NhdGlvbigp
IC0gcmVuZGVyQm94TG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgIC8vIEVuc3VyZSBvdXIgbGlzdHMgYXJlIHVwLXRvLWRhdGUuCiAgICAgdXBkYXRlQ29tcG9z
aXRpbmdBbmRMYXllckxpc3RzSWZOZWVkZWQoKTsKQEAgLTI2MzQsNyArMjYzMSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIKIAogICAgICAgICAvLyBQYWludCB0
aGUgYmFja2dyb3VuZC4KICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhwLCBkYW1hZ2VSZWN0
LCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBmYWxzZSwgcGFpbnRpbmdSb290Rm9yUmVuZGVy
ZXIsIDApOwotICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7Cisg
ICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogCiAgICAg
ICAgIC8vIFJlc3RvcmUgdGhlIGNsaXAuCiAgICAgICAgIHJlc3RvcmVDbGlwKHAsIHBhaW50RGly
dHlSZWN0LCBkYW1hZ2VSZWN0KTsKQEAgLTI2NTQsMTUgKzI2NTEsMTUgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllcgogICAgICAgICBQYWludEluZm8gcGFpbnRJbmZv
KHAsIGNsaXBSZWN0VG9BcHBseSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb25Pbmx5ID8gUGFpbnRQaGFzZVNlbGVjdGlvbiA6IFBhaW50UGhhc2VD
aGlsZEJsb2NrQmFja2dyb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JjZUJsYWNrVGV4dCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIDApOwotICAg
ICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAgIHJlbmRl
cmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICBpZiAoIXNlbGVj
dGlvbk9ubHkpIHsKICAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGbG9h
dDsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAg
ICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91bmQ7CiAgICAgICAg
ICAgICBwYWludEluZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IG92ZXJsYXBUZXN0UmVxdWVzdHM7
Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAg
ICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAg
ICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBOb3cgcmVzdG9yZSBvdXIgY2xpcC4KQEAgLTI2NzMsNyArMjY3MCw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIKICAgICAgICAgLy8gUGFpbnQg
b3VyIG93biBvdXRsaW5lCiAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8ocCwgb3V0bGluZVJl
Y3QsIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgZmFsc2UsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
LCAwKTsKICAgICAgICAgc2V0Q2xpcChwLCBwYWludERpcnR5UmVjdCwgb3V0bGluZVJlY3QpOwot
ICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAgIHJl
bmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICByZXN0b3Jl
Q2xpcChwLCBwYWludERpcnR5UmVjdCwgb3V0bGluZVJlY3QpOwogICAgIH0KICAgICAKQEAgLTI2
ODgsNyArMjY4NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIK
IAogICAgICAgICAvLyBQYWludCB0aGUgbWFzay4KICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5m
byhwLCBkYW1hZ2VSZWN0LCBQYWludFBoYXNlTWFzaywgZmFsc2UsIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyLCAwKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkp
OworICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAg
ICAgICAgCiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGNsaXAuCiAgICAgICAgIHJlc3RvcmVDbGlw
KHAsIHBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKQEAgLTI2OTYsNyArMjY5Myw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIKIAogICAgIGlmIChwYWludGlu
Z092ZXJsYXlTY3JvbGxiYXJzKSB7CiAgICAgICAgIHNldENsaXAocCwgcGFpbnREaXJ0eVJlY3Qs
IGRhbWFnZVJlY3QpOwotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMocCwgSW50UG9pbnQo
dHgsIHR5KSwgZGFtYWdlUmVjdCwgdHJ1ZSk7CisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9s
cyhwLCBwYWludE9mZnNldCwgZGFtYWdlUmVjdCwgdHJ1ZSk7CiAgICAgICAgIHJlc3RvcmVDbGlw
KHAsIHBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA4
ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDk5LDggKzEwOTksNyBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cGFpbnRJbnRvTGF5ZXIoCiAgICAgSW50UmVjdCBsYXllckJvdW5kcywgZGFtYWdlUmVj
dCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKICAgICBtX293bmluZ0xheWVyLT5jYWxj
dWxhdGVSZWN0cyhyb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdl
UmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCk7CiAKLSAgICBpbnQgdHggPSBsYXll
ckJvdW5kcy54KCkgLSBtX293bmluZ0xheWVyLT5yZW5kZXJCb3hYKCk7Ci0gICAgaW50IHR5ID0g
bGF5ZXJCb3VuZHMueSgpIC0gbV9vd25pbmdMYXllci0+cmVuZGVyQm94WSgpOworICAgIEludFBv
aW50IHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gbV9vd25p
bmdMYXllci0+cmVuZGVyQm94TG9jYXRpb24oKSk7CiAKICAgICAvLyBJZiB0aGlzIGxheWVyJ3Mg
cmVuZGVyZXIgaXMgYSBjaGlsZCBvZiB0aGUgcGFpbnRpbmdSb290LCB3ZSByZW5kZXIgdW5jb25k
aXRpb25hbGx5LCB3aGljaAogICAgIC8vIGlzIGRvbmUgYnkgcGFzc2luZyBhIG5pbCBwYWludGlu
Z1Jvb3QgZG93biB0byBvdXIgcmVuZGVyZXIgKGFzIGlmIG5vIHBhaW50aW5nUm9vdCB3YXMgZXZl
ciBzZXQpLgpAQCAtMTExOCw3ICsxMTE3LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBh
aW50SW50b0xheWVyKAogICAgICAgICBzZXRDbGlwKGNvbnRleHQsIHBhaW50RGlydHlSZWN0LCBk
YW1hZ2VSZWN0KTsKICAgICAgICAgCiAgICAgICAgIFBhaW50SW5mbyBpbmZvKGNvbnRleHQsIGRh
bWFnZVJlY3QsIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIGZhbHNlLCBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlciwgMCk7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIHR4LCB0eSk7
CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKIAogICAgICAg
ICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhl
bSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAogICAgICAgICAvLyB6LWluZGV4
LiAgV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRo
YXQgdGhlIHNjcm9sbGJhcnMgd2lsbApAQCAtMTE0MSwxNyArMTE0MCwxNyBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoCiAgICAgICAgIFBhaW50SW5mbyBwYWludElu
Zm8oY29udGV4dCwgY2xpcFJlY3RUb0FwcGx5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9ubHkgPyBQYWludFBoYXNlU2VsZWN0aW9uIDogUGFp
bnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcmNlQmxhY2tUZXh0LCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwg
MCk7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAg
ICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAKICAgICAgICAg
aWYgKCFzZWxlY3Rpb25Pbmx5KSB7CiAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWlu
dFBoYXNlRmxvYXQ7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4
LCB0eSk7CisgICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zm
c2V0KTsKIAogICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91
bmQ7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7Cisg
ICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIAog
ICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXM7Ci0g
ICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAg
ICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIE5vdyByZXN0b3JlIG91ciBjbGlwLgpAQCAtMTE2MSw3ICsxMTYwLDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKAogICAgICAgICAgICAg
Ly8gUGFpbnQgb3VyIG93biBvdXRsaW5lCiAgICAgICAgICAgICBQYWludEluZm8gcGFpbnRJbmZv
KGNvbnRleHQsIG91dGxpbmVSZWN0LCBQYWludFBoYXNlU2VsZk91dGxpbmUsIGZhbHNlLCBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlciwgMCk7CiAgICAgICAgICAgICBzZXRDbGlwKGNvbnRleHQsIHBh
aW50RGlydHlSZWN0LCBvdXRsaW5lUmVjdCk7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWlu
dChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIHBh
aW50RGlydHlSZWN0LCBvdXRsaW5lUmVjdCk7CiAgICAgICAgIH0KIApAQCAtMTE3OCw3ICsxMTc3
LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKAogCiAgICAgICAg
ICAgICAvLyBQYWludCB0aGUgbWFzay4KICAgICAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8o
Y29udGV4dCwgZGFtYWdlUmVjdCwgUGFpbnRQaGFzZU1hc2ssIGZhbHNlLCBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlciwgMCk7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8s
IHR4LCB0eSk7CisgICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50
T2Zmc2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2xpcC4K
ICAgICAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIHBhaW50RGlydHlSZWN0LCBkYW1hZ2VS
ZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hM
aXN0LmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDcgQEAgYm9v
bCBSZW5kZXJMaW5lQm94TGlzdDo6bGluZUludGVyc2VjdHNEaQogICAgIHJldHVybiByYW5nZUlu
dGVyc2VjdHNSZWN0KHJlbmRlcmVyLCBsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tLCBwYWludElu
Zm8ucmVjdCwgb2Zmc2V0KTsKIH0KIAotdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4
LCBpbnQgdHkpIGNvbnN0Cit2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVuZGVyZXIsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2lu
dCYgcGFpbnRPZmZzZXQpIGNvbnN0CiB7CiAgICAgLy8gT25seSBwYWludCBkdXJpbmcgdGhlIGZv
cmVncm91bmQvc2VsZWN0aW9uIHBoYXNlcy4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBh
aW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0
aW9uICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlT3V0bGluZSAKQEAgLTIxOSw3ICsy
MTksNyBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgUmVu
ZGVyVmlldyogdiA9IHJlbmRlcmVyLT52aWV3KCk7CiAgICAgYm9vbCB1c2VQcmludFJlY3QgPSAh
di0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIGludCBvdXRsaW5lU2l6ZSA9IHJlbmRlcmVy
LT5tYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKLSAgICBpZiAoIWFueUxpbmVJ
bnRlcnNlY3RzUmVjdChyZW5kZXJlciwgcGFpbnRJbmZvLnJlY3QsIEludFBvaW50KHR4LCB0eSks
IHVzZVByaW50UmVjdCwgb3V0bGluZVNpemUpKQorICAgIGlmICghYW55TGluZUludGVyc2VjdHNS
ZWN0KHJlbmRlcmVyLCBwYWludEluZm8ucmVjdCwgcGFpbnRPZmZzZXQsIHVzZVByaW50UmVjdCwg
b3V0bGluZVNpemUpKQogICAgICAgICByZXR1cm47CiAKICAgICBQYWludEluZm8gaW5mbyhwYWlu
dEluZm8pOwpAQCAtMjQzLDIzICsyNDMsMjMgQEAgdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFp
bnQoUmVuZGVyQm94TQogICAgICAgICAgICAgICAgIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA9
IG1heChib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2ssIHJvb3QtPmxpbmVCb3R0b20oKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrIC0gdG9w
Rm9yUGFnaW5hdGlvbkNoZWNrIDw9IHYtPnByaW50UmVjdCgpLmhlaWdodCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHR5ICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+cHJpbnRSZWN0
KCkubWF4WSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGJvdHRv
bUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLm1heFkoKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoUm9vdElubGluZUJveCogbmV4dFJvb3RCb3ggPSBjdXJyLT5yb290KCkt
Pm5leHRSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21Gb3JQYWdpbmF0
aW9uQ2hlY2sgPSBtaW4oYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrLCBtaW4obmV4dFJvb3RCb3gt
PmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpLCBuZXh0Um9vdEJveC0+bGluZVRvcCgpKSk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0eSArIGJvdHRvbUZvclBhZ2lu
YXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLm1heFkoKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAodHkgKyB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPCB2LT50cnVuY2F0ZWRBdCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgdi0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgdG9wRm9yUGFn
aW5hdGlvbkNoZWNrLCByZW5kZXJlcik7CisgICAgICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0
LnkoKSArIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLm1heFkoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsgdG9wRm9yUGFnaW5h
dGlvbkNoZWNrIDwgdi0+dHJ1bmNhdGVkQXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHYt
PnNldEJlc3RUcnVuY2F0ZWRBdChwYWludE9mZnNldC55KCkgKyB0b3BGb3JQYWdpbmF0aW9uQ2hl
Y2ssIHJlbmRlcmVyKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRv
IHRydW5jYXRlLCBkb24ndCBwYWludC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5ICsgdG9w
Rm9yUGFnaW5hdGlvbkNoZWNrID49IHYtPnRydW5jYXRlZEF0KCkpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChwYWludE9mZnNldC55KCkgKyB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPj0gdi0+dHJ1
bmNhdGVkQXQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChsaW5lSW50ZXJz
ZWN0c0RpcnR5UmVjdChyZW5kZXJlciwgY3VyciwgaW5mbywgSW50UG9pbnQodHgsIHR5KSkpIHsK
KyAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RzRGlydHlSZWN0KHJlbmRlcmVyLCBjdXJyLCBpbmZv
LCBwYWludE9mZnNldCkpIHsKICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QgPSBjdXJy
LT5yb290KCk7Ci0gICAgICAgICAgICBjdXJyLT5wYWludChpbmZvLCBJbnRQb2ludCh0eCwgdHkp
LCByb290LT5saW5lVG9wKCksIHJvb3QtPmxpbmVCb3R0b20oKSk7CisgICAgICAgICAgICBjdXJy
LT5wYWludChpbmZvLCBwYWludE9mZnNldCwgcm9vdC0+bGluZVRvcCgpLCByb290LT5saW5lQm90
dG9tKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjcsNyArMjY3LDcgQEAgdm9pZCBSZW5k
ZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgICAgICBMaXN0SGFzaFNldDxSZW5k
ZXJJbmxpbmUqPjo6aXRlcmF0b3IgZW5kID0gaW5mby5vdXRsaW5lT2JqZWN0cy0+ZW5kKCk7CiAg
ICAgICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj46Oml0ZXJhdG9yIGl0ID0gaW5m
by5vdXRsaW5lT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBSZW5kZXJJbmxpbmUqIGZsb3cgPSAqaXQ7Ci0gICAgICAgICAgICBmbG93LT5wYWludE91dGxp
bmUoaW5mby5jb250ZXh0LCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICAgICAgICAgIGZsb3ctPnBh
aW50T3V0bGluZShpbmZvLmNvbnRleHQsIHBhaW50T2Zmc2V0KTsKICAgICAgICAgfQogICAgICAg
ICBpbmZvLm91dGxpbmVPYmplY3RzLT5jbGVhcigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5oCShyZXZpc2lvbiA4ODIwMikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpcnR5TGluZUJveGVzKCk7
CiAgICAgdm9pZCBkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChSZW5kZXJPYmplY3QqIHBhcmVu
dCwgUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAKLSAgICB2b2lkIHBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiwgUGFpbnRJbmZvJiwgaW50IHgsIGludCB5KSBjb25zdDsKKyAgICB2b2lkIHBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiwgUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dDsKICAgICBib29sIGhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBjb25z
dDsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDEyICszNDQsMTIg
QEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKAogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJMaXN0SXRlbTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5KQordm9pZCBSZW5kZXJMaXN0SXRlbTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoIWxvZ2ljYWxIZWlnaHQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyQmxvY2s6OnBhaW50KHBhaW50SW5mbywg
dHgsIHR5KTsKKyAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7
CiB9CiAKIGNvbnN0IFN0cmluZyYgUmVuZGVyTGlzdEl0ZW06Om1hcmtlclRleHQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgJKHJldmlzaW9u
IDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZGVzdHJveSgpOwogCiAgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdp
ZHRocygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDEsNyArMTEwMSw3IEBAIElu
dFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6bG9jYWxTZWxlY3Rpb24KICAgICByZXR1cm4gSW50UmVj
dChuZXdMb2dpY2FsVG9wLCAwLCByb290LT5zZWxlY3Rpb25IZWlnaHQoKSwgaGVpZ2h0KCkpOwog
fQogCi12b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CkBAIC0x
MTA5LDcgKzExMDksNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYg
CiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1
cm47CiAKLSAgICBJbnRQb2ludCBib3hPcmlnaW4odHggKyB4KCksIHR5ICsgeSgpKTsKKyAgICBJ
bnRQb2ludCBib3hPcmlnaW4ocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKICAgICBJbnRSZWN0
IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QoKSk7CiAgICAgb3ZlcmZsb3dSZWN0Lm1v
dmVCeShib3hPcmlnaW4pOwogICAgIG92ZXJmbG93UmVjdC5pbmZsYXRlKG1heGltYWxPdXRsaW5l
U2l6ZShwYWludEluZm8ucGhhc2UpKTsKQEAgLTExMjcsNyArMTEyNyw3IEBAIHZvaWQgUmVuZGVy
TGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAoaXNJbWFnZSgpKSB7CiAjaWYg
UExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0
b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgICAg
ICBwYWludEN1c3RvbUhpZ2hsaWdodChJbnRQb2ludCh0eCwgdHkpLCBzdHlsZSgpLT5oaWdobGln
aHQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChwYWludE9mZnNl
dCwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCiAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZShtX2ltYWdlLT5pbWFnZSh0aGlzLCBtYXJrZXIuc2l6ZSgpKS5nZXQoKSwgc3R5
bGUoKS0+Y29sb3JTcGFjZSgpLCBtYXJrZXIpOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUo
KSAhPSBTZWxlY3Rpb25Ob25lKSB7CkBAIC0xMTQxLDcgKzExNDEsNyBAQCB2b2lkIFJlbmRlckxp
c3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEZJ
WE1FOiBwYWludCBnYXAgYmV0d2VlbiBtYXJrZXIgYW5kIGxpc3QgaXRlbSBwcm9wZXIKICAgICBp
ZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KEludFBv
aW50KHR4LCB0eSksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKKyAgICAgICAgcGFpbnRD
dXN0b21IaWdobGlnaHQocGFpbnRPZmZzZXQsIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsK
ICNlbmRpZgogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCShyZXZp
c2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgYm9vbCBpc0xpc3RNYXJrZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0NSw3ICsxMTQ1LDcgQEAgSW50UmVj
dCBSZW5kZXJPYmplY3Q6OnBhaW50aW5nUm9vdFJlY3QoSQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpwYWludChQYWludEluZm8mIC8qcGFpbnRJbmZvKi8sIGlu
dCAvKnR4Ki8sIGludCAvKnR5Ki8pCit2b2lkIFJlbmRlck9iamVjdDo6cGFpbnQoUGFpbnRJbmZv
JiAvKnBhaW50SW5mbyovLCBjb25zdCBJbnRQb2ludCYgLypwYWludE9mZnNldCovKQogewogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA4
ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTI4LDcgKzUyOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZpbGxJ
bWFnZXMoY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKik7CiAgICAgdm9pZCB1cGRh
dGVJbWFnZShTdHlsZUltYWdlKiwgU3R5bGVJbWFnZSopOwogCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIC8vIFJlY3Vyc2l2ZSBmdW5jdGlv
biB0aGF0IGNvbXB1dGVzIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdCBhbmQg
YWxsIGl0cyBkZXNjZW5kYW50cy4KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDg4
MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsMjMgKzk0LDIyIEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmludHJp
bnNpY1NpemVDaGFuZ2UKICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
IH0KIAotdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBpZiAoIXNob3VsZFBh
aW50KHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5KSkpCisgICAgaWYgKCFzaG91bGRQYWludChw
YWludEluZm8sIHBhaW50T2Zmc2V0KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHR4ICs9
IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICAKICAgICBpZiAoaGFzQm94RGVjb3JhdGlv
bnMoKSAmJiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkgCi0gICAgICAgIHBhaW50Qm94RGVj
b3JhdGlvbnMocGFpbnRJbmZvLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICAgICAgcGFpbnRCb3hE
ZWNvcmF0aW9ucyhwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogICAgIAogICAgIGlm
IChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU1hc2spIHsKLSAgICAgICAgcGFpbnRNYXNr
KHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5KSk7CisgICAgICAgIHBhaW50TWFzayhwYWludElu
Zm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
SW50UmVjdCBwYWludFJlY3QgPSBJbnRSZWN0KEludFBvaW50KHR4LCB0eSksIHNpemUoKSk7Cisg
ICAgSW50UmVjdCBwYWludFJlY3QgPSBJbnRSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQsIHNpemUo
KSk7CiAgICAgaWYgKChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGlu
ZVdpZHRoKCkpCiAgICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgcGFpbnRS
ZWN0KTsKICAgICAKQEAgLTEyOSw3ICsxMjgsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWlu
dChQYWludEluZm8mIHBhCiAKICAgICBib29sIGNvbXBsZXRlbHlDbGlwcGVkT3V0ID0gZmFsc2U7
CiAgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlclJhZGl1cygpKSB7Ci0gICAgICAgIEludFJlY3Qg
Ym9yZGVyUmVjdCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAg
IEludFJlY3QgYm9yZGVyUmVjdCA9IEludFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgp
KTsKIAogICAgICAgICBpZiAoYm9yZGVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb21w
bGV0ZWx5Q2xpcHBlZE91dCA9IHRydWU7CkBAIC0xNDEsNyArMTQwLDcgQEAgdm9pZCBSZW5kZXJS
ZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgIH0KIAogICAgIGlmICghY29tcGxldGVs
eUNsaXBwZWRPdXQpIHsKLSAgICAgICAgcGFpbnRSZXBsYWNlZChwYWludEluZm8sIEludFBvaW50
KHR4LCB0eSkpOworICAgICAgICBwYWludFJlcGxhY2VkKHBhaW50SW5mbywgYWRqdXN0ZWRQYWlu
dE9mZnNldCk7CiAKICAgICAgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlclJhZGl1cygpKQogICAg
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTE1MSw3ICsxNTAsNyBA
QCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhCiAgICAgLy8gc3Vycm91
bmRpbmcgY29udGVudC4KICAgICBpZiAoZHJhd1NlbGVjdGlvblRpbnQpIHsKICAgICAgICAgSW50
UmVjdCBzZWxlY3Rpb25QYWludGluZ1JlY3QgPSBsb2NhbFNlbGVjdGlvblJlY3QoKTsKLSAgICAg
ICAgc2VsZWN0aW9uUGFpbnRpbmdSZWN0Lm1vdmUodHgsIHR5KTsKKyAgICAgICAgc2VsZWN0aW9u
UGFpbnRpbmdSZWN0Lm1vdmVCeShhZGp1c3RlZFBhaW50T2Zmc2V0KTsKICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblBhaW50aW5nUmVjdCwgc2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgfQogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJldmlzaW9uIDg4MjAy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBpbnRy
aW5zaWNTaXplQ2hhbmdlZCgpOwogICAgIHZvaWQgc2V0SGFzSW50cmluc2ljU2l6ZSgpIHsgbV9o
YXNJbnRyaW5zaWNTaXplID0gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICBib29sIHNob3VsZFBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50Jik7CiAgICAgSW50UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoYm9vbCBjaGVj
a1doZXRoZXJTZWxlY3RlZCA9IHRydWUpIGNvbnN0OyAvLyBUaGlzIGlzIGluIGxvY2FsIGNvb3Jk
aW5hdGVzLCBidXQgaXQncyBhIHBoeXNpY2FsIHJlY3QgKHNvIHRoZSB0b3AgbGVmdCBjb3JuZXIg
aXMgcGh5c2ljYWwgdG9wIGxlZnQpLgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGljYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxpY2EuY3BwCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTMgKzYwLDEy
IEBAIHZvaWQgUmVuZGVyUmVwbGljYTo6Y29tcHV0ZVByZWZlcnJlZExvZ2kKICAgICBzZXRQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlclJlcGxpY2E6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVy
UmVwbGljYTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlTWFzaykKICAgICAgICAgcmV0dXJu
OwogIAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0
ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIC8vIFR1cm4gYXJv
dW5kIGFuZCBwYWludCB0aGUgcGFyZW50IGxheWVyLiBVc2UgdGVtcG9yYXJ5IGNsaXBSZWN0cywg
c28gdGhhdCB0aGUgbGF5ZXIgZG9lc24ndCBlbmQgdXAgY2FjaGluZyBjbGlwIHJlY3RzCkBAIC03
Niw3ICs3NSw3IEBAIHZvaWQgUmVuZGVyUmVwbGljYTo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFpbnRCZWhhdmlvck5vcm1hbCwg
MCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXI6
OlBhaW50TGF5ZXJIYXZlVHJhbnNwYXJlbmN5IHwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJBcHBs
aWVkVHJhbnNmb3JtIHwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMg
fCBSZW5kZXJMYXllcjo6UGFpbnRMYXllclBhaW50aW5nUmVmbGVjdGlvbik7CiAgICAgZWxzZSBp
ZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VNYXNrKQotICAgICAgICBwYWludE1hc2so
cGFpbnRJbmZvLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICAgICAgcGFpbnRNYXNrKHBhaW50SW5m
bywgYWRqdXN0ZWRQYWludE9mZnNldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuaAkocmV2aXNpb24gODgy
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAg
ICAgCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5j
cHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFJlbmRl
clNjcm9sbGJhcjo6cGFpbnRQYXJ0KEdyYXBoaWNzCiAgICAgUmVuZGVyU2Nyb2xsYmFyUGFydCog
cGFydFJlbmRlcmVyID0gbV9wYXJ0cy5nZXQocGFydFR5cGUpOwogICAgIGlmICghcGFydFJlbmRl
cmVyKQogICAgICAgICByZXR1cm47Ci0gICAgcGFydFJlbmRlcmVyLT5wYWludEludG9SZWN0KGdy
YXBoaWNzQ29udGV4dCwgeCgpLCB5KCksIHJlY3QpOworICAgIHBhcnRSZW5kZXJlci0+cGFpbnRJ
bnRvUmVjdChncmFwaGljc0NvbnRleHQsIGxvY2F0aW9uKCksIHJlY3QpOwogfQogCiBJbnRSZWN0
IFJlbmRlclNjcm9sbGJhcjo6YnV0dG9uUmVjdChTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNw
cAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyUGFydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxMCArMTU5LDEwIEBAIHZvaWQg
UmVuZGVyU2Nyb2xsYmFyUGFydDo6aW1hZ2VDaGFuZ2VkKFcKICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyU2Nyb2xsYmFyUGFydDo6cGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRl
clNjcm9sbGJhclBhcnQ6OnBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICAvLyBNYWtlIHN1cmUgb3VyIGRpbWVuc2lvbnMgbWF0Y2ggdGhlIHJlY3QuCi0gICAg
c2V0TG9jYXRpb24ocmVjdC5sb2NhdGlvbigpIC0gSW50U2l6ZSh0eCwgdHkpKTsKKyAgICBzZXRM
b2NhdGlvbihyZWN0LmxvY2F0aW9uKCkgLSB0b1NpemUocGFpbnRPZmZzZXQpKTsKICAgICBzZXRX
aWR0aChyZWN0LndpZHRoKCkpOwogICAgIHNldEhlaWdodChyZWN0LmhlaWdodCgpKTsKIApAQCAt
MTcxLDE1ICsxNzEsMTUgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpwYWludEludG9SZWN0
KAogCiAgICAgLy8gTm93IGRvIHRoZSBwYWludC4KICAgICBQYWludEluZm8gcGFpbnRJbmZvKGdy
YXBoaWNzQ29udGV4dCwgcmVjdCwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgZmFsc2UsIDAs
IDApOwotICAgIHBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICBwYWludChwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9j
a0JhY2tncm91bmRzOwotICAgIHBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICBwYWludChw
YWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNl
RmxvYXQ7Ci0gICAgcGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgIHBhaW50KHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOwogICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kOwotICAgIHBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICBwYWludChwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlT3V0bGluZTsK
LSAgICBwYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgcGFpbnQocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
Y3JvbGxiYXJQYXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhclBhcnQuaAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgCi0gICAgdm9pZCBwYWlu
dEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdm9pZCBwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBv
aW50JiwgY29uc3QgSW50UmVjdCYpOwogICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBuZXdTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDEwICs0NTEsOSBAQCB2b2lkIFJlbmRlclRh
YmxlOjpzZXRDZWxsTG9naWNhbFdpZHRocygpCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRhYmxl
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRl
clRhYmxlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50
T2Zmc2V0KQogewotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQg
YWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIFBh
aW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFzZTsKIApAQCAtNDYyLDE1ICs0NjEs
MTUgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgICAgICBJ
bnRSZWN0IG92ZXJmbG93Qm94ID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgIGZsaXBG
b3JXcml0aW5nTW9kZShvdmVyZmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94LmluZmxhdGUo
bWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwotICAgICAgICBvdmVyZmxvd0Jv
eC5tb3ZlKHR4LCB0eSk7CisgICAgICAgIG92ZXJmbG93Qm94Lm1vdmVCeShhZGp1c3RlZFBhaW50
T2Zmc2V0KTsKICAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHBhaW50SW5mby5y
ZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHB1c2hlZENsaXAg
PSBwdXNoQ29udGVudHNDbGlwKHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5KSk7Ci0gICAgcGFp
bnRPYmplY3QocGFpbnRJbmZvLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICBib29sIHB1c2hlZENs
aXAgPSBwdXNoQ29udGVudHNDbGlwKHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7Cisg
ICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKICAgICBpZiAo
cHVzaGVkQ2xpcCkKLSAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGFpbnRQaGFz
ZSwgSW50UG9pbnQodHgsIHR5KSk7CisgICAgICAgIHBvcENvbnRlbnRzQ2xpcChwYWludEluZm8s
IHBhaW50UGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogfQogCiB2b2lkIFJlbmRlclRhYmxl
OjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50
T2Zmc2V0KQpAQCAtNDk5LDcgKzQ5OCw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50T2JqZWN0
KFBhaW50SW5mbyYKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGls
ZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pKSB7CiAg
ICAgICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKHRvUmVu
ZGVyQm94KGNoaWxkKSwgcGFpbnRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1l
bnQpOwotICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGls
ZFBvaW50LnkoKSk7CisgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgY2hpbGRQb2ludCk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01MjEsNyArNTIwLDcgQEAgdm9pZCBSZW5kZXJU
YWJsZTo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogICAgICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9k
ZSh0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCksIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxk
RmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGlu
Zm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAgICAgICAgICAgICAg
IGNoaWxkLT5wYWludChpbmZvLCBjaGlsZFBvaW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgbV9jdXJyZW50Qm9yZGVyID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3Qq
IG9sZENoaWxkKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBv
aW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGNvbnN0IElu
dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5m
byYsIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDZWxsLmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAxLDIyICs4
MDEsMjEgQEAgaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkFmdGVyKGJvbwogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYg
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ29sbGFwc2VkVGFibGVCb3JkZXJzICYmIHN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAgIGlmICghcGFpbnRJbmZv
LnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICB0eCArPSB4KCk7Ci0gICAgICAgIHR5ICs9IHkoKTsKKyAgICAgICAgSW50UG9pbnQgYWRq
dXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICAgICAgaW50
IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpOwotICAgICAgICBp
ZiAodHkgLSB0YWJsZSgpLT5vdXRlckJvcmRlclRvcCgpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgp
ICsgb3MKLSAgICAgICAgICAgICYmIHR5ICsgaGVpZ2h0KCkgKyB0YWJsZSgpLT5vdXRlckJvcmRl
ckJvdHRvbSgpID4gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCi0gICAgICAgICAgICBwYWludENv
bGxhcHNlZEJvcmRlcihwYWludEluZm8uY29udGV4dCwgSW50UmVjdCh0eCwgdHksIHdpZHRoKCks
IGhlaWdodCgpKSk7CisgICAgICAgIGlmIChhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAtIHRhYmxl
KCktPm91dGVyQm9yZGVyVG9wKCkgPCBwYWludEluZm8ucmVjdC5tYXhZKCkgKyBvcworICAgICAg
ICAgICAgJiYgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBoZWlnaHQoKSArIHRhYmxlKCktPm91
dGVyQm9yZGVyQm90dG9tKCkgPiBwYWludEluZm8ucmVjdC55KCkgLSBvcykKKyAgICAgICAgICAg
IHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KGFkanVzdGVk
UGFpbnRPZmZzZXQsIHNpemUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfSAKICAgICAKLSAg
ICBSZW5kZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgIFJlbmRlckJsb2Nr
OjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIH0KIAogc3RhdGljIEVCb3JkZXJTdHls
ZSBjb2xsYXBzZWRCb3JkZXJTdHlsZShFQm9yZGVyU3R5bGUgc3R5bGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCShyZXZpc2lvbiA4ODIwMikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAg
ICAgdm9pZCBwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mLCBjb25zdCBJbnRQ
b2ludCYsIFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24gODgyMDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQo
Y29uc3QgSAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVJvdzo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJUYWJs
ZVJvdzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9m
ZnNldCkKIHsKICAgICBBU1NFUlQoaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSk7CiAgICAgaWYgKCFs
YXllcigpKQpAQCAtMjE4LDEwICsyMTgsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6cGFpbnQo
UGFpbnRJbmZvJiBwYQogICAgICAgICAgICAgLy8gUGFpbnQgdGhlIHJvdyBiYWNrZ3JvdW5kIGJl
aGluZCB0aGUgY2VsbC4KICAgICAgICAgICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxk
QmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxs
ID0gdG9SZW5kZXJUYWJsZUNlbGwoY2hpbGQpOwotICAgICAgICAgICAgICAgIGNlbGwtPnBhaW50
QmFja2dyb3VuZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5KSwgdGhpcyk7
CisgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwocGFpbnRJ
bmZvLCBwYWludE9mZnNldCwgdGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
IXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKLSAgICAgICAgICAg
ICAgICBjaGlsZC0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAgICAgIGNo
aWxkLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0KIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCShyZXZpc2lv
biA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIG9ubHkg
dGltZSByb3dzIGdldCBhIGxheWVyIGlzIHdoZW4gdGhleSBoYXZlIHRyYW5zcGFyZW5jeS4KICAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzVHJhbnNwYXJl
bnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNNYXNrKCk7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50
UmVjdCogPSAwKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NSw3ICs4
ODUsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpmaXJzdExpbmVCb3hCYXNlCiAgICAgcmV0
dXJuIGZpcnN0TGluZUJhc2VsaW5lOwogfQogCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFp
bnRPZmZzZXQpCiB7CiAgICAgLy8gcHV0IHRoaXMgYmFjayBpbiB3aGVuIGFsbCBsYXlvdXQgdGVz
dHMgY2FuIGhhbmRsZSBpdAogICAgIC8vIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CkBAIC04OTks
MTQgKzg5OSwxMyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvCiAg
ICAgaWYgKCF0b3RhbFJvd3MgfHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
dHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zm
c2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgUGFpbnRQaGFzZSBwaGFzZSA9
IHBhaW50SW5mby5waGFzZTsKLSAgICBib29sIHB1c2hlZENsaXAgPSBwdXNoQ29udGVudHNDbGlw
KHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5KSk7Ci0gICAgcGFpbnRPYmplY3QocGFpbnRJbmZv
LCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICBib29sIHB1c2hlZENsaXAgPSBwdXNoQ29udGVudHND
bGlwKHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CisgICAgcGFpbnRPYmplY3QocGFp
bnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgaWYgKHB1c2hlZENsaXApCi0gICAgICAgIHBvcENv
bnRlbnRzQ2xpcChwYWludEluZm8sIHBoYXNlLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICAgICAg
cG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUNlbGxQb3NpdGlvbnMoUmVuZGVyVGFibGVD
ZWxsKiBlbGVtMSwgUmVuZGVyVGFibGVDZWxsKiBlbGVtMikKQEAgLTk0NSw3ICs5NDQsNyBAQCB2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRDZWxsKFJlbmRlCiAgICAgICAgICAgICBjZWxs
LT5wYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIGNlbGxQb2ludCwgcm93KTsK
ICAgICB9CiAgICAgaWYgKCghY2VsbC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhcm93LT5o
YXNTZWxmUGFpbnRpbmdMYXllcigpKSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNv
bGxhcHNlZFRhYmxlQm9yZGVycykKLSAgICAgICAgY2VsbC0+cGFpbnQocGFpbnRJbmZvLCBjZWxs
UG9pbnQueCgpLCBjZWxsUG9pbnQueSgpKTsKKyAgICAgICAgY2VsbC0+cGFpbnQocGFpbnRJbmZv
LCBjZWxsUG9pbnQpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3Qo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlz
aW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIG9sZENoaWxkKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwqLCBQYWludEluZm8mLCBjb25zdCBJbnRQb2lu
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBJbnRQ
b2ludCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlz
aW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgLy8gY2FsbGVycyB3
aXRoIGEgUmVuZGVyT2JqZWN0KiBjYW4gY29udGludWUgdG8gdXNlIGxlbmd0aCgpLgogICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdGV4dExlbmd0aCgpOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50LCBpbnQpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
SW50UG9pbnQmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmLCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIGZhbHNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA4ODIwMikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsOSArMjM1LDkgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnN1YnRyZQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3Zv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIFJlbmRlclRleHRDb250cm9s
OjpwYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50
KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kICYmIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9y
KSB7CiAgICAgICAgIEludFJlY3QgY29udGVudHNSZWN0ID0gY29udGVudEJveFJlY3QoKTsKQEAg
LTI0Niw3ICsyNDYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQo
CiAgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRZKChoZWlnaHQoKSAtIGNvbnRlbnRzUmVjdC5oZWln
aHQoKSkgLyAyKTsKIAogICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3Jk
cyB1c2VkIGZvciBwYWludGluZyB0aGUgY29udGVudAotICAgICAgICBjb250ZW50c1JlY3QubW92
ZSh0eCArIHgoKSwgdHkgKyB5KCkpOworICAgICAgICBjb250ZW50c1JlY3QubW92ZUJ5KHBhaW50
T2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAgICAgIHRoZW1lKCktPnBhaW50Q2Fwc0xvY2tJbmRp
Y2F0b3IodGhpcywgcGFpbnRJbmZvLCBjb250ZW50c1JlY3QpOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmgJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMTEg
KzE2NCwxMSBAQCB2b2lkIFJlbmRlclZpZXc6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50CiAgICAg
fQogfQogCi12b2lkIFJlbmRlclZpZXc6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICAvLyBJZiB3ZSBldmVyIHJlcXVp
cmUgbGF5b3V0IGJ1dCByZWNlaXZlIGEgcGFpbnQgYW55d2F5LCBzb21ldGhpbmcgaGFzIGdvbmUg
aG9ycmlibHkgd3JvbmcuCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKLSAgICBwYWludE9i
amVjdChwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOworICAgIHBhaW50T2JqZWN0KHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21wb3NpdGVk
KFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIC8v
IEZJWE1FOiBpZGVhbGx5IHdlJ2QgbmV2ZXIgaGF2ZSB0byBkbyB0aGlzLCBpZiBhbGwgcmVwYWlu
dHMgYXJlIGNvbnRhaW5lci1yZWxhdGl2ZS4KICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludFJlY3Rh
bmdsZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRp
YXRlID0gZmFsc2UpOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50
UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8m
LCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJl
cGFpbnROZXdYT1JPbGQsIFJlcGFpbnROZXdNaW51c09sZCB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
NywxOSArMjQ3LDE4IEBAIHZvaWQgUmVuZGVyV2lkZ2V0Ojpub3RpZnlXaWRnZXQoV2lkZ2V0Tm8K
ICAgICAgICAgbV93aWRnZXQtPm5vdGlmeVdpZGdldChub3RpZmljYXRpb24pOwogfQogCi12b2lk
IFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5
KQordm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgaWYgKCFzaG91bGRQYWludChwYWludEluZm8s
IEludFBvaW50KHR4LCB0eSkpKQorICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5
KCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9j
YXRpb24oKTsKIAogICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2VTZWxlY3Rpb24pKQotICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywgSW50
UG9pbnQodHgsIHR5KSk7CisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0KTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZU1hc2spIHsKLSAgICAgICAgcGFpbnRNYXNrKHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5
KSk7CisgICAgICAgIHBhaW50TWFzayhwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjgsMTEgKzI2NywxMSBAQCB2b2lkIFJlbmRl
cldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAg
aWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChJbnRQ
b2ludCh0eCAtIHgoKSwgdHkgLSB5KCkpLCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7Cisg
ICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHBhaW50T2Zmc2V0LCBzdHlsZSgpLT5oaWdobGln
aHQoKSwgdHJ1ZSk7CiAjZW5kaWYKIAogICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMo
KSkgewotICAgICAgICBJbnRSZWN0IGJvcmRlclJlY3QgPSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgo
KSwgaGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGJvcmRlclJlY3QgPSBJbnRSZWN0KGFkanVz
dGVkUGFpbnRPZmZzZXQsIHNpemUoKSk7CiAKICAgICAgICAgaWYgKGJvcmRlclJlY3QuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjg5LDIwICsyODgsMjAgQEAgdm9pZCBSZW5k
ZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogICAgICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmRyYXdJbWFnZShtX3N1YnN0aXR1dGVJbWFnZS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JT
cGFjZSgpLCBtX3dpZGdldC0+ZnJhbWVSZWN0KCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIEludFBvaW50IHdpZGdldExvY2F0aW9uID0gbV93aWRnZXQtPmZyYW1lUmVjdCgpLmxvY2F0
aW9uKCk7Ci0gICAgICAgICAgICBJbnRQb2ludCBwYWludExvY2F0aW9uKHR4ICsgYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7Cisg
ICAgICAgICAgICBJbnRQb2ludCBwYWludExvY2F0aW9uKGFkanVzdGVkUGFpbnRPZmZzZXQueCgp
ICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkg
KyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CiAgICAgICAgICAgICBJbnRSZWN0IHBhaW50
UmVjdCA9IHBhaW50SW5mby5yZWN0OwogCi0gICAgICAgICAgICBJbnRTaXplIHBhaW50T2Zmc2V0
ID0gcGFpbnRMb2NhdGlvbiAtIHdpZGdldExvY2F0aW9uOworICAgICAgICAgICAgSW50U2l6ZSB3
aWRnZXRQYWludE9mZnNldCA9IHBhaW50TG9jYXRpb24gLSB3aWRnZXRMb2NhdGlvbjsKICAgICAg
ICAgICAgIC8vIFdoZW4gcGFpbnRpbmcgd2lkZ2V0cyBpbnRvIGNvbXBvc2l0aW5nIGxheWVycywg
dHggYW5kIHR5IGFyZSByZWxhdGl2ZSB0byB0aGUgZW5jbG9zaW5nIGNvbXBvc2l0aW5nIGxheWVy
LAogICAgICAgICAgICAgLy8gbm90IHRoZSByb290LiBJbiB0aGlzIGNhc2UsIHNoaWZ0IHRoZSBD
VE0gYW5kIGFkanVzdCB0aGUgcGFpbnRSZWN0IHRvIGJlIHJvb3QtcmVsYXRpdmUgdG8gZml4IHBs
dWctaW4gZHJhd2luZy4KLSAgICAgICAgICAgIGlmICghcGFpbnRPZmZzZXQuaXNaZXJvKCkpIHsK
LSAgICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHBhaW50T2Zmc2V0
KTsKLSAgICAgICAgICAgICAgICBwYWludFJlY3QubW92ZSgtcGFpbnRPZmZzZXQpOworICAgICAg
ICAgICAgaWYgKCF3aWRnZXRQYWludE9mZnNldC5pc1plcm8oKSkgeworICAgICAgICAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUod2lkZ2V0UGFpbnRPZmZzZXQpOworICAgICAg
ICAgICAgICAgIHBhaW50UmVjdC5tb3ZlKC13aWRnZXRQYWludE9mZnNldCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBtX3dpZGdldC0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50
UmVjdCk7CiAKLSAgICAgICAgICAgIGlmICghcGFpbnRPZmZzZXQuaXNaZXJvKCkpCi0gICAgICAg
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtcGFpbnRPZmZzZXQpOworICAg
ICAgICAgICAgaWYgKCF3aWRnZXRQYWludE9mZnNldC5pc1plcm8oKSkKKyAgICAgICAgICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC13aWRnZXRQYWludE9mZnNldCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobV93aWRnZXQtPmlzRnJhbWVWaWV3KCkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDg4MjAyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw3ICs2MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBpbnQgeCwgaW50IHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25z
dCBJbnRQb2ludCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCShyZXZpc2lvbiA4ODIwMikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NSwzOCArNzUsMzcgQEAgdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6
c3RyZXRjaFRvSGVpZ2h0KAogfQogCiAjaWYgRU5BQkxFKERFQlVHX01BVEhfTEFZT1VUKQotdm9p
ZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0
eSkKK3ZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
SW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIFJlbmRlckJsb2NrOjpwYWludChpbmZvLCB0
eCwgdHkpOworICAgIFJlbmRlckJsb2NrOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAg
CiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHR4ICs9IHgo
KTsKLSAgICB0eSArPSB5KCk7Ci0gICAgCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqaW5mby5jb250ZXh0KTsKICAgICAKICAgICBpbmZvLmNvbnRleHQt
PnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0
eWxlKFNvbGlkU3Ryb2tlKTsKICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9y
KDAsIDAsIDI1NSksIENvbG9yU3BhY2VTUkdCKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPmRy
YXdMaW5lKEludFBvaW50KHR4LCB0eSksIEludFBvaW50KHR4ICsgb2Zmc2V0V2lkdGgoKSwgdHkp
KTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4ICsgb2Zmc2V0V2lkdGgo
KSwgdHkpLCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCksIHR5ICsgb2Zmc2V0SGVpZ2h0KCkp
KTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSArIG9mZnNldEhl
aWdodCgpKSwgSW50UG9pbnQodHggKyBvZmZzZXRXaWR0aCgpLCB0eSArIG9mZnNldEhlaWdodCgp
KSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludCh0eCwgdHkpLCBJbnRQb2lu
dCh0eCwgdHkgKyBvZmZzZXRIZWlnaHQoKSkpOworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUo
YWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBv
ZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSkpOworICAgIGluZm8uY29udGV4
dC0+ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0
aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRI
ZWlnaHQoKSkpOworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQ
YWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkp
LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpKTsKKyAgICBpbmZvLmNvbnRleHQt
PmRyYXdMaW5lKGFkanVzdGVkUGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSk7CiAgICAg
CiAgICAgaW50IHRvcFN0YXJ0ID0gcGFkZGluZ1RvcCgpOwogICAgIAogICAgIGluZm8uY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMjU1LCAwKSwgQ29sb3JTcGFjZVNSR0IpOwogICAg
IAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgsIHR5ICsgdG9wU3RhcnQp
LCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCksIHR5ICsgdG9wU3RhcnQpKTsKKyAgICBpbmZv
LmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9m
ZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0
YXJ0KSk7CiAgICAgCiAgICAgaW50IGJhc2VsaW5lID0gYmFzZWxpbmVQb3NpdGlvbihBbHBoYWJl
dGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKTsKICAgICAKICAgICBpbmZvLmNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDI1NSwgMCwgMCksIENvbG9yU3BhY2VTUkdCKTsKICAg
ICAKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSArIGJhc2VsaW5l
KSwgSW50UG9pbnQodHggKyBvZmZzZXRXaWR0aCgpLCB0eSArIGJhc2VsaW5lKSk7CisgICAgaW5m
by5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRq
dXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGluZSksIEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNl
bGluZSkpOwogfQogI2VuZGlmIC8vIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suaAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50IGhlaWdodCk7CiAKICNp
ZiBFTkFCTEUoREVCVUdfTUFUSF9MQVlPVVQpCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKICNlbmRpZgogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxG
cmFjdGlvbi5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5
ICsxMzEsOSBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpsYXlvdXQoKQogCiB9CiAKLXZv
aWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBp
bnQgdHkpCit2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludChQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBSZW5kZXJNYXRoTUxCbG9jazo6
cGFpbnQoaW5mbywgdHgsIHR5KTsKKyAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywg
cGFpbnRPZmZzZXQpOwogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8
fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAg
ICAgCkBAIC0xNTMsOCArMTUzLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQo
UGFpbnRJbgogICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSBudW1lcmF0b3ItPm9mZnNldEhl
aWdodCgpOyAgICAgICAgCiAgICAgfQogICAgIAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5
KCkgKyB2ZXJ0aWNhbE9mZnNldDsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0g
cGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShh
ZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHZlcnRpY2FsT2Zmc2V0KTsKICAgICAKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAgICAgCkBA
IC0xNjIsNyArMTYyLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFpbnRJ
bgogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIGlu
Zm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Q29sb3IpLCBDb2xvclNwYWNlU1JHQik7CiAgICAgCi0gICAgaW5mby5jb250
ZXh0LT5kcmF3TGluZShJbnRQb2ludCh0eCwgdHkpLCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRo
KCksIHR5KSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0
LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpKSk7CiB9CiAKIGludCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6YmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSBsaW5lRGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZy
YWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxGcmFjdGlvbi5oCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRl
ck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBv
c2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBM
aW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsgCi0gICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZp
c2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBSZW5kZXJN
YXRoTUxSb290OjphZGRDaGlsZChSZW5kZXJPYgogICAgIH0KIH0KICAgICAKLXZvaWQgUmVuZGVy
TWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQg
UmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRQb2ludCYg
cGFpbnRPZmZzZXQpCiB7Ci0gICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGluZm8gLCB0eCAs
IHR5KTsKKyAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwog
ICAgIAogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTA0LDggKzEwNCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQo
UGFpbnRJbmZvJiAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSB8fCAhbGFzdENoaWxkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9p
bnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICAK
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogaW5kZXhCb3ggPSB0b1JlbmRlckJveE1vZGVsT2Jq
ZWN0KGxhc3RDaGlsZCgpKTsKICAgICAKQEAgLTE0MCwxMiArMTM5LDEyIEBAIHZvaWQgUmVuZGVy
TWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICB3aWR0aCArPSB0b3BTdGFydFNoaWZ0
OwogICAgIAogICAgIGludCByb290UGFkID0gc3RhdGljX2Nhc3Q8aW50PihnUm9vdFBhZGRpbmcg
KiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKLSAgICBpbnQgc3RhcnQgPSB0eCArIGluZGV4V2lkdGgg
KyBnUmFkaWNhbExlZnRNYXJnaW4gKyBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgLSBy
b290UGFkOwotICAgIHR5ICs9IHN0eWxlKCktPnBhZGRpbmdUb3AoKS52YWx1ZSgpIC0gcm9vdFBh
ZDsKKyAgICBpbnQgc3RhcnQgPSBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGluZGV4V2lkdGgg
KyBnUmFkaWNhbExlZnRNYXJnaW4gKyBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgLSBy
b290UGFkOworICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShhZGp1c3RlZFBhaW50T2Zmc2V0
LnkoKSArIHN0eWxlKCktPnBhZGRpbmdUb3AoKS52YWx1ZSgpIC0gcm9vdFBhZCk7CiAgICAgCi0g
ICAgRmxvYXRQb2ludCB0b3BTdGFydChzdGFydCAtIHRvcFN0YXJ0U2hpZnQsIHR5KTsKLSAgICBG
bG9hdFBvaW50IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZy
b250V2lkdGggLCB0eSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFzZVBhZCk7Ci0gICAgRmxvYXRQ
b2ludCB0b3BMZWZ0KHN0YXJ0IC0gZ1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICogZnJvbnRXaWR0
aCAsIHR5ICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKKyAgICBGbG9h
dFBvaW50IHRvcFN0YXJ0KHN0YXJ0IC0gdG9wU3RhcnRTaGlmdCwgcGFpbnRPZmZzZXQueSgpKTsK
KyAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50WFBv
cyAqIGZyb250V2lkdGggLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCArIGdS
YWRpY2FsQmFzZVBhZCk7CisgICAgRmxvYXRQb2ludCB0b3BMZWZ0KHN0YXJ0IC0gZ1JhZGljYWxU
b3BMZWZ0UG9pbnRYUG9zICogZnJvbnRXaWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsg
Z1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKICAgICBGbG9hdFBvaW50IGxl
ZnRFbmQoc3RhcnQgLSBmcm9udFdpZHRoICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZ
U2hpZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CkBAIC0xNTgsNyArMTU3LDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIAogICAgIFBhdGgg
cm9vdDsKICAgICAKLSAgICByb290Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSArIHdp
ZHRoLCB0eSkpOworICAgIHJvb3QubW92ZVRvKEZsb2F0UG9pbnQodG9wU3RhcnQueCgpICsgd2lk
dGgsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CiAgICAgLy8gZHJhdyB0b3AKICAgICByb290
LmFkZExpbmVUbyh0b3BTdGFydCk7CiAgICAgLy8gZHJhdyBmcm9tIHRvcCBsZWZ0IGNvcm5lciB0
byBib3R0b20gcG9pbnQgb2YgcmFkaWNhbApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmgJKHJldmlzaW9uIDg4MjAyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgUmVuZGVyTWF0aE1MUm9vdCA6IHB1Ymxp
YyBSZW5kZXJNYQogcHVibGljOgogICAgIFJlbmRlck1hdGhNTFJvb3QoTm9kZSogZnJhY3Rpb24p
OwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgSW50UG9pbnQmKTsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxT
cXVhcmVSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDE1ICs2NiwxNCBAQCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpS
ZW5kZXJNYXRoTUxTcXVhCiB7CiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFp
bnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQpCiB7Ci0gICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGluZm8sIHR4LCB0eSk7CisgICAg
UmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgIAogICAgIGlm
IChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIGludCBtYXhIZWln
aHQgPSAwOwogICAgIGludCB3aWR0aCA9IDA7CkBAIC0xMDksMTAgKzEwOCwxMCBAQCB2b2lkIFJl
bmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50CiAgICAgCiAgICAgd2lkdGggKz0gdG9w
U3RhcnRTaGlmdDsKICAgICAKLSAgICBGbG9hdFBvaW50IHRvcFN0YXJ0KHR4ICsgZnJvbnRXaWR0
aCAtIHRvcFN0YXJ0U2hpZnQsIHR5KTsKLSAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQodHggKyBm
cm9udFdpZHRoICogZ1JhZGljYWxCb3R0b21Qb2ludFhQb3MgLCB0eSArIG1heEhlaWdodCArIGdS
YWRpY2FsQmFzZVBhZCk7Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0KHR4ICsgZnJvbnRXaWR0aCAq
IGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyAsIHR5ICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9z
ICogbWF4SGVpZ2h0KTsKLSAgICBGbG9hdFBvaW50IGxlZnRFbmQodHggLCB0b3BMZWZ0LnkoKSAr
IGdSYWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOworICAgIEZsb2F0
UG9pbnQgdG9wU3RhcnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoIC0gdG9w
U3RhcnRTaGlmdCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOworICAgIEZsb2F0UG9pbnQgYm90
dG9tTGVmdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggKiBnUmFkaWNhbEJv
dHRvbVBvaW50WFBvcyAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgbWF4SGVpZ2h0ICsgZ1Jh
ZGljYWxCYXNlUGFkKTsKKyAgICBGbG9hdFBvaW50IHRvcExlZnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCkgKyBmcm9udFdpZHRoICogZ1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICwgYWRqdXN0ZWRQ
YWludE9mZnNldC55KCkgKyBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQpOwor
ICAgIEZsb2F0UG9pbnQgbGVmdEVuZChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAsIHRvcExlZnQu
eSgpICsgZ1JhZGljYWxMZWZ0RW5kWVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CiAgICAg
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRleHQp
OwogICAgIApAQCAtMTI0LDcgKzEyMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6
cGFpbnQoUGFpbnQKICAgICAKICAgICBQYXRoIHJvb3Q7CiAgICAgCi0gICAgcm9vdC5tb3ZlVG8o
RmxvYXRQb2ludCh0b3BTdGFydC54KCkgKyB3aWR0aCAsIHR5KSk7CisgICAgcm9vdC5tb3ZlVG8o
RmxvYXRQb2ludCh0b3BTdGFydC54KCkgKyB3aWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
KSk7CiAgICAgLy8gZHJhdyB0b3AKICAgICByb290LmFkZExpbmVUbyh0b3BTdGFydCk7CiAgICAg
Ly8gZHJhdyBmcm9tIHRvcCBsZWZ0IGNvcm5lciB0byBib3R0b20gcG9pbnQgb2YgcmFkaWNhbApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVS
b290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxTcXVhcmVSb290LmgJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVuZGVyTWF0aE1M
U3F1YXJlUm9vdCA6IHB1YmxpYyBSZW5kZXJNYXRoTUxCbG9jayB7CiBwdWJsaWM6CiAgICAgUmVu
ZGVyTWF0aE1MU3F1YXJlUm9vdChOb2RlKiBmcmFjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDcgKzkxLDcgQEAgYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFp
bnQoKQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgaW50LCBpbnQpCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JikKIHsKICAgICBpZiAocGFpbnRJ
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTIw
LDcgKzEyMCw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KICAg
ICAgICAgaWYgKGNvbnRpbnVlUmVuZGVyaW5nKSB7CiAgICAgICAgICAgICBjaGlsZFBhaW50SW5m
by51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKICAgICAgICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJ
bmZvLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8s
IEludFBvaW50KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gODgyMDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZW5kZXJPYmplY3RDaGls
ZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KICAgICBSZW5k
ZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVu
dFkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNC
b3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5j
cHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBS
ZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojp+UmVuZGVyU1ZHRm9yZWlnCiB7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50
KQordm9pZCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UG9pbnQmKQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnQKICAgICBpZiAob3BhY2l0eSA8IDEuMGYp
CiAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSk7CiAKLSAgICBSZW5kZXJCbG9jazo6cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDAp
OworICAgIFJlbmRlckJsb2NrOjpwYWludChjaGlsZFBhaW50SW5mbywgSW50UG9pbnQoKSk7CiAK
ICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCiAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQt
PmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAkocmV2aXNpb24gODgyMDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHRm9yZWln
bk9iamVjdCI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFy
ZW50WCwgaW50IHBhcmVudFkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw3IEBAIHZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKQog
ICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsgICAgCiB9CiAKLXZvaWQgUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyOjpwYWludChQYWludEluZm8mLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyOjpwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpCiB7CiAgICAg
Ly8gVGhpcyBzdWJ0cmVlIGRvZXMgbm90IHBhaW50LgogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCShy
ZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqKSB7IHJldHVy
biBJbnRSZWN0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMs
NyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZH
SW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVy
U1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCiB7
CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbWFnZVJlc291cmNlLT5oYXNJbWFnZSgp
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdl
UHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVu
dFkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
OwogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0
VGVzdEFjdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3
LDcgQEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcgogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBp
bnQpCit2b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBtX3BhdGguaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguaAkocmV2aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBh
cmVudFkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2lu
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
LCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAkocmV2
aXNpb24gODgyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmRyYXcoUGFpbnQKICAgICBQYWludEluZm8gaW5mbyhw
YWludEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqaW5m
by5jb250ZXh0KTsKICAgICBpbmZvLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgUmVu
ZGVyU1ZHQ29udGFpbmVyOjpwYWludChpbmZvLCAwLCAwKTsKKyAgICBSZW5kZXJTVkdDb250YWlu
ZXI6OnBhaW50KGluZm8sIEludFBvaW50KCkpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3Jp
Z2luLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gODgyMDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjIsMTQgKzI2MiwxMyBAQCBib29sIFJlbmRlclNWR1Jvb3Q6OnNlbGZXaWxsUGFpbnQo
KQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsK
ICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYm9vbCBpc1Zpc2libGUgPSBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRTsKLSAgICBJbnRQb2ludCBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcihwYXJlbnRYLCBw
YXJlbnRZKTsKLSAgICBJbnRQb2ludCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lciA9IHBhcmVu
dE9yaWdpbkluQ29udGFpbmVyICsgcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsKKyAgICBJbnRQ
b2ludCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lciA9IHBhaW50T2Zmc2V0ICsgcGFyZW50T3Jp
Z2luVG9Cb3JkZXJCb3goKTsKIAogICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Zpc2libGUpCiAgICAg
ICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBib3JkZXJCb3hPcmlnaW5JbkNvbnRh
aW5lcik7CkBAIC0yOTQsMTQgKzI5MywxNCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBh
aW50SW5mbyYgcGFpCiAKICAgICAvLyBDb252ZXJ0IGZyb20gY29udGFpbmVyIG9mZnNldHMgKGh0
bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycykuCiAg
ICAgLy8gVHJhbnNmb3JtIGZyb20gb3VyIHBhaW50IGNvbnRhaW5lcidzIGNvb3JkaW5hdGUgc3lz
dGVtIHRvIG91ciBsb2NhbCBjb29yZHMuCi0gICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zv
cm0obG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0ocGFyZW50T3JpZ2luSW5Db250YWlu
ZXIpKTsKKyAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9ybShsb2NhbFRvUmVwYWludENv
bnRhaW5lclRyYW5zZm9ybShwYWludE9mZnNldCkpOwogCiAgICAgYm9vbCBjb250aW51ZVJlbmRl
cmluZyA9IHRydWU7CiAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VG
b3JlZ3JvdW5kKQogICAgICAgICBjb250aW51ZVJlbmRlcmluZyA9IFNWR1JlbmRlclN1cHBvcnQ6
OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pOwogCiAgICAg
aWYgKGNvbnRpbnVlUmVuZGVyaW5nKQotICAgICAgICBSZW5kZXJCb3g6OnBhaW50KGNoaWxkUGFp
bnRJbmZvLCAwLCAwKTsKKyAgICAgICAgUmVuZGVyQm94OjpwYWludChjaGlsZFBhaW50SW5mbywg
SW50UG9pbnQoKSk7CiAKICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQpCiAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0Nv
bnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA4
ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQg
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkg
Y29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDg4MjAyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFk
cyhWZWN0b3IKICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3Vu
ZGluZ0JveCgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGludCwgaW50KQordm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmKQogewogICAgIGlmIChwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDIsNyArMjQyLDcg
QEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaQogICAgIFBhaW50SW5m
byBibG9ja0luZm8ocGFpbnRJbmZvKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKmJsb2NrSW5mby5jb250ZXh0KTsKICAgICBibG9ja0luZm8uYXBwbHlUcmFuc2Zv
cm0obG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpKTsKLSAgICBSZW5kZXJCbG9jazo6cGFpbnQoYmxv
Y2tJbmZvLCAwLCAwKTsKKyAgICBSZW5kZXJCbG9jazo6cGFpbnQoYmxvY2tJbmZvLCBJbnRQb2lu
dCgpKTsKIH0KIAogRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnN0cm9rZUJvdW5kaW5nQm94KCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5oCShyZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clNWR1RleHQiOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
Jik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCShy
ZXZpc2lvbiA4ODIwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VC
dWZmZXJUb29scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBTVkdJ
bWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVAogICAgIGNvbnRlbnRUcmFuc2Zvcm1hdGlv
biA9IHN1YnRyZWVDb250ZW50VHJhbnNmb3JtYXRpb24gKiBjb250ZW50VHJhbnNmb3JtYXRpb247
CiAKICAgICBpdGVtLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgIGl0ZW0tPnBhaW50KGluZm8sIDAs
IDApOworICAgIGl0ZW0tPnBhaW50KGluZm8sIEludFBvaW50KCkpOwogCiAgICAgY29udGVudFRy
YW5zZm9ybWF0aW9uID0gc2F2ZWRDb250ZW50VHJhbnNmb3JtYXRpb247CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96261</attachid>
            <date>2011-06-07 10:46:04 -0700</date>
            <delta_ts>2011-06-07 11:39:16 -0700</delta_ts>
            <desc>WIP that works :)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>84075</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMxLDcg
KzIzMzEsNyBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpCiAgICAg
fQogCiAgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIGNvcm5lclJlY3QueCgpLCBjb3JuZXJSZWN0LnkoKSwgY29y
bmVyUmVjdCk7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQs
IGNvcm5lclJlY3QubG9jYXRpb24oKSwgY29ybmVyUmVjdCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lv
biA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDcsMTYgKzIwNywxNiBAQCB2b2lkIElubGluZUJveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluCiAgICAgYm9vbCBwcmVzZXJ2ZVBoYXNlID0gcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxlY3Rpb24gfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VU
ZXh0Q2xpcDsKICAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOwogICAgIGluZm8ucGhhc2Ug
PSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFpbnRQaGFzZUJsb2NrQmFja2dy
b3VuZDsKLSAgICByZW5kZXJlcigpLT5wYWludChpbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQ
b2ludC55KCkpOworICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAg
IGlmICghcHJlc2VydmVQaGFzZSkgewogICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNo
aWxkQmxvY2tCYWNrZ3JvdW5kczsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQoaW5mbywgY2hp
bGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQo
aW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxvYXQ7
Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBv
aW50LnkoKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwog
ICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91bmQ7Ci0gICAgICAgIHJlbmRl
cmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAg
ICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICBpbmZvLnBo
YXNlID0gUGFpbnRQaGFzZU91dGxpbmU7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8s
IGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnBh
aW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMzgsOSAr
MjIzOCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2EKICAgICB9
CiB9CiAgCi12b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIEludFBvaW50IGFkanVzdGVk
T2Zmc2V0ID0gbG9jYXRpb24oKSArIEludFNpemUodHgsIHR5KTsKKyAgICBJbnRQb2ludCBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIAogICAgIFBh
aW50UGhhc2UgcGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAKQEAgLTIyNTEsMjEgKzIyNTEsMjEg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgICAgICBJbnRS
ZWN0IG92ZXJmbG93Qm94ID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgIGZsaXBGb3JX
cml0aW5nTW9kZShvdmVyZmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94LmluZmxhdGUobWF4
aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwotICAgICAgICBvdmVyZmxvd0JveC5t
b3ZlQnkoYWRqdXN0ZWRPZmZzZXQpOworICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnkoYWRqdXN0
ZWRQYWludE9mZnNldCk7CiAgICAgICAgIGlmICghb3ZlcmZsb3dCb3guaW50ZXJzZWN0cyhwYWlu
dEluZm8ucmVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBwdXNo
ZWRDbGlwID0gcHVzaENvbnRlbnRzQ2xpcChwYWludEluZm8sIGFkanVzdGVkT2Zmc2V0KTsKLSAg
ICBwYWludE9iamVjdChwYWludEluZm8sIGFkanVzdGVkT2Zmc2V0KTsKKyAgICBib29sIHB1c2hl
ZENsaXAgPSBwdXNoQ29udGVudHNDbGlwKHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7
CisgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKICAgICBp
ZiAocHVzaGVkQ2xpcCkKLSAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2Us
IGFkanVzdGVkT2Zmc2V0KTsKKyAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhh
c2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogCiAgICAgLy8gT3VyIHNjcm9sbGJhciB3aWRnZXRz
IHBhaW50IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRoZW0gdG8sIHNvIHRoYXQgdGhleSB3b3JrIHBy
b3Blcmx5IHdpdGgKICAgICAvLyB6LWluZGV4LiAgV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0
aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8v
IHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKGhhc092ZXJmbG93Q2xp
cCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIChwaGFzZSA9PSBQYWlu
dFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFj
a2dyb3VuZCkgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKLSAgICAg
ICAgbGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0LCBhZGp1
c3RlZE9mZnNldCwgcGFpbnRJbmZvLnJlY3QpOworICAgICAgICBsYXllcigpLT5wYWludE92ZXJm
bG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIHBhaW50
SW5mby5yZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMjM3MSw3
ICsyMzcxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZgogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKLSAgICAgICAgbV9saW5l
Qm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldC54KCksIHBhaW50T2Zmc2V0
LnkoKSk7CisgICAgICAgIG1fbGluZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwogICAgIGVsc2UKICAgICAgICAgcGFpbnRDaGlsZHJlbihwYWludEluZm8sIHBhaW50
T2Zmc2V0KTsKIH0KQEAgLTI0MTUsNyArMjQxNSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
Q2hpbGRyZW4oUGFpbnRJbmYKIAogICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZv
cldyaXRpbmdNb2RlKGNoaWxkLCBwYWludE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRq
dXN0bWVudCk7CiAgICAgICAgIGlmICghY2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYg
IWNoaWxkLT5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgY2hp
bGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpKTsKKyAgICAgICAgICAgIGNoaWxkLT5wYWludChp
bmZvLCBjaGlsZFBvaW50KTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRl
cjogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgogICAgICAgICBib29s
IGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYm
IGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKQEAgLTI1NjYs
MTYgKzI1NjYsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJgog
ICAgICAgICAgICAgUGFpbnRJbmZvIGN1cnJlbnRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICAg
ICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZv
LnBoYXNlIDogUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKICAgICAgICAgICAgIEludFBvaW50
IGNoaWxkUG9pbnQgPSBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShyLCBJbnRQb2ludChwYWludE9m
ZnNldC54KCkgKyB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPm1fcmVu
ZGVyZXItPngoKSwgcGFpbnRPZmZzZXQueSgpICsgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdN
YXJnaW4ocikgLSByLT5tX3JlbmRlcmVyLT55KCkpKTsKLSAgICAgICAgICAgIHItPm1fcmVuZGVy
ZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50Lnko
KSk7CisgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBj
aGlsZFBvaW50KTsKICAgICAgICAgICAgIGlmICghcHJlc2VydmVQaGFzZSkgewogICAgICAgICAg
ICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tn
cm91bmRzOwotICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJlbnRQYWlu
dEluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAgICAgICAgICAg
ci0+bV9yZW5kZXJlci0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQb2ludCk7CiAgICAg
ICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGbG9hdDsKLSAg
ICAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGls
ZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCkpOworICAgICAgICAgICAgICAgIHItPm1fcmVuZGVy
ZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgICAg
IGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKLSAgICAgICAg
ICAgICAgICByLT5tX3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50
LngoKSwgY2hpbGRQb2ludC55KCkpOworICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBh
aW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgICAgIGN1cnJl
bnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlT3V0bGluZTsKLSAgICAgICAgICAgICAgICBy
LT5tX3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50LngoKSwgY2hp
bGRQb2ludC55KCkpOworICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJl
bnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDg4
MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGxheW91dFBv
c2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE9iamVjdChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgaW50IGxvZ2ljYWxS
aWdodE9mZnNldEZvckxpbmUoaW50IHBvc2l0aW9uLCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBw
bHlUZXh0SW5kZW50ID0gdHJ1ZSwgaW50KiBsb2dpY2FsSGVpZ2h0UmVtYWluaW5nID0gMCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24g
ODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzY3LDE2ICs3NjcsMTQgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlcwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGFpbnRpbmcgc3R1ZmYg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIFJlbmRlckJveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJCb3g6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKLQorICAgIEludFBvaW50IGFkanVzdGVk
UGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAgICAgLy8gZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbi4gSnVzdCBwYXNzIHBhaW50IHRocm91Z2ggdG8gdGhlIGNoaWxkcmVuCiAg
ICAgUGFpbnRJbmZvIGNoaWxkSW5mbyhwYWludEluZm8pOwogICAgIGNoaWxkSW5mby51cGRhdGVQ
YWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRJbmZvLCB0eCwgdHkpOworICAgICAgICBjaGlsZC0+
cGFpbnQoY2hpbGRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIH0KIAogdm9pZCBSZW5kZXJC
b3g6OnBhaW50Um9vdEJveEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA4ODI0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MjM5LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IHJlZmxlY3RlZFJlY3QoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
bik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA4ODI0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5Niw5ICs2OTYsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEZpbGxMYXllCiAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290ID0gYm94
LT5yb290KCk7CiAgICAgICAgICAgICBib3gtPnBhaW50KGluZm8sIEludFBvaW50KHNjcm9sbGVk
UGFpbnRSZWN0LngoKSAtIGJveC0+eCgpLCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSBib3gtPnko
KSksIHJvb3QtPmxpbmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGludCB4ID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT54KCkg
OiAwOwotICAgICAgICAgICAgaW50IHkgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPnko
KSA6IDA7Ci0gICAgICAgICAgICBwYWludChpbmZvLCBzY3JvbGxlZFBhaW50UmVjdC54KCkgLSB4
LCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSB5KTsKKyAgICAgICAgICAgIEludFNpemUgbG9jYWxP
ZmZzZXQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmxvY2F0aW9uT2Zmc2V0KCkgOiBJ
bnRTaXplKCk7CisgICAgICAgICAgICBwYWludChpbmZvLCBzY3JvbGxlZFBhaW50UmVjdC5sb2Nh
dGlvbigpIC0gbG9jYWxPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBU
aGUgbWFzayBoYXMgYmVlbiBjcmVhdGVkLiAgTm93IHdlIGp1c3QgbmVlZCB0byBjbGlwIHRvIGl0
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFy
a2VyLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRGV0YWlsc01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxNCArMTIwLDE0IEBA
IFBhdGggUmVuZGVyRGV0YWlsc01hcmtlcjo6Z2V0UGF0aChjb25zdCAKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIFJlbmRlckRldGFpbHNNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyRGV0YWlsc01hcmtlcjo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAg
ICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrOjpwYWludChw
YWludEluZm8sIHR4LCB0eSk7CisgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEludFBvaW50IGJv
eE9yaWdpbih0eCArIHgoKSwgdHkgKyB5KCkpOworICAgIEludFBvaW50IGJveE9yaWdpbihwYWlu
dE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92
ZXJmbG93UmVjdCgpKTsKICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGJveE9yaWdpbik7CiAgICAg
b3ZlcmZsb3dSZWN0LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtl
ci5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
ZXRhaWxzTWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJl
dHVybiAiUmVuZGVyRGV0YWlsc01hcmtlciI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEZXRhaWxz
TWFya2VyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICBib29sIGlzT3BlbigpIGNvbnN0OwogICAg
IFBhdGggZ2V0Q2Fub25pY2FsUGF0aCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiA4ODI0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNSwxNCArMTM1LDE0IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OnNldE1pc3NpbmdQbHUKICAgICByZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3Zv
aWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHBsdWdpbkNyYXNoZWRPcldhc01p
c3NpbmcoKSkgewotICAgICAgICBSZW5kZXJSZXBsYWNlZDo6cGFpbnQocGFpbnRJbmZvLCB0eCwg
dHkpOworICAgICAgICBSZW5kZXJSZXBsYWNlZDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUmVuZGVyUGFydDo6cGFpbnQo
cGFpbnRJbmZvLCB0eCwgdHkpOworICAgIFJlbmRlclBhcnQ6OnBhaW50KHBhaW50SW5mbywgcGFp
bnRPZmZzZXQpOwogfQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2Vk
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAko
cmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBpc0VtYmVkZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9p
bnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwg
aW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50Jik7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmly
dHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsNyArMTE4LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRSb3dCb3JkZXIoY29ucwog
ICAgIH0KIH0KIAotdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAocGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CkBA
IC0xMjcsOSArMTI3LDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBw
YQogICAgIGlmICghY2hpbGQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEFkZCBpbiBvdXIg
b2Zmc2V0cy4KLSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0geSgpOworICAgIEludFBvaW50IGFk
anVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBpbnQg
cm93cyA9IGZyYW1lU2V0KCktPnRvdGFsUm93cygpOwogICAgIGludCBjb2xzID0gZnJhbWVTZXQo
KS0+dG90YWxDb2xzKCk7CkBAIC0xMzksMTAgKzEzNywxMCBAQCB2b2lkIFJlbmRlckZyYW1lU2V0
OjpwYWludChQYWludEluZm8mIHBhCiAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKysp
IHsKICAgICAgICAgaW50IHhQb3MgPSAwOwogICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNv
bHM7IGMrKykgewotICAgICAgICAgICAgY2hpbGQtPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsK
KyAgICAgICAgICAgIGNoaWxkLT5wYWludChwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQp
OwogICAgICAgICAgICAgeFBvcyArPSBtX2NvbHMubV9zaXplc1tjXTsKICAgICAgICAgICAgIGlm
IChib3JkZXJUaGlja25lc3MgJiYgbV9jb2xzLm1fYWxsb3dCb3JkZXJbYyArIDFdKSB7Ci0gICAg
ICAgICAgICAgICAgcGFpbnRDb2x1bW5Cb3JkZXIocGFpbnRJbmZvLCBJbnRSZWN0KHR4ICsgeFBv
cywgdHkgKyB5UG9zLCBib3JkZXJUaGlja25lc3MsIGhlaWdodCgpKSk7CisgICAgICAgICAgICAg
ICAgcGFpbnRDb2x1bW5Cb3JkZXIocGFpbnRJbmZvLCBJbnRSZWN0KGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpICsgeFBvcywgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB5UG9zLCBib3JkZXJUaGlj
a25lc3MsIGhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgeFBvcyArPSBib3JkZXJUaGlja25l
c3M7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpOwpAQCAtMTUxLDcgKzE0OSw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50
SW5mbyYgcGEKICAgICAgICAgfQogICAgICAgICB5UG9zICs9IG1fcm93cy5tX3NpemVzW3JdOwog
ICAgICAgICBpZiAoYm9yZGVyVGhpY2tuZXNzICYmIG1fcm93cy5tX2FsbG93Qm9yZGVyW3IgKyAx
XSkgewotICAgICAgICAgICAgcGFpbnRSb3dCb3JkZXIocGFpbnRJbmZvLCBJbnRSZWN0KHR4LCB0
eSArIHlQb3MsIHdpZHRoKCksIGJvcmRlclRoaWNrbmVzcykpOworICAgICAgICAgICAgcGFpbnRS
b3dCb3JkZXIocGFpbnRJbmZvLCBJbnRSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSArIHlQb3MsIHdpZHRoKCksIGJvcmRlclRoaWNrbmVzcykpOwog
ICAgICAgICAgICAgeVBvcyArPSBib3JkZXJUaGlja25lc3M7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkocmV2aXNpb24g
ODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2Vk
KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7CiAKICAgICBpbmxpbmUgSFRNTEZy
YW1lU2V0RWxlbWVudCogZnJhbWVTZXQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksOSArMzA5
LDkgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5KQordm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBSZW5kZXJSZXBsYWNlZDo6cGFpbnQo
cGFpbnRJbmZvLCB0eCwgdHkpOworICAgIFJlbmRlclJlcGxhY2VkOjpwYWludChwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKICAgICAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2VPdXRsaW5lKQogICAgICAgICBwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKHBhaW50SW5mbyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkocmV2aXNpb24gODgy
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTksNyArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGltYWdl
Q2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAg
IGJvb2wgaXNMb2dpY2FsV2lkdGhTcGVjaWZpZWQoKSBjb25zdDsKICAgICBib29sIGlzTG9naWNh
bEhlaWdodFNwZWNpZmllZCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCw5ICs0NjAsOSBA
QCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvCiAgICAgfQogfQogCi12
b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50
IHR5KQordm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywg
cGFpbnRJbmZvLCB0eCwgdHkpOworICAgIG1fbGluZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyAr
MTE1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9IC8vIERvIG5vdGhpbmcgZm9yIGxheW91dCgpCiAKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
bik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2
aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzM0LDcgKzIzMzQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludFNjcm9sbENvcm5lcihHcmFwCiAgICAgfQogCiAgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7
Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zm
c2V0LngoKSwgcGFpbnRPZmZzZXQueSgpLCBhYnNSZWN0KTsKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0yMzYzLDcgKzIzNjMsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDCiAgICAgfQogICAgIAogICAgIGlmIChtX3Jlc2l6ZXIp
IHsKLSAgICAgICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0
LngoKSwgcGFpbnRPZmZzZXQueSgpLCBhYnNSZWN0KTsKKyAgICAgICAgbV9yZXNpemVyLT5wYWlu
dEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMjU5NywxMCArMjU5Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXIoUmVuZGVyTGF5ZXIKICAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hv
dWxkIHVzZS4KICAgICBJbnRSZWN0IGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRv
QXBwbHksIG91dGxpbmVSZWN0OwogICAgIGNhbGN1bGF0ZVJlY3RzKHJvb3RMYXllciwgcGFpbnRE
aXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxp
bmVSZWN0LCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsK
LSAgICBpbnQgeCA9IGxheWVyQm91bmRzLngoKTsKLSAgICBpbnQgeSA9IGxheWVyQm91bmRzLnko
KTsKLSAgICBpbnQgdHggPSB4IC0gcmVuZGVyQm94WCgpOwotICAgIGludCB0eSA9IHkgLSByZW5k
ZXJCb3hZKCk7CisgICAgSW50UG9pbnQgcGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVyQm91bmRz
LmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAtdG8tZGF0ZS4KICAgICB1
cGRhdGVDb21wb3NpdGluZ0FuZExheWVyTGlzdHNJZk5lZWRlZCgpOwpAQCAtMjYzNCw3ICsyNjMx
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllcgogCiAgICAgICAg
IC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgogICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKHAs
IGRhbWFnZVJlY3QsIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIGZhbHNlLCBwYWludGluZ1Jv
b3RGb3JSZW5kZXJlciwgMCk7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywg
dHgsIHR5KTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7CiAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2xpcC4KICAgICAgICAgcmVzdG9yZUNsaXAo
cCwgcGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwpAQCAtMjY1NCwxNSArMjY1MSwxNSBAQCB2
b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyCiAgICAgICAgIFBhaW50SW5m
byBwYWludEluZm8ocCwgY2xpcFJlY3RUb0FwcGx5LCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9ubHkgPyBQYWludFBoYXNlU2VsZWN0aW9uIDog
UGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcmNlQmxhY2tUZXh0LCBwYWludGluZ1Jvb3RGb3JSZW5kZXJl
ciwgMCk7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAg
ICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAg
IGlmICghc2VsZWN0aW9uT25seSkgewogICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFp
bnRQaGFzZUZsb2F0OwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0
eCwgdHkpOworICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7CiAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdyb3Vu
ZDsKICAgICAgICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzID0gb3ZlcmxhcFRl
c3RSZXF1ZXN0czsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgs
IHR5KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOwogICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkT3V0bGlu
ZXM7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7Cisg
ICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIE5vdyByZXN0b3JlIG91ciBjbGlwLgpAQCAtMjY3Myw3ICsy
NjcwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllcgogICAgICAg
ICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhw
LCBvdXRsaW5lUmVjdCwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBmYWxzZSwgcGFpbnRpbmdSb290
Rm9yUmVuZGVyZXIsIDApOwogICAgICAgICBzZXRDbGlwKHAsIHBhaW50RGlydHlSZWN0LCBvdXRs
aW5lUmVjdCk7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsK
KyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAg
ICAgIHJlc3RvcmVDbGlwKHAsIHBhaW50RGlydHlSZWN0LCBvdXRsaW5lUmVjdCk7CiAgICAgfQog
ICAgIApAQCAtMjY4OCw3ICsyNjg1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihS
ZW5kZXJMYXllcgogCiAgICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgogICAgICAgICBQYWludElu
Zm8gcGFpbnRJbmZvKHAsIGRhbWFnZVJlY3QsIFBhaW50UGhhc2VNYXNrLCBmYWxzZSwgcGFpbnRp
bmdSb290Rm9yUmVuZGVyZXIsIDApOwotICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludElu
Zm8sIHR4LCB0eSk7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwogICAgICAgICAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2xpcC4KICAgICAgICAg
cmVzdG9yZUNsaXAocCwgcGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwpAQCAtMjY5Niw3ICsy
NjkzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllcgogCiAgICAg
aWYgKHBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpIHsKICAgICAgICAgc2V0Q2xpcChwLCBwYWlu
dERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7Ci0gICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhw
LCBJbnRQb2ludCh0eCwgdHkpLCBkYW1hZ2VSZWN0LCB0cnVlKTsKKyAgICAgICAgcGFpbnRPdmVy
Zmxvd0NvbnRyb2xzKHAsIHBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0LCB0cnVlKTsKICAgICAgICAg
cmVzdG9yZUNsaXAocCwgcGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJ
KHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTksOCArMTA5OSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcigKICAgICBJbnRSZWN0IGxheWVyQm91bmRz
LCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0OwogICAgIG1fb3duaW5n
TGF5ZXItPmNhbGN1bGF0ZVJlY3RzKHJvb3RMYXllciwgcGFpbnREaXJ0eVJlY3QsIGxheWVyQm91
bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0KTsKIAotICAgIGlu
dCB0eCA9IGxheWVyQm91bmRzLngoKSAtIG1fb3duaW5nTGF5ZXItPnJlbmRlckJveFgoKTsKLSAg
ICBpbnQgdHkgPSBsYXllckJvdW5kcy55KCkgLSBtX293bmluZ0xheWVyLT5yZW5kZXJCb3hZKCk7
CisgICAgSW50UG9pbnQgcGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVyQm91bmRzLmxvY2F0aW9u
KCkgLSBtX293bmluZ0xheWVyLT5yZW5kZXJCb3hMb2NhdGlvbigpKTsKIAogICAgIC8vIElmIHRo
aXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNoaWxkIG9mIHRoZSBwYWludGluZ1Jvb3QsIHdlIHJl
bmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNoCiAgICAgLy8gaXMgZG9uZSBieSBwYXNzaW5nIGEg
bmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91ciByZW5kZXJlciAoYXMgaWYgbm8gcGFpbnRpbmdS
b290IHdhcyBldmVyIHNldCkuCkBAIC0xMTE4LDcgKzExMTcsNyBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoCiAgICAgICAgIHNldENsaXAoY29udGV4dCwgcGFpbnRE
aXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwogICAgICAgICAKICAgICAgICAgUGFpbnRJbmZvIGluZm8o
Y29udGV4dCwgZGFtYWdlUmVjdCwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgZmFsc2UsIHBh
aW50aW5nUm9vdEZvclJlbmRlcmVyLCAwKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQoaW5m
bywgdHgsIHR5KTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQp
OwogCiAgICAgICAgIC8vIE91ciBzY3JvbGxiYXIgd2lkZ2V0cyBwYWludCBleGFjdGx5IHdoZW4g
d2UgdGVsbCB0aGVtIHRvLCBzbyB0aGF0IHRoZXkgd29yayBwcm9wZXJseSB3aXRoCiAgICAgICAg
IC8vIHotaW5kZXguICBXZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2Jv
cmRlciwgc28gdGhhdCB0aGUgc2Nyb2xsYmFycyB3aWxsCkBAIC0xMTQxLDE3ICsxMTQwLDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcigKICAgICAgICAgUGFpbnRJ
bmZvIHBhaW50SW5mbyhjb250ZXh0LCBjbGlwUmVjdFRvQXBwbHksIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxl
Y3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VCbGFja1RleHQsIHBhaW50aW5nUm9vdEZv
clJlbmRlcmVyLCAwKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwg
dHkpOworICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsK
IAogICAgICAgICBpZiAoIXNlbGVjdGlvbk9ubHkpIHsKICAgICAgICAgICAgIHBhaW50SW5mby5w
aGFzZSA9IFBhaW50UGhhc2VGbG9hdDsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBh
aW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOwogCiAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBo
YXNlRm9yZWdyb3VuZDsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywg
dHgsIHR5KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwogCiAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRP
dXRsaW5lczsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5
KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQp
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm93IHJlc3RvcmUgb3VyIGNsaXAuCkBAIC0xMTYx
LDcgKzExNjAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoCiAg
ICAgICAgICAgICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKICAgICAgICAgICAgIFBhaW50SW5m
byBwYWludEluZm8oY29udGV4dCwgb3V0bGluZVJlY3QsIFBhaW50UGhhc2VTZWxmT3V0bGluZSwg
ZmFsc2UsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCAwKTsKICAgICAgICAgICAgIHNldENsaXAo
Y29udGV4dCwgcGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgICAgIHJlbmRl
cmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgcmVzdG9yZUNsaXAo
Y29udGV4dCwgcGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKICAgICAgICAgfQogCkBAIC0x
MTc4LDcgKzExNzcsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIo
CiAKICAgICAgICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgogICAgICAgICAgICAgUGFpbnRJbmZv
IHBhaW50SW5mbyhjb250ZXh0LCBkYW1hZ2VSZWN0LCBQYWludFBoYXNlTWFzaywgZmFsc2UsIHBh
aW50aW5nUm9vdEZvclJlbmRlcmVyLCAwKTsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50
KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZXN0b3Jl
IHRoZSBjbGlwLgogICAgICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgcGFpbnREaXJ0eVJl
Y3QsIGRhbWFnZVJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
bmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw3ICsy
MDAsNyBAQCBib29sIFJlbmRlckxpbmVCb3hMaXN0OjpsaW5lSW50ZXJzZWN0c0RpCiAgICAgcmV0
dXJuIHJhbmdlSW50ZXJzZWN0c1JlY3QocmVuZGVyZXIsIGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0
b20sIHBhaW50SW5mby5yZWN0LCBvZmZzZXQpOwogfQogCi12b2lkIFJlbmRlckxpbmVCb3hMaXN0
OjpwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgdHgsIGludCB0eSkgY29uc3QKK3ZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCkgY29uc3QKIHsKICAgICAvLyBPbmx5IHBhaW50IGR1
cmluZyB0aGUgZm9yZWdyb3VuZC9zZWxlY3Rpb24gcGhhc2VzLgogICAgIGlmIChwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5lIApA
QCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJv
eE0KICAgICBSZW5kZXJWaWV3KiB2ID0gcmVuZGVyZXItPnZpZXcoKTsKICAgICBib29sIHVzZVBy
aW50UmVjdCA9ICF2LT5wcmludFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgaW50IG91dGxpbmVTaXpl
ID0gcmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpOwotICAgIGlm
ICghYW55TGluZUludGVyc2VjdHNSZWN0KHJlbmRlcmVyLCBwYWludEluZm8ucmVjdCwgSW50UG9p
bnQodHgsIHR5KSwgdXNlUHJpbnRSZWN0LCBvdXRsaW5lU2l6ZSkpCisgICAgaWYgKCFhbnlMaW5l
SW50ZXJzZWN0c1JlY3QocmVuZGVyZXIsIHBhaW50SW5mby5yZWN0LCBwYWludE9mZnNldCwgdXNl
UHJpbnRSZWN0LCBvdXRsaW5lU2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFBhaW50SW5m
byBpbmZvKHBhaW50SW5mbyk7CkBAIC0yNDMsMjMgKzI0MywyMyBAQCB2b2lkIFJlbmRlckxpbmVC
b3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAgICAgICAgICAgYm90dG9tRm9yUGFnaW5h
dGlvbkNoZWNrID0gbWF4KGJvdHRvbUZvclBhZ2luYXRpb25DaGVjaywgcm9vdC0+bGluZUJvdHRv
bSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChib3R0b21Gb3JQYWdpbmF0aW9u
Q2hlY2sgLSB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPD0gdi0+cHJpbnRSZWN0KCkuaGVpZ2h0KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2
LT5wcmludFJlY3QoKS5tYXhZKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQu
eSgpICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+cHJpbnRSZWN0KCkubWF4WSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChSb290SW5saW5lQm94KiBuZXh0Um9vdEJveCA9IGN1
cnItPnJvb3QoKS0+bmV4dFJvb3RCb3goKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRv
bUZvclBhZ2luYXRpb25DaGVjayA9IG1pbihib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2ssIG1pbihu
ZXh0Um9vdEJveC0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCksIG5leHRSb290Qm94LT5saW5l
VG9wKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90
dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+cHJpbnRSZWN0KCkubWF4WSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0eSArIHRvcEZvclBhZ2luYXRpb25DaGVjayA8IHYtPnRydW5jYXRl
ZEF0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB2LT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkg
KyB0b3BGb3JQYWdpbmF0aW9uQ2hlY2ssIHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBpZiAo
cGFpbnRPZmZzZXQueSgpICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+cHJpbnRSZWN0
KCkubWF4WSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyB0
b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPCB2LT50cnVuY2F0ZWRBdCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdi0+c2V0QmVzdFRydW5jYXRlZEF0KHBhaW50T2Zmc2V0LnkoKSArIHRvcEZvclBh
Z2luYXRpb25DaGVjaywgcmVuZGVyZXIpOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3
ZXJlIGFibGUgdG8gdHJ1bmNhdGUsIGRvbid0IHBhaW50LgotICAgICAgICAgICAgICAgICAgICBp
ZiAodHkgKyB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPj0gdi0+dHJ1bmNhdGVkQXQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIHRvcEZvclBhZ2luYXRpb25DaGVj
ayA+PSB2LT50cnVuY2F0ZWRBdCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGxpbmVJbnRlcnNlY3RzRGlydHlSZWN0KHJlbmRlcmVyLCBjdXJyLCBpbmZvLCBJbnRQb2ludCh0
eCwgdHkpKSkgeworICAgICAgICBpZiAobGluZUludGVyc2VjdHNEaXJ0eVJlY3QocmVuZGVyZXIs
IGN1cnIsIGluZm8sIHBhaW50T2Zmc2V0KSkgewogICAgICAgICAgICAgUm9vdElubGluZUJveCog
cm9vdCA9IGN1cnItPnJvb3QoKTsKLSAgICAgICAgICAgIGN1cnItPnBhaW50KGluZm8sIEludFBv
aW50KHR4LCB0eSksIHJvb3QtPmxpbmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsKKyAgICAg
ICAgICAgIGN1cnItPnBhaW50KGluZm8sIHBhaW50T2Zmc2V0LCByb290LT5saW5lVG9wKCksIHJv
b3QtPmxpbmVCb3R0b20oKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2Nyw3ICsyNjcsNyBA
QCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAgIExpc3RI
YXNoU2V0PFJlbmRlcklubGluZSo+OjppdGVyYXRvciBlbmQgPSBpbmZvLm91dGxpbmVPYmplY3Rz
LT5lbmQoKTsKICAgICAgICAgZm9yIChMaXN0SGFzaFNldDxSZW5kZXJJbmxpbmUqPjo6aXRlcmF0
b3IgaXQgPSBpbmZvLm91dGxpbmVPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIFJlbmRlcklubGluZSogZmxvdyA9ICppdDsKLSAgICAgICAgICAgIGZsb3ct
PnBhaW50T3V0bGluZShpbmZvLmNvbnRleHQsIEludFBvaW50KHR4LCB0eSkpOworICAgICAgICAg
ICAgZmxvdy0+cGFpbnRPdXRsaW5lKGluZm8uY29udGV4dCwgcGFpbnRPZmZzZXQpOwogICAgICAg
ICB9CiAgICAgICAgIGluZm8ub3V0bGluZU9iamVjdHMtPmNsZWFyKCk7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgJKHJldmlzaW9u
IDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlydHlM
aW5lQm94ZXMoKTsKICAgICB2b2lkIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKFJlbmRlck9i
amVjdCogcGFyZW50LCBSZW5kZXJPYmplY3QqIGNoaWxkKTsKIAotICAgIHZvaWQgcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqLCBQYWludEluZm8mLCBpbnQgeCwgaW50IHkpIGNvbnN0OworICAg
IHZvaWQgcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBQYWludEluZm8mLCBjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdChSZW5kZXJCb3hNb2RlbE9iamVjdCosIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pIGNvbnN0OwogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQs
MTIgKzM0NCwxMiBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIoCiAg
ICAgfQogfQogCi12b2lkIFJlbmRlckxpc3RJdGVtOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckxpc3RJdGVtOjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmICghbG9n
aWNhbEhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJCbG9jazo6cGFpbnQo
cGFpbnRJbmZvLCB0eCwgdHkpOworICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8sIHBh
aW50T2Zmc2V0KTsKIH0KIAogY29uc3QgU3RyaW5nJiBSZW5kZXJMaXN0SXRlbTo6bWFya2VyVGV4
dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
aAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwMSw3ICsx
MTAxLDcgQEAgSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpsb2NhbFNlbGVjdGlvbgogICAgIHJl
dHVybiBJbnRSZWN0KG5ld0xvZ2ljYWxUb3AsIDAsIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpLCBo
ZWlnaHQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAg
IGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTExMDksNyArMTEwOSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQo
UGFpbnRJbmZvJiAKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGJveE9yaWdpbih0eCArIHgoKSwgdHkgKyB5
KCkpOworICAgIEludFBvaW50IGJveE9yaWdpbihwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwog
ICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpKTsKICAgICBvdmVy
Zmxvd1JlY3QubW92ZUJ5KGJveE9yaWdpbik7CiAgICAgb3ZlcmZsb3dSZWN0LmluZmxhdGUobWF4
aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwpAQCAtMTEyNyw3ICsxMTI3LDcgQEAg
dm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIGlmIChpc0ltYWdl
KCkpIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQo
KSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KEludFBvaW50KHR4LCB0eSksIHN0eWxl
KCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKKyAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0
KHBhaW50T2Zmc2V0LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CiAjZW5kaWYKICAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2UtPmltYWdlKHRoaXMsIG1hcmtlci5zaXplKCkp
LmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIG1hcmtlcik7CiAgICAgICAgIGlmIChzZWxl
Y3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKQEAgLTExNDEsNyArMTE0MSw3IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgLy8gRklYTUU6IHBhaW50IGdhcCBiZXR3ZWVuIG1hcmtlciBhbmQgbGlzdCBpdGVtIHBy
b3BlcgogICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJ
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRDdXN0b21IaWdo
bGlnaHQoSW50UG9pbnQodHgsIHR5KSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOworICAg
ICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChwYWludE9mZnNldCwgc3R5bGUoKS0+aGlnaGxpZ2h0
KCksIHRydWUpOwogI2VuZGlmCiAKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rp
b25Ob25lKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCBib29sIGlzTGlzdE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ1LDcgKzExNDUs
NyBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6cGFpbnRpbmdSb290UmVjdChJCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgLypwYWlu
dEluZm8qLywgaW50IC8qdHgqLywgaW50IC8qdHkqLykKK3ZvaWQgUmVuZGVyT2JqZWN0OjpwYWlu
dChQYWludEluZm8mIC8qcGFpbnRJbmZvKi8sIGNvbnN0IEludFBvaW50JiAvKnBhaW50T2Zmc2V0
Ki8pCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJ
KHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjgsNyArNTI4LDcgQEAgcHVibGljOgogICAgIHZvaWQg
dXBkYXRlRmlsbEltYWdlcyhjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqKTsKICAg
ICB2b2lkIHVwZGF0ZUltYWdlKFN0eWxlSW1hZ2UqLCBTdHlsZUltYWdlKik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgLy8gUmVjdXJz
aXZlIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoaXMg
b2JqZWN0IGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAko
cmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwyMyArOTQsMjIgQEAgdm9pZCBSZW5kZXJSZXBs
YWNlZDo6aW50cmluc2ljU2l6ZUNoYW5nZQogICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRo
c1JlY2FsYygpOwogfQogCi12b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIGlm
ICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCBJbnRQb2ludCh0eCwgdHkpKSkKKyAgICBpZiAoIXNo
b3VsZFBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIAogICAgIGlmIChoYXNC
b3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91
bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pKSAKLSAgICAgICAg
cGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOworICAgICAg
ICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CiAg
ICAgCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlTWFzaykgewotICAgICAg
ICBwYWludE1hc2socGFpbnRJbmZvLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICAgICAgcGFpbnRN
YXNrKHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBJbnRSZWN0IHBhaW50UmVjdCA9IEludFJlY3QoSW50UG9pbnQodHgsIHR5KSwg
c2l6ZSgpKTsKKyAgICBJbnRSZWN0IHBhaW50UmVjdCA9IEludFJlY3QoYWRqdXN0ZWRQYWludE9m
ZnNldCwgc2l6ZSgpKTsKICAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0
bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHls
ZSgpLT5vdXRsaW5lV2lkdGgoKSkKICAgICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250
ZXh0LCBwYWludFJlY3QpOwogICAgIApAQCAtMTI5LDcgKzEyOCw3IEBAIHZvaWQgUmVuZGVyUmVw
bGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGEKIAogICAgIGJvb2wgY29tcGxldGVseUNsaXBwZWRP
dXQgPSBmYWxzZTsKICAgICBpZiAoc3R5bGUoKS0+aGFzQm9yZGVyUmFkaXVzKCkpIHsKLSAgICAg
ICAgSW50UmVjdCBib3JkZXJSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgp
KTsKKyAgICAgICAgSW50UmVjdCBib3JkZXJSZWN0ID0gSW50UmVjdChhZGp1c3RlZFBhaW50T2Zm
c2V0LCBzaXplKCkpOwogCiAgICAgICAgIGlmIChib3JkZXJSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGNvbXBsZXRlbHlDbGlwcGVkT3V0ID0gdHJ1ZTsKQEAgLTE0MSw3ICsxNDAsNyBAQCB2
b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhCiAgICAgfQogCiAgICAgaWYg
KCFjb21wbGV0ZWx5Q2xpcHBlZE91dCkgewotICAgICAgICBwYWludFJlcGxhY2VkKHBhaW50SW5m
bywgSW50UG9pbnQodHgsIHR5KSk7CisgICAgICAgIHBhaW50UmVwbGFjZWQocGFpbnRJbmZvLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0KTsKIAogICAgICAgICBpZiAoc3R5bGUoKS0+aGFzQm9yZGVyUmFk
aXVzKCkpCiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtMTUx
LDcgKzE1MCw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAg
ICAvLyBzdXJyb3VuZGluZyBjb250ZW50LgogICAgIGlmIChkcmF3U2VsZWN0aW9uVGludCkgewog
ICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblBhaW50aW5nUmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVj
dCgpOwotICAgICAgICBzZWxlY3Rpb25QYWludGluZ1JlY3QubW92ZSh0eCwgdHkpOworICAgICAg
ICBzZWxlY3Rpb25QYWludGluZ1JlY3QubW92ZUJ5KGFkanVzdGVkUGFpbnRPZmZzZXQpOwogICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUGFpbnRpbmdSZWN0LCBz
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICB9
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2
aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB2b2lkIGludHJpbnNpY1NpemVDaGFuZ2VkKCk7CiAgICAgdm9pZCBzZXRIYXNJbnRyaW5zaWNT
aXplKCkgeyBtX2hhc0ludHJpbnNpY1NpemUgPSB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIGJvb2wgc2hvdWxkUGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAgICBJbnRSZWN0IGxvY2FsU2VsZWN0aW9uUmVj
dChib29sIGNoZWNrV2hldGhlclNlbGVjdGVkID0gdHJ1ZSkgY29uc3Q7IC8vIFRoaXMgaXMgaW4g
bG9jYWwgY29vcmRpbmF0ZXMsIGJ1dCBpdCdzIGEgcGh5c2ljYWwgcmVjdCAoc28gdGhlIHRvcCBs
ZWZ0IGNvcm5lciBpcyBwaHlzaWNhbCB0b3AgbGVmdCkuCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCwxMyArNjAsMTIgQEAgdm9pZCBSZW5kZXJSZXBsaWNhOjpjb21wdXRlUHJlZmVycmVkTG9naQog
ICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKLXZvaWQgUmVu
ZGVyUmVwbGljYTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQor
dm9pZCBSZW5kZXJSZXBsaWNhOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VNYXNrKQogICAg
ICAgICByZXR1cm47CiAgCi0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAgICBJbnRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAg
ICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAg
Ly8gVHVybiBhcm91bmQgYW5kIHBhaW50IHRoZSBwYXJlbnQgbGF5ZXIuIFVzZSB0ZW1wb3Jhcnkg
Y2xpcFJlY3RzLCBzbyB0aGF0IHRoZSBsYXllciBkb2Vzbid0IGVuZCB1cCBjYWNoaW5nIGNsaXAg
cmVjdHMKQEAgLTc2LDcgKzc1LDcgQEAgdm9pZCBSZW5kZXJSZXBsaWNhOjpwYWludChQYWludElu
Zm8mIHBhaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWludEJlaGF2
aW9yTm9ybWFsLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJMYXllcjo6UGFpbnRMYXllckhhdmVUcmFuc3BhcmVuY3kgfCBSZW5kZXJMYXllcjo6UGFp
bnRMYXllckFwcGxpZWRUcmFuc2Zvcm0gfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllclRlbXBvcmFy
eUNsaXBSZWN0cyB8IFJlbmRlckxheWVyOjpQYWludExheWVyUGFpbnRpbmdSZWZsZWN0aW9uKTsK
ICAgICBlbHNlIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU1hc2spCi0gICAgICAg
IHBhaW50TWFzayhwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOworICAgICAgICBwYWludE1h
c2socGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5oCShy
ZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQ
b2ludCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlcGxpY2EoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3NSw3IEBA
IHZvaWQgUmVuZGVyU2Nyb2xsYmFyOjpwYWludFBhcnQoR3JhcGhpY3MKICAgICBSZW5kZXJTY3Jv
bGxiYXJQYXJ0KiBwYXJ0UmVuZGVyZXIgPSBtX3BhcnRzLmdldChwYXJ0VHlwZSk7CiAgICAgaWYg
KCFwYXJ0UmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBwYXJ0UmVuZGVyZXItPnBhaW50
SW50b1JlY3QoZ3JhcGhpY3NDb250ZXh0LCB4KCksIHkoKSwgcmVjdCk7CisgICAgcGFydFJlbmRl
cmVyLT5wYWludEludG9SZWN0KGdyYXBoaWNzQ29udGV4dCwgbG9jYXRpb24oKSwgcmVjdCk7CiB9
CiAKIEludFJlY3QgUmVuZGVyU2Nyb2xsYmFyOjpidXR0b25SZWN0KFNjcm9sbGJhclBhcnQgcGFy
dFR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFy
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclBhcnQuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEwICsxNTks
MTAgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjppbWFnZUNoYW5nZWQoVwogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3ZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6cGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZGltZW5zaW9ucyBtYXRjaCB0aGUg
cmVjdC4KLSAgICBzZXRMb2NhdGlvbihyZWN0LmxvY2F0aW9uKCkgLSBJbnRTaXplKHR4LCB0eSkp
OworICAgIHNldExvY2F0aW9uKHJlY3QubG9jYXRpb24oKSAtIHRvU2l6ZShwYWludE9mZnNldCkp
OwogICAgIHNldFdpZHRoKHJlY3Qud2lkdGgoKSk7CiAgICAgc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0
KCkpOwogCkBAIC0xNzEsMTUgKzE3MSwxNSBAQCB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OnBh
aW50SW50b1JlY3QoCiAKICAgICAvLyBOb3cgZG8gdGhlIHBhaW50LgogICAgIFBhaW50SW5mbyBw
YWludEluZm8oZ3JhcGhpY3NDb250ZXh0LCByZWN0LCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5k
LCBmYWxzZSwgMCwgMCk7Ci0gICAgcGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgIHBhaW50
KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhh
c2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7Ci0gICAgcGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwor
ICAgIHBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgIHBhaW50SW5mby5waGFzZSA9
IFBhaW50UGhhc2VGbG9hdDsKLSAgICBwYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgcGFp
bnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQ
aGFzZUZvcmVncm91bmQ7Ci0gICAgcGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgIHBhaW50
KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhh
c2VPdXRsaW5lOwotICAgIHBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICBwYWludChwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAKLSAg
ICB2b2lkIHBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsMTAgKzQ1MSw5IEBAIHZv
aWQgUmVuZGVyVGFibGU6OnNldENlbGxMb2dpY2FsV2lkdGhzKCkKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkK
K3ZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAg
ICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigp
OwogCiAgICAgUGFpbnRQaGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogCkBAIC00
NjIsMTUgKzQ2MSwxNSBAQCB2b2lkIFJlbmRlclRhYmxlOjpwYWludChQYWludEluZm8mIHBhaW50
CiAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKICAg
ICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93Qm94KTsKICAgICAgICAgb3ZlcmZsb3dC
b3guaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7Ci0gICAgICAg
IG92ZXJmbG93Qm94Lm1vdmUodHgsIHR5KTsKKyAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFk
anVzdGVkUGFpbnRPZmZzZXQpOwogICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMo
cGFpbnRJbmZvLnJlY3QpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJvb2wg
cHVzaGVkQ2xpcCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCBJbnRQb2ludCh0eCwgdHkp
KTsKLSAgICBwYWludE9iamVjdChwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOworICAgIGJv
b2wgcHVzaGVkQ2xpcCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50
T2Zmc2V0KTsKKyAgICBwYWludE9iamVjdChwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQp
OwogICAgIGlmIChwdXNoZWRDbGlwKQotICAgICAgICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZv
LCBwYWludFBoYXNlLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICAgICAgcG9wQ29udGVudHNDbGlw
KHBhaW50SW5mbywgcGFpbnRQaGFzZSwgYWRqdXN0ZWRQYWludE9mZnNldCk7CiB9CiAKIHZvaWQg
UmVuZGVyVGFibGU6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQpCkBAIC00OTksNyArNDk4LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6
cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1fY2Fw
dGlvbikpIHsKICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGlu
Z01vZGUodG9SZW5kZXJCb3goY2hpbGQpLCBwYWludE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBw
aW5nQWRqdXN0bWVudCk7Ci0gICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgY2hpbGRQb2lu
dC54KCksIGNoaWxkUG9pbnQueSgpKTsKKyAgICAgICAgICAgIGNoaWxkLT5wYWludChpbmZvLCBj
aGlsZFBvaW50KTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTUyMSw3ICs1MjAsNyBAQCB2
b2lkIFJlbmRlclRhYmxlOjpwYWludE9iamVjdChQYWludEluZm8mCiAgICAgICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rp
b24oKSkgewogICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZv
cldyaXRpbmdNb2RlKHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKSwgcGFpbnRPZmZzZXQsIFBh
cmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwotICAgICAgICAgICAgICAgICAgICBjaGls
ZC0+cGFpbnQoaW5mbywgY2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBtX2N1cnJlbnRCb3JkZXIgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
NCw3ICsyMTQsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCogb2xkQ2hpbGQpOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9u
cyhQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE1h
c2soUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MDEsMjIgKzgwMSwyMSBAQCBpbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmQWZ0ZXIo
Ym9vCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkK
IHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJv
cmRlcnMgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgaWYg
KCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIHR4ICs9IHgoKTsKLSAgICAgICAgdHkgKz0geSgpOworICAgICAgICBJ
bnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwog
ICAgICAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7
Ci0gICAgICAgIGlmICh0eSAtIHRhYmxlKCktPm91dGVyQm9yZGVyVG9wKCkgPCBwYWludEluZm8u
cmVjdC5tYXhZKCkgKyBvcwotICAgICAgICAgICAgJiYgdHkgKyBoZWlnaHQoKSArIHRhYmxlKCkt
Pm91dGVyQm9yZGVyQm90dG9tKCkgPiBwYWludEluZm8ucmVjdC55KCkgLSBvcykKLSAgICAgICAg
ICAgIHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KHR4LCB0
eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKGFkanVzdGVkUGFpbnRPZmZzZXQu
eSgpIC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSAr
IG9zCisgICAgICAgICAgICAmJiBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGhlaWdodCgpICsg
dGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA+IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQor
ICAgICAgICAgICAgcGFpbnRDb2xsYXBzZWRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIEludFJl
Y3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
IAogICAgIAotICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAg
UmVuZGVyQmxvY2s6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogfQogCiBzdGF0aWMg
RUJvcmRlclN0eWxlIGNvbGxhcHNlZEJvcmRlclN0eWxlKEVCb3JkZXJTdHlsZSBzdHlsZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHJldmlzaW9u
IDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBv
aW50Jik7CiAKICAgICB2b2lkIHBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50JiwgUmVuZGVyT2JqZWN0KiBiYWNrZ3JvdW5kT2JqZWN0KTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lv
biA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBib29sIFJlbmRlclRhYmxlUm93Ojpu
b2RlQXRQb2ludChjb25zdCBICiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRh
YmxlUm93OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lk
IFJlbmRlclRhYmxlUm93OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0KQogewogICAgIEFTU0VSVChoYXNTZWxmUGFpbnRpbmdMYXllcigpKTsK
ICAgICBpZiAoIWxheWVyKCkpCkBAIC0yMTgsMTAgKzIxOCwxMCBAQCB2b2lkIFJlbmRlclRhYmxl
Um93OjpwYWludChQYWludEluZm8mIHBhCiAgICAgICAgICAgICAvLyBQYWludCB0aGUgcm93IGJh
Y2tncm91bmQgYmVoaW5kIHRoZSBjZWxsLgogICAgICAgICAgICAgaWYgKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJUYWJs
ZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCk7Ci0gICAgICAgICAgICAgICAg
Y2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwocGFpbnRJbmZvLCBJbnRQb2ludCh0eCwg
dHkpLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5wYWludEJhY2tncm91bmRzQmVoaW5k
Q2VsbChwYWludEluZm8sIHBhaW50T2Zmc2V0LCB0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmICghdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQot
ICAgICAgICAgICAgICAgIGNoaWxkLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAg
ICAgICAgICAgY2hpbGQtPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICB9
CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBUaGUgb25seSB0aW1lIHJvd3MgZ2V0IGEgbGF5ZXIgaXMgd2hlbiB0aGV5IGhhdmUgdHJhbnNw
YXJlbmN5LgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4g
aXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8
IGhhc01hc2soKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50
UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRy
LCBjb25zdCBJbnRSZWN0KiA9IDApOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODg1LDcgKzg4NSw3IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmZpcnN0TGluZUJveEJh
c2UKICAgICByZXR1cm4gZmlyc3RMaW5lQmFzZWxpbmU7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICAvLyBwdXQgdGhpcyBiYWNrIGluIHdoZW4gYWxs
IGxheW91dCB0ZXN0cyBjYW4gaGFuZGxlIGl0CiAgICAgLy8gQVNTRVJUKCFuZWVkc0xheW91dCgp
KTsKQEAgLTg5OSwxNCArODk5LDEzIEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQ
YWludEluZm8KICAgICBpZiAoIXRvdGFsUm93cyB8fCAhdG90YWxDb2xzKQogICAgICAgICByZXR1
cm47CiAKLSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0geSgpOworICAgIEludFBvaW50IGFkanVz
dGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBQYWludFBo
YXNlIHBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwotICAgIGJvb2wgcHVzaGVkQ2xpcCA9IHB1c2hD
b250ZW50c0NsaXAocGFpbnRJbmZvLCBJbnRQb2ludCh0eCwgdHkpKTsKLSAgICBwYWludE9iamVj
dChwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOworICAgIGJvb2wgcHVzaGVkQ2xpcCA9IHB1
c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICBwYWlu
dE9iamVjdChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICBpZiAocHVzaGVkQ2xpcCkKLSAg
ICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIEludFBvaW50KHR4LCB0eSkp
OworICAgICAgICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZvLCBwaGFzZSwgYWRqdXN0ZWRQYWlu
dE9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQ2VsbFBvc2l0aW9ucyhS
ZW5kZXJUYWJsZUNlbGwqIGVsZW0xLCBSZW5kZXJUYWJsZUNlbGwqIGVsZW0yKQpAQCAtOTQ1LDcg
Kzk0NCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludENlbGwoUmVuZGUKICAgICAg
ICAgICAgIGNlbGwtPnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgY2VsbFBv
aW50LCByb3cpOwogICAgIH0KICAgICBpZiAoKCFjZWxsLT5oYXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmICFyb3ctPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHx8IHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlQ29sbGFwc2VkVGFibGVCb3JkZXJzKQotICAgICAgICBjZWxsLT5wYWludChwYWlu
dEluZm8sIGNlbGxQb2ludC54KCksIGNlbGxQb2ludC55KCkpOworICAgICAgICBjZWxsLT5wYWlu
dChwYWludEluZm8sIGNlbGxQb2ludCk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpw
YWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCogb2xkQ2hpbGQp
OwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDZWxsKFJlbmRlclRhYmxlQ2VsbCosIFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBjYWxsZXJzIHdpdGggYSBSZW5kZXJPYmplY3QqIGNhbiBjb250aW51ZSB0byB1c2UgbGVuZ3Ro
KCkuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiB0ZXh0TGVu
Z3RoKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQsIGludCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBjb25zdCBJbnRQb2ludCYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9u
IDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw5ICsyMzUsOSBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6c3VidHJlCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5KQordm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgUmVuZGVy
VGV4dENvbnRyb2w6OnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICBSZW5kZXJUZXh0Q29u
dHJvbDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAKICAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQgJiYgbV9zaG91bGREcmF3Q2Fwc0xv
Y2tJbmRpY2F0b3IpIHsKICAgICAgICAgSW50UmVjdCBjb250ZW50c1JlY3QgPSBjb250ZW50Qm94
UmVjdCgpOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpwYWludCgKICAgICAgICAgY29udGVudHNSZWN0LnNldFkoKGhlaWdodCgpIC0gY29udGVu
dHNSZWN0LmhlaWdodCgpKSAvIDIpOwogCiAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJlY3QgaW50
byB0aGUgY29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBjb250ZW50Ci0gICAgICAgIGNvbnRl
bnRzUmVjdC5tb3ZlKHR4ICsgeCgpLCB0eSArIHkoKSk7CisgICAgICAgIGNvbnRlbnRzUmVjdC5t
b3ZlQnkocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKICAgICAgICAgdGhlbWUoKS0+cGFpbnRD
YXBzTG9ja0luZGljYXRvcih0aGlzLCBwYWludEluZm8sIGNvbnRlbnRzUmVjdCk7CiAgICAgfQog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5n
ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gODgyNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NCwxMSArMTY0LDExIEBAIHZvaWQgUmVuZGVyVmlldzo6bWFwQWJzb2x1dGVUb0xvY2Fs
UG9pbnQKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJWaWV3OjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIC8vIElmIHdl
IGV2ZXIgcmVxdWlyZSBsYXlvdXQgYnV0IHJlY2VpdmUgYSBwYWludCBhbnl3YXksIHNvbWV0aGlu
ZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZy4KICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwot
ICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5KSk7CisgICAgcGFpbnRP
YmplY3QocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0NvbXBvc2l0ZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJs
aWM6CiAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2UnZCBuZXZlciBoYXZlIHRvIGRvIHRoaXMsIGlm
IGFsbCByZXBhaW50cyBhcmUgY29udGFpbmVyLXJlbGF0aXZlLgogICAgIHZpcnR1YWwgdm9pZCBy
ZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhjb25zdCBJbnRSZWN0Jiwg
Ym9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25z
KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICBlbnVtIFNlbGVjdGlvblJlcGFp
bnRNb2RlIHsgUmVwYWludE5ld1hPUk9sZCwgUmVwYWludE5ld01pbnVzT2xkIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gODgyNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ3LDE5ICsyNDcsMTggQEAgdm9pZCBSZW5kZXJXaWRnZXQ6Om5vdGlmeVdpZGdl
dChXaWRnZXRObwogICAgICAgICBtX3dpZGdldC0+bm90aWZ5V2lkZ2V0KG5vdGlmaWNhdGlvbik7
CiB9CiAKLXZvaWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBpZiAoIXNob3VsZFBhaW50
KHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5KSkpCisgICAgaWYgKCFzaG91bGRQYWludChwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHggKz0geCgpOwot
ICAgIHR5ICs9IHkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRP
ZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgaWYgKGhhc0JveERlY29yYXRpb25zKCkgJiYgKHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCi0gICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFp
bnRJbmZvLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhw
YWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogCiAgICAgaWYgKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlTWFzaykgewotICAgICAgICBwYWludE1hc2socGFpbnRJbmZvLCBJbnRQ
b2ludCh0eCwgdHkpKTsKKyAgICAgICAgcGFpbnRNYXNrKHBhaW50SW5mbywgYWRqdXN0ZWRQYWlu
dE9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2OCwxMSArMjY3LDExIEBA
IHZvaWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW4KIAogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50
SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHBhaW50Q3VzdG9tSGln
aGxpZ2h0KEludFBvaW50KHR4IC0geCgpLCB0eSAtIHkoKSksIHN0eWxlKCktPmhpZ2hsaWdodCgp
LCB0cnVlKTsKKyAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQocGFpbnRPZmZzZXQsIHN0eWxl
KCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKHN0eWxlKCktPmhhc0Jv
cmRlclJhZGl1cygpKSB7Ci0gICAgICAgIEludFJlY3QgYm9yZGVyUmVjdCA9IEludFJlY3QodHgs
IHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIEludFJlY3QgYm9yZGVyUmVjdCA9IElu
dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgpKTsKIAogICAgICAgICBpZiAoYm9yZGVy
UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yODksMjAgKzI4OCwyMCBA
QCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAgICAgICAgICAgICBw
YWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1fc3Vic3RpdHV0ZUltYWdlLmdldCgpLCBzdHls
ZSgpLT5jb2xvclNwYWNlKCksIG1fd2lkZ2V0LT5mcmFtZVJlY3QoKSk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgSW50UG9pbnQgd2lkZ2V0TG9jYXRpb24gPSBtX3dpZGdldC0+ZnJhbWVS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgICAgIEludFBvaW50IHBhaW50TG9jYXRpb24odHgg
KyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCB0eSArIGJvcmRlclRvcCgpICsgcGFkZGlu
Z1RvcCgpKTsKKyAgICAgICAgICAgIEludFBvaW50IHBhaW50TG9jYXRpb24oYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBhZGp1c3RlZFBhaW50
T2Zmc2V0LnkoKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKICAgICAgICAgICAgIElu
dFJlY3QgcGFpbnRSZWN0ID0gcGFpbnRJbmZvLnJlY3Q7CiAKLSAgICAgICAgICAgIEludFNpemUg
cGFpbnRPZmZzZXQgPSBwYWludExvY2F0aW9uIC0gd2lkZ2V0TG9jYXRpb247CisgICAgICAgICAg
ICBJbnRTaXplIHdpZGdldFBhaW50T2Zmc2V0ID0gcGFpbnRMb2NhdGlvbiAtIHdpZGdldExvY2F0
aW9uOwogICAgICAgICAgICAgLy8gV2hlbiBwYWludGluZyB3aWRnZXRzIGludG8gY29tcG9zaXRp
bmcgbGF5ZXJzLCB0eCBhbmQgdHkgYXJlIHJlbGF0aXZlIHRvIHRoZSBlbmNsb3NpbmcgY29tcG9z
aXRpbmcgbGF5ZXIsCiAgICAgICAgICAgICAvLyBub3QgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwg
c2hpZnQgdGhlIENUTSBhbmQgYWRqdXN0IHRoZSBwYWludFJlY3QgdG8gYmUgcm9vdC1yZWxhdGl2
ZSB0byBmaXggcGx1Zy1pbiBkcmF3aW5nLgotICAgICAgICAgICAgaWYgKCFwYWludE9mZnNldC5p
c1plcm8oKSkgewotICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUo
cGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIHBhaW50UmVjdC5tb3ZlKC1wYWludE9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoIXdpZGdldFBhaW50T2Zmc2V0LmlzWmVybygpKSB7CisgICAg
ICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh3aWRnZXRQYWludE9mZnNl
dCk7CisgICAgICAgICAgICAgICAgcGFpbnRSZWN0Lm1vdmUoLXdpZGdldFBhaW50T2Zmc2V0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fd2lkZ2V0LT5wYWludChwYWludEluZm8uY29u
dGV4dCwgcGFpbnRSZWN0KTsKIAotICAgICAgICAgICAgaWYgKCFwYWludE9mZnNldC5pc1plcm8o
KSkKLSAgICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC1wYWludE9m
ZnNldCk7CisgICAgICAgICAgICBpZiAoIXdpZGdldFBhaW50T2Zmc2V0LmlzWmVybygpKQorICAg
ICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXdpZGdldFBhaW50T2Zm
c2V0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX3dpZGdldC0+aXNGcmFtZVZpZXcoKSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAkocmV2aXNpb24g
ODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lk
IHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCB4LCBpbnQgeSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
V2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHJldmlzaW9u
IDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDM4ICs3NSwzNyBAQCB2b2lkIFJlbmRlck1h
dGhNTEJsb2NrOjpzdHJldGNoVG9IZWlnaHQoCiB9CiAKICNpZiBFTkFCTEUoREVCVUdfTUFUSF9M
QVlPVVQpCi12b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQYWludEluZm8mIGluZm8sIGlu
dCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgUmVuZGVyQmxvY2s6OnBh
aW50KGluZm8sIHR4LCB0eSk7CisgICAgUmVuZGVyQmxvY2s6OnBhaW50KGluZm8sIHBhaW50T2Zm
c2V0KTsKICAgICAKICAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwg
aW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKLSAgICAKKyAgICBJbnRQb2ludCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworCiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRleHQpOwogICAgIAogICAgIGlu
Zm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwogICAgIGluZm8uY29udGV4dC0+
c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoQ29sb3IoMCwgMCwgMjU1KSwgQ29sb3JTcGFjZVNSR0IpOwogICAgIAotICAgIGluZm8u
Y29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgsIHR5KSwgSW50UG9pbnQodHggKyBvZmZzZXRX
aWR0aCgpLCB0eSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHggKyBv
ZmZzZXRXaWR0aCgpLCB0eSksIEludFBvaW50KHR4ICsgb2Zmc2V0V2lkdGgoKSwgdHkgKyBvZmZz
ZXRIZWlnaHQoKSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgsIHR5
ICsgb2Zmc2V0SGVpZ2h0KCkpLCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCksIHR5ICsgb2Zm
c2V0SGVpZ2h0KCkpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0
eSksIEludFBvaW50KHR4LCB0eSArIG9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0
LT5kcmF3TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CisgICAg
aW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAr
IG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSwgSW50UG9pbnQoYWRqdXN0
ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0Lnko
KSArIG9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2lu
dChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZz
ZXRIZWlnaHQoKSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lk
dGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkpOworICAgIGlu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0
ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0
KCkpKTsKICAgICAKICAgICBpbnQgdG9wU3RhcnQgPSBwYWRkaW5nVG9wKCk7CiAgICAgCiAgICAg
aW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAyNTUsIDApLCBDb2xvclNwYWNl
U1JHQik7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludCh0eCwgdHkg
KyB0b3BTdGFydCksIEludFBvaW50KHR4ICsgb2Zmc2V0V2lkdGgoKSwgdHkgKyB0b3BTdGFydCkp
OworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdG9wU3RhcnQpLCBJbnRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQu
eSgpICsgdG9wU3RhcnQpKTsKICAgICAKICAgICBpbnQgYmFzZWxpbmUgPSBiYXNlbGluZVBvc2l0
aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOwogICAgIAogICAg
IGluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMjU1LCAwLCAwKSwgQ29sb3JTcGFj
ZVNSR0IpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgsIHR5
ICsgYmFzZWxpbmUpLCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCksIHR5ICsgYmFzZWxpbmUp
KTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5lKSwgSW50UG9pbnQoYWRq
dXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0
LnkoKSArIGJhc2VsaW5lKSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERFQlVHX01BVEhfTEFZT1VU
KQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxCbG9jay5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0cmV0Y2hUb0hlaWdodChpbnQgaGVp
Z2h0KTsKIAogI2lmIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogI2VuZGlmCiAgICAgCiBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTEZyYWN0aW9uLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMxLDkgKzEzMSw5IEBAIHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OmxheW91dCgp
CiAKIH0KIAotdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFpbnRJbmZvJiBpbmZv
LCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIFJlbmRlck1h
dGhNTEJsb2NrOjpwYWludChpbmZvLCB0eCwgdHkpOworICAgIFJlbmRlck1hdGhNTEJsb2NrOjpw
YWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAg
IHJldHVybjsKICAgICAKQEAgLTE1Myw4ICsxNTMsOCBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0
aW9uOjpwYWludChQYWludEluCiAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IG51bWVyYXRv
ci0+b2Zmc2V0SGVpZ2h0KCk7ICAgICAgICAKICAgICB9CiAgICAgCi0gICAgdHggKz0geCgpOwot
ICAgIHR5ICs9IHkoKSArIHZlcnRpY2FsT2Zmc2V0OworICAgIEludFBvaW50IGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgYWRqdXN0ZWRQYWludE9m
ZnNldC5zZXRZKGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdmVydGljYWxPZmZzZXQpOwogICAg
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqaW5mby5jb250ZXh0
KTsKICAgICAKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpw
YWludChQYWludEluCiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9r
ZSk7CiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIENvbG9yU3BhY2VTUkdCKTsKICAgICAKLSAg
ICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSksIEludFBvaW50KHR4ICsg
b2Zmc2V0V2lkdGgoKSwgdHkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKGFkanVzdGVk
UGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lk
dGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKIH0KIAogaW50IFJlbmRlck1hdGhNTEZy
YWN0aW9uOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExp
bmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0
aW9uTW9kZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MRnJhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDAp
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIHZpcnR1YWwgaW50
IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVj
dGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNv
bnN0OyAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9v
dC5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCB2
b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmFkZENoaWxkKFJlbmRlck9iCiAgICAgfQogfQogICAgIAot
dm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50
IHR5KQordm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQo
aW5mbyAsIHR4ICwgdHkpOworICAgIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChpbmZvLCBwYWlu
dE9mZnNldCk7CiAgICAgCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xMDQsOCArMTA0LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxS
b290OjpwYWludChQYWludEluZm8mIAogICAgIGlmICghZmlyc3RDaGlsZCgpIHx8ICFsYXN0Q2hp
bGQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsK
KyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlv
bigpOwogICAgIAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBpbmRleEJveCA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QobGFzdENoaWxkKCkpOwogICAgIApAQCAtMTQwLDEyICsxMzksMTIgQEAg
dm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIHdpZHRoICs9IHRv
cFN0YXJ0U2hpZnQ7CiAgICAgCiAgICAgaW50IHJvb3RQYWQgPSBzdGF0aWNfY2FzdDxpbnQ+KGdS
b290UGFkZGluZyAqIHN0eWxlKCktPmZvbnRTaXplKCkpOwotICAgIGludCBzdGFydCA9IHR4ICsg
aW5kZXhXaWR0aCArIGdSYWRpY2FsTGVmdE1hcmdpbiArIHN0eWxlKCktPnBhZGRpbmdMZWZ0KCku
dmFsdWUoKSAtIHJvb3RQYWQ7Ci0gICAgdHkgKz0gc3R5bGUoKS0+cGFkZGluZ1RvcCgpLnZhbHVl
KCkgLSByb290UGFkOworICAgIGludCBzdGFydCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsg
aW5kZXhXaWR0aCArIGdSYWRpY2FsTGVmdE1hcmdpbiArIHN0eWxlKCktPnBhZGRpbmdMZWZ0KCku
dmFsdWUoKSAtIHJvb3RQYWQ7CisgICAgYWRqdXN0ZWRQYWludE9mZnNldC5zZXRZKGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpICsgc3R5bGUoKS0+cGFkZGluZ1RvcCgpLnZhbHVlKCkgLSByb290UGFk
KTsKICAgICAKLSAgICBGbG9hdFBvaW50IHRvcFN0YXJ0KHN0YXJ0IC0gdG9wU3RhcnRTaGlmdCwg
dHkpOwotICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdChzdGFydCAtIGdSYWRpY2FsQm90dG9tUG9p
bnRYUG9zICogZnJvbnRXaWR0aCAsIHR5ICsgbWF4SGVpZ2h0ICsgZ1JhZGljYWxCYXNlUGFkKTsK
LSAgICBGbG9hdFBvaW50IHRvcExlZnQoc3RhcnQgLSBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3Mg
KiBmcm9udFdpZHRoICwgdHkgKyBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQp
OworICAgIEZsb2F0UG9pbnQgdG9wU3RhcnQoc3RhcnQgLSB0b3BTdGFydFNoaWZ0LCBwYWludE9m
ZnNldC55KCkpOworICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdChzdGFydCAtIGdSYWRpY2FsQm90
dG9tUG9pbnRYUG9zICogZnJvbnRXaWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgbWF4
SGVpZ2h0ICsgZ1JhZGljYWxCYXNlUGFkKTsKKyAgICBGbG9hdFBvaW50IHRvcExlZnQoc3RhcnQg
LSBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3MgKiBmcm9udFdpZHRoICwgYWRqdXN0ZWRQYWludE9m
ZnNldC55KCkgKyBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQpOwogICAgIEZs
b2F0UG9pbnQgbGVmdEVuZChzdGFydCAtIGZyb250V2lkdGggLCB0b3BMZWZ0LnkoKSArIGdSYWRp
Y2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOwogICAgIAogICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqaW5mby5jb250ZXh0KTsKQEAgLTE1OCw3
ICsxNTcsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgCiAgICAg
CiAgICAgUGF0aCByb290OwogICAgIAotICAgIHJvb3QubW92ZVRvKEZsb2F0UG9pbnQodG9wU3Rh
cnQueCgpICsgd2lkdGgsIHR5KSk7CisgICAgcm9vdC5tb3ZlVG8oRmxvYXRQb2ludCh0b3BTdGFy
dC54KCkgKyB3aWR0aCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKICAgICAvLyBkcmF3IHRv
cAogICAgIHJvb3QuYWRkTGluZVRvKHRvcFN0YXJ0KTsKICAgICAvLyBkcmF3IGZyb20gdG9wIGxl
ZnQgY29ybmVyIHRvIGJvdHRvbSBwb2ludCBvZiByYWRpY2FsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaAkocmV2aXNpb24g
ODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBSZW5kZXJNYXRoTUxS
b290IDogcHVibGljIFJlbmRlck1hCiBwdWJsaWM6CiAgICAgUmVuZGVyTWF0aE1MUm9vdChOb2Rl
KiBmcmFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAJKHJldmlzaW9uIDg4MjQ3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVS
b290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTUgKzY2LDE0IEBAIFJlbmRlck1hdGhNTFNx
dWFyZVJvb3Q6OlJlbmRlck1hdGhNTFNxdWEKIHsKIH0KIAotdm9pZCBSZW5kZXJNYXRoTUxTcXVh
cmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5k
ZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0IEludFBvaW50
JiBwYWludE9mZnNldCkKIHsKLSAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywgdHgs
IHR5KTsKKyAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwog
ICAgCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAgICBJbnRQb2lu
dCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAg
aW50IG1heEhlaWdodCA9IDA7CiAgICAgaW50IHdpZHRoID0gMDsKQEAgLTEwOSwxMCArMTA4LDEw
IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnQKICAgICAKICAgICB3
aWR0aCArPSB0b3BTdGFydFNoaWZ0OwogICAgIAotICAgIEZsb2F0UG9pbnQgdG9wU3RhcnQodHgg
KyBmcm9udFdpZHRoIC0gdG9wU3RhcnRTaGlmdCwgdHkpOwotICAgIEZsb2F0UG9pbnQgYm90dG9t
TGVmdCh0eCArIGZyb250V2lkdGggKiBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAsIHR5ICsgbWF4
SGVpZ2h0ICsgZ1JhZGljYWxCYXNlUGFkKTsKLSAgICBGbG9hdFBvaW50IHRvcExlZnQodHggKyBm
cm9udFdpZHRoICogZ1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICwgdHkgKyBnUmFkaWNhbFRvcExl
ZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQpOwotICAgIEZsb2F0UG9pbnQgbGVmdEVuZCh0eCAsIHRv
cExlZnQueSgpICsgZ1JhZGljYWxMZWZ0RW5kWVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7
CisgICAgRmxvYXRQb2ludCB0b3BTdGFydChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGZyb250
V2lkdGggLSB0b3BTdGFydFNoaWZ0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSk7CisgICAgRmxv
YXRQb2ludCBib3R0b21MZWZ0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJvbnRXaWR0aCAq
IGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtYXhI
ZWlnaHQgKyBnUmFkaWNhbEJhc2VQYWQpOworICAgIEZsb2F0UG9pbnQgdG9wTGVmdChhZGp1c3Rl
ZFBhaW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggKiBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3Mg
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcyAqIG1h
eEhlaWdodCk7CisgICAgRmxvYXRQb2ludCBsZWZ0RW5kKGFkanVzdGVkUGFpbnRPZmZzZXQueCgp
ICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZU2hpZnQgKiBzdHlsZSgpLT5mb250U2l6
ZSgpKTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmlu
Zm8uY29udGV4dCk7CiAgICAgCkBAIC0xMjQsNyArMTIzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxT
cXVhcmVSb290OjpwYWludChQYWludAogICAgIAogICAgIFBhdGggcm9vdDsKICAgICAKLSAgICBy
b290Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRoICwgdHkpKTsKKyAgICBy
b290Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRoICwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkpKTsKICAgICAvLyBkcmF3IHRvcAogICAgIHJvb3QuYWRkTGluZVRvKHRvcFN0
YXJ0KTsKICAgICAvLyBkcmF3IGZyb20gdG9wIGxlZnQgY29ybmVyIHRvIGJvdHRvbSBwb2ludCBv
ZiByYWRpY2FsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFNxdWFyZVJvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBS
ZW5kZXJNYXRoTUxTcXVhcmVSb290IDogcHVibGljIFJlbmRlck1hdGhNTEJsb2NrIHsKIHB1Ymxp
YzoKICAgICBSZW5kZXJNYXRoTUxTcXVhcmVSb290KE5vZGUqIGZyYWN0aW9uKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiA4ODI0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6
c2VsZldpbGxQYWludCgpCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFp
bmVyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmKQogewogICAg
IGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBh
aW50SW5mbwogICAgICAgICBpZiAoY29udGludWVSZW5kZXJpbmcpIHsKICAgICAgICAgICAgIGNo
aWxkUGFpbnRJbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHRoaXMpOwogICAgICAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICBjaGlsZC0+cGFpbnQo
Y2hpbGRQYWludEluZm8sIDAsIDApOworICAgICAgICAgICAgICAgIGNoaWxkLT5wYWludChjaGls
ZFBhaW50SW5mbywgSW50UG9pbnQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiA4ODI0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFJlbmRl
ck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsg
fQogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGls
ZHJlbjsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRY
LCBpbnQgcGFyZW50WSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgp
IHsgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSB0cnVlOyB9CiAKIHByb3RlY3RlZDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3Jl
aWduT2JqZWN0LmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBAIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6On5SZW5kZXJTVkdGb3JlaWcKIHsKIH0K
IAotdm9pZCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgaW50LCBpbnQpCit2b2lkIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0OjpwYWludChQYWludAogICAgIGlmIChvcGFj
aXR5IDwgMS4wZikKICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihvcGFjaXR5KTsKIAotICAgIFJlbmRlckJsb2NrOjpwYWludChjaGlsZFBhaW50
SW5mbywgMCwgMCk7CisgICAgUmVuZGVyQmxvY2s6OnBhaW50KGNoaWxkUGFpbnRJbmZvLCBJbnRQ
b2ludCgpKTsKIAogICAgIGlmIChvcGFjaXR5IDwgMS4wZikKICAgICAgICAgY2hpbGRQYWludElu
Zm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCShyZXZp
c2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJTVkdGb3JlaWduT2JqZWN0IjsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkID0gZmFs
c2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgdm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6
OmxheW91dCgpCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOyAgICAKIH0KIAotdm9pZCBSZW5k
ZXJTVkdIaWRkZW5Db250YWluZXI6OnBhaW50KFBhaW50SW5mbyYsIGludCwgaW50KQordm9pZCBS
ZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OnBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
JikKIHsKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgcGFpbnQuCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hpZGRlbkNv
bnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIAogICAgIHZpcnR1YWwg
SW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCopIHsgcmV0dXJuIEludFJlY3QoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDcgKzEwMyw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50KCkK
ICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KIAotdm9p
ZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQor
dm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFBvaW50JikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8ICFtX2ltYWdlUmVzb3VyY2Ut
Pmhhc0ltYWdlKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChX
cmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRY
LCBpbnQgcGFyZW50WSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludElu
UGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdy
CiAgICAgfQogfQogCi12b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFBvaW50JikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1f
cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1BhdGgiOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJl
bnRYLCBpbnQgcGFyZW50WSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6ZHJhdyhQYWludAogICAgIFBhaW50
SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCppbmZvLmNvbnRleHQpOwogICAgIGluZm8uYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3Jt
KTsKLSAgICBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KGluZm8sIDAsIDApOworICAgIFJlbmRl
clNWR0NvbnRhaW5lcjo6cGFpbnQoaW5mbywgSW50UG9pbnQoKSk7CiB9CiAKIEFmZmluZVRyYW5z
Zm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9u
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBvcmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiA4ODI0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2MiwxNCArMjYyLDEzIEBAIGJvb2wgUmVuZGVyU1ZHUm9vdDo6c2Vs
ZldpbGxQYWludCgpCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKQordm9pZCBSZW5kZXJT
VkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50
T2Zmc2V0KQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGlzVmlzaWJsZSA9IHN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFOwotICAgIEludFBvaW50IHBhcmVudE9yaWdpbkluQ29udGFpbmVy
KHBhcmVudFgsIHBhcmVudFkpOwotICAgIEludFBvaW50IGJvcmRlckJveE9yaWdpbkluQ29udGFp
bmVyID0gcGFyZW50T3JpZ2luSW5Db250YWluZXIgKyBwYXJlbnRPcmlnaW5Ub0JvcmRlckJveCgp
OworICAgIEludFBvaW50IGJvcmRlckJveE9yaWdpbkluQ29udGFpbmVyID0gcGFpbnRPZmZzZXQg
KyBwYXJlbnRPcmlnaW5Ub0JvcmRlckJveCgpOwogCiAgICAgaWYgKGhhc0JveERlY29yYXRpb25z
KCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGlzVmlz
aWJsZSkKICAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIGJvcmRlckJveE9y
aWdpbkluQ29udGFpbmVyKTsKQEAgLTI5NCwxNCArMjkzLDE0IEBAIHZvaWQgUmVuZGVyU1ZHUm9v
dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAgIC8vIENvbnZlcnQgZnJvbSBjb250YWluZXIg
b2Zmc2V0cyAoaHRtbCByZW5kZXJlcnMpIHRvIGEgcmVsYXRpdmUgdHJhbnNmb3JtIChzdmcgcmVu
ZGVyZXJzKS4KICAgICAvLyBUcmFuc2Zvcm0gZnJvbSBvdXIgcGFpbnQgY29udGFpbmVyJ3MgY29v
cmRpbmF0ZSBzeXN0ZW0gdG8gb3VyIGxvY2FsIGNvb3Jkcy4KLSAgICBjaGlsZFBhaW50SW5mby5h
cHBseVRyYW5zZm9ybShsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShwYXJlbnRPcmln
aW5JbkNvbnRhaW5lcikpOworICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKGxvY2Fs
VG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKHBhaW50T2Zmc2V0KSk7CiAKICAgICBib29sIGNv
bnRpbnVlUmVuZGVyaW5nID0gdHJ1ZTsKICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIGNvbnRpbnVlUmVuZGVyaW5nID0gU1ZHUmVu
ZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5m
byk7CiAKICAgICBpZiAoY29udGludWVSZW5kZXJpbmcpCi0gICAgICAgIFJlbmRlckJveDo6cGFp
bnQoY2hpbGRQYWludEluZm8sIDAsIDApOworICAgICAgICBSZW5kZXJCb3g6OnBhaW50KGNoaWxk
UGFpbnRJbmZvLCBJbnRQb2ludCgpKTsKIAogICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNo
UmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgcGFpbnRJbmZvLmNvbnRleHQp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJ
KHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lk
dGggPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2Fs
SGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3koKTsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24g
ODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0Ojph
YnNvbHV0ZVF1YWRzKFZlY3RvcgogICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFk
KHN0cm9rZUJvdW5kaW5nQm94KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCit2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCiB7CiAgICAgaWYgKHBhaW50
SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0
Miw3ICsyNDIsNyBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAg
ICAgUGFpbnRJbmZvIGJsb2NrSW5mbyhwYWludEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqYmxvY2tJbmZvLmNvbnRleHQpOwogICAgIGJsb2NrSW5mby5h
cHBseVRyYW5zZm9ybShsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOwotICAgIFJlbmRlckJsb2Nr
OjpwYWludChibG9ja0luZm8sIDAsIDApOworICAgIFJlbmRlckJsb2NrOjpwYWludChibG9ja0lu
Zm8sIEludFBvaW50KCkpOwogfQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6c3Ryb2tlQm91
bmRpbmdCb3goKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJl
dHVybiAiUmVuZGVyU1ZHVGV4dCI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFs
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJU
b29scy5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBA
QCB2b2lkIFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUCiAgICAgY29udGVudFRy
YW5zZm9ybWF0aW9uID0gc3VidHJlZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiAqIGNvbnRlbnRUcmFu
c2Zvcm1hdGlvbjsKIAogICAgIGl0ZW0tPmxheW91dElmTmVlZGVkKCk7Ci0gICAgaXRlbS0+cGFp
bnQoaW5mbywgMCwgMCk7CisgICAgaXRlbS0+cGFpbnQoaW5mbywgSW50UG9pbnQoKSk7CiAKICAg
ICBjb250ZW50VHJhbnNmb3JtYXRpb24gPSBzYXZlZENvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96269</attachid>
            <date>2011-06-07 11:37:28 -0700</date>
            <delta_ts>2011-06-07 11:47:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62177-20110607113727.patch</filename>
            <type>text/plain</type>
            <size>90160</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MjQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM3IEBACisyMDExLTA2LTA3ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggcGFpbnQgdG8gdXNlIEludFBvaW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjE3NworCisgICAg
ICAgIEZsaXBwaW5nIHRoZSBzd2l0Y2ggb24gdGhlIHJlbWFpbmluZyBwYWludCBmdW5jdGlvbnMg
dG8gaGF2ZSB0aGVtIGFsbAorICAgICAgICB1c2UgSW50UG9pbnQgZm9yIHRoZSBwYWludCBvZmZz
ZXQgaW5zdGVhZCBvZiB0eC90eS4KKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhpcyBp
cyBqdXN0IHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENo
aWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGV0
YWlsc01hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXRhaWxzTWFya2VyOjpw
YWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xs
Q29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0Ojpw
YWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RJdGVtOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpwYWludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJl
cGxpY2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGljYTo6cGFpbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXI6OnBh
aW50UGFydCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyUGFydDo6cGFpbnRJbnRvUmVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWludE9iamVjdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Um93OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlU2VjdGlvbjo6cGFpbnRDZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjpwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TFJvb3Q6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdGb3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25P
YmplY3Q6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25P
YmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHSW1hZ2U6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OnBhaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTWFya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlTWFya2VyOjpkcmF3KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpw
YWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKToKKwog
MjAxMS0wNi0wNyAgWW91bmcgSGFuIExlZSAgPGpveWJyb0Bjb21wYW55MTAwLm5ldD4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMxLDcgKzIzMzEsNyBAQCB2
b2lkIEZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpCiAgICAgfQogCiAgICAgaWYg
KG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0
KGNvbnRleHQsIGNvcm5lclJlY3QueCgpLCBjb3JuZXJSZWN0LnkoKSwgY29ybmVyUmVjdCk7Cisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIGNvcm5lclJlY3Qu
bG9jYXRpb24oKSwgY29ybmVyUmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiA4ODI0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDcsMTYgKzIwNywxNiBAQCB2b2lkIElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluCiAgICAgYm9vbCBwcmVzZXJ2ZVBoYXNlID0gcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2VTZWxlY3Rpb24gfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VUZXh0Q2xpcDsKICAg
ICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOwogICAgIGluZm8ucGhhc2UgPSBwcmVzZXJ2ZVBo
YXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKLSAgICBy
ZW5kZXJlcigpLT5wYWludChpbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCkpOwor
ICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgIGlmICghcHJlc2Vy
dmVQaGFzZSkgewogICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNr
Z3JvdW5kczsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQoaW5mbywgY2hpbGRQb2ludC54KCks
IGNoaWxkUG9pbnQueSgpKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQoaW5mbywgY2hpbGRQ
b2ludCk7CiAgICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxvYXQ7Ci0gICAgICAgIHJl
bmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7Cisg
ICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICBpbmZv
LnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91bmQ7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50
KGluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAgIHJlbmRlcmVy
KCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQ
aGFzZU91dGxpbmU7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNoaWxkUG9pbnQu
eCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIGNo
aWxkUG9pbnQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMzgsOSArMjIzOCw5IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2EKICAgICB9CiB9CiAgCi12b2lk
IFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
Cit2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIEludFBvaW50IGFkanVzdGVkT2Zmc2V0ID0gbG9j
YXRpb24oKSArIEludFNpemUodHgsIHR5KTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zm
c2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIAogICAgIFBhaW50UGhhc2UgcGhh
c2UgPSBwYWludEluZm8ucGhhc2U7CiAKQEAgLTIyNTEsMjEgKzIyNTEsMjEgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgICAgICBJbnRSZWN0IG92ZXJmbG93
Qm94ID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94LmluZmxhdGUobWF4aW1hbE91dGxpbmVT
aXplKHBhaW50SW5mby5waGFzZSkpOwotICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnkoYWRqdXN0
ZWRPZmZzZXQpOworICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9mZnNl
dCk7CiAgICAgICAgIGlmICghb3ZlcmZsb3dCb3guaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBwdXNoZWRDbGlwID0gcHVz
aENvbnRlbnRzQ2xpcChwYWludEluZm8sIGFkanVzdGVkT2Zmc2V0KTsKLSAgICBwYWludE9iamVj
dChwYWludEluZm8sIGFkanVzdGVkT2Zmc2V0KTsKKyAgICBib29sIHB1c2hlZENsaXAgPSBwdXNo
Q29udGVudHNDbGlwKHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CisgICAgcGFpbnRP
YmplY3QocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKICAgICBpZiAocHVzaGVkQ2xp
cCkKLSAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVzdGVkT2Zm
c2V0KTsKKyAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVzdGVk
UGFpbnRPZmZzZXQpOwogCiAgICAgLy8gT3VyIHNjcm9sbGJhciB3aWRnZXRzIHBhaW50IGV4YWN0
bHkgd2hlbiB3ZSB0ZWxsIHRoZW0gdG8sIHNvIHRoYXQgdGhleSB3b3JrIHByb3Blcmx5IHdpdGgK
ICAgICAvLyB6LWluZGV4LiAgV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3Vu
ZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0
aGUgYmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIChwaGFzZSA9PSBQYWludFBoYXNlQmxvY2tC
YWNrZ3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYg
cGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKLSAgICAgICAgbGF5ZXIoKS0+
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0LCBhZGp1c3RlZE9mZnNldCwg
cGFpbnRJbmZvLnJlY3QpOworICAgICAgICBsYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMo
cGFpbnRJbmZvLmNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIHBhaW50SW5mby5yZWN0KTsK
IH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMjM3MSw3ICsyMzcxLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZgogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKLSAgICAgICAgbV9saW5lQm94ZXMucGFpbnQo
dGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldC54KCksIHBhaW50T2Zmc2V0LnkoKSk7CisgICAg
ICAgIG1fbGluZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAg
IGVsc2UKICAgICAgICAgcGFpbnRDaGlsZHJlbihwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIH0K
QEAgLTI0MTUsNyArMjQxNSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFp
bnRJbmYKIAogICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2Rl
KGNoaWxkLCBwYWludE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CiAg
ICAgICAgIGlmICghY2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWNoaWxkLT5pc0Zs
b2F0aW5nKCkpCi0gICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgY2hpbGRQb2ludC54KCks
IGNoaWxkUG9pbnQueSgpKTsKKyAgICAgICAgICAgIGNoaWxkLT5wYWludChpbmZvLCBjaGlsZFBv
aW50KTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzLCBh
bmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgogICAgICAgICBib29sIGNoZWNrQWZ0ZXJB
bHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5zdHls
ZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKQEAgLTI1NjYsMTYgKzI1NjYsMTYg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJgogICAgICAgICAgICAg
UGFpbnRJbmZvIGN1cnJlbnRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICAgICAgICAgIGN1cnJl
bnRQYWludEluZm8ucGhhc2UgPSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFp
bnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQg
PSBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShyLCBJbnRQb2ludChwYWludE9mZnNldC54KCkgKyB4
UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPm1fcmVuZGVyZXItPngoKSwg
cGFpbnRPZmZzZXQueSgpICsgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSBy
LT5tX3JlbmRlcmVyLT55KCkpKTsKLSAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1
cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAg
ICAgICByLT5tX3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsK
ICAgICAgICAgICAgIGlmICghcHJlc2VydmVQaGFzZSkgewogICAgICAgICAgICAgICAgIGN1cnJl
bnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwotICAg
ICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxk
UG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSk7CisgICAgICAgICAgICAgICAgci0+bV9yZW5kZXJl
ci0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgICAgICAgICAg
Y3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGbG9hdDsKLSAgICAgICAgICAgICAg
ICByLT5tX3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50LngoKSwg
Y2hpbGRQb2ludC55KCkpOworICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1
cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWlu
dEluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKLSAgICAgICAgICAgICAgICByLT5t
X3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQ
b2ludC55KCkpOworICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJlbnRQ
YWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8u
cGhhc2UgPSBQYWludFBoYXNlT3V0bGluZTsKLSAgICAgICAgICAgICAgICByLT5tX3JlbmRlcmVy
LT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCkp
OworICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPnBhaW50KGN1cnJlbnRQYWludEluZm8s
IGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
Miw3ICsyOTIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGxheW91dFBvc2l0aW9uZWRPYmpl
Y3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWlu
dEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgaW50IGxvZ2ljYWxSaWdodE9mZnNldEZv
ckxpbmUoaW50IHBvc2l0aW9uLCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50
ID0gdHJ1ZSwgaW50KiBsb2dpY2FsSGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzY3LDE2ICs3NjcsMTQgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
cwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGFpbnRpbmcgc3R1ZmYgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIFJlbmRlckJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgdHggKz0g
eCgpOwotICAgIHR5ICs9IHkoKTsKLQorICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQg
PSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlv
bi4gSnVzdCBwYXNzIHBhaW50IHRocm91Z2ggdG8gdGhlIGNoaWxkcmVuCiAgICAgUGFpbnRJbmZv
IGNoaWxkSW5mbyhwYWludEluZm8pOwogICAgIGNoaWxkSW5mby51cGRhdGVQYWludGluZ1Jvb3RG
b3JDaGlsZHJlbih0aGlzKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGls
ZC0+cGFpbnQoY2hpbGRJbmZvLCB0eCwgdHkpOworICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRJ
bmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9v
dEJveEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3
IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IHJlZmxlY3RlZFJlY3QoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5Niw5ICs2OTYsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZp
bGxMYXllCiAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290ID0gYm94LT5yb290KCk7CiAg
ICAgICAgICAgICBib3gtPnBhaW50KGluZm8sIEludFBvaW50KHNjcm9sbGVkUGFpbnRSZWN0Lngo
KSAtIGJveC0+eCgpLCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSBib3gtPnkoKSksIHJvb3QtPmxp
bmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGludCB4ID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT54KCkgOiAwOwotICAgICAg
ICAgICAgaW50IHkgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPnkoKSA6IDA7Ci0gICAg
ICAgICAgICBwYWludChpbmZvLCBzY3JvbGxlZFBhaW50UmVjdC54KCkgLSB4LCBzY3JvbGxlZFBh
aW50UmVjdC55KCkgLSB5KTsKKyAgICAgICAgICAgIEludFNpemUgbG9jYWxPZmZzZXQgPSBpc0Jv
eCgpID8gdG9SZW5kZXJCb3godGhpcyktPmxvY2F0aW9uT2Zmc2V0KCkgOiBJbnRTaXplKCk7Cisg
ICAgICAgICAgICBwYWludChpbmZvLCBzY3JvbGxlZFBhaW50UmVjdC5sb2NhdGlvbigpIC0gbG9j
YWxPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgbWFzayBoYXMg
YmVlbiBjcmVhdGVkLiAgTm93IHdlIGp1c3QgbmVlZCB0byBjbGlwIHRvIGl0LgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAkocmV2
aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01h
cmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxNCArMTIwLDE0IEBAIFBhdGggUmVuZGVy
RGV0YWlsc01hcmtlcjo6Z2V0UGF0aChjb25zdCAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIFJlbmRlckRldGFpbHNNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyRGV0YWlsc01hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCktPnZpc2liaWxpdHko
KSAhPSBWSVNJQkxFKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8sIHR4
LCB0eSk7CisgICAgICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEludFBvaW50IGJveE9yaWdpbih0eCAr
IHgoKSwgdHkgKyB5KCkpOworICAgIEludFBvaW50IGJveE9yaWdpbihwYWludE9mZnNldCArIGxv
Y2F0aW9uKCkpOwogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgp
KTsKICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGJveE9yaWdpbik7CiAgICAgb3ZlcmZsb3dSZWN0
LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5oCShyZXZpc2lv
biA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
RGV0YWlsc01hcmtlciI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEZXRhaWxzTWFya2VyKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBp
bnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50Jik7CiAKICAgICBib29sIGlzT3BlbigpIGNvbnN0OwogICAgIFBhdGggZ2V0Q2Fu
b25pY2FsUGF0aCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNSwxNCArMTM1LDE0IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldE1pc3Np
bmdQbHUKICAgICByZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyRW1i
ZWRkZWRPYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYg
cGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHBsdWdpbkNyYXNoZWRPcldhc01pc3NpbmcoKSkgewot
ICAgICAgICBSZW5kZXJSZXBsYWNlZDo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAg
ICBSZW5kZXJSZXBsYWNlZDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUmVuZGVyUGFydDo6cGFpbnQocGFpbnRJbmZvLCB0
eCwgdHkpOworICAgIFJlbmRlclBhcnQ6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwog
fQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkocmV2aXNpb24gODgy
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBpc0VtYmVkZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXll
cigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVT
ZXQuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFJl
bmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAgfQogfQogCi12b2lkIFJlbmRl
ckZyYW1lU2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2
b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNyw5ICsxMjcsNyBAQCB2b2lk
IFJlbmRlckZyYW1lU2V0OjpwYWludChQYWludEluZm8mIHBhCiAgICAgaWYgKCFjaGlsZCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gQWRkIGluIG91ciBvZmZzZXRzLgotICAgIHR4ICs9IHgo
KTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBh
aW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIGludCByb3dzID0gZnJhbWVTZXQoKS0+dG90
YWxSb3dzKCk7CiAgICAgaW50IGNvbHMgPSBmcmFtZVNldCgpLT50b3RhbENvbHMoKTsKQEAgLTEz
OSwxMCArMTM3LDEwIEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGEK
ICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykgewogICAgICAgICBpbnQgeFBvcyA9
IDA7CiAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29sczsgYysrKSB7Ci0gICAgICAgICAg
ICBjaGlsZC0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAgY2hpbGQtPnBh
aW50KHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CiAgICAgICAgICAgICB4UG9zICs9
IG1fY29scy5tX3NpemVzW2NdOwogICAgICAgICAgICAgaWYgKGJvcmRlclRoaWNrbmVzcyAmJiBt
X2NvbHMubV9hbGxvd0JvcmRlcltjICsgMV0pIHsKLSAgICAgICAgICAgICAgICBwYWludENvbHVt
bkJvcmRlcihwYWludEluZm8sIEludFJlY3QodHggKyB4UG9zLCB0eSArIHlQb3MsIGJvcmRlclRo
aWNrbmVzcywgaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBwYWludENvbHVtbkJvcmRlcihw
YWludEluZm8sIEludFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyB4UG9zLCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LnkoKSArIHlQb3MsIGJvcmRlclRoaWNrbmVzcywgaGVpZ2h0KCkpKTsKICAg
ICAgICAgICAgICAgICB4UG9zICs9IGJvcmRlclRoaWNrbmVzczsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CkBAIC0xNTEsNyArMTQ5LDcg
QEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgICAgICB9CiAg
ICAgICAgIHlQb3MgKz0gbV9yb3dzLm1fc2l6ZXNbcl07CiAgICAgICAgIGlmIChib3JkZXJUaGlj
a25lc3MgJiYgbV9yb3dzLm1fYWxsb3dCb3JkZXJbciArIDFdKSB7Ci0gICAgICAgICAgICBwYWlu
dFJvd0JvcmRlcihwYWludEluZm8sIEludFJlY3QodHgsIHR5ICsgeVBvcywgd2lkdGgoKSwgYm9y
ZGVyVGhpY2tuZXNzKSk7CisgICAgICAgICAgICBwYWludFJvd0JvcmRlcihwYWludEluZm8sIElu
dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsg
eVBvcywgd2lkdGgoKSwgYm9yZGVyVGhpY2tuZXNzKSk7CiAgICAgICAgICAgICB5UG9zICs9IGJv
cmRlclRoaWNrbmVzczsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5
Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50
IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKIAogICAgIGlubGluZSBIVE1MRnJhbWVTZXRFbGVtZW50KiBmcmFtZVNl
dCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw5ICszMDksOSBAQCB2b2lkIFJlbmRlckltYWdl
OjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgfQogfQogCi12b2lkIFJlbmRlckltYWdlOjpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlcklt
YWdlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0KQogewotICAgIFJlbmRlclJlcGxhY2VkOjpwYWludChwYWludEluZm8sIHR4LCB0eSk7Cisg
ICAgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgIAog
ICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUpCiAgICAgICAgIHBh
aW50QXJlYUVsZW1lbnRGb2N1c1JpbmcocGFpbnRJbmZvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0
ciwgY29uc3QgSW50UmVjdCogPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludEludG9SZWN0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgYm9vbCBpc0xvZ2ljYWxXaWR0aFNw
ZWNpZmllZCgpIGNvbnN0OwogICAgIGJvb2wgaXNMb2dpY2FsSGVpZ2h0U3BlY2lmaWVkKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2
aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDkgKzQ2MCw5IEBAIHZvaWQgUmVuZGVySW5saW5lOjph
ZGRDaGlsZFRvQ29udGludWF0aW8KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlcklubGlu
ZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNl
dCkKIHsKLSAgICBtX2xpbmVCb3hlcy5wYWludCh0aGlzLCBwYWludEluZm8sIHR4LCB0eSk7Cisg
ICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiB9CiAK
IHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB0eCwgaW50IHR5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0gLy8gRG8g
bm90aGluZyBmb3IgbGF5b3V0KCkKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
MzQsNyArMjMzNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXAK
ICAgICB9CiAKICAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQueCgpLCBwYWludE9mZnNldC55
KCksIGFic1JlY3QpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250
ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTIzNjMsNyArMjM2Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGlj
c0MKICAgICB9CiAgICAgCiAgICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXIt
PnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQueCgpLCBwYWludE9mZnNldC55KCks
IGFic1JlY3QpOworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFp
bnRPZmZzZXQsIGFic1JlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNTk3LDEw
ICsyNTk3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllcgogICAg
IC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNlLgogICAgIEludFJlY3Qg
bGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7CiAg
ICAgY2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMs
IGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsIGxvY2FsUGFpbnRGbGFn
cyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOwotICAgIGludCB4ID0gbGF5ZXJCb3Vu
ZHMueCgpOwotICAgIGludCB5ID0gbGF5ZXJCb3VuZHMueSgpOwotICAgIGludCB0eCA9IHggLSBy
ZW5kZXJCb3hYKCk7Ci0gICAgaW50IHR5ID0geSAtIHJlbmRlckJveFkoKTsKKyAgICBJbnRQb2lu
dCBwYWludE9mZnNldCA9IHRvUG9pbnQobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJv
eExvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAvLyBFbnN1
cmUgb3VyIGxpc3RzIGFyZSB1cC10by1kYXRlLgogICAgIHVwZGF0ZUNvbXBvc2l0aW5nQW5kTGF5
ZXJMaXN0c0lmTmVlZGVkKCk7CkBAIC0yNjM0LDcgKzI2MzEsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyKFJlbmRlckxheWVyCiAKICAgICAgICAgLy8gUGFpbnQgdGhlIGJhY2tncm91
bmQuCiAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8ocCwgZGFtYWdlUmVjdCwgUGFpbnRQaGFz
ZUJsb2NrQmFja2dyb3VuZCwgZmFsc2UsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCAwKTsKLSAg
ICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICByZW5k
ZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIAogICAgICAgICAvLyBSZXN0
b3JlIHRoZSBjbGlwLgogICAgICAgICByZXN0b3JlQ2xpcChwLCBwYWludERpcnR5UmVjdCwgZGFt
YWdlUmVjdCk7CkBAIC0yNjU0LDE1ICsyNjUxLDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXIoUmVuZGVyTGF5ZXIKICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhwLCBjbGlwUmVj
dFRvQXBwbHksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRCbG9ja0Jh
Y2tncm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Y2VCbGFja1RleHQsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCAwKTsKLSAgICAgICAgcmVuZGVy
ZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICByZW5kZXJlcigpLT5wYWlu
dChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25Pbmx5KSB7
CiAgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxvYXQ7Ci0gICAgICAg
ICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAgICAgICBy
ZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgICAgIHBh
aW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3JvdW5kOwogICAgICAgICAgICAgcGFpbnRJ
bmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgPSBvdmVybGFwVGVzdFJlcXVlc3RzOwotICAgICAgICAg
ICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgICAgICBwYWlu
dEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lczsKLSAgICAgICAgICAgIHJlbmRl
cmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
Tm93IHJlc3RvcmUgb3VyIGNsaXAuCkBAIC0yNjczLDcgKzI2NzAsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludExheWVyKFJlbmRlckxheWVyCiAgICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0
bGluZQogICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKHAsIG91dGxpbmVSZWN0LCBQYWludFBo
YXNlU2VsZk91dGxpbmUsIGZhbHNlLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgMCk7CiAgICAg
ICAgIHNldENsaXAocCwgcGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICByZW5kZXJlcigpLT5w
YWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmVzdG9yZUNsaXAocCwgcGFp
bnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKICAgICB9CiAgICAgCkBAIC0yNjg4LDcgKzI2ODUs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyCiAKICAgICAgICAg
Ly8gUGFpbnQgdGhlIG1hc2suCiAgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8ocCwgZGFtYWdl
UmVjdCwgUGFpbnRQaGFzZU1hc2ssIGZhbHNlLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgMCk7
Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBSZXN0b3JlIHRoZSBjbGlwLgogICAgICAgICByZXN0b3JlQ2xpcChwLCBwYWludERp
cnR5UmVjdCwgZGFtYWdlUmVjdCk7CkBAIC0yNjk2LDcgKzI2OTMsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludExheWVyKFJlbmRlckxheWVyCiAKICAgICBpZiAocGFpbnRpbmdPdmVybGF5U2Ny
b2xsYmFycykgewogICAgICAgICBzZXRDbGlwKHAsIHBhaW50RGlydHlSZWN0LCBkYW1hZ2VSZWN0
KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKHAsIEludFBvaW50KHR4LCB0eSksIGRh
bWFnZVJlY3QsIHRydWUpOworICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMocCwgcGFpbnRP
ZmZzZXQsIGRhbWFnZVJlY3QsIHRydWUpOwogICAgICAgICByZXN0b3JlQ2xpcChwLCBwYWludERp
cnR5UmVjdCwgZGFtYWdlUmVjdCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA5OSw4ICsxMDk5LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50
SW50b0xheWVyKAogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0
VG9BcHBseSwgb3V0bGluZVJlY3Q7CiAgICAgbV9vd25pbmdMYXllci0+Y2FsY3VsYXRlUmVjdHMo
cm9vdExheWVyLCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBS
ZWN0VG9BcHBseSwgb3V0bGluZVJlY3QpOwogCi0gICAgaW50IHR4ID0gbGF5ZXJCb3VuZHMueCgp
IC0gbV9vd25pbmdMYXllci0+cmVuZGVyQm94WCgpOwotICAgIGludCB0eSA9IGxheWVyQm91bmRz
LnkoKSAtIG1fb3duaW5nTGF5ZXItPnJlbmRlckJveFkoKTsKKyAgICBJbnRQb2ludCBwYWludE9m
ZnNldCA9IHRvUG9pbnQobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIG1fb3duaW5nTGF5ZXItPnJl
bmRlckJveExvY2F0aW9uKCkpOwogCiAgICAgLy8gSWYgdGhpcyBsYXllcidzIHJlbmRlcmVyIGlz
IGEgY2hpbGQgb2YgdGhlIHBhaW50aW5nUm9vdCwgd2UgcmVuZGVyIHVuY29uZGl0aW9uYWxseSwg
d2hpY2gKICAgICAvLyBpcyBkb25lIGJ5IHBhc3NpbmcgYSBuaWwgcGFpbnRpbmdSb290IGRvd24g
dG8gb3VyIHJlbmRlcmVyIChhcyBpZiBubyBwYWludGluZ1Jvb3Qgd2FzIGV2ZXIgc2V0KS4KQEAg
LTExMTgsNyArMTExNyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXll
cigKICAgICAgICAgc2V0Q2xpcChjb250ZXh0LCBwYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7
CiAgICAgICAgIAogICAgICAgICBQYWludEluZm8gaW5mbyhjb250ZXh0LCBkYW1hZ2VSZWN0LCBQ
YWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBmYWxzZSwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIs
IDApOwotICAgICAgICByZW5kZXJlcigpLT5wYWludChpbmZvLCB0eCwgdHkpOworICAgICAgICBy
ZW5kZXJlcigpLT5wYWludChpbmZvLCBwYWludE9mZnNldCk7CiAKICAgICAgICAgLy8gT3VyIHNj
cm9sbGJhciB3aWRnZXRzIHBhaW50IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRoZW0gdG8sIHNvIHRo
YXQgdGhleSB3b3JrIHByb3Blcmx5IHdpdGgKICAgICAgICAgLy8gei1pbmRleC4gIFdlIHBhaW50
IGFmdGVyIHdlIHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3Jv
bGxiYXJzIHdpbGwKQEAgLTExNDEsMTcgKzExNDAsMTcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnBhaW50SW50b0xheWVyKAogICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQs
IGNsaXBSZWN0VG9BcHBseSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxlY3Rpb25Pbmx5ID8gUGFpbnRQaGFzZVNlbGVjdGlvbiA6IFBhaW50UGhhc2VDaGls
ZEJsb2NrQmFja2dyb3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JjZUJsYWNrVGV4dCwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIDApOwotICAgICAg
ICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAgIHJlbmRlcmVy
KCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogCiAgICAgICAgIGlmICghc2VsZWN0
aW9uT25seSkgewogICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZsb2F0
OwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAKICAg
ICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3JvdW5kOwotICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAKICAgICAgICAgICAg
IHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOwotICAgICAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBOb3cgcmVzdG9yZSBvdXIgY2xpcC4KQEAgLTExNjEsNyArMTE2MCw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcigKICAgICAgICAgICAgIC8vIFBhaW50IG91
ciBvd24gb3V0bGluZQogICAgICAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBv
dXRsaW5lUmVjdCwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBmYWxzZSwgcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIsIDApOwogICAgICAgICAgICAgc2V0Q2xpcChjb250ZXh0LCBwYWludERpcnR5UmVj
dCwgb3V0bGluZVJlY3QpOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZv
LCB0eCwgdHkpOworICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCk7CiAgICAgICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBwYWludERpcnR5UmVj
dCwgb3V0bGluZVJlY3QpOwogICAgICAgICB9CiAKQEAgLTExNzgsNyArMTE3Nyw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcigKIAogICAgICAgICAgICAgLy8gUGFp
bnQgdGhlIG1hc2suCiAgICAgICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGRh
bWFnZVJlY3QsIFBhaW50UGhhc2VNYXNrLCBmYWxzZSwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIs
IDApOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwor
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGNsaXAuCiAgICAgICAgICAg
ICByZXN0b3JlQ2xpcChjb250ZXh0LCBwYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHJl
dmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgUmVuZGVyTGlu
ZUJveExpc3Q6OmxpbmVJbnRlcnNlY3RzRGkKICAgICByZXR1cm4gcmFuZ2VJbnRlcnNlY3RzUmVj
dChyZW5kZXJlciwgbG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSwgcGFpbnRJbmZvLnJlY3QsIG9m
ZnNldCk7CiB9CiAKLXZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZW5kZXJlciwgUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KSBj
b25zdAordm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlbmRlcmVyLCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0KSBjb25zdAogewogICAgIC8vIE9ubHkgcGFpbnQgZHVyaW5nIHRoZSBmb3JlZ3JvdW5kL3Nl
bGVjdGlvbiBwaGFzZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9y
ZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU91dGxpbmUgCkBAIC0yMTksNyArMjE5LDcgQEAgdm9p
ZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgIFJlbmRlclZpZXcqIHYg
PSByZW5kZXJlci0+dmlldygpOwogICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVj
dCgpLmlzRW1wdHkoKTsKICAgICBpbnQgb3V0bGluZVNpemUgPSByZW5kZXJlci0+bWF4aW1hbE91
dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7Ci0gICAgaWYgKCFhbnlMaW5lSW50ZXJzZWN0c1Jl
Y3QocmVuZGVyZXIsIHBhaW50SW5mby5yZWN0LCBJbnRQb2ludCh0eCwgdHkpLCB1c2VQcmludFJl
Y3QsIG91dGxpbmVTaXplKSkKKyAgICBpZiAoIWFueUxpbmVJbnRlcnNlY3RzUmVjdChyZW5kZXJl
ciwgcGFpbnRJbmZvLnJlY3QsIHBhaW50T2Zmc2V0LCB1c2VQcmludFJlY3QsIG91dGxpbmVTaXpl
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUGFpbnRJbmZvIGluZm8ocGFpbnRJbmZvKTsKQEAg
LTI0MywyMyArMjQzLDIzIEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJv
eE0KICAgICAgICAgICAgICAgICBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPSBtYXgoYm90dG9t
Rm9yUGFnaW5hdGlvbkNoZWNrLCByb290LT5saW5lQm90dG9tKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayAtIHRvcEZvclBhZ2luYXRp
b25DaGVjayA8PSB2LT5wcmludFJlY3QoKS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIGlm
ICh0eSArIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLm1heFkoKSkg
eworICAgICAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBib3R0b21Gb3JQYWdpbmF0
aW9uQ2hlY2sgPiB2LT5wcmludFJlY3QoKS5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKFJvb3RJbmxpbmVCb3gqIG5leHRSb290Qm94ID0gY3Vyci0+cm9vdCgpLT5uZXh0Um9vdEJv
eCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID0g
bWluKGJvdHRvbUZvclBhZ2luYXRpb25DaGVjaywgbWluKG5leHRSb290Qm94LT5sb2dpY2FsVG9w
VmlzdWFsT3ZlcmZsb3coKSwgbmV4dFJvb3RCb3gtPmxpbmVUb3AoKSkpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sg
PiB2LT5wcmludFJlY3QoKS5tYXhZKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5ICsg
dG9wRm9yUGFnaW5hdGlvbkNoZWNrIDwgdi0+dHJ1bmNhdGVkQXQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHYtPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIHRvcEZvclBhZ2luYXRpb25DaGVj
aywgcmVuZGVyZXIpOworICAgICAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBib3R0
b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmludFJlY3QoKS5tYXhZKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIHRvcEZvclBhZ2luYXRpb25DaGVjayA8
IHYtPnRydW5jYXRlZEF0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICB2LT5zZXRCZXN0VHJ1
bmNhdGVkQXQocGFpbnRPZmZzZXQueSgpICsgdG9wRm9yUGFnaW5hdGlvbkNoZWNrLCByZW5kZXJl
cik7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJsZSB0byB0cnVuY2F0ZSwg
ZG9uJ3QgcGFpbnQuCi0gICAgICAgICAgICAgICAgICAgIGlmICh0eSArIHRvcEZvclBhZ2luYXRp
b25DaGVjayA+PSB2LT50cnVuY2F0ZWRBdCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAocGFp
bnRPZmZzZXQueSgpICsgdG9wRm9yUGFnaW5hdGlvbkNoZWNrID49IHYtPnRydW5jYXRlZEF0KCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGluZUludGVyc2VjdHNEaXJ0eVJl
Y3QocmVuZGVyZXIsIGN1cnIsIGluZm8sIEludFBvaW50KHR4LCB0eSkpKSB7CisgICAgICAgIGlm
IChsaW5lSW50ZXJzZWN0c0RpcnR5UmVjdChyZW5kZXJlciwgY3VyciwgaW5mbywgcGFpbnRPZmZz
ZXQpKSB7CiAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290ID0gY3Vyci0+cm9vdCgpOwot
ICAgICAgICAgICAgY3Vyci0+cGFpbnQoaW5mbywgSW50UG9pbnQodHgsIHR5KSwgcm9vdC0+bGlu
ZVRvcCgpLCByb290LT5saW5lQm90dG9tKCkpOworICAgICAgICAgICAgY3Vyci0+cGFpbnQoaW5m
bywgcGFpbnRPZmZzZXQsIHJvb3QtPmxpbmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMjY3LDcgKzI2Nyw3IEBAIHZvaWQgUmVuZGVyTGluZUJveExp
c3Q6OnBhaW50KFJlbmRlckJveE0KICAgICAgICAgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj46
Oml0ZXJhdG9yIGVuZCA9IGluZm8ub3V0bGluZU9iamVjdHMtPmVuZCgpOwogICAgICAgICBmb3Ig
KExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+OjppdGVyYXRvciBpdCA9IGluZm8ub3V0bGluZU9i
amVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgUmVuZGVySW5s
aW5lKiBmbG93ID0gKml0OwotICAgICAgICAgICAgZmxvdy0+cGFpbnRPdXRsaW5lKGluZm8uY29u
dGV4dCwgSW50UG9pbnQodHgsIHR5KSk7CisgICAgICAgICAgICBmbG93LT5wYWludE91dGxpbmUo
aW5mby5jb250ZXh0LCBwYWludE9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgaW5mby5vdXRs
aW5lT2JqZWN0cy0+Y2xlYXIoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJveExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXJ0eUxpbmVCb3hlcygpOwogICAgIHZvaWQg
ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQoUmVuZGVyT2JqZWN0KiBwYXJlbnQsIFJlbmRlck9i
amVjdCogY2hpbGQpOwogCi0gICAgdm9pZCBwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCosIFBh
aW50SW5mbyYsIGludCB4LCBpbnQgeSkgY29uc3Q7CisgICAgdm9pZCBwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCosIFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgYm9v
bCBoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgY29uc3Q7CiAgICAgCiBw
cml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCwxMiArMzQ0LDEyIEBAIHZvaWQgUmVu
ZGVyTGlzdEl0ZW06OnBvc2l0aW9uTGlzdE1hcmtlcigKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
TGlzdEl0ZW06OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3Zv
aWQgUmVuZGVyTGlzdEl0ZW06OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKCFsb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8sIHR4LCB0eSk7Cisg
ICAgUmVuZGVyQmxvY2s6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogfQogCiBjb25z
dCBTdHJpbmcmIFJlbmRlckxpc3RJdGVtOjptYXJrZXJUZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCShyZXZpc2lvbiA4ODI0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJl
dmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDcgKzExMDEsNyBAQCBJbnRSZWN0IFJlbmRl
ckxpc3RNYXJrZXI6OmxvY2FsU2VsZWN0aW9uCiAgICAgcmV0dXJuIEludFJlY3QobmV3TG9naWNh
bFRvcCwgMCwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0KCksIGhlaWdodCgpKTsKIH0KIAotdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHkpCit2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTEwOSw3ICsxMTA5
LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIGlmIChz
dHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SW50UG9pbnQgYm94T3JpZ2luKHR4ICsgeCgpLCB0eSArIHkoKSk7CisgICAgSW50UG9pbnQgYm94
T3JpZ2luKHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAgSW50UmVjdCBvdmVyZmxvd1Jl
Y3QodmlzdWFsT3ZlcmZsb3dSZWN0KCkpOwogICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkoYm94T3Jp
Z2luKTsKICAgICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJ
bmZvLnBoYXNlKSk7CkBAIC0xMTI3LDcgKzExMjcsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6
OnBhaW50KFBhaW50SW5mbyYgCiAgICAgaWYgKGlzSW1hZ2UoKSkgewogI2lmIFBMQVRGT1JNKE1B
QykKICAgICAgICAgaWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWlu
dEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICAgICAgcGFpbnRDdXN0
b21IaWdobGlnaHQoSW50UG9pbnQodHgsIHR5KSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUp
OworICAgICAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQocGFpbnRPZmZzZXQsIHN0eWxlKCkt
PmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgogICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbWFnZS0+aW1hZ2UodGhpcywgbWFya2VyLnNpemUoKSkuZ2V0KCksIHN0eWxlKCktPmNvbG9y
U3BhY2UoKSwgbWFya2VyKTsKICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0
aW9uTm9uZSkgewpAQCAtMTE0MSw3ICsxMTQxLDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpw
YWludChQYWludEluZm8mIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBGSVhNRTogcGFpbnQg
Z2FwIGJldHdlZW4gbWFya2VyIGFuZCBsaXN0IGl0ZW0gcHJvcGVyCiAgICAgaWYgKHN0eWxlKCkt
PmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChJbnRQb2ludCh0eCwgdHkp
LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CisgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxp
Z2h0KHBhaW50T2Zmc2V0LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CiAjZW5kaWYKIAog
ICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAkocmV2aXNpb24gODgyNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNM
aXN0TWFya2VyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDUsNyArMTE0NSw3IEBAIEludFJlY3QgUmVuZGVyT2Jq
ZWN0OjpwYWludGluZ1Jvb3RSZWN0KEkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJl
bmRlck9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiAvKnBhaW50SW5mbyovLCBpbnQgLyp0eCovLCBp
bnQgLyp0eSovKQordm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgLypwYWludElu
Zm8qLywgY29uc3QgSW50UG9pbnQmIC8qcGFpbnRPZmZzZXQqLykKIHsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gODgyNDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyOCw3ICs1MjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVGaWxsSW1hZ2VzKGNvbnN0
IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciopOwogICAgIHZvaWQgdXBkYXRlSW1hZ2UoU3R5
bGVJbWFnZSosIFN0eWxlSW1hZ2UqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50Jik7CiAKICAgICAvLyBSZWN1cnNpdmUgZnVuY3Rpb24gdGhhdCBjb21w
dXRlcyB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhpcyBvYmplY3QgYW5kIGFsbCBpdHMgZGVz
Y2VuZGFudHMuCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk0LDIzICs5NCwyMiBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjppbnRyaW5zaWNTaXplQ2hh
bmdlCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKLXZvaWQg
UmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0
eSkKK3ZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgaWYgKCFzaG91bGRQYWludChwYWludElu
Zm8sIEludFBvaW50KHR4LCB0eSkpKQorICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCBw
YWludE9mZnNldCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICB0eCArPSB4KCk7Ci0gICAg
dHkgKz0geSgpOworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNl
dCArIGxvY2F0aW9uKCk7CiAgICAgCiAgICAgaWYgKGhhc0JveERlY29yYXRpb25zKCkgJiYgKHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpIAotICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBh
aW50SW5mbywgSW50UG9pbnQodHgsIHR5KSk7CisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMo
cGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKICAgICAKICAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VNYXNrKSB7Ci0gICAgICAgIHBhaW50TWFzayhwYWludEluZm8s
IEludFBvaW50KHR4LCB0eSkpOworICAgICAgICBwYWludE1hc2socGFpbnRJbmZvLCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEludFJlY3QgcGFp
bnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCh0eCwgdHkpLCBzaXplKCkpOworICAgIEludFJlY3Qg
cGFpbnRSZWN0ID0gSW50UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkpOwogICAgIGlm
ICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpKQog
ICAgICAgICBwYWludE91dGxpbmUocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50UmVjdCk7CiAgICAg
CkBAIC0xMjksNyArMTI4LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZv
JiBwYQogCiAgICAgYm9vbCBjb21wbGV0ZWx5Q2xpcHBlZE91dCA9IGZhbHNlOwogICAgIGlmIChz
dHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkgewotICAgICAgICBJbnRSZWN0IGJvcmRlclJlY3Qg
PSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGJv
cmRlclJlY3QgPSBJbnRSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQsIHNpemUoKSk7CiAKICAgICAg
ICAgaWYgKGJvcmRlclJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29tcGxldGVseUNsaXBw
ZWRPdXQgPSB0cnVlOwpAQCAtMTQxLDcgKzE0MCw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBh
aW50KFBhaW50SW5mbyYgcGEKICAgICB9CiAKICAgICBpZiAoIWNvbXBsZXRlbHlDbGlwcGVkT3V0
KSB7Ci0gICAgICAgIHBhaW50UmVwbGFjZWQocGFpbnRJbmZvLCBJbnRQb2ludCh0eCwgdHkpKTsK
KyAgICAgICAgcGFpbnRSZXBsYWNlZChwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwog
CiAgICAgICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CkBAIC0xNTEsNyArMTUwLDcgQEAgdm9pZCBSZW5k
ZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgIC8vIHN1cnJvdW5kaW5nIGNvbnRl
bnQuCiAgICAgaWYgKGRyYXdTZWxlY3Rpb25UaW50KSB7CiAgICAgICAgIEludFJlY3Qgc2VsZWN0
aW9uUGFpbnRpbmdSZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0KCk7Ci0gICAgICAgIHNlbGVjdGlv
blBhaW50aW5nUmVjdC5tb3ZlKHR4LCB0eSk7CisgICAgICAgIHNlbGVjdGlvblBhaW50aW5nUmVj
dC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9mZnNldCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5maWxsUmVjdChzZWxlY3Rpb25QYWludGluZ1JlY3QsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgaW50cmluc2ljU2l6ZUNo
YW5nZWQoKTsKICAgICB2b2lkIHNldEhhc0ludHJpbnNpY1NpemUoKSB7IG1faGFzSW50cmluc2lj
U2l6ZSA9IHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQg
dHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IElu
dFBvaW50Jik7CiAgICAgYm9vbCBzaG91bGRQYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2lu
dCYpOwogICAgIEludFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0KGJvb2wgY2hlY2tXaGV0aGVyU2Vs
ZWN0ZWQgPSB0cnVlKSBjb25zdDsgLy8gVGhpcyBpcyBpbiBsb2NhbCBjb29yZGluYXRlcywgYnV0
IGl0J3MgYSBwaHlzaWNhbCByZWN0IChzbyB0aGUgdG9wIGxlZnQgY29ybmVyIGlzIHBoeXNpY2Fs
IHRvcCBsZWZ0KS4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxp
Y2EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
aWNhLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGljYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEzICs2MCwxMiBAQCB2b2lkIFJl
bmRlclJlcGxpY2E6OmNvbXB1dGVQcmVmZXJyZWRMb2dpCiAgICAgc2V0UHJlZmVycmVkTG9naWNh
bFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJSZXBsaWNhOjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclJlcGxpY2E6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU1hc2spCiAgICAgICAgIHJldHVybjsKICAKLSAgICB0
eCArPSB4KCk7Ci0gICAgdHkgKz0geSgpOworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZz
ZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICAvLyBUdXJuIGFyb3VuZCBhbmQgcGFp
bnQgdGhlIHBhcmVudCBsYXllci4gVXNlIHRlbXBvcmFyeSBjbGlwUmVjdHMsIHNvIHRoYXQgdGhl
IGxheWVyIGRvZXNuJ3QgZW5kIHVwIGNhY2hpbmcgY2xpcCByZWN0cwpAQCAtNzYsNyArNzUsNyBA
QCB2b2lkIFJlbmRlclJlcGxpY2E6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhaW50QmVoYXZpb3JOb3JtYWwsIDAsIDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckxheWVyOjpQYWludExheWVy
SGF2ZVRyYW5zcGFyZW5jeSB8IFJlbmRlckxheWVyOjpQYWludExheWVyQXBwbGllZFRyYW5zZm9y
bSB8IFJlbmRlckxheWVyOjpQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzIHwgUmVuZGVyTGF5
ZXI6OlBhaW50TGF5ZXJQYWludGluZ1JlZmxlY3Rpb24pOwogICAgIGVsc2UgaWYgKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlTWFzaykKLSAgICAgICAgcGFpbnRNYXNrKHBhaW50SW5mbywg
SW50UG9pbnQodHgsIHR5KSk7CisgICAgICAgIHBhaW50TWFzayhwYWludEluZm8sIGFkanVzdGVk
UGFpbnRPZmZzZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgIAotICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGlzUmVwbGljYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCShyZXZpc2lv
biA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXI6
OnBhaW50UGFydChHcmFwaGljcwogICAgIFJlbmRlclNjcm9sbGJhclBhcnQqIHBhcnRSZW5kZXJl
ciA9IG1fcGFydHMuZ2V0KHBhcnRUeXBlKTsKICAgICBpZiAoIXBhcnRSZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuOwotICAgIHBhcnRSZW5kZXJlci0+cGFpbnRJbnRvUmVjdChncmFwaGljc0NvbnRl
eHQsIHgoKSwgeSgpLCByZWN0KTsKKyAgICBwYXJ0UmVuZGVyZXItPnBhaW50SW50b1JlY3QoZ3Jh
cGhpY3NDb250ZXh0LCBsb2NhdGlvbigpLCByZWN0KTsKIH0KIAogSW50UmVjdCBSZW5kZXJTY3Jv
bGxiYXI6OmJ1dHRvblJlY3QoU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAJKHJldmlzaW9u
IDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTAgKzE1OSwxMCBAQCB2b2lkIFJlbmRlclNjcm9s
bGJhclBhcnQ6OmltYWdlQ2hhbmdlZChXCiAgICAgfQogfQogCi12b2lkIFJlbmRlclNjcm9sbGJh
clBhcnQ6OnBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGlu
dCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJTY3JvbGxiYXJQ
YXJ0OjpwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8g
TWFrZSBzdXJlIG91ciBkaW1lbnNpb25zIG1hdGNoIHRoZSByZWN0LgotICAgIHNldExvY2F0aW9u
KHJlY3QubG9jYXRpb24oKSAtIEludFNpemUodHgsIHR5KSk7CisgICAgc2V0TG9jYXRpb24ocmVj
dC5sb2NhdGlvbigpIC0gdG9TaXplKHBhaW50T2Zmc2V0KSk7CiAgICAgc2V0V2lkdGgocmVjdC53
aWR0aCgpKTsKICAgICBzZXRIZWlnaHQocmVjdC5oZWlnaHQoKSk7CiAKQEAgLTE3MSwxNSArMTcx
LDE1IEBAIHZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6cGFpbnRJbnRvUmVjdCgKIAogICAgIC8v
IE5vdyBkbyB0aGUgcGFpbnQuCiAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhncmFwaGljc0NvbnRl
eHQsIHJlY3QsIFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIGZhbHNlLCAwLCAwKTsKLSAgICBw
YWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgcGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7CiAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5k
czsKLSAgICBwYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgcGFpbnQocGFpbnRJbmZvLCBw
YWludE9mZnNldCk7CiAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZsb2F0OwotICAg
IHBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICBwYWludChwYWludEluZm8sIHBhaW50T2Zm
c2V0KTsKICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKLSAgICBw
YWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgcGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7CiAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZU91dGxpbmU7Ci0gICAgcGFpbnQo
cGFpbnRJbmZvLCB0eCwgdHkpOworICAgIHBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFy
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXJQYXJ0LmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhclBhcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgIAotICAgIHZvaWQgcGFpbnRJbnRvUmVjdChH
cmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYpOworICAgIHZv
aWQgcGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0
IEludFJlY3QmKTsKICAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxs
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lv
biA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1MSwxMCArNDUxLDkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6c2V0Q2Vs
bExvZ2ljYWxXaWR0aHMoKQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJUYWJsZTo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsK
LSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0geSgpOworICAgIEludFBvaW50IGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBQYWludFBoYXNlIHBh
aW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAKQEAgLTQ2MiwxNSArNDYxLDE1IEBAIHZvaWQg
UmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAgICAgSW50UmVjdCBvdmVy
Zmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICBmbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dCb3gpOwogICAgICAgICBvdmVyZmxvd0JveC5pbmZsYXRlKG1heGltYWxPdXRs
aW5lU2l6ZShwYWludEluZm8ucGhhc2UpKTsKLSAgICAgICAgb3ZlcmZsb3dCb3gubW92ZSh0eCwg
dHkpOworICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9mZnNldCk7CiAg
ICAgICAgIGlmICghb3ZlcmZsb3dCb3guaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBwdXNoZWRDbGlwID0gcHVzaENvbnRl
bnRzQ2xpcChwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOwotICAgIHBhaW50T2JqZWN0KHBh
aW50SW5mbywgSW50UG9pbnQodHgsIHR5KSk7CisgICAgYm9vbCBwdXNoZWRDbGlwID0gcHVzaENv
bnRlbnRzQ2xpcChwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgIHBhaW50T2Jq
ZWN0KHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CiAgICAgaWYgKHB1c2hlZENsaXAp
Ci0gICAgICAgIHBvcENvbnRlbnRzQ2xpcChwYWludEluZm8sIHBhaW50UGhhc2UsIEludFBvaW50
KHR4LCB0eSkpOworICAgICAgICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZvLCBwYWludFBoYXNl
LCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKQEAg
LTQ5OSw3ICs0OTgsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpwYWludE9iamVjdChQYWludEluZm8m
CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkg
JiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQt
PmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSkgewogICAgICAgICAgICAg
SW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGls
ZCksIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAg
ICAgICAgIGNoaWxkLT5wYWludChpbmZvLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCkp
OworICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtNTIxLDcgKzUyMCw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50
T2JqZWN0KFBhaW50SW5mbyYKICAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJU
YWJsZVNlY3Rpb24oY2hpbGQpLCBwYWludE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRq
dXN0bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkLT5wYWludChpbmZvLCBjaGlsZFBv
aW50LngoKSwgY2hpbGRQb2ludC55KCkpOworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cGFp
bnQoaW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIG1fY3VycmVudEJvcmRlciA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBvbGRDaGlsZCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAg
IHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IElu
dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBjb25zdCBJ
bnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMSwyMiArODAxLDIxIEBAIGlu
dCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZBZnRlcihib28KICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUNvbGxhcHNlZFRhYmxlQm9yZGVycyAmJiBzdHlsZSgpLT52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRSkgewogICAgICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWlu
dFdpdGhpblJvb3QodGhpcykpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdHggKz0g
eCgpOwotICAgICAgICB0eSArPSB5KCk7CisgICAgICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAgICAgICAgIGludCBvcyA9IDIgKiBt
YXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKLSAgICAgICAgaWYgKHR5IC0gdGFi
bGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSArIG9zCi0gICAg
ICAgICAgICAmJiB0eSArIGhlaWdodCgpICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA+
IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQotICAgICAgICAgICAgcGFpbnRDb2xsYXBzZWRCb3Jk
ZXIocGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkp
OworICAgICAgICBpZiAoYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSB0YWJsZSgpLT5vdXRlckJv
cmRlclRvcCgpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpICsgb3MKKyAgICAgICAgICAgICYmIGFk
anVzdGVkUGFpbnRPZmZzZXQueSgpICsgaGVpZ2h0KCkgKyB0YWJsZSgpLT5vdXRlckJvcmRlckJv
dHRvbSgpID4gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAgICAgICAgICBwYWludENvbGxh
cHNlZEJvcmRlcihwYWludEluZm8uY29udGV4dCwgSW50UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0
LCBzaXplKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAgICAgCi0gICAgUmVuZGVyQmxv
Y2s6OnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFp
bnRJbmZvLCBwYWludE9mZnNldCk7CiB9CiAKIHN0YXRpYyBFQm9yZGVyU3R5bGUgY29sbGFwc2Vk
Qm9yZGVyU3R5bGUoRUJvcmRlclN0eWxlIHN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcg
Kzk0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZvaWQgcGFp
bnRCYWNrZ3JvdW5kc0JlaGluZENlbGwoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBSZW5k
ZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4
LDcgKzIwOCw3IEBAIGJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEgKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAg
ICAgQVNTRVJUKGhhc1NlbGZQYWludGluZ0xheWVyKCkpOwogICAgIGlmICghbGF5ZXIoKSkKQEAg
LTIxOCwxMCArMjE4LDEwIEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50KFBhaW50SW5mbyYg
cGEKICAgICAgICAgICAgIC8vIFBhaW50IHRoZSByb3cgYmFja2dyb3VuZCBiZWhpbmQgdGhlIGNl
bGwuCiAgICAgICAgICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VCbG9ja0Jh
Y2tncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dy
b3VuZCkgewogICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVy
VGFibGVDZWxsKGNoaWxkKTsKLSAgICAgICAgICAgICAgICBjZWxsLT5wYWludEJhY2tncm91bmRz
QmVoaW5kQ2VsbChwYWludEluZm8sIEludFBvaW50KHR4LCB0eSksIHRoaXMpOworICAgICAgICAg
ICAgICAgIGNlbGwtPnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQsIHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCF0b1JlbmRlckJv
eChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCi0gICAgICAgICAgICAgICAgY2hpbGQt
PnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+cGFpbnQo
cGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gODgyNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBvbmx5IHRpbWUgcm93cyBn
ZXQgYSBsYXllciBpcyB3aGVuIHRoZXkgaGF2ZSB0cmFuc3BhcmVuY3kuCiAgICAgdmlydHVhbCBi
b29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFz
T3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzTWFzaygpOyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVh
bCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODUsNyArODg1LDcgQEAgaW50
IFJlbmRlclRhYmxlU2VjdGlvbjo6Zmlyc3RMaW5lQm94QmFzZQogICAgIHJldHVybiBmaXJzdExp
bmVCYXNlbGluZTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQog
ewogICAgIC8vIHB1dCB0aGlzIGJhY2sgaW4gd2hlbiBhbGwgbGF5b3V0IHRlc3RzIGNhbiBoYW5k
bGUgaXQKICAgICAvLyBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwpAQCAtODk5LDE0ICs4OTksMTMg
QEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbwogICAgIGlmICghdG90
YWxSb3dzIHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIHR4ICs9IHgoKTsK
LSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50
T2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIFBhaW50UGhhc2UgcGhhc2UgPSBwYWludEluZm8u
cGhhc2U7Ci0gICAgYm9vbCBwdXNoZWRDbGlwID0gcHVzaENvbnRlbnRzQ2xpcChwYWludEluZm8s
IEludFBvaW50KHR4LCB0eSkpOwotICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgSW50UG9pbnQo
dHgsIHR5KSk7CisgICAgYm9vbCBwdXNoZWRDbGlwID0gcHVzaENvbnRlbnRzQ2xpcChwYWludElu
Zm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgYWRq
dXN0ZWRQYWludE9mZnNldCk7CiAgICAgaWYgKHB1c2hlZENsaXApCi0gICAgICAgIHBvcENvbnRl
bnRzQ2xpcChwYWludEluZm8sIHBoYXNlLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICAgICAgcG9w
Q29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUNlbGxQb3NpdGlvbnMoUmVuZGVyVGFibGVDZWxs
KiBlbGVtMSwgUmVuZGVyVGFibGVDZWxsKiBlbGVtMikKQEAgLTk0NSw3ICs5NDQsNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRDZWxsKFJlbmRlCiAgICAgICAgICAgICBjZWxsLT5w
YWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIGNlbGxQb2ludCwgcm93KTsKICAg
ICB9CiAgICAgaWYgKCghY2VsbC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhcm93LT5oYXNT
ZWxmUGFpbnRpbmdMYXllcigpKSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNvbGxh
cHNlZFRhYmxlQm9yZGVycykKLSAgICAgICAgY2VsbC0+cGFpbnQocGFpbnRJbmZvLCBjZWxsUG9p
bnQueCgpLCBjZWxsUG9pbnQueSgpKTsKKyAgICAgICAgY2VsbC0+cGFpbnQocGFpbnRJbmZvLCBj
ZWxsUG9pbnQpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9u
IDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIG9sZENoaWxkKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwqLCBQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBJbnRQb2lu
dCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9u
IDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgLy8gY2FsbGVycyB3aXRo
IGEgUmVuZGVyT2JqZWN0KiBjYW4gY29udGludWUgdG8gdXNlIGxlbmd0aCgpLgogICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdGV4dExlbmd0aCgpOyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50LCBpbnQpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50
UG9pbnQmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IGZhbHNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsOSArMjM1LDkgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnN1YnRyZQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIFJlbmRlclRleHRDb250cm9sOjpw
YWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50KHBh
aW50SW5mbywgcGFpbnRPZmZzZXQpOwogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlQmxvY2tCYWNrZ3JvdW5kICYmIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKSB7
CiAgICAgICAgIEludFJlY3QgY29udGVudHNSZWN0ID0gY29udGVudEJveFJlY3QoKTsKQEAgLTI0
Niw3ICsyNDYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoCiAg
ICAgICAgIGNvbnRlbnRzUmVjdC5zZXRZKChoZWlnaHQoKSAtIGNvbnRlbnRzUmVjdC5oZWlnaHQo
KSkgLyAyKTsKIAogICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkcyB1
c2VkIGZvciBwYWludGluZyB0aGUgY29udGVudAotICAgICAgICBjb250ZW50c1JlY3QubW92ZSh0
eCArIHgoKSwgdHkgKyB5KCkpOworICAgICAgICBjb250ZW50c1JlY3QubW92ZUJ5KHBhaW50T2Zm
c2V0ICsgbG9jYXRpb24oKSk7CiAgICAgICAgIHRoZW1lKCktPnBhaW50Q2Fwc0xvY2tJbmRpY2F0
b3IodGhpcywgcGFpbnRJbmZvLCBjb250ZW50c1JlY3QpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMTEgKzE2
NCwxMSBAQCB2b2lkIFJlbmRlclZpZXc6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50CiAgICAgfQog
fQogCi12b2lkIFJlbmRlclZpZXc6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKK3ZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICAvLyBJZiB3ZSBldmVyIHJlcXVpcmUg
bGF5b3V0IGJ1dCByZWNlaXZlIGEgcGFpbnQgYW55d2F5LCBzb21ldGhpbmcgaGFzIGdvbmUgaG9y
cmlibHkgd3JvbmcuCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKLSAgICBwYWludE9iamVj
dChwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOworICAgIHBhaW50T2JqZWN0KHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21wb3NpdGVkKFJl
bmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIC8vIEZJ
WE1FOiBpZGVhbGx5IHdlJ2QgbmV2ZXIgaGF2ZSB0byBkbyB0aGlzLCBpZiBhbGwgcmVwYWludHMg
YXJlIGNvbnRhaW5lci1yZWxhdGl2ZS4KICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludFJlY3Rhbmds
ZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRl
ID0gZmFsc2UpOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9p
bnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBj
b25zdCBJbnRQb2ludCYpOwogCiAgICAgZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFp
bnROZXdYT1JPbGQsIFJlcGFpbnROZXdNaW51c09sZCB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Nywx
OSArMjQ3LDE4IEBAIHZvaWQgUmVuZGVyV2lkZ2V0Ojpub3RpZnlXaWRnZXQoV2lkZ2V0Tm8KICAg
ICAgICAgbV93aWRnZXQtPm5vdGlmeVdpZGdldChub3RpZmljYXRpb24pOwogfQogCi12b2lkIFJl
bmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQor
dm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgaWYgKCFzaG91bGRQYWludChwYWludEluZm8sIElu
dFBvaW50KHR4LCB0eSkpKQorICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7
CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRp
b24oKTsKIAogICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VT
ZWxlY3Rpb24pKQotICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywgSW50UG9p
bnQodHgsIHR5KSk7CisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBhZGp1
c3RlZFBhaW50T2Zmc2V0KTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZU1hc2spIHsKLSAgICAgICAgcGFpbnRNYXNrKHBhaW50SW5mbywgSW50UG9pbnQodHgsIHR5KSk7
CisgICAgICAgIHBhaW50TWFzayhwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjgsMTEgKzI2NywxMSBAQCB2b2lkIFJlbmRlcldp
ZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYg
KHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChJbnRQb2lu
dCh0eCAtIHgoKSwgdHkgLSB5KCkpLCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CisgICAg
ICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHBhaW50T2Zmc2V0LCBzdHlsZSgpLT5oaWdobGlnaHQo
KSwgdHJ1ZSk7CiAjZW5kaWYKIAogICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkg
ewotICAgICAgICBJbnRSZWN0IGJvcmRlclJlY3QgPSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwg
aGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGJvcmRlclJlY3QgPSBJbnRSZWN0KGFkanVzdGVk
UGFpbnRPZmZzZXQsIHNpemUoKSk7CiAKICAgICAgICAgaWYgKGJvcmRlclJlY3QuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjg5LDIwICsyODgsMjAgQEAgdm9pZCBSZW5kZXJX
aWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmRyYXdJbWFnZShtX3N1YnN0aXR1dGVJbWFnZS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFj
ZSgpLCBtX3dpZGdldC0+ZnJhbWVSZWN0KCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IEludFBvaW50IHdpZGdldExvY2F0aW9uID0gbV93aWRnZXQtPmZyYW1lUmVjdCgpLmxvY2F0aW9u
KCk7Ci0gICAgICAgICAgICBJbnRQb2ludCBwYWludExvY2F0aW9uKHR4ICsgYm9yZGVyTGVmdCgp
ICsgcGFkZGluZ0xlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CisgICAg
ICAgICAgICBJbnRQb2ludCBwYWludExvY2F0aW9uKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsg
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CiAgICAgICAgICAgICBJbnRSZWN0IHBhaW50UmVj
dCA9IHBhaW50SW5mby5yZWN0OwogCi0gICAgICAgICAgICBJbnRTaXplIHBhaW50T2Zmc2V0ID0g
cGFpbnRMb2NhdGlvbiAtIHdpZGdldExvY2F0aW9uOworICAgICAgICAgICAgSW50U2l6ZSB3aWRn
ZXRQYWludE9mZnNldCA9IHBhaW50TG9jYXRpb24gLSB3aWRnZXRMb2NhdGlvbjsKICAgICAgICAg
ICAgIC8vIFdoZW4gcGFpbnRpbmcgd2lkZ2V0cyBpbnRvIGNvbXBvc2l0aW5nIGxheWVycywgdHgg
YW5kIHR5IGFyZSByZWxhdGl2ZSB0byB0aGUgZW5jbG9zaW5nIGNvbXBvc2l0aW5nIGxheWVyLAog
ICAgICAgICAgICAgLy8gbm90IHRoZSByb290LiBJbiB0aGlzIGNhc2UsIHNoaWZ0IHRoZSBDVE0g
YW5kIGFkanVzdCB0aGUgcGFpbnRSZWN0IHRvIGJlIHJvb3QtcmVsYXRpdmUgdG8gZml4IHBsdWct
aW4gZHJhd2luZy4KLSAgICAgICAgICAgIGlmICghcGFpbnRPZmZzZXQuaXNaZXJvKCkpIHsKLSAg
ICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHBhaW50T2Zmc2V0KTsK
LSAgICAgICAgICAgICAgICBwYWludFJlY3QubW92ZSgtcGFpbnRPZmZzZXQpOworICAgICAgICAg
ICAgaWYgKCF3aWRnZXRQYWludE9mZnNldC5pc1plcm8oKSkgeworICAgICAgICAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUod2lkZ2V0UGFpbnRPZmZzZXQpOworICAgICAgICAg
ICAgICAgIHBhaW50UmVjdC5tb3ZlKC13aWRnZXRQYWludE9mZnNldCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBtX3dpZGdldC0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50UmVj
dCk7CiAKLSAgICAgICAgICAgIGlmICghcGFpbnRPZmZzZXQuaXNaZXJvKCkpCi0gICAgICAgICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtcGFpbnRPZmZzZXQpOworICAgICAg
ICAgICAgaWYgKCF3aWRnZXRQYWludE9mZnNldC5pc1plcm8oKSkKKyAgICAgICAgICAgICAgICBw
YWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC13aWRnZXRQYWludE9mZnNldCk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAobV93aWRnZXQtPmlzRnJhbWVWaWV3KCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAgICAgdmly
dHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBp
bnQgeCwgaW50IHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJ
bnRQb2ludCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSwzOCArNzUsMzcgQEAgdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6c3Ry
ZXRjaFRvSGVpZ2h0KAogfQogCiAjaWYgRU5BQkxFKERFQlVHX01BVEhfTEFZT1VUKQotdm9pZCBS
ZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkK
K3ZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIFJlbmRlckJsb2NrOjpwYWludChpbmZvLCB0eCwg
dHkpOworICAgIFJlbmRlckJsb2NrOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAgCiAg
ICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHR4ICs9IHgoKTsK
LSAgICB0eSArPSB5KCk7Ci0gICAgCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqaW5mby5jb250ZXh0KTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPnNl
dFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxl
KFNvbGlkU3Ryb2tlKTsKICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAs
IDAsIDI1NSksIENvbG9yU3BhY2VTUkdCKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdM
aW5lKEludFBvaW50KHR4LCB0eSksIEludFBvaW50KHR4ICsgb2Zmc2V0V2lkdGgoKSwgdHkpKTsK
LSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4ICsgb2Zmc2V0V2lkdGgoKSwg
dHkpLCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCksIHR5ICsgb2Zmc2V0SGVpZ2h0KCkpKTsK
LSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSArIG9mZnNldEhlaWdo
dCgpKSwgSW50UG9pbnQodHggKyBvZmZzZXRXaWR0aCgpLCB0eSArIG9mZnNldEhlaWdodCgpKSk7
Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludCh0eCwgdHkpLCBJbnRQb2ludCh0
eCwgdHkgKyBvZmZzZXRIZWlnaHQoKSkpOworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoYWRq
dXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZz
ZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSkpOworICAgIGluZm8uY29udGV4dC0+
ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgp
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQu
eCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWln
aHQoKSkpOworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpLCBJ
bnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRy
YXdMaW5lKGFkanVzdGVkUGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQu
eCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSk7CiAgICAgCiAg
ICAgaW50IHRvcFN0YXJ0ID0gcGFkZGluZ1RvcCgpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMjU1LCAwKSwgQ29sb3JTcGFjZVNSR0IpOwogICAgIAot
ICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgsIHR5ICsgdG9wU3RhcnQpLCBJ
bnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCksIHR5ICsgdG9wU3RhcnQpKTsKKyAgICBpbmZvLmNv
bnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0
KSk7CiAgICAgCiAgICAgaW50IGJhc2VsaW5lID0gYmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGlj
QmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKTsKICAgICAKICAgICBpbmZvLmNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKENvbG9yKDI1NSwgMCwgMCksIENvbG9yU3BhY2VTUkdCKTsKICAgICAK
LSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSArIGJhc2VsaW5lKSwg
SW50UG9pbnQodHggKyBvZmZzZXRXaWR0aCgpLCB0eSArIGJhc2VsaW5lKSk7CisgICAgaW5mby5j
b250ZXh0LT5kcmF3TGluZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0
ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGluZSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGlu
ZSkpOwogfQogI2VuZGlmIC8vIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
aAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50IGhlaWdodCk7CiAKICNpZiBF
TkFCTEUoREVCVUdfTUFUSF9MQVlPVVQpCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgSW50UG9pbnQmKTsKICNlbmRpZgogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFj
dGlvbi5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsx
MzEsOSBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpsYXlvdXQoKQogCiB9CiAKLXZvaWQg
UmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBpbnQg
dHkpCit2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludChQYWludEluZm8mIGluZm8sIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFp
bnQoaW5mbywgdHgsIHR5KTsKKyAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywgcGFp
bnRPZmZzZXQpOwogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBp
bmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAgICAg
CkBAIC0xNTMsOCArMTUzLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFp
bnRJbgogICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSBudW1lcmF0b3ItPm9mZnNldEhlaWdo
dCgpOyAgICAgICAgCiAgICAgfQogICAgIAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCkg
KyB2ZXJ0aWNhbE9mZnNldDsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFp
bnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSArIHZlcnRpY2FsT2Zmc2V0KTsKICAgICAKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAgICAgCkBAIC0x
NjIsNyArMTYyLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFpbnRJbgog
ICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIGluZm8u
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpLCBDb2xvclNwYWNlU1JHQik7CiAgICAgCi0gICAgaW5mby5jb250ZXh0
LT5kcmF3TGluZShJbnRQb2ludCh0eCwgdHkpLCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCks
IHR5KSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBJ
bnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpKSk7CiB9CiAKIGludCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6YmFzZWxp
bmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9k
ZSBsaW5lRGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxGcmFjdGlvbi5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0
aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5l
UG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsgCi0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZpc2lv
biA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBSZW5kZXJNYXRo
TUxSb290OjphZGRDaGlsZChSZW5kZXJPYgogICAgIH0KIH0KICAgICAKLXZvaWQgUmVuZGVyTWF0
aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVu
ZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRQb2ludCYgcGFp
bnRPZmZzZXQpCiB7Ci0gICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGluZm8gLCB0eCAsIHR5
KTsKKyAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogICAg
IAogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTA0LDggKzEwNCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFp
bnRJbmZvJiAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSB8fCAhbGFzdENoaWxkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQg
YWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICAKICAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogaW5kZXhCb3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KGxhc3RDaGlsZCgpKTsKICAgICAKQEAgLTE0MCwxMiArMTM5LDEyIEBAIHZvaWQgUmVuZGVyTWF0
aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICB3aWR0aCArPSB0b3BTdGFydFNoaWZ0Owog
ICAgIAogICAgIGludCByb290UGFkID0gc3RhdGljX2Nhc3Q8aW50PihnUm9vdFBhZGRpbmcgKiBz
dHlsZSgpLT5mb250U2l6ZSgpKTsKLSAgICBpbnQgc3RhcnQgPSB0eCArIGluZGV4V2lkdGggKyBn
UmFkaWNhbExlZnRNYXJnaW4gKyBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgLSByb290
UGFkOwotICAgIHR5ICs9IHN0eWxlKCktPnBhZGRpbmdUb3AoKS52YWx1ZSgpIC0gcm9vdFBhZDsK
KyAgICBpbnQgc3RhcnQgPSBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGluZGV4V2lkdGggKyBn
UmFkaWNhbExlZnRNYXJnaW4gKyBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgLSByb290
UGFkOworICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShhZGp1c3RlZFBhaW50T2Zmc2V0Lnko
KSArIHN0eWxlKCktPnBhZGRpbmdUb3AoKS52YWx1ZSgpIC0gcm9vdFBhZCk7CiAgICAgCi0gICAg
RmxvYXRQb2ludCB0b3BTdGFydChzdGFydCAtIHRvcFN0YXJ0U2hpZnQsIHR5KTsKLSAgICBGbG9h
dFBvaW50IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZyb250
V2lkdGggLCB0eSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFzZVBhZCk7Ci0gICAgRmxvYXRQb2lu
dCB0b3BMZWZ0KHN0YXJ0IC0gZ1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICogZnJvbnRXaWR0aCAs
IHR5ICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKKyAgICBGbG9hdFBv
aW50IHRvcFN0YXJ0KHN0YXJ0IC0gdG9wU3RhcnRTaGlmdCwgcGFpbnRPZmZzZXQueSgpKTsKKyAg
ICBGbG9hdFBvaW50IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAq
IGZyb250V2lkdGggLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCArIGdSYWRp
Y2FsQmFzZVBhZCk7CisgICAgRmxvYXRQb2ludCB0b3BMZWZ0KHN0YXJ0IC0gZ1JhZGljYWxUb3BM
ZWZ0UG9pbnRYUG9zICogZnJvbnRXaWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgZ1Jh
ZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKICAgICBGbG9hdFBvaW50IGxlZnRF
bmQoc3RhcnQgLSBmcm9udFdpZHRoICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZU2hp
ZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CkBAIC0xNTgsNyArMTU3LDcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIAogICAgIFBhdGggcm9v
dDsKICAgICAKLSAgICByb290Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRo
LCB0eSkpOworICAgIHJvb3QubW92ZVRvKEZsb2F0UG9pbnQodG9wU3RhcnQueCgpICsgd2lkdGgs
IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CiAgICAgLy8gZHJhdyB0b3AKICAgICByb290LmFk
ZExpbmVUbyh0b3BTdGFydCk7CiAgICAgLy8gZHJhdyBmcm9tIHRvcCBsZWZ0IGNvcm5lciB0byBi
b3R0b20gcG9pbnQgb2YgcmFkaWNhbApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgUmVuZGVyTWF0aE1MUm9vdCA6IHB1YmxpYyBS
ZW5kZXJNYQogcHVibGljOgogICAgIFJlbmRlck1hdGhNTFJvb3QoTm9kZSogZnJhY3Rpb24pOwog
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgSW50UG9pbnQmKTsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVh
cmVSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDE1ICs2NiwxNCBAQCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpSZW5k
ZXJNYXRoTUxTcXVhCiB7CiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQo
UGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyTWF0aE1MU3F1YXJl
Um9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQp
CiB7Ci0gICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGluZm8sIHR4LCB0eSk7CisgICAgUmVu
ZGVyTWF0aE1MQmxvY2s6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgIAogICAgIGlmIChp
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWlu
dE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIGludCBtYXhIZWlnaHQg
PSAwOwogICAgIGludCB3aWR0aCA9IDA7CkBAIC0xMDksMTAgKzEwOCwxMCBAQCB2b2lkIFJlbmRl
ck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50CiAgICAgCiAgICAgd2lkdGggKz0gdG9wU3Rh
cnRTaGlmdDsKICAgICAKLSAgICBGbG9hdFBvaW50IHRvcFN0YXJ0KHR4ICsgZnJvbnRXaWR0aCAt
IHRvcFN0YXJ0U2hpZnQsIHR5KTsKLSAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQodHggKyBmcm9u
dFdpZHRoICogZ1JhZGljYWxCb3R0b21Qb2ludFhQb3MgLCB0eSArIG1heEhlaWdodCArIGdSYWRp
Y2FsQmFzZVBhZCk7Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0KHR4ICsgZnJvbnRXaWR0aCAqIGdS
YWRpY2FsVG9wTGVmdFBvaW50WFBvcyAsIHR5ICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICog
bWF4SGVpZ2h0KTsKLSAgICBGbG9hdFBvaW50IGxlZnRFbmQodHggLCB0b3BMZWZ0LnkoKSArIGdS
YWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOworICAgIEZsb2F0UG9p
bnQgdG9wU3RhcnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoIC0gdG9wU3Rh
cnRTaGlmdCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOworICAgIEZsb2F0UG9pbnQgYm90dG9t
TGVmdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggKiBnUmFkaWNhbEJvdHRv
bVBvaW50WFBvcyAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgbWF4SGVpZ2h0ICsgZ1JhZGlj
YWxCYXNlUGFkKTsKKyAgICBGbG9hdFBvaW50IHRvcExlZnQoYWRqdXN0ZWRQYWludE9mZnNldC54
KCkgKyBmcm9udFdpZHRoICogZ1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkgKyBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQpOworICAg
IEZsb2F0UG9pbnQgbGVmdEVuZChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAsIHRvcExlZnQueSgp
ICsgZ1JhZGljYWxMZWZ0RW5kWVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CiAgICAgCiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRleHQpOwog
ICAgIApAQCAtMTI0LDcgKzEyMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFp
bnQoUGFpbnQKICAgICAKICAgICBQYXRoIHJvb3Q7CiAgICAgCi0gICAgcm9vdC5tb3ZlVG8oRmxv
YXRQb2ludCh0b3BTdGFydC54KCkgKyB3aWR0aCAsIHR5KSk7CisgICAgcm9vdC5tb3ZlVG8oRmxv
YXRQb2ludCh0b3BTdGFydC54KCkgKyB3aWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7
CiAgICAgLy8gZHJhdyB0b3AKICAgICByb290LmFkZExpbmVUbyh0b3BTdGFydCk7CiAgICAgLy8g
ZHJhdyBmcm9tIHRvcCBsZWZ0IGNvcm5lciB0byBib3R0b20gcG9pbnQgb2YgcmFkaWNhbApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxTcXVhcmVSb290LmgJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdCA6IHB1YmxpYyBSZW5kZXJNYXRoTUxCbG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVy
TWF0aE1MU3F1YXJlUm9vdChOb2RlKiBmcmFjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDcgKzkxLDcgQEAgYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFpbnQo
KQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgaW50LCBpbnQpCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JikKIHsKICAgICBpZiAocGFpbnRJbmZv
LmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTIwLDcg
KzEyMCw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KICAgICAg
ICAgaWYgKGNvbnRpbnVlUmVuZGVyaW5nKSB7CiAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby51
cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKICAgICAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJbmZv
LCAwLCAwKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8sIElu
dFBvaW50KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExp
c3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KICAgICBSZW5kZXJP
YmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAJ
KHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBSZW5k
ZXJTVkdGb3JlaWduT2JqZWN0Ojp+UmVuZGVyU1ZHRm9yZWlnCiB7CiB9CiAKLXZvaWQgUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQor
dm9pZCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UG9pbnQmKQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnQKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCiAg
ICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7CiAKLSAgICBSZW5kZXJCbG9jazo6cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDApOwor
ICAgIFJlbmRlckJsb2NrOjpwYWludChjaGlsZFBhaW50SW5mbywgSW50UG9pbnQoKSk7CiAKICAg
ICBpZiAob3BhY2l0eSA8IDEuMGYpCiAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAkocmV2aXNpb24gODgyNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdCI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50
WCwgaW50IHBhcmVudFkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25z
dCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRl
bkNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIHZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKQogICAg
IHNldE5lZWRzTGF5b3V0KGZhbHNlKTsgICAgCiB9CiAKLXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyOjpwYWludChQYWludEluZm8mLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyOjpwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpCiB7CiAgICAgLy8g
VGhpcyBzdWJ0cmVlIGRvZXMgbm90IHBhaW50LgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCShyZXZp
c2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJvdGVjdGVk
OgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
aW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqKSB7IHJldHVybiBJ
bnRSZWN0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbWFnZS5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBA
QCB2b2lkIFJlbmRlclNWR0ltYWdlOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW1h
Z2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZH
SW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCiB7CiAg
ICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+
dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbWFnZVJlc291cmNlLT5oYXNJbWFnZSgpKQog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRy
LCBjb25zdCBJbnRSZWN0KiA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwog
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVz
dEFjdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdQYXRoLmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcg
QEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcgogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQp
Cit2b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRQb2ludCYpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBtX3BhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguaAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVu
dFkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBj
b25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAkocmV2aXNp
b24gODgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmRyYXcoUGFpbnQKICAgICBQYWludEluZm8gaW5mbyhwYWlu
dEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqaW5mby5j
b250ZXh0KTsKICAgICBpbmZvLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgUmVuZGVy
U1ZHQ29udGFpbmVyOjpwYWludChpbmZvLCAwLCAwKTsKKyAgICBSZW5kZXJTVkdDb250YWluZXI6
OnBhaW50KGluZm8sIEludFBvaW50KCkpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2lu
LCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gODgyNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjIsMTQgKzI2MiwxMyBAQCBib29sIFJlbmRlclNWR1Jvb3Q6OnNlbGZXaWxsUGFpbnQoKQog
I2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAg
ICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYm9vbCBpc1Zpc2libGUgPSBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklT
SUJMRTsKLSAgICBJbnRQb2ludCBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcihwYXJlbnRYLCBwYXJl
bnRZKTsKLSAgICBJbnRQb2ludCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lciA9IHBhcmVudE9y
aWdpbkluQ29udGFpbmVyICsgcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsKKyAgICBJbnRQb2lu
dCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lciA9IHBhaW50T2Zmc2V0ICsgcGFyZW50T3JpZ2lu
VG9Cb3JkZXJCb3goKTsKIAogICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Zpc2libGUpCiAgICAgICAg
IHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5l
cik7CkBAIC0yOTQsMTQgKzI5MywxNCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBhaW50
SW5mbyYgcGFpCiAKICAgICAvLyBDb252ZXJ0IGZyb20gY29udGFpbmVyIG9mZnNldHMgKGh0bWwg
cmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycykuCiAgICAg
Ly8gVHJhbnNmb3JtIGZyb20gb3VyIHBhaW50IGNvbnRhaW5lcidzIGNvb3JkaW5hdGUgc3lzdGVt
IHRvIG91ciBsb2NhbCBjb29yZHMuCi0gICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0o
bG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0ocGFyZW50T3JpZ2luSW5Db250YWluZXIp
KTsKKyAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9ybShsb2NhbFRvUmVwYWludENvbnRh
aW5lclRyYW5zZm9ybShwYWludE9mZnNldCkpOwogCiAgICAgYm9vbCBjb250aW51ZVJlbmRlcmlu
ZyA9IHRydWU7CiAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kKQogICAgICAgICBjb250aW51ZVJlbmRlcmluZyA9IFNWR1JlbmRlclN1cHBvcnQ6OnBy
ZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pOwogCiAgICAgaWYg
KGNvbnRpbnVlUmVuZGVyaW5nKQotICAgICAgICBSZW5kZXJCb3g6OnBhaW50KGNoaWxkUGFpbnRJ
bmZvLCAwLCAwKTsKKyAgICAgICAgUmVuZGVyQm94OjpwYWludChjaGlsZFBhaW50SW5mbywgSW50
UG9pbnQoKSk7CiAKICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZv
cmVncm91bmQpCiAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRl
bnQodGhpcywgY2hpbGRQYWludEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA4ODI0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgY29t
cHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29u
c3Q7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDg4MjQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyhW
ZWN0b3IKICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGlu
Z0JveCgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCwgaW50KQordm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UG9pbnQmKQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDIsNyArMjQyLDcgQEAg
dm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaQogICAgIFBhaW50SW5mbyBi
bG9ja0luZm8ocGFpbnRJbmZvKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmJsb2NrSW5mby5jb250ZXh0KTsKICAgICBibG9ja0luZm8uYXBwbHlUcmFuc2Zvcm0o
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpKTsKLSAgICBSZW5kZXJCbG9jazo6cGFpbnQoYmxvY2tJ
bmZvLCAwLCAwKTsKKyAgICBSZW5kZXJCbG9jazo6cGFpbnQoYmxvY2tJbmZvLCBJbnRQb2ludCgp
KTsKIH0KIAogRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5o
CShyZXZpc2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNW
R1RleHQiOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0
eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCShyZXZp
c2lvbiA4ODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZm
ZXJUb29scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBTVkdJbWFn
ZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVAogICAgIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9
IHN1YnRyZWVDb250ZW50VHJhbnNmb3JtYXRpb24gKiBjb250ZW50VHJhbnNmb3JtYXRpb247CiAK
ICAgICBpdGVtLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgIGl0ZW0tPnBhaW50KGluZm8sIDAsIDAp
OworICAgIGl0ZW0tPnBhaW50KGluZm8sIEludFBvaW50KCkpOwogCiAgICAgY29udGVudFRyYW5z
Zm9ybWF0aW9uID0gc2F2ZWRDb250ZW50VHJhbnNmb3JtYXRpb247CiB9Cg==
</data>
<flag name="review"
          id="89914"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>