<?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>60663</bug_id>
          
          <creation_ts>2011-05-11 14:42:22 -0700</creation_ts>
          <short_desc>Change nodeAtPoint to take IntPoint instead of int x, int y</short_desc>
          <delta_ts>2011-05-17 14:58:49 -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>All</rep_platform>
          <op_sys>All</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="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>402299</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-05-11 14:42:22 -0700</bug_when>
    <thetext>Change nodeAtPoint hit testing code to take an IntPoint argument instead of a pair of ints for x, y.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402358</commentid>
    <comment_count>1</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-11 15:41:56 -0700</bug_when>
    <thetext>Woo!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404803</commentid>
    <comment_count>2</comment_count>
      <attachid>93710</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-05-16 16:28:22 -0700</bug_when>
    <thetext>Created attachment 93710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404804</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-05-16 16:28:41 -0700</bug_when>
    <thetext>I tried to keep this as small as I could, more clean up and changing functions called by nodeAtPoint will follow in separate patches.

I realize that the name pointInContainer might not be entirely correct but it was the best I could come up with. If you can think of a better name please do tell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404818</commentid>
    <comment_count>4</comment_count>
      <attachid>93710</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-05-16 16:42:25 -0700</bug_when>
    <thetext>Comment on attachment 93710
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:3902
&gt; +    tx += x();
&gt; +    ty += y();

I don&apos;t like it when methods change parameter values. Maybe a local IntSize localOffset(tx + x(), ty + y())?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404826</commentid>
    <comment_count>5</comment_count>
      <attachid>93710</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-16 17:01:10 -0700</bug_when>
    <thetext>Comment on attachment 93710
Patch

LGTM.  Please respond to smfr before landing of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404829</commentid>
    <comment_count>6</comment_count>
      <attachid>93715</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-05-16 17:16:11 -0700</bug_when>
    <thetext>Created attachment 93715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404830</commentid>
    <comment_count>7</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-05-16 17:17:25 -0700</bug_when>
    <thetext>&gt; I don&apos;t like it when methods change parameter values. Maybe a local IntSize localOffset(tx + x(), ty + y())?

That&apos;s a good idea. Made the change you suggested.

Please take another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404861</commentid>
    <comment_count>8</comment_count>
      <attachid>93715</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-16 17:52:47 -0700</bug_when>
    <thetext>Comment on attachment 93715
Patch

still LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405133</commentid>
    <comment_count>9</comment_count>
      <attachid>93788</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-05-17 10:25:29 -0700</bug_when>
    <thetext>Created attachment 93788
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405190</commentid>
    <comment_count>10</comment_count>
      <attachid>93788</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-17 11:29:30 -0700</bug_when>
    <thetext>Comment on attachment 93788
Patch for landing

Rejecting attachment 93788 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;apply-...&quot; exit_code: 1

Last 500 characters of output:
autoinstalled/mechanize/_urllib2_fork.py&quot;, line 332, in _call_chain
    result = func(*args)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1170, in https_open
    return self.do_open(conn_factory, req)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1118, in do_open
    raise URLError(err)
urllib2.URLError: &lt;urlopen error [Errno 60] Operation timed out&gt;

Full output: http://queues.webkit.org/results/8709232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405274</commentid>
    <comment_count>11</comment_count>
      <attachid>93788</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-17 13:57:42 -0700</bug_when>
    <thetext>Comment on attachment 93788
Patch for landing

Clearing flags on attachment: 93788

Committed r86705: &lt;http://trac.webkit.org/changeset/86705&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405275</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-17 13:57:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405310</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-17 14:58:49 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 93788:

http/tests/websocket/tests/multiple-connections.html bug 53825 (author: abarth@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93710</attachid>
            <date>2011-05-16 16:28:22 -0700</date>
            <delta_ts>2011-05-16 17:16:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60663-20110516162821.patch</filename>
            <type>text/plain</type>
            <size>63699</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NjI3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDUtMTYgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoYW5nZSBub2RlQXRQb2ludCB0byB0YWtlIEludFBvaW50IGlu
c3RlYWQgb2YgaW50IHgsIGludCB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDY2MworCisgICAgICAgIENoYW5nZSBub2RlQXRQb2ludCB0byB0YWtl
IGEgc2luZ2xlIGNvbnN0IEludFBvaW50JiBpbnN0ZWFkIG9mIGEgcGFpciBvZgorICAgICAgICBp
bnRzIGZvciB0aGUgbG9jYXRpb24uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OmZsb29yZWRJbnRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6Om5vZGVBdFBvaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6aGl0VGVzdENvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhbWVTZXQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGluZUJveExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJveExpc3Q6Omhp
dFRlc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoaXRUZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2Vj
dGlvbjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Rl
eHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6
bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgor
CiAyMDExLTA1LTE2ICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gODY1ODEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMiw2ICsyMDIsMTIgQEAgaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChj
b25zdCBGbAogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLngo
KSkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLnkoKSkpKTsKIH0KIAoraW5saW5lIEludFBv
aW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHJldHVybiBJ
bnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkp
OworfQorCisKIGZsb2F0IGZpbmRTbG9wZShjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxv
YXRQb2ludCYgcDIsIGZsb2F0JiBjKTsKIAogLy8gRmluZCBwb2ludCB3aGVyZSBsaW5lcyB0aHJv
dWdoIHRoZSB0d28gcGFpcnMgb2YgcG9pbnRzIGludGVyc2VjdC4gUmV0dXJucyBmYWxzZSBpZiB0
aGUgbGluZXMgZG9uJ3QgaW50ZXJzZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2
b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgICAgIEludFBvaW50
KG1feCArIHR4LCBtX3kgKyB0eSArIHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0K
IAotYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0
eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQorYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQg
bGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7CiAgICAgdHggKz0gbV94OwogICAgIHR5ICs9IG1f
eTsKQEAgLTExMSwxNiArMTExLDE2IEBAIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFQKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUo
bV9maXJzdExpbmUpOwogICAgICAgICBpbnQgbXR4ID0gdHggKyBtX2xvZ2ljYWxXaWR0aCAtIG1f
bWFya3VwQm94LT54KCk7CiAgICAgICAgIGludCBtdHkgPSB0eSArIHN0eWxlLT5mb250TWV0cmlj
cygpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVuZGVyZXIo
KS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAg
aWYgKG1fbWFya3VwQm94LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIG10eCwg
bXR5LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSBtdHgsIHkgLSBtdHkpKTsKKyAg
ICAgICAgaWYgKG1fbWFya3VwQm94LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIG10eCwgbXR5LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICAg
ICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIgLSBJbnRTaXplKG10eCwgbXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCBt
X2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQpOwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkg
JiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQoeCwgeSkpKSB7Ci0g
ICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4
IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRU
ZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgeCwgeSwgYm91bmRzUmVjdCkpCisgICAgaWYg
KHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJl
Y3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0
eSkpOworICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJl
bmRlcmVyKCktPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWluZXIu
eSgpLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDg2NTgxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3As
IGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogICAg
IHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzKSB7
IG1fc2VsZWN0aW9uU3RhdGUgPSBzOyB9CiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KGludCB0
eCwgaW50IHR5KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJ
KHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSwxMiArMjIxLDEyIEBAIHZvaWQgSW5saW5lQm94Ojpw
YWludChQYWludEluZm8mIHBhaW50SW4KICAgICB9CiB9CiAKLWJvb2wgSW5saW5lQm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQgLyogbGluZVRvcCAqLywgaW50
IC8qbGluZUJvdHRvbSovKQorYm9vbCBJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVUb3AgKi8sIGlu
dCAvKmxpbmVCb3R0b20qLykKIHsKICAgICAvLyBIaXQgdGVzdCBhbGwgcGhhc2VzIG9mIHJlcGxh
Y2VkIGVsZW1lbnRzIGF0b21pY2FsbHksIGFzIHRob3VnaCB0aGUgcmVwbGFjZWQgZWxlbWVudCBl
c3RhYmxpc2hlZCBpdHMKICAgICAvLyBvd24gc3RhY2tpbmcgY29udGV4dC4gIChTZWUgQXBwZW5k
aXggRS4yLCBzZWN0aW9uIDYuNCBvbiBpbmxpbmUgYmxvY2svdGFibGUgZWxlbWVudHMgaW4gdGhl
IENTUzIuMQogICAgIC8vIHNwZWNpZmljYXRpb24uKQotICAgIHJldHVybiByZW5kZXJlcigpLT5o
aXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgSW50UG9pbnQoeCwgeSksIHR4LCB0eSk7CisgICAgcmV0
dXJuIHJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVy
LCB0eCwgdHkpOwogfQogCiBjb25zdCBSb290SW5saW5lQm94KiBJbmxpbmVCb3g6OnJvb3QoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gODY1
ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVC
b3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQgbGlu
ZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7
CiAKICAgICBJbmxpbmVCb3gqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24g
ODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5OCwxOCArODk4LDE4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6c2V0
T3ZlcmZsb3dGcm9tTG9naWMKICAgICBzZXRWaXN1YWxPdmVyZmxvdyh2aXN1YWxPdmVyZmxvdywg
bGluZVRvcCwgbGluZUJvdHRvbSk7CiB9CiAKLWJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KQorYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKIHsK
ICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGlu
ZUJvdHRvbSkpOwogICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAgIG92
ZXJmbG93UmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgaWYgKCFvdmVyZmxvd1JlY3QuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHgsIHkpKSkKKyAgICBpZiAoIW92ZXJmbG93UmVjdC5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElu
bGluZUJveCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGlu
ZSgpKSB7Ci0gICAgICAgIGlmICgoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnIt
PmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBsaW5lVG9wLCBsaW5lQm90dG9t
KSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgICAgIGlmICgoY3Vyci0+cmVuZGVyZXIo
KS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xh
eWVyKCkpICYmIGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lciwgdHgsIHR5LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRT
aXplKHR4LCB0eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
CkBAIC05MzcsOSArOTM3LDkgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25z
dCBIaQogICAgIGZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsKICAgICByZWN0Lm1vdmUodHgsIHR5
KTsKIAotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJl
c3VsdC5yZWN0Rm9yUG9pbnQoeCwgeSkpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UG9pbnQoeCAtIHR4LCB5
IC0gdHkpKSk7IC8vIERvbid0IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRz
IGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgc3BhY2UuCi0gICAgICAgIGlmICghcmVzdWx0LmFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0
KSkKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1
bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgeworICAgICAgICByZW5kZXJlcigp
LT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5D
b250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kg
aGVyZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KKyAg
ICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigp
LT5ub2RlKCksIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwgcmVj
dCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDg2NTgxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50RmlsbExheWVyKGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgSW50UmVjdCYs
IENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgdm9pZCBwYWlu
dEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFNoYWRvd1N0eWxlLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwor
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQg
dHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckxp
bmVCb3hMaXN0KiByZW5kZXJlckxpbmVCb3hlcygpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQ0LDcgKzM0NCw3IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6aXNMaW5lQnJlYWsoKSBjb25z
dAogICAgIHJldHVybiByZW5kZXJlcigpLT5pc0JSKCkgfHwgKHJlbmRlcmVyKCktPnN0eWxlKCkt
PnByZXNlcnZlTmV3bGluZSgpICYmIGxlbigpID09IDEgJiYgKCp0ZXh0UmVuZGVyZXIoKS0+dGV4
dCgpKVtzdGFydCgpXSA9PSAnXG4nKTsKIH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0
b20qLykKK2Jvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0b20q
LykKIHsKICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzUyLDkgKzM1Miw5IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkK
ICAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsK
ICAgICBib3hPcmlnaW4ubW92ZSh0eCwgdHkpOwogICAgIEZsb2F0UmVjdCByZWN0KGJveE9yaWdp
biwgSW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkpOwotICAgIGlmIChtX3RydW5jYXRpb24gIT0g
Y0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2Vj
dHMocmVzdWx0LnJlY3RGb3JQb2ludCh4LCB5KSkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShJbnRQb2ludCh4IC0g
dHgsIHkgLSB0eSkpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVz
dFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIHJlY3QpKQorICAgIGlmIChtX3RydW5j
YXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0
LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKKyAg
ICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0
aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKSk7CisgICAgICAgIGlm
ICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgp
LCBwb2ludEluQ29udGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHJlY3QpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gODY1ODEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxp
bmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQg
bGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7CiAKIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIoKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gODY1
ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODk2LDMwICszODk2LDMwIEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJ
bk92ZXJmbG93Q29udHIKICAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJv
bHMocmVzdWx0LCBJbnRQb2ludChfeCAtIF90eCwgX3kgLSBfdHkpKTsKIH0KIAotYm9vbCBSZW5k
ZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQogewotICAgIGludCB0eCA9IF90eCArIHgoKTsKLSAgICBpbnQgdHkg
PSBfdHkgKyB5KCk7CisgICAgdHggKz0geCgpOworICAgIHR5ICs9IHkoKTsKIAogICAgIGlmICgh
aXNSZW5kZXJWaWV3KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0
aGluZyBhdCBhbGwuCiAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxv
d1JlY3QoKTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92ZSh0eCwgdHkpOwotICAgICAgICBpZiAo
IW92ZXJmbG93Qm94LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChfeCwgX3kpKSkKKyAg
ICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9p
bnRJbkNvbnRhaW5lcikpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RB
Y3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1BvaW50SW5PdmVyZmxv
d0NvbnRyb2wocmVzdWx0LCBfeCwgX3ksIHR4LCB0eSkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsKKyAgICBpZiAoKGhp
dFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9uID09
IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaXNQb2ludEluT3ZlcmZsb3dDb250cm9s
KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWluZXIueSgpLCB0eCwg
dHkpKSB7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyIC0gSW50U2l6ZSh0eCwgdHkpKTsKICAgICAgICAgLy8gRklYTUU6IGlzUG9pbnRJbk92ZXJm
bG93Q29udHJvbCgpIGRvZXNuJ3QgaGFuZGxlIHJlY3QtYmFzZWQgdGVzdHMgeWV0LgotICAgICAg
ICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgX3gsIF95
KSkKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2Rl
KCksIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSkpCiAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmUgY2xpcHBpbmcsIHRo
ZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAg
PSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXIoKTsKICAgICBib29s
IHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VPdmVyZmxvd0NsaXApOwotICAgIElu
dFJlY3QgaGl0VGVzdEFyZWEocmVzdWx0LnJlY3RGb3JQb2ludChfeCwgX3kpKTsKKyAgICBJbnRS
ZWN0IGhpdFRlc3RBcmVhKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpOwog
ICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8g
Y29udHJvbENsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkgOiBvdmVyZmxv
d0NsaXBSZWN0KHR4LCB0eSwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKS5pbnRlcnNlY3Rz
KGhpdFRlc3RBcmVhKSk7CiAgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAgICAgICAgLy8gSGl0
IHRlc3QgZGVzY2VuZGFudHMgZmlyc3QuCkBAIC0zOTMzLDE0ICszOTMzLDE0IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKIAogICAgICAgICAvLyBIaXQgdGVzdCBj
b250ZW50cyBpZiB3ZSBkb24ndCBoYXZlIGNvbHVtbnMuCiAgICAgICAgIGlmICghaGFzQ29sdW1u
cygpKSB7Ci0gICAgICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwg
X3gsIF95LCBzY3JvbGxlZFgsIHNjcm9sbGVkWSwgaGl0VGVzdEFjdGlvbikpIHsKLSAgICAgICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kg
LSB0eSkpOworICAgICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQs
IHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwgc2Nyb2xsZWRYLCBz
Y3JvbGxlZFksIGhpdFRlc3RBY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOwogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEZsb2F0ICYmIGhpdFRlc3RGbG9hdHMocmVxdWVzdCwg
cmVzdWx0LCBfeCwgX3ksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZKSkKKyAgICAgICAgICAgIGlmICho
aXRUZXN0QWN0aW9uID09IEhpdFRlc3RGbG9hdCAmJiBoaXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWluZXIueSgpLCBzY3JvbGxl
ZFgsIHNjcm9sbGVkWSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaGl0VGVzdENvbHVtbnMocmVxdWVzdCwgcmVzdWx0LCBfeCwgX3ksIHNjcm9sbGVk
WCwgc2Nyb2xsZWRZLCBoaXRUZXN0QWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChoaXRUZXN0Q29sdW1ucyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIu
eCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwgc2Nyb2xsZWRYLCBzY3JvbGxlZFksIGhpdFRlc3RB
Y3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM5NDgsOSArMzk0OCw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91
bmQKICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhp
dFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgIElu
dFJlY3QgYm91bmRzUmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAgaWYg
KHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJl
Y3RGb3JQb2ludChfeCwgX3kpKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShJbnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSkpOwot
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2Rl
KCksIF94LCBfeSwgYm91bmRzUmVjdCkpCisgICAgICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5n
KCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNv
bnRhaW5lcikpKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxp
cEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpKTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgp
LCBwb2ludEluQ29udGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIGJvdW5kc1JlY3Qp
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDA0
Nyw3ICs0MDQ3LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IAog
ICAgICAgICAgICAgY2hpbGRIaXRUZXN0ID0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kOwog
ICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBsYXN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZ0JveCgpKSB7CiAgICAgICAgICAgICBJbnRQb2lu
dCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKGNoaWxkLCBJbnRQb2ludCh0eCwgdHkp
LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAgICAgICAgIGlmICghY2hp
bGQtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nKCkgJiYgY2hp
bGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgY2hpbGRQb2ludC54KCksIGNo
aWxkUG9pbnQueSgpLCBjaGlsZEhpdFRlc3QpKQorICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBJbnRQb2ludCh4LCB5KSwgY2hpbGRQb2ludC54KCks
IGNoaWxkUG9pbnQueSgpLCBjaGlsZEhpdFRlc3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw3ICsyODUsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wgZW5kc1dp
dGhTb2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbmxpbmVEaXJlY3Rp
b25MaW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICovLCBmbG9hdCYg
LyogbG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lkdGggKi8pIGNvbnN0IHsgfQog
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDAsMTUgKzc0MCwxNSBAQCBpbnQgUmVuZGVy
Qm94Ojpjb21wdXRlQ29udGVudEJveExvZ2ljYWxICiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29s
IFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFj
dGlvbikKIHsKICAgICB0eCArPSB4KCk7CiAgICAgdHkgKz0geSgpOwogCiAgICAgLy8gQ2hlY2sg
a2lkcyBmaXJzdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmICgh
Y2hpbGQtPmhhc0xheWVyKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
eFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKKyAgICAgICAg
aWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGFjdGlvbikpIHsKKyAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwg
dHkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzU2
LDkgKzc1Niw5IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMKICAg
ICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3Vt
ZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNl
ICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCiAgICAg
SW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsK
LSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdy
b3VuZCAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludCh4UG9zLCB5
UG9zKSkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHhQ
b3MgLSB0eCwgeVBvcyAtIHR5KSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RC
YXNlZFRlc3RSZXN1bHQobm9kZSgpLCB4UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkKKyAgICBpZiAo
dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBi
b3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVy
KSkpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIgLSBJbnRTaXplKHR4LCB0eSkpOworICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0
QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250
YWluZXIueSgpLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gODY1ODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzOSw3ICsyMzksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0
eSwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9u
IDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU4LDEyICsxNTgsMTIgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6
cGFpbnQoUGFpbnRJbmZvJiBwYQogfQogCiBib29sIFJlbmRlckZyYW1lU2V0Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAot
ICAgIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQor
ICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYgKGFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3Vu
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJCb3g6
Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBhY3Rpb24pCisgICAg
Ym9vbCBpbnNpZGUgPSBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciwgdHgsIHR5LCBhY3Rpb24pCiAgICAgICAgIHx8IG1faXNSZXNpemluZzsK
IAogICAgIGlmIChpbnNpZGUgJiYgZnJhbWVTZXQoKS0+bm9SZXNpemUoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgJKHJldmlzaW9uIDg2NTgxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZVNldCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0
eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGlu
dCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2Jq
ZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MywxNyArMzkzLDE3
IEBAIEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSAKICAgICByZXR1cm4g
aSA/IGktPnRyZWVTY29wZSgpLT5nZXRJbWFnZU1hcChpLT5mYXN0R2V0QXR0cmlidXRlKHVzZW1h
cEF0dHIpKSA6IDA7CiB9CiAKLWJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQg
eSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVu
ZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIEhpdFRlc3RS
ZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnRvcFBhZGRpbmcoKSwgcmVz
dWx0LnJpZ2h0UGFkZGluZygpLCByZXN1bHQuYm90dG9tUGFkZGluZygpLCByZXN1bHQubGVmdFBh
ZGRpbmcoKSk7Ci0gICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQo
cmVxdWVzdCwgdGVtcFJlc3VsdCwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKKyAgICBi
b29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogCiAgICAgaWYg
KHRlbXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSgpKSB7CiAgICAgICAgIGlmIChIVE1MTWFw
RWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKSkgewogICAgICAgICAgICAgSW50UmVjdCBjb250ZW50
Qm94ID0gY29udGVudEJveFJlY3QoKTsKICAgICAgICAgICAgIGZsb2F0IHpvb20gPSBzdHlsZSgp
LT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgICAgICBpbnQgbWFwWCA9IGxyb3VuZGYoKHggLSB0
eCAtIHRoaXMtPngoKSAtIGNvbnRlbnRCb3gueCgpKSAvIHpvb20pOwotICAgICAgICAgICAgaW50
IG1hcFkgPSBscm91bmRmKCh5IC0gdHkgLSB0aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6
b29tKTsKKyAgICAgICAgICAgIGludCBtYXBYID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci54
KCkgLSB0eCAtIHRoaXMtPngoKSAtIGNvbnRlbnRCb3gueCgpKSAvIHpvb20pOworICAgICAgICAg
ICAgaW50IG1hcFkgPSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLnkoKSAtIHR5IC0gdGhpcy0+
eSgpIC0gY29udGVudEJveC55KCkpIC8gem9vbSk7CiAgICAgICAgICAgICBpZiAobWFwLT5tYXBN
b3VzZUV2ZW50KG1hcFgsIG1hcFksIGNvbnRlbnRCb3guc2l6ZSgpLCB0ZW1wUmVzdWx0KSkKICAg
ICAgICAgICAgICAgICB0ZW1wUmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShub2RlKCkpOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkocmV2
aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50
IG1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlm
eUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAg
dmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdp
ZHRoID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNh
bEhlaWdodCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw5ICs3MTIsOSBAQCBjb25zdCBj
aGFyKiBSZW5kZXJJbmxpbmU6OnJlbmRlck5hbWUoKSBjCiB9CiAKIGJvb2wgUmVuZGVySW5saW5l
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIHJldHVy
biBtX2xpbmVCb3hlcy5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5
LCBoaXRUZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gbV9saW5lQm94ZXMuaGl0VGVzdCh0aGlzLCBy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnko
KSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklu
bGluZTo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA4NjU4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE3LDcgKzExNyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmly
dHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1JlbFBvc2l0aW9uZWQo
KSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzTWFzaygpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkocmV2aXNpb24gODY1ODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDEsNyArMzAxLDcgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0
VGVzdChSZW5kZXJCbwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxhc3RMaW5lQm94
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKSB7CiAgICAgICAgIFJvb3RJbmxp
bmVCb3gqIHJvb3QgPSBjdXJyLT5yb290KCk7CiAgICAgICAgIGlmIChyYW5nZUludGVyc2VjdHNS
ZWN0KHJlbmRlcmVyLCBjdXJyLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZVRv
cCgpKSwgY3Vyci0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KHJvb3QtPmxpbmVCb3R0b20o
KSksIHJlY3QsIHR4LCB0eSkpIHsKLSAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIHJvb3QtPmxpbmVUb3AoKSwg
cm9vdC0+bGluZUJvdHRvbSgpKTsKKyAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBJbnRQb2ludCh4LCB5KSwgdHgsIHR5LCByb290LT5s
aW5lVG9wKCksIHJvb3QtPmxpbmVCb3R0b20oKSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7
CiAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNp
b24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2NiwyMSArNjY2LDIxIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbihpbmRleCk7CiB9CiAKLWJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQorYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
IHsKLSAgICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgs
IHksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJCbG9jazo6bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGhpdFRlc3RB
Y3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQq
PiYgbGlzdEl0ZW1zID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KCkpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaW50IHNpemUgPSBudW1JdGVtcygpOwogICAgIHR4ICs9
IHRoaXMtPngoKTsKICAgICB0eSArPSB0aGlzLT55KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKGl0ZW1Cb3VuZGluZ0JveFJlY3QodHgsIHR5LCBp
KS5jb250YWlucyh4LCB5KSkgeworICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVjdCh0eCwg
dHksIGkpLmNvbnRhaW5zKHBvaW50SW5Db250YWluZXIpKSB7CiAgICAgICAgICAgICBpZiAoRWxl
bWVudCogbm9kZSA9IGxpc3RJdGVtc1tpXSkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJ
bm5lck5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vblNoYXJlZE5v
ZGUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnNldExvY2FsUG9pbnQoSW50UG9pbnQo
eCAtIHR4LCB5IC0gdHkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChw
b2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChpbnQpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAg
IC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZS4KICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXpl
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTMyLDI1ICsyMTMyLDI1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUo
Ym9vbCAKICAgICAgICAgY3Vyci0+dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CiB9CiAKLWJvb2wg
UmVuZGVyT2JqZWN0OjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHR4LCBpbnQgdHks
IEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikKK2Jvb2wgUmVuZGVyT2JqZWN0OjpoaXRUZXN0
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEZp
bHRlciBoaXRUZXN0RmlsdGVyKQogewogICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CiAgICAgaWYg
KGhpdFRlc3RGaWx0ZXIgIT0gSGl0VGVzdFNlbGYpIHsKICAgICAgICAgLy8gRmlyc3QgdGVzdCB0
aGUgZm9yZWdyb3VuZCBsYXllciAobGluZXMgYW5kIGlubGluZXMpLgotICAgICAgICBpbnNpZGUg
PSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50LngoKSwgcG9pbnQueSgpLCB0eCwg
dHksIEhpdFRlc3RGb3JlZ3JvdW5kKTsKKyAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIEhpdFRlc3RGb3JlZ3JvdW5k
KTsKIAogICAgICAgICAvLyBUZXN0IGZsb2F0cyBuZXh0LgogICAgICAgICBpZiAoIWluc2lkZSkK
LSAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnQu
eCgpLCBwb2ludC55KCksIHR4LCB0eSwgSGl0VGVzdEZsb2F0KTsKKyAgICAgICAgICAgIGluc2lk
ZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5
LCBIaXRUZXN0RmxvYXQpOwogCiAgICAgICAgIC8vIEZpbmFsbHkgdGVzdCB0byBzZWUgaWYgdGhl
IG1vdXNlIGlzIGluIHRoZSBiYWNrZ3JvdW5kICh3aXRoaW4gYSBjaGlsZCBibG9jaydzIGJhY2tn
cm91bmQpLgogICAgICAgICBpZiAoIWluc2lkZSkKLSAgICAgICAgICAgIGluc2lkZSA9IG5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnQueCgpLCBwb2ludC55KCksIHR4LCB0eSwgSGl0
VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CisgICAgICAgICAgICBpbnNpZGUgPSBub2RlQXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgSGl0VGVzdENo
aWxkQmxvY2tCYWNrZ3JvdW5kcyk7CiAgICAgfQogCiAgICAgLy8gU2VlIGlmIHRoZSBtb3VzZSBp
cyBpbnNpZGUgdXMgYnV0IG5vdCBhbnkgb2Ygb3VyIGRlc2NlbmRhbnRzCiAgICAgaWYgKGhpdFRl
c3RGaWx0ZXIgIT0gSGl0VGVzdERlc2NlbmRhbnRzICYmICFpbnNpZGUpCi0gICAgICAgIGluc2lk
ZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnQueCgpLCBwb2ludC55KCksIHR4
LCB0eSwgSGl0VGVzdEJsb2NrQmFja2dyb3VuZCk7CisgICAgICAgIGluc2lkZSA9IG5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBIaXRUZXN0Qmxv
Y2tCYWNrZ3JvdW5kKTsKIAogICAgIHJldHVybiBpbnNpZGU7CiB9CkBAIC0yMTY5LDcgKzIxNjks
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVzdFJlc3VsdChICiAgICAgfQogfQog
Ci1ib29sIFJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgaW50IC8qeCovLCBpbnQgLyp5Ki8sIGludCAvKnR4Ki8sIGludCAvKnR5
Ki8sIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIC8qcG9pbnRJ
bkNvbnRhaW5lciovLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovLCBIaXRUZXN0QWN0aW9uKQogewog
ICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDYsNyArNTQ2LDcgQEAgcHVibGljOgog
I2VuZGlmCiAKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEZpbHRlciA9
IEhpdFRlc3RBbGwpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDg2
NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE5OCwxOCArMTE5OCwxOCBAQCBJbnRSZWN0IFJlbmRlclRhYmxlOjpvdmVy
Zmxvd0NsaXBSZWN0KGluCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLWJvb2wgUmVuZGVyVGFibGU6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGludCB4UG9zLCBpbnQgeVBvcywgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsK
ICAgICB0eCArPSB4KCk7CiAgICAgdHkgKz0geSgpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJz
dC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5
KS5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQoeFBvcywgeVBvcykpKSB7CisgICAgaWYg
KCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewogICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYg
IXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlz
VGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSkgewogICAgICAgICAgICAgICAg
IEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hp
bGQpLCBJbnRQb2ludCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsK
LSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
eFBvcywgeVBvcywgY2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpLCBhY3Rpb24pKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4
UG9zIC0gY2hpbGRQb2ludC54KCksIHlQb3MgLSBjaGlsZFBvaW50LnkoKSkpOworICAgICAgICAg
ICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCksIGFjdGlvbikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvUG9pbnQocG9pbnRJ
bkNvbnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTIxOCw5ICsxMjE4LDkg
QEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogCiAgICAgLy8gQ2hl
Y2sgb3VyIGJvdW5kcyBuZXh0LgogICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgs
IHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAm
JiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09IEhpdFRlc3RD
aGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0
Rm9yUG9pbnQoeFBvcywgeVBvcykpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKSk7
Ci0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgp
LCB4UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygp
ICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVz
dENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJl
Y3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gSW50U2l6
ZSh0eCwgdHkpKSk7CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RS
ZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCks
IGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gODY1ODEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWlu
dEluZm8mLCBJbnRTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
UG9zLCBpbnQgeVBvcywgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24pOwogICAgIAogICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmNwcAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgSW50UmVjdCBS
ZW5kZXJUYWJsZVJvdzo6Y2xpcHBlZE92ZXJmbG93UgogfQogCiAvLyBIaXQgVGVzdGluZwotYm9v
bCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24gYWN0aW9uKQogewogICAgIC8vIFRhYmxlIHJvd3MgY2Fubm90IGV2ZXIgYmUgaGl0IHRlc3Rl
ZC4gIEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1c3QgZm9yd2FyZCB0
byBvdXIgY2hpbGRyZW4gYWx3YXlzLgpAQCAtMTk4LDggKzE5OCw4IEBAIGJvb2wgUmVuZGVyVGFi
bGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEgKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3Zl
IHRoaXMgY2hlY2suCiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSAmJiAhdG9SZW5k
ZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBJbnRQ
b2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJUYWJsZUNlbGwoY2hp
bGQpLCBJbnRQb2ludCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsK
LSAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5
LCBjZWxsUG9pbnQueCgpLCBjZWxsUG9pbnQueSgpLCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSBjZWxsUG9pbnQueCgp
LCB5IC0gY2VsbFBvaW50LnkoKSkpOworICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludC54KCksIGNlbGxQ
b2ludC55KCksIGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUoY2VsbFBvaW50LngoKSwgY2VsbFBv
aW50LnkoKSkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
aAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwg
SW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgLy8gVGhl
IG9ubHkgdGltZSByb3dzIGdldCBhIGxheWVyIGlzIHdoZW4gdGhleSBoYXZlIHRyYW5zcGFyZW5j
eS4KICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzVHJh
bnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNN
YXNrKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQyLDcgKzExNDIs
NyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4oaW50CiB9CiAKIC8vIEhp
dCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGlu
dCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRl
clRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSBo
YXZlIG5vIGNoaWxkcmVuIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghZmly
c3RDaGlsZCgpKQpAQCAtMTE1Myw3ICsxMTUzLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246
Om5vZGVBdFBvaW50KGNvbgogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKLSAgICBp
ZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRlcnNl
Y3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQoeFBvcywgeVBvcykpKQorICAgIGlmIChoYXNPdmVyZmxv
d0NsaXAoKSAmJiAhb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJl
Y3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChtX2hhc092ZXJmbG93aW5nQ2VsbCkgewpAQCAtMTE2NCw4ICsxMTY0LDggQEAgYm9v
bCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgogICAgICAgICAgICAgLy8gdGhl
biB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94
KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAg
ICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9S
ZW5kZXJCb3goY2hpbGQpLCBJbnRQb2ludCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdB
ZGp1c3RtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgeFBvcywgeVBvcywgY2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpLCBh
Y3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBJbnRQb2ludCh4UG9zIC0gY2hpbGRQb2ludC54KCksIHlQb3MgLSBjaGlsZFBvaW50LnkoKSkp
OworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCksIGFjdGlv
bikpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRv
UG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTE3
Myw3ICsxMTczLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBJ
bnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSk7CisgICAgSW50UG9pbnQgbG9jYXRpb24gPSBw
b2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpOwogICAgIGlmIChzdHlsZSgpLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgbG9jYXRpb24uc2V0WShoZWlnaHQoKSAt
IGxvY2F0aW9uLnkoKSk7CkBAIC0xMjA4LDggKzEyMDgsOCBAQCBib29sIFJlbmRlclRhYmxlU2Vj
dGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgZm9yIChpbnQgaSA9IGN1cnJlbnQuY2VsbHMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0g
Y3VycmVudC5jZWxsc1tpXTsKICAgICAgICAgSW50UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldy
aXRpbmdNb2RlKGNlbGwsIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0Fk
anVzdG1lbnQpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCkt
Pm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgY2VsbFBvaW50LngoKSwg
Y2VsbFBvaW50LnkoKSwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIEludFBvaW50KHhQb3MgLSBjZWxsUG9pbnQueCgpLCB5UG9zIC0gY2VsbFBvaW50
LnkoKSkpOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50Lngo
KSwgY2VsbFBvaW50LnkoKSwgYWN0aW9uKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHRvUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQb2ludCkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiA4NjU4MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQg
aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSAwKTsKIAotICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIGJvb2wgZW5zdXJlUm93cyhpbnQpOwogICAgIHZvaWQg
Y2xlYXJHcmlkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJl
dmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50LCBpbnQpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBJbnRQb2ludCwgaW50LCBp
bnQsIEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgdm9pZCBkZWxldGVUZXh0Qm94ZXMoKTsKICAgICBib29sIGNvbnRhaW5zT25seVdo
aXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcs
MTMgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3VidHJlZQogICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPnRleHREaWRDaGFuZ2VJblRleHRBcmVhKHRleHRBcmVhKTsKIH0KIAot
Ym9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0g
ICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4
LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6
Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBo
aXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlc3VsdC5p
bm5lck5vZGUoKSA9PSBub2RlKCkgfHwgcmVzdWx0LmlubmVyTm9kZSgpID09IGlubmVyVGV4dEVs
ZW1lbnQoKSkKLSAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHgsIHksIHR4LCB0
eSk7CisgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVy
LngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHR4LCB0eSk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5oCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5n
ZWQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZn
Q2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOwogICAgIHZpcnR1YWwgaW50IHByZWZlcnJl
ZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMyw3ICszMzMsNyBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgfQogfQogCi1i
b29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5
UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewogICAgIC8vIElmIHdlJ3JlIHdpdGhpbiB0aGUgdGV4dCBjb250cm9sLCB3ZSB3YW50IHRv
IGFjdCBhcyBpZiB3ZSd2ZSBoaXQgdGhlIGlubmVyIHRleHQgYmxvY2sgZWxlbWVudCwgaW4gY2Fz
ZSB0aGUgcG9pbnQKICAgICAvLyB3YXMgb24gdGhlIGNvbnRyb2wgYnV0IG5vdCBvbiB0aGUgaW5u
ZXIgZWxlbWVudCAoc2VlIFJhZGFyIDQ2MTc4NDEpLgpAQCAtMzQxLDE0ICszNDEsMTQgQEAgYm9v
bCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdAogICAgIC8vIEluIGEgc2VhcmNo
IGZpZWxkLCB3ZSB3YW50IHRvIGFjdCBhcyBpZiB3ZSd2ZSBoaXQgdGhlIHJlc3VsdHMgYmxvY2sg
aWYgd2UncmUgdG8gdGhlIGxlZnQgb2YgdGhlIGlubmVyIHRleHQgYmxvY2ssCiAgICAgLy8gYW5k
IGFjdCBhcyBpZiB3ZSd2ZSBoaXQgdGhlIGNsb3NlIGJsb2NrIGlmIHdlJ3JlIHRvIHRoZSByaWdo
dCBvZiB0aGUgaW5uZXIgdGV4dCBibG9jay4KIAotICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6
Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBoaXRUZXN0
QWN0aW9uKSkKKyAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHdlIGhpdCBhIG5vZGUgaW5zaWRlIHRoZSBp
bm5lciB0ZXh0IGVsZW1lbnQsIHNheSB0aGF0IHdlIGhpdCB0aGF0IGVsZW1lbnQsCiAgICAgLy8g
YW5kIGlmIHdlIGhpdCBvdXIgbm9kZSAoZS5nLiB3ZSdyZSBvdmVyIHRoZSBib3JkZXIgb3IgcGFk
ZGluZyksIGFsc28gc2F5IHRoYXQgd2UgaGl0IHRoZQogICAgIC8vIGlubmVyIHRleHQgZWxlbWVu
dCBzbyB0aGF0IGl0IGdhaW5zIGZvY3VzLgogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCktPmlz
RGVzY2VuZGFudE9mKGlubmVyVGV4dEVsZW1lbnQoKSkgfHwgcmVzdWx0LmlubmVyTm9kZSgpID09
IG5vZGUoKSkKLSAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHhQb3MsIHlQb3Ms
IHR4LCB0eSk7CisgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHR4LCB0eSk7CiAKICAgICAvLyBJZiB3
ZSBmb3VuZCBhIHNwaW4gYnV0dG9uLCB3ZSdyZSBkb25lLgogICAgIGlmIChtX2lubmVyU3BpbkJ1
dHRvbiAmJiByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbV9pbm5lclNwaW5CdXR0b24pCkBAIC0zNzEs
MjAgKzM3MSwyMCBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0CiAg
ICAgbG9jYWxQb2ludC5tb3ZlKC1pbm5lckJsb2NrUmVuZGVyZXItPngoKSwgLWlubmVyQmxvY2tS
ZW5kZXJlci0+eSgpKTsKIAogICAgIGludCB0ZXh0TGVmdCA9IHR4ICsgeCgpICsgaW5uZXJCbG9j
a1JlbmRlcmVyLT54KCkgKyBpbm5lclRleHRSZW5kZXJlci0+eCgpOwotICAgIGlmIChtX3Jlc3Vs
dHNCdXR0b24gJiYgbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJlcigpICYmIHhQb3MgPCB0ZXh0TGVm
dCkKKyAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIo
KSAmJiBwb2ludEluQ29udGFpbmVyLngoKSA8IHRleHRMZWZ0KQogICAgICAgICBpbm5lck5vZGUg
PSBtX3Jlc3VsdHNCdXR0b24uZ2V0KCk7CiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAg
IGlmICghaW5uZXJOb2RlICYmIG1fc3BlZWNoQnV0dG9uICYmIG1fc3BlZWNoQnV0dG9uLT5yZW5k
ZXJlcigpKSB7CiAgICAgICAgIGludCBidXR0b25MZWZ0ID0gdHggKyB4KCkgKyBpbm5lckJsb2Nr
UmVuZGVyZXItPngoKSArIGlubmVyQmxvY2tSZW5kZXJlci0+d2lkdGgoKSAtIG1fc3BlZWNoQnV0
dG9uLT5yZW5kZXJCb3goKS0+d2lkdGgoKTsKLSAgICAgICAgaWYgKHhQb3MgPj0gYnV0dG9uTGVm
dCkKKyAgICAgICAgaWYgKHBvaW50SW5Db250YWluZXIueCgpID49IGJ1dHRvbkxlZnQpCiAgICAg
ICAgICAgICBpbm5lck5vZGUgPSBtX3NwZWVjaEJ1dHRvbi5nZXQoKTsKICAgICB9CiAjZW5kaWYK
IAogICAgIGlmICghaW5uZXJOb2RlKSB7CiAgICAgICAgIGludCB0ZXh0UmlnaHQgPSB0ZXh0TGVm
dCArIGlubmVyVGV4dFJlbmRlcmVyLT53aWR0aCgpOwotICAgICAgICBpZiAobV9jYW5jZWxCdXR0
b24gJiYgbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCkgJiYgeFBvcyA+IHRleHRSaWdodCkKKyAg
ICAgICAgaWYgKG1fY2FuY2VsQnV0dG9uICYmIG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpICYm
IHBvaW50SW5Db250YWluZXIueCgpID4gdGV4dFJpZ2h0KQogICAgICAgICAgICAgaW5uZXJOb2Rl
ID0gbV9jYW5jZWxCdXR0b24uZ2V0KCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCShyZXZp
c2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQg
dHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RB
Y3Rpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDg2NTgxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5MSwxMCArMzkxLDEwIEBAIFJlbmRlcldpZGdldCogUmVuZGVyV2lkZ2V0OjpmaW5kKGNv
bnN0IFcKICAgICByZXR1cm4gd2lkZ2V0UmVuZGVyZXJNYXAoKS5nZXQod2lkZ2V0KTsKIH0KIAot
Ym9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHks
IEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
biBhY3Rpb24pCiB7CiAgICAgYm9vbCBoYWRSZXN1bHQgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0g
ICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbik7CisgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBs
YWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwg
dHksIGFjdGlvbik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkg
b3ZlciB0aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGlu
ZyBhcmVhKS4KICAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYm
ICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDg2NTgxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7Ci0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVybGFwVGVzdFJlc3VsdChib29s
KTsKIAogICAgIGJvb2wgc2V0V2lkZ2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFNpemUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTUgKzE4OSwxNSBAQCB2b2lkIFJvb3RJ
bmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAjZW5kaWYKIH0KIAotYm9vbCBSb290SW5s
aW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRv
cCwgaW50IGxpbmVCb3R0b20pCitib29sIFJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGlu
dCBsaW5lQm90dG9tKQogewogICAgIGlmIChoYXNFbGxpcHNpc0JveCgpICYmIHZpc2libGVUb0hp
dFRlc3RpbmcoKSkgewotICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+bm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7Ci0gICAg
ICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQo
eCAtIHR4LCB5IC0gdHkpKTsKKyAgICAgICAgaWYgKGVsbGlwc2lzQm94KCktPm5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBsaW5lVG9wLCBsaW5l
Qm90dG9tKSkgeworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIElubGluZUZsb3dCb3g6
Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBsaW5lVG9wLCBsaW5l
Qm90dG9tKTsKKyAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGxpbmVUb3AsIGxpbmVCb3R0b20pOwog
fQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGZsb2F0IGR4LCBmbG9hdCBk
eSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNp
b24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGlu
ZUJvdHRvbSk7CiAKICAgICBib29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVy
biBtX2hhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uOyB9CiAgICAg
dm9pZCBzZXRIYXNTZWxlY3RlZENoaWxkcmVuKGJvb2wgaGFzU2VsZWN0ZWRDaGlsZHJlbikgeyBt
X2hhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uID0gaGFzU2VsZWN0
ZWRDaGlsZHJlbjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0OSwxMCArMTQ5LDEwIEBAIGJvb2wgUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdDo6bm9kZUF0RmxvYXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50UG9pbnQg
cm91bmRlZExvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCk7Ci0gICAgcmV0
dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHJvdW5kZWRMb2Nh
bFBvaW50LngoKSwgcm91bmRlZExvY2FsUG9pbnQueSgpLCAwLCAwLCBoaXRUZXN0QWN0aW9uKTsK
KyAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcm91
bmRlZExvY2FsUG9pbnQsIDAsIDAsIGhpdFRlc3RBY3Rpb24pOwogfQogCi1ib29sIFJlbmRlclNW
R0ZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QuaAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ZvcmVpZ25PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGlzU1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1
c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFJl
bmRlclNWR01vZGVsT2JqZWN0Ojp1cGRhdGVGcm9tRWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKIH0KIAotYm9vbCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5o
CShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCwg
U1ZHIHVzZXMgYSBkaWZmZXJlbnQgbm9kZUF0UG9pbnQgbWV0aG9kCi0gICAgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeEluQ29udGFp
bmVyLCBpbnQgeUluQ29udGFpbmVyLCBpbnQgZHhQYXJlbnRUb0NvbnRhaW5lciwgaW50IGR5UGFy
ZW50VG9Db250YWluZXIsIEhpdFRlc3RBY3Rpb24pOworICAgIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGludCBkeFBhcmVudFRvQ29udGFpbmVyLCBpbnQgZHlQYXJlbnRUb0NvbnRh
aW5lciwgSGl0VGVzdEFjdGlvbik7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDg2NTgxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzE1LDkgKzMxNSw4IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91
bmRhcmkKICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveC5pbmZsYXRlKGJvcmRlckFuZFBhZGRpbmdX
aWR0aCgpKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRl
clNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEludFBvaW50
IHBvaW50SW5Db250YWluZXIoeCwgeSk7CiAgICAgSW50U2l6ZSBjb250YWluZXJUb1BhcmVudE9m
ZnNldCh0eCwgdHkpOwogCiAgICAgSW50UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250
YWluZXIgLSBjb250YWluZXJUb1BhcmVudE9mZnNldDsKQEAgLTMzNSw3ICszMzQsNyBAQCBib29s
IFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAgICAgICAgICAgICAvLyBGSVhN
RTogQ1NTL0hUTUwgYXNzdW1lcyB0aGUgbG9jYWwgcG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJv
cmRlciBib3gsIHJpZ2h0PwogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHBvaW50SW5Cb3JkZXJCb3gpOwogICAgICAgICAgICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9p
bnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIGhpdCB0ZXN0cyB5ZXQuCi0gICAgICAgICAg
ICByZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChjaGlsZC0+bm9kZSgpLCB4LCB5
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KGNoaWxk
LT5ub2RlKCksIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA4NjU4MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCi0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24pOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDg2
NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk0LDE0ICsxOTQsMTQgQEAgYm9vbCBSZW5kZXJTVkdUZXh0Ojpu
b2RlQXRGbG9hdFBvaW50KGNvbgogICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpw
b2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAgICAgCiAKLSAgICAgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCAoaW50KWxvY2FsUG9pbnQueCgpLCAoaW50KWxvY2Fs
UG9pbnQueSgpLCAwLCAwLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBSZW5k
ZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBmbG9vcmVkSW50UG9pbnQobG9j
YWxQb2ludCksIDAsIDAsIGhpdFRlc3RBY3Rpb24pOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0
VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0
VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
aAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRU
ZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFy
ZW50LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93715</attachid>
            <date>2011-05-16 17:16:11 -0700</date>
            <delta_ts>2011-05-17 10:25:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60663-20110516171610.patch</filename>
            <type>text/plain</type>
            <size>64437</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NjI3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDUtMTYgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoYW5nZSBub2RlQXRQb2ludCB0byB0YWtlIEludFBvaW50IGlu
c3RlYWQgb2YgaW50IHgsIGludCB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDY2MworCisgICAgICAgIENoYW5nZSBub2RlQXRQb2ludCB0byB0YWtl
IGEgc2luZ2xlIGNvbnN0IEludFBvaW50JiBpbnN0ZWFkIG9mIGEgcGFpciBvZgorICAgICAgICBp
bnRzIGZvciB0aGUgbG9jYXRpb24uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OmZsb29yZWRJbnRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6Om5vZGVBdFBvaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6aGl0VGVzdENvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhbWVTZXQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGluZUJveExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJveExpc3Q6Omhp
dFRlc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoaXRUZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2Vj
dGlvbjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Rl
eHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6
bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgor
CiAyMDExLTA1LTE2ICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gODY1ODEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMiw2ICsyMDIsMTEgQEAgaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChj
b25zdCBGbAogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLngo
KSkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLnkoKSkpKTsKIH0KIAoraW5saW5lIEludFBv
aW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHJldHVybiBJ
bnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkp
OworfQorCiBmbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCYgYyk7CiAKIC8vIEZpbmQgcG9pbnQgd2hlcmUgbGluZXMgdGhyb3Vn
aCB0aGUgdHdvIHBhaXJzIG9mIHBvaW50cyBpbnRlcnNlY3QuIFJldHVybnMgZmFsc2UgaWYgdGhl
IGxpbmVzIGRvbid0IGludGVyc2VjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9p
ZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpYwogICAgICAgICBJbnRQb2ludCht
X3ggKyB0eCwgbV95ICsgdHkgKyB5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiB9CiAK
LWJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHks
IGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKK2Jvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxp
bmVUb3AsIGludCBsaW5lQm90dG9tKQogewogICAgIHR4ICs9IG1feDsKICAgICB0eSArPSBtX3k7
CkBAIC0xMTEsMTYgKzExMSwxNiBAQCBib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUCiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKG1f
Zmlyc3RMaW5lKTsKICAgICAgICAgaW50IG10eCA9IHR4ICsgbV9sb2dpY2FsV2lkdGggLSBtX21h
cmt1cEJveC0+eCgpOwogICAgICAgICBpbnQgbXR5ID0gdHkgKyBzdHlsZS0+Zm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgpICsgbV9tYXJrdXBCb3gtPnJlbmRlcmVyKCkt
PnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgIGlm
IChtX21hcmt1cEJveC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBtdHgsIG10
eSwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gbXR4LCB5IC0gbXR5KSk7CisgICAg
ICAgIGlmIChtX21hcmt1cEJveC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludElu
Q29udGFpbmVyLCBtdHgsIG10eSwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKKyAgICAgICAgICAg
IHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVy
IC0gSW50U2l6ZShtdHgsIG10eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgbV9s
b2dpY2FsV2lkdGgsIG1faGVpZ2h0KTsKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYm
IGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHgsIHkpKSkgewotICAg
ICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAt
IHR4LCB5IC0gdHkpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVz
dFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIGJvdW5kc1JlY3QpKQorICAgIGlmICh2
aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0
Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkp
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5k
ZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnko
KSwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCShyZXZpc2lvbiA4NjU4MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBp
bnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKICAgICB2
b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgcykgeyBt
X3NlbGVjdGlvblN0YXRlID0gczsgfQogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgdHgs
IGludCB0eSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShy
ZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsMTIgKzIyMSwxMiBAQCB2b2lkIElubGluZUJveDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluCiAgICAgfQogfQogCi1ib29sIElubGluZUJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAv
KmxpbmVCb3R0b20qLykKK2Jvb2wgSW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCAvKiBsaW5lVG9wICovLCBpbnQg
LypsaW5lQm90dG9tKi8pCiB7CiAgICAgLy8gSGl0IHRlc3QgYWxsIHBoYXNlcyBvZiByZXBsYWNl
ZCBlbGVtZW50cyBhdG9taWNhbGx5LCBhcyB0aG91Z2ggdGhlIHJlcGxhY2VkIGVsZW1lbnQgZXN0
YWJsaXNoZWQgaXRzCiAgICAgLy8gb3duIHN0YWNraW5nIGNvbnRleHQuICAoU2VlIEFwcGVuZGl4
IEUuMiwgc2VjdGlvbiA2LjQgb24gaW5saW5lIGJsb2NrL3RhYmxlIGVsZW1lbnRzIGluIHRoZSBD
U1MyLjEKICAgICAvLyBzcGVjaWZpY2F0aW9uLikKLSAgICByZXR1cm4gcmVuZGVyZXIoKS0+aGl0
VGVzdChyZXF1ZXN0LCByZXN1bHQsIEludFBvaW50KHgsIHkpLCB0eCwgdHkpOworICAgIHJldHVy
biByZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwg
dHgsIHR5KTsKIH0KIAogY29uc3QgUm9vdElubGluZUJveCogSW5saW5lQm94Ojpyb290KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDg2NTgx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90
dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVU
b3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwog
CiAgICAgSW5saW5lQm94KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDg2
NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OTgsMTggKzg5OCwxOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnNldE92
ZXJmbG93RnJvbUxvZ2ljCiAgICAgc2V0VmlzdWFsT3ZlcmZsb3codmlzdWFsT3ZlcmZsb3csIGxp
bmVUb3AsIGxpbmVCb3R0b20pOwogfQogCi1ib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkK
K2Jvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7CiAg
ICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVC
b3R0b20pKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICBvdmVy
Zmxvd1JlY3QubW92ZSh0eCwgdHkpOwotICAgIGlmICghb3ZlcmZsb3dSZWN0LmludGVyc2VjdHMo
cmVzdWx0LnJlY3RGb3JQb2ludCh4LCB5KSkpCisgICAgaWYgKCFvdmVyZmxvd1JlY3QuaW50ZXJz
ZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgY2hpbGRyZW4gZmlyc3QuCiAgICAgZm9yIChJbmxp
bmVCb3gqIGN1cnIgPSBsYXN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZPbkxpbmUo
KSkgewotICAgICAgICBpZiAoKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpIHx8ICFjdXJyLT5i
b3hNb2RlbE9iamVjdCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSAmJiBjdXJyLT5ub2RlQXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgbGluZVRvcCwgbGluZUJvdHRvbSkp
IHsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOworICAgICAgICBpZiAoKGN1cnItPnJlbmRlcmVyKCkt
PmlzVGV4dCgpIHx8ICFjdXJyLT5ib3hNb2RlbE9iamVjdCgpLT5oYXNTZWxmUGFpbnRpbmdMYXll
cigpKSAmJiBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIsIHR4LCB0eSwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKKyAgICAgICAgICAgIHJlbmRlcmVy
KCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6
ZSh0eCwgdHkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpA
QCAtOTM3LDkgKzkzNyw5IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGkKICAgICBmbGlwRm9yV3JpdGluZ01vZGUocmVjdCk7CiAgICAgcmVjdC5tb3ZlKHR4LCB0eSk7
CiAKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1
bHQucmVjdEZvclBvaW50KHgsIHkpKSkgewotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKEludFBvaW50KHggLSB0eCwgeSAt
IHR5KSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBp
biB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgotICAgICAgICBpZiAoIXJlc3VsdC5hZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgeCwgeSwgcmVjdCkp
CisgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0
LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKKyAgICAgICAgcmVuZGVyZXIoKS0+
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29u
dGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKSk7IC8vIERvbid0IGFkZCBpbiBtX3ggb3IgbV95IGhl
cmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgc3BhY2UuCisgICAg
ICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+
bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHJlY3Qp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
OSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludEZpbGxMYXllcihjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEludFJlY3QmLCBD
b21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgIHZvaWQgcGFpbnRC
b3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBTaGFkb3dTdHlsZSwgY29u
c3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogCiAgICAgdmlydHVhbCBSZW5kZXJMaW5l
Qm94TGlzdCogcmVuZGVyZXJMaW5lQm94ZXMoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gODY1ODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0NCw3ICszNDQsNyBAQCBib29sIElubGluZVRleHRCb3g6OmlzTGluZUJyZWFrKCkgY29uc3QK
ICAgICByZXR1cm4gcmVuZGVyZXIoKS0+aXNCUigpIHx8IChyZW5kZXJlcigpLT5zdHlsZSgpLT5w
cmVzZXJ2ZU5ld2xpbmUoKSAmJiBsZW4oKSA9PSAxICYmICgqdGV4dFJlbmRlcmVyKCktPnRleHQo
KSlbc3RhcnQoKV0gPT0gJ1xuJyk7CiB9CiAKLWJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBp
bnQgeSwgaW50IHR4LCBpbnQgdHksIGludCAvKiBsaW5lVG9wICovLCBpbnQgLypsaW5lQm90dG9t
Ki8pCitib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgaW50IHR4LCBpbnQgdHksIGludCAvKiBsaW5lVG9wICovLCBpbnQgLypsaW5lQm90dG9tKi8p
CiB7CiAgICAgaWYgKGlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1
Miw5ICszNTIsOSBAQCBib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAg
ICAgRmxvYXRQb2ludCBib3hPcmlnaW4gPSBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CiAg
ICAgYm94T3JpZ2luLm1vdmUodHgsIHR5KTsKICAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4s
IEludFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpKTsKLSAgICBpZiAobV90cnVuY2F0aW9uICE9IGNG
dWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3Rz
KHJlc3VsdC5yZWN0Rm9yUG9pbnQoeCwgeSkpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UG9pbnQoeCAtIHR4
LCB5IC0gdHkpKSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RS
ZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0KSkKKyAgICBpZiAobV90cnVuY2F0
aW9uICE9IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5p
bnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CisgICAg
ICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGlu
Z01vZGUocG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KSkpOworICAgICAgICBpZiAo
IXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwg
cG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWluZXIueSgpLCByZWN0KSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDg2NTgxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5l
Qm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IGxp
bmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20p
OwogCiBwdWJsaWM6CiAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyKCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDg2NTgx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzg5Niw2MSArMzg5Niw1NyBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5P
dmVyZmxvd0NvbnRyCiAgICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xz
KHJlc3VsdCwgSW50UG9pbnQoX3ggLSBfdHgsIF95IC0gX3R5KSk7CiB9CiAKLWJvb2wgUmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKIHsKLSAgICBpbnQgdHggPSBfdHggKyB4KCk7Ci0gICAgaW50IHR5ID0g
X3R5ICsgeSgpOworICAgIEludFNpemUgbG9jYWxPZmZzZXQodHggKyB4KCksIHR5ICsgeSgpKTsK
IAogICAgIGlmICghaXNSZW5kZXJWaWV3KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVl
ZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCiAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSB2
aXN1YWxPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgb3ZlcmZsb3dCb3gubW92ZSh0eCwgdHkpOwot
ICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChf
eCwgX3kpKSkKKyAgICAgICAgb3ZlcmZsb3dCb3gubW92ZShsb2NhbE9mZnNldCk7CisgICAgICAg
IGlmICghb3ZlcmZsb3dCb3guaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5D
b250YWluZXIpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAo
KGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaXNQb2ludEluT3ZlcmZsb3dDb250
cm9sKHJlc3VsdCwgX3gsIF95LCB0eCwgdHkpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBJbnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSk7CisgICAgaWYgKChoaXRUZXN0
QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRU
ZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1
bHQsIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwgbG9jYWxPZmZz
ZXQud2lkdGgoKSwgbG9jYWxPZmZzZXQuaGVpZ2h0KCkpKSB7CisgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gbG9jYWxPZmZzZXQpOwogICAgICAg
ICAvLyBGSVhNRTogaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKCkgZG9lc24ndCBoYW5kbGUgcmVj
dC1iYXNlZCB0ZXN0cyB5ZXQuCi0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNl
ZFRlc3RSZXN1bHQobm9kZSgpLCBfeCwgX3kpKQorICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2Rl
VG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50
SW5Db250YWluZXIueSgpKSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAg
Ly8gSWYgd2UgaGF2ZSBjbGlwcGluZywgdGhlbiB3ZSBjYW4ndCBoYXZlIGFueSBzcGlsbG91dC4K
ICAgICBib29sIHVzZU92ZXJmbG93Q2xpcCA9IGhhc092ZXJmbG93Q2xpcCgpICYmICFoYXNTZWxm
UGFpbnRpbmdMYXllcigpOwogICAgIGJvb2wgdXNlQ2xpcCA9IChoYXNDb250cm9sQ2xpcCgpIHx8
IHVzZU92ZXJmbG93Q2xpcCk7Ci0gICAgSW50UmVjdCBoaXRUZXN0QXJlYShyZXN1bHQucmVjdEZv
clBvaW50KF94LCBfeSkpOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8ICho
YXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhoaXRU
ZXN0QXJlYSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSwgSW5jbHVkZU92ZXJsYXlTY3JvbGxi
YXJTaXplKS5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSk7CisgICAgSW50UmVjdCBoaXRUZXN0QXJl
YShyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKTsKKyAgICBib29sIGNoZWNr
Q2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xDbGlwUmVj
dChsb2NhbE9mZnNldC53aWR0aCgpLCBsb2NhbE9mZnNldC5oZWlnaHQoKSkuaW50ZXJzZWN0cyho
aXRUZXN0QXJlYSkgOiBvdmVyZmxvd0NsaXBSZWN0KGxvY2FsT2Zmc2V0LndpZHRoKCksIGxvY2Fs
T2Zmc2V0LmhlaWdodCgpLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpLmludGVyc2VjdHMo
aGl0VGVzdEFyZWEpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbikgewogICAgICAgICAvLyBIaXQg
dGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KLSAgICAgICAgaW50IHNjcm9sbGVkWCA9IHR4OwotICAg
ICAgICBpbnQgc2Nyb2xsZWRZID0gdHk7CisgICAgICAgIEludFNpemUgc2Nyb2xsZWRPZmZzZXQo
bG9jYWxPZmZzZXQpOwogICAgICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAg
ICAgIEludFNpemUgb2Zmc2V0ID0gbGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7Ci0g
ICAgICAgICAgICBzY3JvbGxlZFggLT0gb2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgICAgICBzY3Jv
bGxlZFkgLT0gb2Zmc2V0LmhlaWdodCgpOworICAgICAgICAgICAgc2Nyb2xsZWRPZmZzZXQgLT0g
bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBIaXQgdGVzdCBjb250ZW50cyBpZiB3ZSBkb24ndCBoYXZlIGNvbHVtbnMuCiAgICAgICAgIGlm
ICghaGFzQ29sdW1ucygpKSB7Ci0gICAgICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVl
c3QsIHJlc3VsdCwgX3gsIF95LCBzY3JvbGxlZFgsIHNjcm9sbGVkWSwgaGl0VGVzdEFjdGlvbikp
IHsKLSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQo
X3ggLSB0eCwgX3kgLSB0eSkpOworICAgICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1
ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwg
c2Nyb2xsZWRPZmZzZXQud2lkdGgoKSwgc2Nyb2xsZWRPZmZzZXQuaGVpZ2h0KCksIGhpdFRlc3RB
Y3Rpb24pKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBv
aW50SW5Db250YWluZXIgLSBsb2NhbE9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRU
ZXN0RmxvYXQgJiYgaGl0VGVzdEZsb2F0cyhyZXF1ZXN0LCByZXN1bHQsIF94LCBfeSwgc2Nyb2xs
ZWRYLCBzY3JvbGxlZFkpKQorICAgICAgICAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVz
dEZsb2F0ICYmIGhpdFRlc3RGbG9hdHMocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVy
LngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHNjcm9sbGVkT2Zmc2V0LndpZHRoKCksIHNjcm9s
bGVkT2Zmc2V0LmhlaWdodCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfSBlbHNlIGlmIChoaXRUZXN0Q29sdW1ucyhyZXF1ZXN0LCByZXN1bHQsIF94LCBfeSwgc2Ny
b2xsZWRYLCBzY3JvbGxlZFksIGhpdFRlc3RBY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOworICAgICAg
ICB9IGVsc2UgaWYgKGhpdFRlc3RDb2x1bW5zKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lci54KCksIHBvaW50SW5Db250YWluZXIueSgpLCBzY3JvbGxlZE9mZnNldC53aWR0aCgpLCBz
Y3JvbGxlZE9mZnNldC5oZWlnaHQoKSwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gbG9jYWxPZmZzZXQp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBO
b3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRU
ZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tC
YWNrZ3JvdW5kKSB7Ci0gICAgICAgIEludFJlY3QgYm91bmRzUmVjdCh0eCwgdHksIHdpZHRoKCks
IGhlaWdodCgpKTsKLSAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNS
ZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChfeCwgX3kpKSkgewotICAgICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShJbnRQb2lu
dChfeCAtIHR4LCBfeSAtIHR5KSkpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIF94LCBfeSwgYm91bmRzUmVjdCkpCisgICAgICAg
IEludFJlY3QgYm91bmRzUmVjdChsb2NhbE9mZnNldC53aWR0aCgpLCBsb2NhbE9mZnNldC5oZWln
aHQoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGlu
ZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5D
b250YWluZXIpKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZs
aXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gbG9jYWxPZmZzZXQpKTsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBw
b2ludEluQ29udGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIGJvdW5kc1JlY3QpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDA0Nyw3
ICs0MDQzLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IAogICAg
ICAgICAgICAgY2hpbGRIaXRUZXN0ID0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kOwogICAg
ICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBsYXN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnByZXZpb3VzU2libGluZ0JveCgpKSB7CiAgICAgICAgICAgICBJbnRQb2ludCBj
aGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKGNoaWxkLCBJbnRQb2ludCh0eCwgdHkpLCBQ
YXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAgICAgICAgIGlmICghY2hpbGQt
Pmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nKCkgJiYgY2hpbGQt
Pm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgY2hpbGRQb2ludC54KCksIGNoaWxk
UG9pbnQueSgpLCBjaGlsZEhpdFRlc3QpKQorICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBJbnRQb2ludCh4LCB5KSwgY2hpbGRQb2ludC54KCksIGNo
aWxkUG9pbnQueSgpLCBjaGlsZEhpdFRlc3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw3ICsyODUsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wgZW5kc1dpdGhT
b2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbmxpbmVEaXJlY3Rpb25M
aW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICovLCBmbG9hdCYgLyog
bG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lkdGggKi8pIGNvbnN0IHsgfQogCi0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwor
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDAsMTUgKzc0MCwxNSBAQCBpbnQgUmVuZGVyQm94
Ojpjb21wdXRlQ29udGVudEJveExvZ2ljYWxICiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJl
bmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlv
bikKIHsKICAgICB0eCArPSB4KCk7CiAgICAgdHkgKz0geSgpOwogCiAgICAgLy8gQ2hlY2sga2lk
cyBmaXJzdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2hp
bGQtPmhhc0xheWVyKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBv
cywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKKyAgICAgICAgaWYg
KCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGFjdGlvbikpIHsKKyAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzU2LDkg
Kzc1Niw5IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMKICAgICAv
LyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0
aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3
aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCiAgICAgSW50
UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAg
ICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3Vu
ZCAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludCh4UG9zLCB5UG9z
KSkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHhQb3Mg
LSB0eCwgeVBvcyAtIHR5KSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNl
ZFRlc3RSZXN1bHQobm9kZSgpLCB4UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkKKyAgICBpZiAodmlz
aWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBib3Vu
ZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkp
IHsKKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIg
LSBJbnRTaXplKHR4LCB0eSkpOworICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFz
ZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWlu
ZXIueSgpLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gODY1ODEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzOSw3ICsyMzksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDg2
NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU4LDEyICsxNTgsMTIgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFp
bnQoUGFpbnRJbmZvJiBwYQogfQogCiBib29sIFJlbmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAg
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorICAg
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYgKGFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJCb3g6Om5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBhY3Rpb24pCisgICAgYm9v
bCBpbnNpZGUgPSBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lciwgdHgsIHR5LCBhY3Rpb24pCiAgICAgICAgIHx8IG1faXNSZXNpemluZzsKIAog
ICAgIGlmIChpbnNpZGUgJiYgZnJhbWVTZXQoKS0+bm9SZXNpemUoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgJKHJldmlzaW9uIDg2NTgxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZVNldCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MywxNyArMzkzLDE3IEBA
IEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSAKICAgICByZXR1cm4gaSA/
IGktPnRyZWVTY29wZSgpLT5nZXRJbWFnZU1hcChpLT5mYXN0R2V0QXR0cmlidXRlKHVzZW1hcEF0
dHIpKSA6IDA7CiB9CiAKLWJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVy
SW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIEhpdFRlc3RSZXN1
bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnRvcFBhZGRpbmcoKSwgcmVzdWx0
LnJpZ2h0UGFkZGluZygpLCByZXN1bHQuYm90dG9tUGFkZGluZygpLCByZXN1bHQubGVmdFBhZGRp
bmcoKSk7Ci0gICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVx
dWVzdCwgdGVtcFJlc3VsdCwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKKyAgICBib29s
IGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogCiAgICAgaWYgKHRl
bXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSgpKSB7CiAgICAgICAgIGlmIChIVE1MTWFwRWxl
bWVudCogbWFwID0gaW1hZ2VNYXAoKSkgewogICAgICAgICAgICAgSW50UmVjdCBjb250ZW50Qm94
ID0gY29udGVudEJveFJlY3QoKTsKICAgICAgICAgICAgIGZsb2F0IHpvb20gPSBzdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCk7Ci0gICAgICAgICAgICBpbnQgbWFwWCA9IGxyb3VuZGYoKHggLSB0eCAt
IHRoaXMtPngoKSAtIGNvbnRlbnRCb3gueCgpKSAvIHpvb20pOwotICAgICAgICAgICAgaW50IG1h
cFkgPSBscm91bmRmKCh5IC0gdHkgLSB0aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6b29t
KTsKKyAgICAgICAgICAgIGludCBtYXBYID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci54KCkg
LSB0eCAtIHRoaXMtPngoKSAtIGNvbnRlbnRCb3gueCgpKSAvIHpvb20pOworICAgICAgICAgICAg
aW50IG1hcFkgPSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLnkoKSAtIHR5IC0gdGhpcy0+eSgp
IC0gY29udGVudEJveC55KCkpIC8gem9vbSk7CiAgICAgICAgICAgICBpZiAobWFwLT5tYXBNb3Vz
ZUV2ZW50KG1hcFgsIG1hcFksIGNvbnRlbnRCb3guc2l6ZSgpLCB0ZW1wUmVzdWx0KSkKICAgICAg
ICAgICAgICAgICB0ZW1wUmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShub2RlKCkpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkocmV2aXNp
b24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IG1p
bmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZp
bmlzaGVkKENhY2hlZFJlc291cmNlKik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmly
dHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRo
ID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhl
aWdodCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5jcHAJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw5ICs3MTIsOSBAQCBjb25zdCBjaGFy
KiBSZW5kZXJJbmxpbmU6OnJlbmRlck5hbWUoKSBjCiB9CiAKIGJvb2wgUmVuZGVySW5saW5lOjpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIHJldHVybiBt
X2xpbmVCb3hlcy5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBo
aXRUZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gbV9saW5lQm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1
ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwg
dHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklubGlu
ZTo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDcgKzExNyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1JlbFBvc2l0aW9uZWQoKSB8
fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzTWFzaygpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkocmV2aXNpb24gODY1ODEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDEsNyArMzAxLDcgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVz
dChSZW5kZXJCbwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxhc3RMaW5lQm94KCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKSB7CiAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIHJvb3QgPSBjdXJyLT5yb290KCk7CiAgICAgICAgIGlmIChyYW5nZUludGVyc2VjdHNSZWN0
KHJlbmRlcmVyLCBjdXJyLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZVRvcCgp
KSwgY3Vyci0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KHJvb3QtPmxpbmVCb3R0b20oKSks
IHJlY3QsIHR4LCB0eSkpIHsKLSAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIHJvb3QtPmxpbmVUb3AoKSwgcm9v
dC0+bGluZUJvdHRvbSgpKTsKKyAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBJbnRQb2ludCh4LCB5KSwgdHgsIHR5LCByb290LT5saW5l
VG9wKCksIHJvb3QtPmxpbmVCb3R0b20oKSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7CiAg
ICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQ
b2ludCh4IC0gdHgsIHkgLSB0eSkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24g
ODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2NiwyMSArNjY2LDIxIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6c2V0
U2Nyb2xsVG9wKGludCBuZXcKICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihpbmRleCk7CiB9CiAKLWJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQorYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsK
LSAgICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHks
IHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJCbG9jazo6bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGhpdFRlc3RBY3Rp
b24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYg
bGlzdEl0ZW1zID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkp
KS0+bGlzdEl0ZW1zKCk7CiAgICAgaW50IHNpemUgPSBudW1JdGVtcygpOwogICAgIHR4ICs9IHRo
aXMtPngoKTsKICAgICB0eSArPSB0aGlzLT55KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgaWYgKGl0ZW1Cb3VuZGluZ0JveFJlY3QodHgsIHR5LCBpKS5j
b250YWlucyh4LCB5KSkgeworICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVjdCh0eCwgdHks
IGkpLmNvbnRhaW5zKHBvaW50SW5Db250YWluZXIpKSB7CiAgICAgICAgICAgICBpZiAoRWxlbWVu
dCogbm9kZSA9IGxpc3RJdGVtc1tpXSkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5l
ck5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vblNoYXJlZE5vZGUo
bm9kZSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnNldExvY2FsUG9pbnQoSW50UG9pbnQoeCAt
IHR4LCB5IC0gdHkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChwb2lu
dEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChpbnQpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIC8v
IFNjcm9sbGFibGVBcmVhIGludGVyZmFjZS4KICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTMyLDI1ICsyMTMyLDI1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUoYm9v
bCAKICAgICAgICAgY3Vyci0+dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CiB9CiAKLWJvb2wgUmVu
ZGVyT2JqZWN0OjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikKK2Jvb2wgUmVuZGVyT2JqZWN0OjpoaXRUZXN0KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEZpbHRl
ciBoaXRUZXN0RmlsdGVyKQogewogICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CiAgICAgaWYgKGhp
dFRlc3RGaWx0ZXIgIT0gSGl0VGVzdFNlbGYpIHsKICAgICAgICAgLy8gRmlyc3QgdGVzdCB0aGUg
Zm9yZWdyb3VuZCBsYXllciAobGluZXMgYW5kIGlubGluZXMpLgotICAgICAgICBpbnNpZGUgPSBu
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50LngoKSwgcG9pbnQueSgpLCB0eCwgdHks
IEhpdFRlc3RGb3JlZ3JvdW5kKTsKKyAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIEhpdFRlc3RGb3JlZ3JvdW5kKTsK
IAogICAgICAgICAvLyBUZXN0IGZsb2F0cyBuZXh0LgogICAgICAgICBpZiAoIWluc2lkZSkKLSAg
ICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnQueCgp
LCBwb2ludC55KCksIHR4LCB0eSwgSGl0VGVzdEZsb2F0KTsKKyAgICAgICAgICAgIGluc2lkZSA9
IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBI
aXRUZXN0RmxvYXQpOwogCiAgICAgICAgIC8vIEZpbmFsbHkgdGVzdCB0byBzZWUgaWYgdGhlIG1v
dXNlIGlzIGluIHRoZSBiYWNrZ3JvdW5kICh3aXRoaW4gYSBjaGlsZCBibG9jaydzIGJhY2tncm91
bmQpLgogICAgICAgICBpZiAoIWluc2lkZSkKLSAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnQueCgpLCBwb2ludC55KCksIHR4LCB0eSwgSGl0VGVz
dENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CisgICAgICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgSGl0VGVzdENoaWxk
QmxvY2tCYWNrZ3JvdW5kcyk7CiAgICAgfQogCiAgICAgLy8gU2VlIGlmIHRoZSBtb3VzZSBpcyBp
bnNpZGUgdXMgYnV0IG5vdCBhbnkgb2Ygb3VyIGRlc2NlbmRhbnRzCiAgICAgaWYgKGhpdFRlc3RG
aWx0ZXIgIT0gSGl0VGVzdERlc2NlbmRhbnRzICYmICFpbnNpZGUpCi0gICAgICAgIGluc2lkZSA9
IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnQueCgpLCBwb2ludC55KCksIHR4LCB0
eSwgSGl0VGVzdEJsb2NrQmFja2dyb3VuZCk7CisgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBIaXRUZXN0QmxvY2tC
YWNrZ3JvdW5kKTsKIAogICAgIHJldHVybiBpbnNpZGU7CiB9CkBAIC0yMTY5LDcgKzIxNjksNyBA
QCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVzdFJlc3VsdChICiAgICAgfQogfQogCi1i
b29sIFJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgaW50IC8qeCovLCBpbnQgLyp5Ki8sIGludCAvKnR4Ki8sIGludCAvKnR5Ki8s
IEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIC8qcG9pbnRJbkNv
bnRhaW5lciovLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovLCBIaXRUZXN0QWN0aW9uKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDYsNyArNTQ2LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEZpbHRlciA9IEhp
dFRlc3RBbGwpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRU
ZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
SGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDg2NTgx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE5OCwxOCArMTE5OCwxOCBAQCBJbnRSZWN0IFJlbmRlclRhYmxlOjpvdmVyZmxv
d0NsaXBSZWN0KGluCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLWJvb2wgUmVuZGVyVGFibGU6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGludCB4UG9zLCBpbnQgeVBvcywgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24g
YWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAg
ICB0eCArPSB4KCk7CiAgICAgdHkgKz0geSgpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4K
LSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5p
bnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQoeFBvcywgeVBvcykpKSB7CisgICAgaWYgKCFo
YXNPdmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhy
ZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewogICAgICAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnBy
ZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRv
UmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFi
bGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSkgewogICAgICAgICAgICAgICAgIElu
dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hpbGQp
LCBJbnRQb2ludCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBv
cywgeVBvcywgY2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpLCBhY3Rpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9z
IC0gY2hpbGRQb2ludC54KCksIHlQb3MgLSBjaGlsZFBvaW50LnkoKSkpOworICAgICAgICAgICAg
ICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCksIGFjdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvUG9pbnQocG9pbnRJbkNv
bnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTIxOCw5ICsxMjE4LDkgQEAg
Ym9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogCiAgICAgLy8gQ2hlY2sg
b3VyIGJvdW5kcyBuZXh0LgogICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5
LCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiAo
YWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09IEhpdFRlc3RDaGls
ZEJsb2NrQmFja2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9y
UG9pbnQoeFBvcywgeVBvcykpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKSk7Ci0g
ICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCB4
UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYm
IChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENo
aWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RG
b3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0
eCwgdHkpKSk7CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1
bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIGJv
dW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gODY1ODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIw
LDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludElu
Zm8mLCBJbnRTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4UG9z
LCBpbnQgeVBvcywgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RB
Y3Rpb24pOwogICAgIAogICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNw
cAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgSW50UmVjdCBSZW5k
ZXJUYWJsZVJvdzo6Y2xpcHBlZE92ZXJmbG93UgogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBS
ZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24g
YWN0aW9uKQogewogICAgIC8vIFRhYmxlIHJvd3MgY2Fubm90IGV2ZXIgYmUgaGl0IHRlc3RlZC4g
IEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBv
dXIgY2hpbGRyZW4gYWx3YXlzLgpAQCAtMTk4LDggKzE5OCw4IEBAIGJvb2wgUmVuZGVyVGFibGVS
b3c6Om5vZGVBdFBvaW50KGNvbnN0IEgKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRo
aXMgY2hlY2suCiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSAmJiAhdG9SZW5kZXJC
b3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBJbnRQb2lu
dCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJUYWJsZUNlbGwoY2hpbGQp
LCBJbnRQb2ludCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAg
ICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBj
ZWxsUG9pbnQueCgpLCBjZWxsUG9pbnQueSgpLCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSBjZWxsUG9pbnQueCgpLCB5
IC0gY2VsbFBvaW50LnkoKSkpOworICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludC54KCksIGNlbGxQb2lu
dC55KCksIGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUoY2VsbFBvaW50LngoKSwgY2VsbFBvaW50
LnkoKSkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAko
cmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgSW50
UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgLy8gVGhlIG9u
bHkgdGltZSByb3dzIGdldCBhIGxheWVyIGlzIHdoZW4gdGhleSBoYXZlIHRyYW5zcGFyZW5jeS4K
ICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzVHJhbnNw
YXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNNYXNr
KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQyLDcgKzExNDIsNyBA
QCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4oaW50CiB9CiAKIC8vIEhpdCBU
ZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5
UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRh
YmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSBoYXZl
IG5vIGNoaWxkcmVuIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghZmlyc3RD
aGlsZCgpKQpAQCAtMTE1Myw3ICsxMTUzLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5v
ZGVBdFBvaW50KGNvbgogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKLSAgICBpZiAo
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3Rz
KHJlc3VsdC5yZWN0Rm9yUG9pbnQoeFBvcywgeVBvcykpKQorICAgIGlmIChoYXNPdmVyZmxvd0Ns
aXAoKSAmJiAhb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJlY3RG
b3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChtX2hhc092ZXJmbG93aW5nQ2VsbCkgewpAQCAtMTE2NCw4ICsxMTY0LDggQEAgYm9vbCBS
ZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgogICAgICAgICAgICAgLy8gdGhlbiB3
ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkg
JiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAg
ICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5k
ZXJCb3goY2hpbGQpLCBJbnRQb2ludCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1
c3RtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgeFBvcywgeVBvcywgY2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpLCBhY3Rp
b24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludCh4UG9zIC0gY2hpbGRQb2ludC54KCksIHlQb3MgLSBjaGlsZFBvaW50LnkoKSkpOwor
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBw
b2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCksIGFjdGlvbikp
IHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvUG9p
bnQocG9pbnRJbkNvbnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTE3Myw3
ICsxMTczLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBJbnRQ
b2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSk7CisgICAgSW50UG9pbnQgbG9jYXRpb24gPSBwb2lu
dEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpOwogICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgbG9jYXRpb24uc2V0WShoZWlnaHQoKSAtIGxv
Y2F0aW9uLnkoKSk7CkBAIC0xMjA4LDggKzEyMDgsOCBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlv
bjo6bm9kZUF0UG9pbnQoY29uCiAgICAgZm9yIChpbnQgaSA9IGN1cnJlbnQuY2VsbHMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3Vy
cmVudC5jZWxsc1tpXTsKICAgICAgICAgSW50UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRp
bmdNb2RlKGNlbGwsIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVz
dG1lbnQpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgY2VsbFBvaW50LngoKSwgY2Vs
bFBvaW50LnkoKSwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIEludFBvaW50KHhQb3MgLSBjZWxsUG9pbnQueCgpLCB5UG9zIC0gY2VsbFBvaW50Lnko
KSkpOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LngoKSwg
Y2VsbFBvaW50LnkoKSwgYWN0aW9uKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHRvUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQb2ludCkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiA4NjU4MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW1h
Z2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSAwKTsKIAotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uKTsKIAogICAgIGJvb2wgZW5zdXJlUm93cyhpbnQpOwogICAgIHZvaWQgY2xl
YXJHcmlkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlz
aW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50LCBpbnQpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBJbnRQb2ludCwgaW50LCBpbnQs
IEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQog
CiAgICAgdm9pZCBkZWxldGVUZXh0Qm94ZXMoKTsKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRl
c3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
LmNwcAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMTMg
QEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3VidHJlZQogICAgICAgICBmcmFt
ZS0+ZWRpdG9yKCktPnRleHREaWRDaGFuZ2VJblRleHRBcmVhKHRleHRBcmVhKTsKIH0KIAotYm9v
bCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAg
aWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5
LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBoaXRU
ZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlc3VsdC5pbm5l
ck5vZGUoKSA9PSBub2RlKCkgfHwgcmVzdWx0LmlubmVyTm9kZSgpID09IGlubmVyVGV4dEVsZW1l
bnQoKSkKLSAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHgsIHksIHR4LCB0eSk7
CisgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLngo
KSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHR4LCB0eSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5oCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQo
KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0
aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hh
cldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOwogICAgIHZpcnR1YWwgaW50IHByZWZlcnJlZENv
bnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJ
KHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMyw3ICszMzMsNyBAQCB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgfQogfQogCi1ib29s
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9z
LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQog
ewogICAgIC8vIElmIHdlJ3JlIHdpdGhpbiB0aGUgdGV4dCBjb250cm9sLCB3ZSB3YW50IHRvIGFj
dCBhcyBpZiB3ZSd2ZSBoaXQgdGhlIGlubmVyIHRleHQgYmxvY2sgZWxlbWVudCwgaW4gY2FzZSB0
aGUgcG9pbnQKICAgICAvLyB3YXMgb24gdGhlIGNvbnRyb2wgYnV0IG5vdCBvbiB0aGUgaW5uZXIg
ZWxlbWVudCAoc2VlIFJhZGFyIDQ2MTc4NDEpLgpAQCAtMzQxLDE0ICszNDEsMTQgQEAgYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdAogICAgIC8vIEluIGEgc2VhcmNoIGZp
ZWxkLCB3ZSB3YW50IHRvIGFjdCBhcyBpZiB3ZSd2ZSBoaXQgdGhlIHJlc3VsdHMgYmxvY2sgaWYg
d2UncmUgdG8gdGhlIGxlZnQgb2YgdGhlIGlubmVyIHRleHQgYmxvY2ssCiAgICAgLy8gYW5kIGFj
dCBhcyBpZiB3ZSd2ZSBoaXQgdGhlIGNsb3NlIGJsb2NrIGlmIHdlJ3JlIHRvIHRoZSByaWdodCBv
ZiB0aGUgaW5uZXIgdGV4dCBibG9jay4KIAotICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBoaXRUZXN0QWN0
aW9uKSkKKyAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHdlIGhpdCBhIG5vZGUgaW5zaWRlIHRoZSBpbm5l
ciB0ZXh0IGVsZW1lbnQsIHNheSB0aGF0IHdlIGhpdCB0aGF0IGVsZW1lbnQsCiAgICAgLy8gYW5k
IGlmIHdlIGhpdCBvdXIgbm9kZSAoZS5nLiB3ZSdyZSBvdmVyIHRoZSBib3JkZXIgb3IgcGFkZGlu
ZyksIGFsc28gc2F5IHRoYXQgd2UgaGl0IHRoZQogICAgIC8vIGlubmVyIHRleHQgZWxlbWVudCBz
byB0aGF0IGl0IGdhaW5zIGZvY3VzLgogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCktPmlzRGVz
Y2VuZGFudE9mKGlubmVyVGV4dEVsZW1lbnQoKSkgfHwgcmVzdWx0LmlubmVyTm9kZSgpID09IG5v
ZGUoKSkKLSAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHhQb3MsIHlQb3MsIHR4
LCB0eSk7CisgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHR4LCB0eSk7CiAKICAgICAvLyBJZiB3ZSBm
b3VuZCBhIHNwaW4gYnV0dG9uLCB3ZSdyZSBkb25lLgogICAgIGlmIChtX2lubmVyU3BpbkJ1dHRv
biAmJiByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbV9pbm5lclNwaW5CdXR0b24pCkBAIC0zNzEsMjAg
KzM3MSwyMCBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0CiAgICAg
bG9jYWxQb2ludC5tb3ZlKC1pbm5lckJsb2NrUmVuZGVyZXItPngoKSwgLWlubmVyQmxvY2tSZW5k
ZXJlci0+eSgpKTsKIAogICAgIGludCB0ZXh0TGVmdCA9IHR4ICsgeCgpICsgaW5uZXJCbG9ja1Jl
bmRlcmVyLT54KCkgKyBpbm5lclRleHRSZW5kZXJlci0+eCgpOwotICAgIGlmIChtX3Jlc3VsdHNC
dXR0b24gJiYgbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJlcigpICYmIHhQb3MgPCB0ZXh0TGVmdCkK
KyAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIoKSAm
JiBwb2ludEluQ29udGFpbmVyLngoKSA8IHRleHRMZWZ0KQogICAgICAgICBpbm5lck5vZGUgPSBt
X3Jlc3VsdHNCdXR0b24uZ2V0KCk7CiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIGlm
ICghaW5uZXJOb2RlICYmIG1fc3BlZWNoQnV0dG9uICYmIG1fc3BlZWNoQnV0dG9uLT5yZW5kZXJl
cigpKSB7CiAgICAgICAgIGludCBidXR0b25MZWZ0ID0gdHggKyB4KCkgKyBpbm5lckJsb2NrUmVu
ZGVyZXItPngoKSArIGlubmVyQmxvY2tSZW5kZXJlci0+d2lkdGgoKSAtIG1fc3BlZWNoQnV0dG9u
LT5yZW5kZXJCb3goKS0+d2lkdGgoKTsKLSAgICAgICAgaWYgKHhQb3MgPj0gYnV0dG9uTGVmdCkK
KyAgICAgICAgaWYgKHBvaW50SW5Db250YWluZXIueCgpID49IGJ1dHRvbkxlZnQpCiAgICAgICAg
ICAgICBpbm5lck5vZGUgPSBtX3NwZWVjaEJ1dHRvbi5nZXQoKTsKICAgICB9CiAjZW5kaWYKIAog
ICAgIGlmICghaW5uZXJOb2RlKSB7CiAgICAgICAgIGludCB0ZXh0UmlnaHQgPSB0ZXh0TGVmdCAr
IGlubmVyVGV4dFJlbmRlcmVyLT53aWR0aCgpOwotICAgICAgICBpZiAobV9jYW5jZWxCdXR0b24g
JiYgbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCkgJiYgeFBvcyA+IHRleHRSaWdodCkKKyAgICAg
ICAgaWYgKG1fY2FuY2VsQnV0dG9uICYmIG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpICYmIHBv
aW50SW5Db250YWluZXIueCgpID4gdGV4dFJpZ2h0KQogICAgICAgICAgICAgaW5uZXJOb2RlID0g
bV9jYW5jZWxCdXR0b24uZ2V0KCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCShyZXZpc2lv
biA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgs
IGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24pOwogCiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDg2NTgxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5MSwxMCArMzkxLDEwIEBAIFJlbmRlcldpZGdldCogUmVuZGVyV2lkZ2V0OjpmaW5kKGNvbnN0
IFcKICAgICByZXR1cm4gd2lkZ2V0UmVuZGVyZXJNYXAoKS5nZXQod2lkZ2V0KTsKIH0KIAotYm9v
bCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBh
Y3Rpb24pCiB7CiAgICAgYm9vbCBoYWRSZXN1bHQgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAg
Ym9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCB4LCB5LCB0eCwgdHksIGFjdGlvbik7CisgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNl
ZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHks
IGFjdGlvbik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3Zl
ciB0aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBh
cmVhKS4KICAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYmICFo
YWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7Ci0gICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVybGFwVGVzdFJlc3VsdChib29sKTsK
IAogICAgIGJvb2wgc2V0V2lkZ2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNp
emUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJ
KHJldmlzaW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTUgKzE4OSwxNSBAQCB2b2lkIFJvb3RJbmxp
bmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAjZW5kaWYKIH0KIAotYm9vbCBSb290SW5saW5l
Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pCitib29sIFJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBs
aW5lQm90dG9tKQogewogICAgIGlmIChoYXNFbGxpcHNpc0JveCgpICYmIHZpc2libGVUb0hpdFRl
c3RpbmcoKSkgewotICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+bm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7Ci0gICAgICAg
ICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAt
IHR4LCB5IC0gdHkpKTsKKyAgICAgICAgaWYgKGVsbGlwc2lzQm94KCktPm5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBsaW5lVG9wLCBsaW5lQm90
dG9tKSkgeworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIElubGluZUZsb3dCb3g6Om5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBsaW5lVG9wLCBsaW5lQm90
dG9tKTsKKyAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQog
CiB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGZsb2F0IGR4LCBmbG9hdCBkeSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24g
ODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBp
bnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJv
dHRvbSk7CiAKICAgICBib29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBt
X2hhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uOyB9CiAgICAgdm9p
ZCBzZXRIYXNTZWxlY3RlZENoaWxkcmVuKGJvb2wgaGFzU2VsZWN0ZWRDaGlsZHJlbikgeyBtX2hh
c1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uID0gaGFzU2VsZWN0ZWRD
aGlsZHJlbjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdG
b3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OSwxMCArMTQ5LDEwIEBAIGJvb2wgUmVuZGVyU1ZHRm9yZWlnbk9iamVj
dDo6bm9kZUF0RmxvYXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50UG9pbnQgcm91
bmRlZExvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCk7Ci0gICAgcmV0dXJu
IFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHJvdW5kZWRMb2NhbFBv
aW50LngoKSwgcm91bmRlZExvY2FsUG9pbnQueSgpLCAwLCAwLCBoaXRUZXN0QWN0aW9uKTsKKyAg
ICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcm91bmRl
ZExvY2FsUG9pbnQsIDAsIDAsIGhpdFRlc3RBY3Rpb24pOwogfQogCi1ib29sIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3Qu
aAkocmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0ZvcmVpZ25PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50
IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbik7CiAgICAgdmlydHVhbCBib29sIGlzU1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VU
cmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJldmlz
aW9uIDg2NTgxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFJlbmRl
clNWR01vZGVsT2JqZWN0Ojp1cGRhdGVGcm9tRWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNs
aWVudFVwZGF0ZWRGcm9tRWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKIH0KIAotYm9vbCBSZW5kZXJT
VkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJT
VkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCShy
ZXZpc2lvbiA4NjU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCwgU1ZH
IHVzZXMgYSBkaWZmZXJlbnQgbm9kZUF0UG9pbnQgbWV0aG9kCi0gICAgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeEluQ29udGFpbmVy
LCBpbnQgeUluQ29udGFpbmVyLCBpbnQgZHhQYXJlbnRUb0NvbnRhaW5lciwgaW50IGR5UGFyZW50
VG9Db250YWluZXIsIEhpdFRlc3RBY3Rpb24pOworICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGludCBkeFBhcmVudFRvQ29udGFpbmVyLCBpbnQgZHlQYXJlbnRUb0NvbnRhaW5l
ciwgSGl0VGVzdEFjdGlvbik7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDg2NTgxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE1LDkgKzMxNSw4IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91bmRh
cmkKICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveC5pbmZsYXRlKGJvcmRlckFuZFBhZGRpbmdXaWR0
aCgpKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNW
R1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEludFBvaW50IHBv
aW50SW5Db250YWluZXIoeCwgeSk7CiAgICAgSW50U2l6ZSBjb250YWluZXJUb1BhcmVudE9mZnNl
dCh0eCwgdHkpOwogCiAgICAgSW50UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250YWlu
ZXIgLSBjb250YWluZXJUb1BhcmVudE9mZnNldDsKQEAgLTMzNSw3ICszMzQsNyBAQCBib29sIFJl
bmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAgICAgICAgICAgICAvLyBGSVhNRTog
Q1NTL0hUTUwgYXNzdW1lcyB0aGUgbG9jYWwgcG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJvcmRl
ciBib3gsIHJpZ2h0PwogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBv
aW50SW5Cb3JkZXJCb3gpOwogICAgICAgICAgICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQo
KSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIGhpdCB0ZXN0cyB5ZXQuCi0gICAgICAgICAgICBy
ZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChjaGlsZC0+bm9kZSgpLCB4LCB5KTsK
KyAgICAgICAgICAgIHJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KGNoaWxkLT5u
b2RlKCksIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA4NjU4MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ry
b2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CiAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25z
dCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCi0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBp
bnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDg2NTgx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDE0ICsxOTQsMTQgQEAgYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2Rl
QXRGbG9hdFBvaW50KGNvbgogICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2lu
dEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAgICAgCiAKLSAgICAgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCAoaW50KWxvY2FsUG9pbnQueCgpLCAoaW50KWxvY2FsUG9p
bnQueSgpLCAwLCAwLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBSZW5kZXJC
bG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBmbG9vcmVkSW50UG9pbnQobG9jYWxQ
b2ludCksIDAsIDAsIGhpdFRlc3RBY3Rpb24pOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVz
dEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0VGVz
dEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAko
cmV2aXNpb24gODY1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50
LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZv
clBvaW50KGNvbnN0IEludFBvaW50Jik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93788</attachid>
            <date>2011-05-17 10:25:29 -0700</date>
            <delta_ts>2011-05-17 13:57:42 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60663-20110517102528.patch</filename>
            <type>text/plain</type>
            <size>64445</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDUtMTcgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgorCisgICAgICAgIENoYW5nZSBub2RlQXRQb2ludCB0byB0YWtlIEludFBvaW50IGluc3Rl
YWQgb2YgaW50IHgsIGludCB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MDY2MworCisgICAgICAgIENoYW5nZSBub2RlQXRQb2ludCB0byB0YWtlIGEg
c2luZ2xlIGNvbnN0IEludFBvaW50JiBpbnN0ZWFkIG9mIGEgcGFpciBvZgorICAgICAgICBpbnRz
IGZvciB0aGUgbG9jYXRpb24uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OmZsb29yZWRJbnRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
aGl0VGVzdENvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRnJhbWVTZXQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlu
ZUJveExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJveExpc3Q6OmhpdFRl
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlv
bjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6
Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9k
ZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgorCiAy
MDExLTA1LTE3ICBTYW0gTWFnbnVzb24gIDxzbWFnbnVzb25AbmV0ZmxpeC5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiA4NjY4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiwxMSBAQCBpbmxpbmUgSW50UG9pbnQgcm91bmRlZElu
dFBvaW50KGNvbnN0IEZsCiAgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocm91
bmRmKHAueCgpKSksIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueSgpKSkpOwogfQogCitpbmxp
bmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAg
cmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+
KHAueSgpKSk7Cit9CisKIGZsb2F0IGZpbmRTbG9wZShjb25zdCBGbG9hdFBvaW50JiBwMSwgY29u
c3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0JiBjKTsKIAogLy8gRmluZCBwb2ludCB3aGVyZSBsaW5l
cyB0aHJvdWdoIHRoZSB0d28gcGFpcnMgb2YgcG9pbnRzIGludGVyc2VjdC4gUmV0dXJucyBmYWxz
ZSBpZiB0aGUgbGluZXMgZG9uJ3QgaW50ZXJzZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEs
NyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgICAgIElu
dFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgp
KTsKIH0KIAotYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgs
IGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQorYm9vbCBFbGxpcHNpc0JveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7CiAgICAgdHggKz0gbV94OwogICAgIHR5
ICs9IG1feTsKQEAgLTExMSwxNiArMTExLDE2IEBAIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFQKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+
c3R5bGUobV9maXJzdExpbmUpOwogICAgICAgICBpbnQgbXR4ID0gdHggKyBtX2xvZ2ljYWxXaWR0
aCAtIG1fbWFya3VwQm94LT54KCk7CiAgICAgICAgIGludCBtdHkgPSB0eSArIHN0eWxlLT5mb250
TWV0cmljcygpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVu
ZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAg
ICAgICAgaWYgKG1fbWFya3VwQm94LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHks
IG10eCwgbXR5LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIo
KS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSBtdHgsIHkgLSBtdHkp
KTsKKyAgICAgICAgaWYgKG1fbWFya3VwQm94LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IHBvaW50SW5Db250YWluZXIsIG10eCwgbXR5LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5D
b250YWluZXIgLSBJbnRTaXplKG10eCwgbXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgs
IHR5LCBtX2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQpOwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQoeCwgeSkp
KSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQ
b2ludCh4IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0
QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgeCwgeSwgYm91bmRzUmVjdCkpCisg
ICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVz
dWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKKyAgICAgICAgcmVuZGVyZXIo
KS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXpl
KHR4LCB0eSkpOworICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVz
dWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250
YWluZXIueSgpLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDg2
NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5l
Qm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IGxp
bmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20p
OwogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0
ZSBzKSB7IG1fc2VsZWN0aW9uU3RhdGUgPSBzOyB9CiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0
KGludCB0eCwgaW50IHR5KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5jcHAJKHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSwxMiArMjIxLDEyIEBAIHZvaWQgSW5saW5l
Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW4KICAgICB9CiB9CiAKLWJvb2wgSW5saW5lQm94
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQgLyogbGluZVRvcCAq
LywgaW50IC8qbGluZUJvdHRvbSovKQorYm9vbCBJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVUb3Ag
Ki8sIGludCAvKmxpbmVCb3R0b20qLykKIHsKICAgICAvLyBIaXQgdGVzdCBhbGwgcGhhc2VzIG9m
IHJlcGxhY2VkIGVsZW1lbnRzIGF0b21pY2FsbHksIGFzIHRob3VnaCB0aGUgcmVwbGFjZWQgZWxl
bWVudCBlc3RhYmxpc2hlZCBpdHMKICAgICAvLyBvd24gc3RhY2tpbmcgY29udGV4dC4gIChTZWUg
QXBwZW5kaXggRS4yLCBzZWN0aW9uIDYuNCBvbiBpbmxpbmUgYmxvY2svdGFibGUgZWxlbWVudHMg
aW4gdGhlIENTUzIuMQogICAgIC8vIHNwZWNpZmljYXRpb24uKQotICAgIHJldHVybiByZW5kZXJl
cigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgSW50UG9pbnQoeCwgeSksIHR4LCB0eSk7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCB0eCwgdHkpOwogfQogCiBjb25zdCBSb290SW5saW5lQm94KiBJbmxpbmVCb3g6OnJv
b3QoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNp
b24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBp
bnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJv
dHRvbSk7CiAKICAgICBJbmxpbmVCb3gqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2
aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg5OCwxOCArODk4LDE4IEBAIHZvaWQgSW5saW5lRmxvd0Jv
eDo6c2V0T3ZlcmZsb3dGcm9tTG9naWMKICAgICBzZXRWaXN1YWxPdmVyZmxvdyh2aXN1YWxPdmVy
ZmxvdywgbGluZVRvcCwgbGluZUJvdHRvbSk7CiB9CiAKLWJvb2wgSW5saW5lRmxvd0JveDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5l
Qm90dG9tKQorYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSkKIHsKICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRv
cCwgbGluZUJvdHRvbSkpOwogICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwog
ICAgIG92ZXJmbG93UmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgaWYgKCFvdmVyZmxvd1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHgsIHkpKSkKKyAgICBpZiAoIW92ZXJmbG93UmVj
dC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBm
b3IgKElubGluZUJveCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJl
dk9uTGluZSgpKSB7Ci0gICAgICAgIGlmICgoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwg
IWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpICYmIGN1cnIt
Pm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBsaW5lVG9wLCBsaW5l
Qm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgICAgIGlmICgoY3Vyci0+cmVu
ZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lciwgdHgsIHR5LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICAgICAg
cmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIg
LSBJbnRTaXplKHR4LCB0eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICAgICB9CkBAIC05MzcsOSArOTM3LDkgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaQogICAgIGZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsKICAgICByZWN0Lm1vdmUo
dHgsIHR5KTsKIAotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNl
Y3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQoeCwgeSkpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UG9pbnQoeCAt
IHR4LCB5IC0gdHkpKSk7IC8vIERvbid0IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQg
Y29vcmRzIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgc3BhY2UuCi0gICAgICAgIGlmICghcmVz
dWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5
LCByZWN0KSkKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgeworICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBv
aW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBv
ciBtX3kgaGVyZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFj
ZS4KKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5k
ZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnko
KSwgcmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDg2NjgwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50RmlsbExheWVyKGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgSW50
UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgdm9p
ZCBwYWludEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFNoYWRvd1N0
eWxlLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0
b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4
LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKICAgICB2aXJ0dWFsIFJl
bmRlckxpbmVCb3hMaXN0KiByZW5kZXJlckxpbmVCb3hlcygpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA4NjY4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQ0LDcgKzM0NCw3IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6aXNMaW5lQnJlYWso
KSBjb25zdAogICAgIHJldHVybiByZW5kZXJlcigpLT5pc0JSKCkgfHwgKHJlbmRlcmVyKCktPnN0
eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYmIGxlbigpID09IDEgJiYgKCp0ZXh0UmVuZGVyZXIo
KS0+dGV4dCgpKVtzdGFydCgpXSA9PSAnXG4nKTsKIH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxp
bmVCb3R0b20qLykKK2Jvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVC
b3R0b20qLykKIHsKICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzUyLDkgKzM1Miw5IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGkKICAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5nRmxpcHBp
bmcoKTsKICAgICBib3hPcmlnaW4ubW92ZSh0eCwgdHkpOwogICAgIEZsb2F0UmVjdCByZWN0KGJv
eE9yaWdpbiwgSW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkpOwotICAgIGlmIChtX3RydW5jYXRp
b24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0Lmlu
dGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludCh4LCB5KSkpIHsKLSAgICAgICAgcmVuZGVyZXIo
KS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShJbnRQb2lu
dCh4IC0gdHgsIHkgLSB0eSkpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJh
c2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIHJlY3QpKQorICAgIGlmICht
X3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAm
JiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkp
IHsKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBG
b3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKSk7CisgICAg
ICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+
bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHJlY3Qp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gODY2
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGlu
ZUJvdHRvbSk7CiAKIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIoKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNp
b24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODk2LDYxICszODk2LDU3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omlz
UG9pbnRJbk92ZXJmbG93Q29udHIKICAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93
Q29udHJvbHMocmVzdWx0LCBJbnRQb2ludChfeCAtIF90eCwgX3kgLSBfdHkpKTsKIH0KIAotYm9v
bCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHks
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIGludCB0eCA9IF90eCArIHgoKTsKLSAgICBp
bnQgdHkgPSBfdHkgKyB5KCk7CisgICAgSW50U2l6ZSBsb2NhbE9mZnNldCh0eCArIHgoKSwgdHkg
KyB5KCkpOwogCiAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBp
ZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KICAgICAgICAgSW50UmVjdCBvdmVyZmxv
d0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwotICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4
LCB0eSk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dCb3guaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZv
clBvaW50KF94LCBfeSkpKQorICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKGxvY2FsT2Zmc2V0KTsK
KyAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQo
cG9pbnRJbkNvbnRhaW5lcikpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRl
c3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1BvaW50SW5PdmVy
Zmxvd0NvbnRyb2wocmVzdWx0LCBfeCwgX3ksIHR4LCB0eSkpIHsKLSAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsKKyAgICBpZiAo
KGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaXNQb2ludEluT3ZlcmZsb3dDb250
cm9sKHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWluZXIueSgpLCBs
b2NhbE9mZnNldC53aWR0aCgpLCBsb2NhbE9mZnNldC5oZWlnaHQoKSkpIHsKKyAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBsb2NhbE9mZnNldCk7
CiAgICAgICAgIC8vIEZJWE1FOiBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woKSBkb2Vzbid0IGhh
bmRsZSByZWN0LWJhc2VkIHRlc3RzIHlldC4KLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIF94LCBfeSkpCisgICAgICAgIGlmICghcmVzdWx0
LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLngo
KSwgcG9pbnRJbkNvbnRhaW5lci55KCkpKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVuIHdlIGNhbid0IGhhdmUgYW55IHNw
aWxsb3V0LgogICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
IWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAgYm9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xD
bGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKLSAgICBJbnRSZWN0IGhpdFRlc3RBcmVhKHJlc3Vs
dC5yZWN0Rm9yUG9pbnQoX3gsIF95KSk7Ci0gICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNs
aXAgfHwgKGhhc0NvbnRyb2xDbGlwKCkgPyBjb250cm9sQ2xpcFJlY3QodHgsIHR5KS5pbnRlcnNl
Y3RzKGhpdFRlc3RBcmVhKSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5LCBJbmNsdWRlT3Zlcmxh
eVNjcm9sbGJhclNpemUpLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKTsKKyAgICBJbnRSZWN0IGhp
dFRlc3RBcmVhKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpOworICAgIGJv
b2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJv
bENsaXBSZWN0KGxvY2FsT2Zmc2V0LndpZHRoKCksIGxvY2FsT2Zmc2V0LmhlaWdodCgpKS5pbnRl
cnNlY3RzKGhpdFRlc3RBcmVhKSA6IG92ZXJmbG93Q2xpcFJlY3QobG9jYWxPZmZzZXQud2lkdGgo
KSwgbG9jYWxPZmZzZXQuaGVpZ2h0KCksIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkuaW50
ZXJzZWN0cyhoaXRUZXN0QXJlYSkpOwogICAgIGlmIChjaGVja0NoaWxkcmVuKSB7CiAgICAgICAg
IC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgotICAgICAgICBpbnQgc2Nyb2xsZWRYID0g
dHg7Ci0gICAgICAgIGludCBzY3JvbGxlZFkgPSB0eTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxl
ZE9mZnNldChsb2NhbE9mZnNldCk7CiAgICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgewot
ICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZz
ZXQoKTsKLSAgICAgICAgICAgIHNjcm9sbGVkWCAtPSBvZmZzZXQud2lkdGgoKTsKLSAgICAgICAg
ICAgIHNjcm9sbGVkWSAtPSBvZmZzZXQuaGVpZ2h0KCk7CisgICAgICAgICAgICBzY3JvbGxlZE9m
ZnNldCAtPSBsYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIEhpdCB0ZXN0IGNvbnRlbnRzIGlmIHdlIGRvbid0IGhhdmUgY29sdW1ucy4KICAg
ICAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKLSAgICAgICAgICAgIGlmIChoaXRUZXN0Q29udGVu
dHMocmVxdWVzdCwgcmVzdWx0LCBfeCwgX3ksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZLCBoaXRUZXN0
QWN0aW9uKSkgewotICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSk7CisgICAgICAgICAgICBpZiAoaGl0VGVzdENvbnRl
bnRzKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWlu
ZXIueSgpLCBzY3JvbGxlZE9mZnNldC53aWR0aCgpLCBzY3JvbGxlZE9mZnNldC5oZWlnaHQoKSwg
aGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIGxvY2FsT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RGbG9hdCAmJiBoaXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJlc3VsdCwgX3gsIF95
LCBzY3JvbGxlZFgsIHNjcm9sbGVkWSkpCisgICAgICAgICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9
PSBIaXRUZXN0RmxvYXQgJiYgaGl0VGVzdEZsb2F0cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwgc2Nyb2xsZWRPZmZzZXQud2lkdGgo
KSwgc2Nyb2xsZWRPZmZzZXQuaGVpZ2h0KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9IGVsc2UgaWYgKGhpdFRlc3RDb2x1bW5zKHJlcXVlc3QsIHJlc3VsdCwgX3gs
IF95LCBzY3JvbGxlZFgsIHNjcm9sbGVkWSwgaGl0VGVzdEFjdGlvbikpIHsKLSAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSk7
CisgICAgICAgIH0gZWxzZSBpZiAoaGl0VGVzdENvbHVtbnMocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLngoKSwgcG9pbnRJbkNvbnRhaW5lci55KCksIHNjcm9sbGVkT2Zmc2V0Lndp
ZHRoKCksIHNjcm9sbGVkT2Zmc2V0LmhlaWdodCgpLCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBsb2Nh
bE9mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIC8vIE5vdyBoaXQgdGVzdCBvdXIgYmFja2dyb3VuZAogICAgIGlmIChoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hp
bGRCbG9ja0JhY2tncm91bmQpIHsKLSAgICAgICAgSW50UmVjdCBib3VuZHNSZWN0KHR4LCB0eSwg
d2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYm
IGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KF94LCBfeSkpKSB7Ci0g
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2Rl
KEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5h
ZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgX3gsIF95LCBib3VuZHNSZWN0KSkK
KyAgICAgICAgSW50UmVjdCBib3VuZHNSZWN0KGxvY2FsT2Zmc2V0LndpZHRoKCksIGxvY2FsT2Zm
c2V0LmhlaWdodCgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQo
cG9pbnRJbkNvbnRhaW5lcikpKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSBsb2NhbE9mZnNldCkp
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChu
b2RlKCksIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwgYm91bmRz
UmVjdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBA
IC00MDQ3LDcgKzQwNDMsNyBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMoY29u
c3QgCiAgICAgICAgICAgICBjaGlsZEhpdFRlc3QgPSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91
bmQ7CiAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGxhc3RDaGlsZEJveCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgIElu
dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUoY2hpbGQsIEludFBvaW50KHR4
LCB0eSksIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwotICAgICAgICAgICAgaWYg
KCFjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAm
JiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBjaGlsZFBvaW50Lngo
KSwgY2hpbGRQb2ludC55KCksIGNoaWxkSGl0VGVzdCkpCisgICAgICAgICAgICBpZiAoIWNoaWxk
LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxk
LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIEludFBvaW50KHgsIHkpLCBjaGlsZFBvaW50
LngoKSwgY2hpbGRQb2ludC55KCksIGNoaWxkSGl0VGVzdCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAkocmV2aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDcgKzI4NSw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIEVUZXh0QWxpZ24gdGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCBl
bmRzV2l0aFNvZnRCcmVhaykgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubGluZURp
cmVjdGlvbkxpbmVCb3VuZHMoaW50IC8qIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKi8sIGZs
b2F0JiAvKiBsb2dpY2FsTGVmdCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAqLykgY29uc3Qg
eyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAJKHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0MCwxNSArNzQwLDE1IEBAIGludCBS
ZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEgKIH0KIAogLy8gSGl0IFRlc3RpbmcK
LWJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24gYWN0aW9uKQogewogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKICAgICAvLyBD
aGVjayBraWRzIGZpcnN0LgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAg
aWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFjdGlvbikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOworICAg
ICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgYWN0aW9uKSkgeworICAgICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXpl
KHR4LCB0eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBA
IC03NTYsOSArNzU2LDkgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
cwogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMg
YXNzdW1lIHRoYXQgd2UgY2FuIG9ubHkgYmUgaGl0IGluIHRoZQogICAgIC8vIGZvcmVncm91bmQg
cGhhc2UgKHdoaWNoIGlzIHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4K
ICAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0
KCkpOwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RG
b3JlZ3JvdW5kICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHhQ
b3MsIHlQb3MpKSkgewotICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9p
bnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHhQb3MsIHlQb3MsIGJvdW5kc1JlY3QpKQorICAg
IGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5k
ICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250
YWluZXIpKSkgeworICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciAtIEludFNpemUodHgsIHR5KSk7CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVU
b1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLngoKSwgcG9pbnRJ
bkNvbnRhaW5lci55KCksIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA4
NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlv
dXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkp
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwg
aW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2
aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTIgKzE1OCwxMiBAQCB2b2lkIFJlbmRlckZyYW1l
U2V0OjpwYWludChQYWludEluZm8mIHBhCiB9CiAKIGJvb2wgUmVuZGVyRnJhbWVTZXQ6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsCi0gICAgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rp
b24pCisgICAgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICBpZiAoYWN0aW9uICE9IEhpdFRlc3RGb3Jl
Z3JvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGluc2lkZSA9IFJlbmRl
ckJveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbikK
KyAgICBib29sIGluc2lkZSA9IFJlbmRlckJveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGFjdGlvbikKICAgICAgICAgfHwgbV9pc1Jlc2l6
aW5nOwogCiAgICAgaWYgKGluc2lkZSAmJiBmcmFtZVNldCgpLT5ub1Jlc2l6ZSgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkocmV2aXNpb24gODY2ODAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1l
U2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwg
aW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChSZW5k
ZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDE3ICsz
OTMsMTcgQEAgSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpIAogICAgIHJl
dHVybiBpID8gaS0+dHJlZVNjb3BlKCktPmdldEltYWdlTWFwKGktPmZhc3RHZXRBdHRyaWJ1dGUo
dXNlbWFwQXR0cikpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9v
bCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgSGl0
VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQudG9wUGFkZGluZygp
LCByZXN1bHQucmlnaHRQYWRkaW5nKCksIHJlc3VsdC5ib3R0b21QYWRkaW5nKCksIHJlc3VsdC5s
ZWZ0UGFkZGluZygpKTsKLSAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQ
b2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0LCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwor
ICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHRl
bXBSZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgaGl0VGVzdEFjdGlvbik7CiAKICAg
ICBpZiAodGVtcFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlKCkpIHsKICAgICAgICAgaWYgKEhU
TUxNYXBFbGVtZW50KiBtYXAgPSBpbWFnZU1hcCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGNv
bnRlbnRCb3ggPSBjb250ZW50Qm94UmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgem9vbSA9IHN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgICAgIGludCBtYXBYID0gbHJvdW5kZigo
eCAtIHR4IC0gdGhpcy0+eCgpIC0gY29udGVudEJveC54KCkpIC8gem9vbSk7Ci0gICAgICAgICAg
ICBpbnQgbWFwWSA9IGxyb3VuZGYoKHkgLSB0eSAtIHRoaXMtPnkoKSAtIGNvbnRlbnRCb3gueSgp
KSAvIHpvb20pOworICAgICAgICAgICAgaW50IG1hcFggPSBscm91bmRmKChwb2ludEluQ29udGFp
bmVyLngoKSAtIHR4IC0gdGhpcy0+eCgpIC0gY29udGVudEJveC54KCkpIC8gem9vbSk7CisgICAg
ICAgICAgICBpbnQgbWFwWSA9IGxyb3VuZGYoKHBvaW50SW5Db250YWluZXIueSgpIC0gdHkgLSB0
aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6b29tKTsKICAgICAgICAgICAgIGlmIChtYXAt
Pm1hcE1vdXNlRXZlbnQobWFwWCwgbWFwWSwgY29udGVudEJveC5zaXplKCksIHRlbXBSZXN1bHQp
KQogICAgICAgICAgICAgICAgIHRlbXBSZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUo
KSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5o
CShyZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBpbnQgbWluaW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5
LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAK
ICAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRl
TWF4V2lkdGggPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRM
b2dpY2FsSGVpZ2h0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAkocmV2aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEyLDkgKzcxMiw5IEBAIGNv
bnN0IGNoYXIqIFJlbmRlcklubGluZTo6cmVuZGVyTmFtZSgpIGMKIH0KIAogYm9vbCBSZW5kZXJJ
bmxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBp
bnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAg
cmV0dXJuIG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0
eCwgdHksIGhpdFRlc3RBY3Rpb24pOworICAgIHJldHVybiBtX2xpbmVCb3hlcy5oaXRUZXN0KHRo
aXMsIHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWlu
ZXIueSgpLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVu
ZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDg2NjgwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNyArMTE3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzUmVsUG9zaXRp
b25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNNYXNrKCk7IH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA4
NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwMSw3ICszMDEsNyBAQCBib29sIFJlbmRlckxpbmVCb3hMaXN0
OjpoaXRUZXN0KFJlbmRlckJvCiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gbGFzdExp
bmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpIHsKICAgICAgICAgUm9v
dElubGluZUJveCogcm9vdCA9IGN1cnItPnJvb3QoKTsKICAgICAgICAgaWYgKHJhbmdlSW50ZXJz
ZWN0c1JlY3QocmVuZGVyZXIsIGN1cnItPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyhyb290LT5s
aW5lVG9wKCkpLCBjdXJyLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZUJv
dHRvbSgpKSwgcmVjdCwgdHgsIHR5KSkgewotICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJy
LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgcm9vdC0+bGluZVRv
cCgpLCByb290LT5saW5lQm90dG9tKCkpOworICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJy
LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIEludFBvaW50KHgsIHkpLCB0eCwgdHksIHJv
b3QtPmxpbmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsKICAgICAgICAgICAgIGlmIChpbnNp
ZGUpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlci0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY2LDIxICs2NjYsMjEgQEAgdm9pZCBSZW5kZXJMaXN0
Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ldwogICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lP
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4KTsKIH0KIAotYm9vbCBSZW5kZXJMaXN0Qm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCitib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQogewotICAgIGlmICghUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3Vs
dCwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAoIVJlbmRlckJsb2NrOjpu
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgaGl0
VGVzdEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBsaXN0SXRlbXMgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUoKSkpLT5saXN0SXRlbXMoKTsKICAgICBpbnQgc2l6ZSA9IG51bUl0ZW1zKCk7CiAgICAg
dHggKz0gdGhpcy0+eCgpOwogICAgIHR5ICs9IHRoaXMtPnkoKTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVjdCh0eCwg
dHksIGkpLmNvbnRhaW5zKHgsIHkpKSB7CisgICAgICAgIGlmIChpdGVtQm91bmRpbmdCb3hSZWN0
KHR4LCB0eSwgaSkuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lcikpIHsKICAgICAgICAgICAgIGlm
IChFbGVtZW50KiBub2RlID0gbGlzdEl0ZW1zW2ldKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0
LnNldElubmVyTm9kZShub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9uU2hh
cmVkTm9kZShub2RlKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChJbnRQ
b2ludCh4IC0gdHgsIHkgLSB0eSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBv
aW50KHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQg
eSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwog
CiAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgaW50IHNjcm9s
bFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDg2NjgwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMzIsMjUgKzIxMzIsMjUgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0ZURyYWdT
dGF0ZShib29sIAogICAgICAgICBjdXJyLT51cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKIH0KIAot
Ym9vbCBSZW5kZXJPYmplY3Q6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKQorYm9vbCBSZW5kZXJPYmplY3Q6Omhp
dFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRU
ZXN0RmlsdGVyIGhpdFRlc3RGaWx0ZXIpCiB7CiAgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKICAg
ICBpZiAoaGl0VGVzdEZpbHRlciAhPSBIaXRUZXN0U2VsZikgewogICAgICAgICAvLyBGaXJzdCB0
ZXN0IHRoZSBmb3JlZ3JvdW5kIGxheWVyIChsaW5lcyBhbmQgaW5saW5lcykuCi0gICAgICAgIGlu
c2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnQueCgpLCBwb2ludC55KCks
IHR4LCB0eSwgSGl0VGVzdEZvcmVncm91bmQpOworICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgSGl0VGVzdEZvcmVn
cm91bmQpOwogCiAgICAgICAgIC8vIFRlc3QgZmxvYXRzIG5leHQuCiAgICAgICAgIGlmICghaW5z
aWRlKQotICAgICAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBw
b2ludC54KCksIHBvaW50LnkoKSwgdHgsIHR5LCBIaXRUZXN0RmxvYXQpOworICAgICAgICAgICAg
aW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0
eCwgdHksIEhpdFRlc3RGbG9hdCk7CiAKICAgICAgICAgLy8gRmluYWxseSB0ZXN0IHRvIHNlZSBp
ZiB0aGUgbW91c2UgaXMgaW4gdGhlIGJhY2tncm91bmQgKHdpdGhpbiBhIGNoaWxkIGJsb2NrJ3Mg
YmFja2dyb3VuZCkuCiAgICAgICAgIGlmICghaW5zaWRlKQotICAgICAgICAgICAgaW5zaWRlID0g
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludC54KCksIHBvaW50LnkoKSwgdHgsIHR5
LCBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmRzKTsKKyAgICAgICAgICAgIGluc2lkZSA9IG5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBIaXRU
ZXN0Q2hpbGRCbG9ja0JhY2tncm91bmRzKTsKICAgICB9CiAKICAgICAvLyBTZWUgaWYgdGhlIG1v
dXNlIGlzIGluc2lkZSB1cyBidXQgbm90IGFueSBvZiBvdXIgZGVzY2VuZGFudHMKICAgICBpZiAo
aGl0VGVzdEZpbHRlciAhPSBIaXRUZXN0RGVzY2VuZGFudHMgJiYgIWluc2lkZSkKLSAgICAgICAg
aW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludC54KCksIHBvaW50Lnko
KSwgdHgsIHR5LCBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kKTsKKyAgICAgICAgaW5zaWRlID0gbm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIEhpdFRl
c3RCbG9ja0JhY2tncm91bmQpOwogCiAgICAgcmV0dXJuIGluc2lkZTsKIH0KQEAgLTIxNjksNyAr
MjE2OSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KEgKICAgICB9
CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgLyp4Ki8sIGludCAvKnkqLywgaW50IC8qdHgqLywgaW50
IC8qdHkqLywgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgLypw
b2ludEluQ29udGFpbmVyKi8sIGludCAvKnR4Ki8sIGludCAvKnR5Ki8sIEhpdFRlc3RBY3Rpb24p
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAkocmV2aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0Niw3ICs1NDYsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0Rmls
dGVyID0gSGl0VGVzdEFsbCk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYpOwog
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNp
b24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTk4LDE4ICsxMTk4LDE4IEBAIEludFJlY3QgUmVuZGVyVGFibGU6
Om92ZXJmbG93Q2xpcFJlY3QoaW4KICAgICByZXR1cm4gcmVjdDsKIH0KIAotYm9vbCBSZW5kZXJU
YWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQogewogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKICAgICAvLyBDaGVjayBraWRz
IGZpcnN0LgotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0
eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludCh4UG9zLCB5UG9zKSkpIHsKKyAg
ICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3go
KSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGls
ZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pKSB7CiAgICAgICAgICAg
ICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJv
eChjaGlsZCksIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1l
bnQpOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCB4UG9zLCB5UG9zLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCksIGFjdGlvbikp
IHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBv
aW50KHhQb3MgLSBjaGlsZFBvaW50LngoKSwgeVBvcyAtIGNoaWxkUG9pbnQueSgpKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSwgYWN0aW9uKSkgewor
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9Qb2ludChw
b2ludEluQ29udGFpbmVyIC0gY2hpbGRQb2ludCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMjE4LDkgKzEy
MTgsOSBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAKICAgICAv
LyBDaGVjayBvdXIgYm91bmRzIG5leHQuCiAgICAgSW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVj
dCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGlu
ZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0
VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0
LnJlY3RGb3JQb2ludCh4UG9zLCB5UG9zKSkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0
eSkpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChu
b2RlKCksIHhQb3MsIHlQb3MsIGJvdW5kc1JlY3QpKQorICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBI
aXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1
bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgeworICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSBJ
bnRTaXplKHR4LCB0eSkpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2Vk
VGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVy
LnkoKSwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiA4NjY4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjAsNyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNr
KFBhaW50SW5mbyYsIEludFNpemUpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKLSAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQm94QmFzZWxp
bmUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Um93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuY3BwCShyZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBJbnRS
ZWN0IFJlbmRlclRhYmxlUm93OjpjbGlwcGVkT3ZlcmZsb3dSCiB9CiAKIC8vIEhpdCBUZXN0aW5n
Ci1ib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgLy8gVGFibGUgcm93cyBjYW5ub3QgZXZlciBiZSBoaXQg
dGVzdGVkLiAgRWZmZWN0aXZlbHkgdGhleSBkbyBub3QgZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3
YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMuCkBAIC0xOTgsOCArMTk4LDggQEAgYm9vbCBSZW5k
ZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSAogICAgICAgICAvLyB0aGVuIHdlIGNhbiBy
ZW1vdmUgdGhpcyBjaGVjay4KICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpICYmICF0
b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgICAg
IEludFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlclRhYmxlQ2Vs
bChjaGlsZCksIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1l
bnQpOwotICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IHgsIHksIGNlbGxQb2ludC54KCksIGNlbGxQb2ludC55KCksIGFjdGlvbikpIHsKLSAgICAgICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIGNlbGxQb2lu
dC54KCksIHkgLSBjZWxsUG9pbnQueSgpKSk7CisgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LngoKSwg
Y2VsbFBvaW50LnkoKSwgYWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZShjZWxsUG9pbnQueCgpLCBj
ZWxsUG9pbnQueSgpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVJvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVJvdy5oCShyZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmly
dHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICAgICAv
LyBUaGUgb25seSB0aW1lIHJvd3MgZ2V0IGEgbGF5ZXIgaXMgd2hlbiB0aGV5IGhhdmUgdHJhbnNw
YXJlbmN5LgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4g
aXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8
IGhhc01hc2soKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDIsNyAr
MTE0Miw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbihpbnQKIH0KIAog
Ly8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeFBv
cywgaW50IHlQb3MsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wg
UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIC8vIElm
IHdlIGhhdmUgbm8gY2hpbGRyZW4gdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYg
KCFmaXJzdENoaWxkKCkpCkBAIC0xMTUzLDcgKzExNTMsNyBAQCBib29sIFJlbmRlclRhYmxlU2Vj
dGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgdHggKz0geCgpOwogICAgIHR5ICs9IHkoKTsKIAot
ICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmlu
dGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludCh4UG9zLCB5UG9zKSkpCisgICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1
bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKG1faGFzT3ZlcmZsb3dpbmdDZWxsKSB7CkBAIC0xMTY0LDggKzExNjQsOCBA
QCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAgICAgICAv
LyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KICAgICAgICAgICAgIGlmIChjaGlsZC0+
aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7
CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9k
ZSh0b1JlbmRlckJveChjaGlsZCksIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hpbGRGbGlw
cGluZ0FkanVzdG1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55
KCksIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIEludFBvaW50KHhQb3MgLSBjaGlsZFBvaW50LngoKSwgeVBvcyAtIGNoaWxkUG9pbnQu
eSgpKSk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBvaW50LnkoKSwg
YWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgdG9Qb2ludChwb2ludEluQ29udGFpbmVyIC0gY2hpbGRQb2ludCkpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC0xMTczLDcgKzExNzMsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQo
Y29uCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBJbnRQb2ludCBsb2NhdGlv
biA9IEludFBvaW50KHhQb3MgLSB0eCwgeVBvcyAtIHR5KTsKKyAgICBJbnRQb2ludCBsb2NhdGlv
biA9IHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSk7CiAgICAgaWYgKHN0eWxlKCkt
PmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBsb2NhdGlvbi5zZXRZKGhlaWdo
dCgpIC0gbG9jYXRpb24ueSgpKTsKQEAgLTEyMDgsOCArMTIwOCw4IEBAIGJvb2wgUmVuZGVyVGFi
bGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KICAgICBmb3IgKGludCBpID0gY3VycmVudC5jZWxs
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNl
bGwgPSBjdXJyZW50LmNlbGxzW2ldOwogICAgICAgICBJbnRQb2ludCBjZWxsUG9pbnQgPSBmbGlw
Rm9yV3JpdGluZ01vZGUoY2VsbCwgSW50UG9pbnQodHgsIHR5KSwgUGFyZW50VG9DaGlsZEZsaXBw
aW5nQWRqdXN0bWVudCk7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihj
ZWxsKS0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCBjZWxsUG9pbnQu
eCgpLCBjZWxsUG9pbnQueSgpLCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIGNlbGxQb2ludC54KCksIHlQb3MgLSBjZWxs
UG9pbnQueSgpKSk7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihjZWxs
KS0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9p
bnQueCgpLCBjZWxsUG9pbnQueSgpLCBhY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgdG9Qb2ludChwb2ludEluQ29udGFpbmVyIC0gY2VsbFBvaW50KSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDg2
NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
dm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwog
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgYm9vbCBlbnN1cmVSb3dzKGludCk7CiAgICAg
dm9pZCBjbGVhckdyaWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAkocmV2aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQsIGludCkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIEludFBvaW50LCBp
bnQsIGludCwgSGl0VGVzdEFjdGlvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICB2b2lkIGRlbGV0ZVRleHRCb3hlcygpOwogICAgIGJvb2wgY29udGFpbnNP
bmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwCShyZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEz
ICs1NywxMyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpzdWJ0cmVlCiAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dERpZENoYW5nZUluVGV4dEFyZWEodGV4dEFyZWEpOwog
fQogCi1ib29sIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50
IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
IHsKLSAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHgsIHksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJUZXh0Q29u
dHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwg
dHksIGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocmVz
dWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSB8fCByZXN1bHQuaW5uZXJOb2RlKCkgPT0gaW5uZXJU
ZXh0RWxlbWVudCgpKQotICAgICAgICBoaXRJbm5lclRleHRFbGVtZW50KHJlc3VsdCwgeCwgeSwg
dHgsIHR5KTsKKyAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHBvaW50SW5Db250
YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwgdHgsIHR5KTsKIAogICAgIHJldHVybiB0
cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmgJKHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFz
Q2hhbmdlZCgpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBmbG9hdCBn
ZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7CiAgICAgdmlydHVhbCBpbnQgcHJl
ZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAkocmV2aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMz
Myw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKICAgICB9CiB9
CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeFBvcywg
aW50IHlQb3MsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCiB7CiAgICAgLy8gSWYgd2UncmUgd2l0aGluIHRoZSB0ZXh0IGNvbnRyb2wsIHdlIHdh
bnQgdG8gYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgaW5uZXIgdGV4dCBibG9jayBlbGVtZW50LCBp
biBjYXNlIHRoZSBwb2ludAogICAgIC8vIHdhcyBvbiB0aGUgY29udHJvbCBidXQgbm90IG9uIHRo
ZSBpbm5lciBlbGVtZW50IChzZWUgUmFkYXIgNDYxNzg0MSkuCkBAIC0zNDEsMTQgKzM0MSwxNCBA
QCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0CiAgICAgLy8gSW4gYSBz
ZWFyY2ggZmllbGQsIHdlIHdhbnQgdG8gYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgcmVzdWx0cyBi
bG9jayBpZiB3ZSdyZSB0byB0aGUgbGVmdCBvZiB0aGUgaW5uZXIgdGV4dCBibG9jaywKICAgICAv
LyBhbmQgYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgY2xvc2UgYmxvY2sgaWYgd2UncmUgdG8gdGhl
IHJpZ2h0IG9mIHRoZSBpbm5lciB0ZXh0IGJsb2NrLgogCi0gICAgaWYgKCFSZW5kZXJUZXh0Q29u
dHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGhp
dFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gSWYgd2UgaGl0IGEgbm9kZSBpbnNpZGUg
dGhlIGlubmVyIHRleHQgZWxlbWVudCwgc2F5IHRoYXQgd2UgaGl0IHRoYXQgZWxlbWVudCwKICAg
ICAvLyBhbmQgaWYgd2UgaGl0IG91ciBub2RlIChlLmcuIHdlJ3JlIG92ZXIgdGhlIGJvcmRlciBv
ciBwYWRkaW5nKSwgYWxzbyBzYXkgdGhhdCB3ZSBoaXQgdGhlCiAgICAgLy8gaW5uZXIgdGV4dCBl
bGVtZW50IHNvIHRoYXQgaXQgZ2FpbnMgZm9jdXMuCiAgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUo
KS0+aXNEZXNjZW5kYW50T2YoaW5uZXJUZXh0RWxlbWVudCgpKSB8fCByZXN1bHQuaW5uZXJOb2Rl
KCkgPT0gbm9kZSgpKQotICAgICAgICBoaXRJbm5lclRleHRFbGVtZW50KHJlc3VsdCwgeFBvcywg
eVBvcywgdHgsIHR5KTsKKyAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHBvaW50
SW5Db250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSwgdHgsIHR5KTsKIAogICAgIC8v
IElmIHdlIGZvdW5kIGEgc3BpbiBidXR0b24sIHdlJ3JlIGRvbmUuCiAgICAgaWYgKG1faW5uZXJT
cGluQnV0dG9uICYmIHJlc3VsdC5pbm5lck5vZGUoKSA9PSBtX2lubmVyU3BpbkJ1dHRvbikKQEAg
LTM3MSwyMCArMzcxLDIwIEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2Rl
QXQKICAgICBsb2NhbFBvaW50Lm1vdmUoLWlubmVyQmxvY2tSZW5kZXJlci0+eCgpLCAtaW5uZXJC
bG9ja1JlbmRlcmVyLT55KCkpOwogCiAgICAgaW50IHRleHRMZWZ0ID0gdHggKyB4KCkgKyBpbm5l
ckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVyVGV4dFJlbmRlcmVyLT54KCk7Ci0gICAgaWYgKG1f
cmVzdWx0c0J1dHRvbiAmJiBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCkgJiYgeFBvcyA8IHRl
eHRMZWZ0KQorICAgIGlmIChtX3Jlc3VsdHNCdXR0b24gJiYgbV9yZXN1bHRzQnV0dG9uLT5yZW5k
ZXJlcigpICYmIHBvaW50SW5Db250YWluZXIueCgpIDwgdGV4dExlZnQpCiAgICAgICAgIGlubmVy
Tm9kZSA9IG1fcmVzdWx0c0J1dHRvbi5nZXQoKTsKIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gp
CiAgICAgaWYgKCFpbm5lck5vZGUgJiYgbV9zcGVlY2hCdXR0b24gJiYgbV9zcGVlY2hCdXR0b24t
PnJlbmRlcmVyKCkpIHsKICAgICAgICAgaW50IGJ1dHRvbkxlZnQgPSB0eCArIHgoKSArIGlubmVy
QmxvY2tSZW5kZXJlci0+eCgpICsgaW5uZXJCbG9ja1JlbmRlcmVyLT53aWR0aCgpIC0gbV9zcGVl
Y2hCdXR0b24tPnJlbmRlckJveCgpLT53aWR0aCgpOwotICAgICAgICBpZiAoeFBvcyA+PSBidXR0
b25MZWZ0KQorICAgICAgICBpZiAocG9pbnRJbkNvbnRhaW5lci54KCkgPj0gYnV0dG9uTGVmdCkK
ICAgICAgICAgICAgIGlubmVyTm9kZSA9IG1fc3BlZWNoQnV0dG9uLmdldCgpOwogICAgIH0KICNl
bmRpZgogCiAgICAgaWYgKCFpbm5lck5vZGUpIHsKICAgICAgICAgaW50IHRleHRSaWdodCA9IHRl
eHRMZWZ0ICsgaW5uZXJUZXh0UmVuZGVyZXItPndpZHRoKCk7Ci0gICAgICAgIGlmIChtX2NhbmNl
bEJ1dHRvbiAmJiBtX2NhbmNlbEJ1dHRvbi0+cmVuZGVyZXIoKSAmJiB4UG9zID4gdGV4dFJpZ2h0
KQorICAgICAgICBpZiAobV9jYW5jZWxCdXR0b24gJiYgbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVy
KCkgJiYgcG9pbnRJbkNvbnRhaW5lci54KCkgPiB0ZXh0UmlnaHQpCiAgICAgICAgICAgICBpbm5l
ck5vZGUgPSBtX2NhbmNlbEJ1dHRvbi5nZXQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJ
KHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYs
IGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gODY2ODAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzkxLDEwICszOTEsMTAgQEAgUmVuZGVyV2lkZ2V0KiBSZW5kZXJXaWRnZXQ6OmZp
bmQoY29uc3QgVwogICAgIHJldHVybiB3aWRnZXRSZW5kZXJlck1hcCgpLmdldCh3aWRnZXQpOwog
fQogCi1ib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uIGFjdGlvbikKIHsKICAgICBib29sIGhhZFJlc3VsdCA9IHJlc3VsdC5pbm5lck5vZGUo
KTsKLSAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKTsKKyAgICBib29sIGluc2lkZSA9IFJlbmRl
clJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IHR4LCB0eSwgYWN0aW9uKTsKICAgICAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHJl
YWxseSBvdmVyIHRoZSB3aWRnZXQgaXRzZWxmIChhbmQgbm90IGp1c3QgaW4gdGhlIGJvcmRlci9w
YWRkaW5nIGFyZWEpLgogICAgIGlmICgoaW5zaWRlIHx8IHJlc3VsdC5pc1JlY3RCYXNlZFRlc3Qo
KSkgJiYgIWhhZFJlc3VsdCAmJiByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAkocmV2aXNpb24gODY2ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0
eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHNldE92ZXJsYXBUZXN0UmVzdWx0
KGJvb2wpOwogCiAgICAgYm9vbCBzZXRXaWRnZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50U2l6ZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAkocmV2aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxNSArMTg5LDE1IEBAIHZvaWQg
Um9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICNlbmRpZgogfQogCi1ib29sIFJv
b3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKK2Jvb2wgUm9vdElubGluZUJveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRv
cCwgaW50IGxpbmVCb3R0b20pCiB7CiAgICAgaWYgKGhhc0VsbGlwc2lzQm94KCkgJiYgdmlzaWJs
ZVRvSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChlbGxpcHNpc0JveCgpLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsK
LSAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQ
b2ludCh4IC0gdHgsIHkgLSB0eSkpOworICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGxpbmVUb3As
IGxpbmVCb3R0b20pKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gSW5saW5lRmxv
d0JveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGxpbmVUb3As
IGxpbmVCb3R0b20pOworICAgIHJldHVybiBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgbGluZVRvcCwgbGluZUJvdHRv
bSk7CiB9CiAKIHZvaWQgUm9vdElubGluZUJveDo6YWRqdXN0UG9zaXRpb24oZmxvYXQgZHgsIGZs
b2F0IGR5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCShy
ZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIGludCBsaW5l
VG9wLCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBp
bnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGlu
dCBsaW5lQm90dG9tKTsKIAogICAgIGJvb2wgaGFzU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0IHsg
cmV0dXJuIG1faGFzU2VsZWN0ZWRDaGlsZHJlbk9yQ2FuSGF2ZUxlYWRpbmdFeHBhbnNpb247IH0K
ICAgICB2b2lkIHNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVu
KSB7IG1faGFzU2VsZWN0ZWRDaGlsZHJlbk9yQ2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24gPSBoYXNT
ZWxlY3RlZENoaWxkcmVuOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDg2NjgwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDEwICsxNDksMTAgQEAgYm9vbCBSZW5kZXJTVkdGb3Jl
aWduT2JqZWN0Ojpub2RlQXRGbG9hdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRQ
b2ludCByb3VuZGVkTG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KTsKLSAg
ICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcm91bmRl
ZExvY2FsUG9pbnQueCgpLCByb3VuZGVkTG9jYWxQb2ludC55KCksIDAsIDAsIGhpdFRlc3RBY3Rp
b24pOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCByb3VuZGVkTG9jYWxQb2ludCwgMCwgMCwgaGl0VGVzdEFjdGlvbik7CiB9CiAKLWJvb2wgUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBS
ZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGludCwgaW50LCBIaXRUZXN0QWN0aW9u
KQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWln
bk9iamVjdC5oCShyZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb3JlaWduT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWlu
ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBi
b29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNw
cAkocmV2aXNpb24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHZv
aWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21FbGUKICAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50VXBkYXRlZEZyb21FbGVtZW50KHRoaXMsIHN0eWxlKCkpOwogfQogCi1ib29s
IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pCitib29s
IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGludCwgaW50LCBIaXRUZXN0QWN0aW9u
KQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2Jq
ZWN0LmgJKHJldmlzaW9uIDg2NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2Fs
bGVkLCBTVkcgdXNlcyBhIGRpZmZlcmVudCBub2RlQXRQb2ludCBtZXRob2QKLSAgICBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4SW5D
b250YWluZXIsIGludCB5SW5Db250YWluZXIsIGludCBkeFBhcmVudFRvQ29udGFpbmVyLCBpbnQg
ZHlQYXJlbnRUb0NvbnRhaW5lciwgSGl0VGVzdEFjdGlvbik7CisgICAgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IGR4UGFyZW50VG9Db250YWluZXIsIGludCBkeVBhcmVudFRv
Q29udGFpbmVyLCBIaXRUZXN0QWN0aW9uKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gODY2ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTUsOSArMzE1LDggQEAgdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVDYWNo
ZWRCb3VuZGFyaQogICAgIG1fcmVwYWludEJvdW5kaW5nQm94LmluZmxhdGUoYm9yZGVyQW5kUGFk
ZGluZ1dpZHRoKCkpOwogfQogCi1ib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBp
bnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wg
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgSW50
UG9pbnQgcG9pbnRJbkNvbnRhaW5lcih4LCB5KTsKICAgICBJbnRTaXplIGNvbnRhaW5lclRvUGFy
ZW50T2Zmc2V0KHR4LCB0eSk7CiAKICAgICBJbnRQb2ludCBwb2ludEluUGFyZW50ID0gcG9pbnRJ
bkNvbnRhaW5lciAtIGNvbnRhaW5lclRvUGFyZW50T2Zmc2V0OwpAQCAtMzM1LDcgKzMzNCw3IEBA
IGJvb2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICAgICAgICAgIC8v
IEZJWE1FOiBDU1MvSFRNTCBhc3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyByZWxhdGl2ZSB0byB0
aGUgYm9yZGVyIGJveCwgcmlnaHQ/CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkJvcmRlckJveCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogbm9kZUF0Rmxv
YXRQb2ludCgpIGRvZXNuJ3QgaGFuZGxlIHJlY3QtYmFzZWQgaGl0IHRlc3RzIHlldC4KLSAgICAg
ICAgICAgIHJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KGNoaWxkLT5ub2RlKCks
IHgsIHkpOworICAgICAgICAgICAgcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQo
Y2hpbGQtPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lci54KCksIHBvaW50SW5Db250YWluZXIueSgp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDg2
NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdC
b3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwogICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNp
b24gODY2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTQgKzE5NCwxNCBAQCBib29sIFJlbmRlclNWR1Rl
eHQ6Om5vZGVBdEZsb2F0UG9pbnQoY29uCiAgICAgICAgICAgICBpZiAoIVNWR1JlbmRlclN1cHBv
cnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAgICAgICAKIAotICAgICAgICAgICAgcmV0dXJuIFJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIChpbnQpbG9jYWxQb2ludC54KCksIChpbnQp
bG9jYWxQb2ludC55KCksIDAsIDAsIGhpdFRlc3RBY3Rpb24pOworICAgICAgICAgICAgcmV0dXJu
IFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGZsb29yZWRJbnRQb2lu
dChsb2NhbFBvaW50KSwgMCwgMCwgaGl0VGVzdEFjdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50
LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGludCwgaW50
LCBIaXRUZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5oCShyZXZpc2lvbiA4NjY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHks
IEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBv
c2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>