<?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>83992</bug_id>
          
          <creation_ts>2012-04-14 20:07:57 -0700</creation_ts>
          <short_desc>DFG should have out-of-line slow paths</short_desc>
          <delta_ts>2012-05-18 13:43:31 -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>JavaScriptCore</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>
          <dependson>83987</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>602725</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-14 20:07:57 -0700</bug_when>
    <thetext>This is a work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602726</commentid>
    <comment_count>1</comment_count>
      <attachid>137227</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-14 20:13:43 -0700</bug_when>
    <thetext>Created attachment 137227
it sort of compiles

Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602729</commentid>
    <comment_count>2</comment_count>
      <attachid>137228</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-14 20:16:36 -0700</bug_when>
    <thetext>Created attachment 137228
defoobared the changelog

had to convince emacs to not make random unnecessary and incorrect changes to the charset of the ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602744</commentid>
    <comment_count>3</comment_count>
      <attachid>137231</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-15 01:37:04 -0700</bug_when>
    <thetext>Created attachment 137231
it works but not on 32-bit

sub 1% speed-ups.  yay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602745</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-15 01:39:05 -0700</bug_when>
    <thetext>Attachment 137231 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h:64:  The parameter name &quot;jit&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602746</commentid>
    <comment_count>5</comment_count>
      <attachid>137231</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-15 01:41:32 -0700</bug_when>
    <thetext>Comment on attachment 137231
it works but not on 32-bit

Attachment 137231 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12405650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602747</commentid>
    <comment_count>6</comment_count>
      <attachid>137231</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-15 01:43:03 -0700</bug_when>
    <thetext>Comment on attachment 137231
it works but not on 32-bit

Attachment 137231 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12408543</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602748</commentid>
    <comment_count>7</comment_count>
      <attachid>137231</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-15 01:51:24 -0700</bug_when>
    <thetext>Comment on attachment 137231
it works but not on 32-bit

Attachment 137231 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12406581</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602794</commentid>
    <comment_count>8</comment_count>
      <attachid>137250</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-15 14:50:04 -0700</bug_when>
    <thetext>Created attachment 137250
I think it works

It appears to work, but I still have a bunch more tests to run to be sure.  I will mark r? when https://bugs.webkit.org/show_bug.cgi?id=83987 is resolved and when I finish doing the due diligence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602797</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-15 14:53:36 -0700</bug_when>
    <thetext>Attachment 137250 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h:64:  The parameter name &quot;jit&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602798</commentid>
    <comment_count>10</comment_count>
      <attachid>137250</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-15 15:25:08 -0700</bug_when>
    <thetext>Comment on attachment 137250
I think it works

Attachment 137250 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12412034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602834</commentid>
    <comment_count>11</comment_count>
      <attachid>137259</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-15 18:11:31 -0700</bug_when>
    <thetext>Created attachment 137259
fixing style/build errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603558</commentid>
    <comment_count>12</comment_count>
      <attachid>137428</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-16 16:35:46 -0700</bug_when>
    <thetext>Created attachment 137428
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603577</commentid>
    <comment_count>13</comment_count>
      <attachid>137428</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-04-16 16:58:23 -0700</bug_when>
    <thetext>Comment on attachment 137428
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGSilentRegisterSavePlan.h:79
&gt; +    SilentRegisterSavePlan(SilentSpillAction spillAction,

die emacs die</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603629</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-16 17:46:17 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 137428 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=137428&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSilentRegisterSavePlan.h:79
&gt; &gt; +    SilentRegisterSavePlan(SilentSpillAction spillAction,
&gt; 
&gt; die emacs die

the emacs the?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604517</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-17 17:34:34 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/114472</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605043</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-18 13:37:54 -0700</bug_when>
    <thetext>Build fix in http://trac.webkit.org/changeset/114553</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628023</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-18 13:43:31 -0700</bug_when>
    <thetext>Marged (with build fix) in http://trac.webkit.org/changeset/117620</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137227</attachid>
            <date>2012-04-14 20:13:43 -0700</date>
            <delta_ts>2012-04-14 20:16:36 -0700</delta_ts>
            <desc>it sort of compiles</desc>
            <filename>slowpaths_patch_1.diff</filename>
            <type>text/plain</type>
            <size>120386</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0MjA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxMi0wNC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBvdXQtb2YtbGluZSBzbG93IHBhdGhzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4K
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKFN0cnVjdHVy
ZVN0dWJJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wZXJ0eUFjY2Vzc1JlY29yZDo6UHJvcGVydHlBY2Nlc3NSZWNvcmQpOgorICAgICAgICAoUHJv
cGVydHlBY2Nlc3NSZWNvcmQpOgorICAgICAgICAoSklUQ29tcGlsZXIpOgorICAgICAgICAqIGRm
Zy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW46OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4pOgorICAgICAgICAoSlND
OjpERkc6OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW46OnNwaWxsQWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuOjpmaWxsQWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuOjpub2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW46Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbjo6ZnByKToKKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoU2xvd1BhdGhHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpTbG93UGF0aEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6On5TbG93UGF0
aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVy
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6bGFiZWwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpjYWxsKToKKyAgICAgICAgKEp1bXBp
bmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6SnVtcGluZ1Nsb3dQYXRo
R2VuZXJhdG9yOjpKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6
Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6bGlua0Zyb20pOgorICAgICAgICAoSlNDOjpERkc6
Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6anVtcFRvKToKKyAgICAgICAgKENhbGxTbG93UGF0
aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjpD
YWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdl
bmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9y
OjpzZXRVcCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjpyZWNv
cmRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsU2xvd1BhdGhHZW5lcmF0b3I6OnRlYXJE
b3duKToKKyAgICAgICAgKENhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvcjo6Q2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9y
OjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKENhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNs
b3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kT25lQXJn
dW1lbnRTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZE9uZUFyZ3VtZW50U2xvd1BhdGhH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNs
b3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKENhbGxSZXN1bHRB
bmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2Fs
bFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kVHdv
QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1
bHRBbmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6Cisg
ICAgICAgIChDYWxsUmVzdWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5l
cmF0b3I6OkNhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVy
YXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kRm91ckFyZ3Vt
ZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5k
Rm91ckFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kRm91ckFyZ3VtZW50
c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kRm91
ckFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAg
KENhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpERkc6OkNhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OkNh
bGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpERkc6OkNhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVy
YXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OnNsb3dQYXRoQ2FsbCk6CisgICAgICAg
IChBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6QXNzaWdu
aW5nU2xvd1BhdGhHZW5lcmF0b3I6OkFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhNb3ZlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpT
cGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjp+U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBS
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwaWNrQ2FuVHJhbXBsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChWYWx1ZVRvTnVt
YmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlVG9OdW1iZXJT
bG93UGF0aEdlbmVyYXRvcjo6VmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50
ZXJuYWwpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChDb21wYXJlQW5kQm94Qm9v
bGVhblNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94
Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMi0wNC0xMyAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjExNDE4NS4KQEAgLTIxNyw3ICszMjIsNyBAQAogICAgICAgICAqIGppdC9K
SVQuaDoKICAgICAgICAgKEpJVCk6CiAKLTIwMTItMDQtMTIgIENzYWJhIE9zenRyb2dvbsOhYyAg
PG9zc3lAd2Via2l0Lm9yZz4KKzIwMTItMDQtMTIgIENzYWJhIE9zenRyb2dvbsODwqFjICA8b3Nz
eUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bQVJNXSBCdWlsZGZpeCBhZnRlciByMTEzOTM0
LgogCkBAIC0xNjE1LDcgKzE3MjAsNyBAQAogICAgICAgICBTcGxpdCB1cCB0b3AtbGV2ZWwgLmdp
dGlnbm9yZSBhbmQgLmdpdGF0dHJpYnV0ZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgyNjg3CiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUg
VmVzdGLDuC4KKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDg8K4LgogCiAgICAg
ICAgICogSmF2YVNjcmlwdENvcmUuZ3lwLy5naXRpZ25vcmU6IEFkZGVkLgogCkBAIC0zMTEzLDcg
KzMyMTgsNyBAQAogICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvclBvc2l4LmNwcDoKICAgICAgICAg
KFdURjo6T1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQpOgogCi0yMDEyLTAzLTIwICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisyMDEyLTAzLTIwICBDc2FiYSBPc3p0
cm9nb27Dg8KhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBEaXZpc2lvbiBvcHRpbWl6
YXRpb25zIGZhaWwgdG8gaW5mZXIgY2FzZXMgb2YgdHJ1bmNhdGVkIGRpdmlzaW9uIGFuZCBtaXNo
YW5kbGUgLTIxNDc0ODM2NDgvLTEKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgxNDI4CkBAIC0zNDU1LDcgKzM1NjAsNyBAQAogICAgICAgICB0byB3YWxr
IHRoZSBhcGkgY2xhc3MgaGllcmFyY2h5LCBidXQgbWFraW5nIHRoZSBmYWxsYmFjayB0byBkZWZh
dWx0VmFsdWUgd291bGQgYmUgcHJvYmxlbWF0aWMKICAgICAgICAgKHNpbmNlIGRlZmF1bHRWYWx1
ZSBjYWxscyB0b1N0cmluZ0NhbGxiYWNrL3ZhbHVlT2ZDYWxsYmFjaywgdGhpcyB3b3VsZCBpbmZp
bml0ZWx5IHJlY3Vyc2UpLgogICAgICAgICBNYWtpbmcgdGhlIGZhbGxiYWNrIHdvcmsgd2l0aCB0
b1N0cmluZy92YWx1ZU9mIG1ldGhvZHMgYXR0YWNoZWQgdG8gYXBpIG9iamVjdHMgaXMgcHJvYmFi
bHkKLSAgICAgICAgbm90IHRoZSByaWdodCB0aGluZyB0byBkbyDigJMgaW5zdGVhZCwgd2Ugc2hv
dWxkIGp1c3QgaW1wbGVtZW50IHRoZSBkZWZhdWx0VmFsdWUgdHJhcCBmb3IgYXBpCisgICAgICAg
IG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gw6LCgMKTIGluc3RlYWQsIHdlIHNob3VsZCBqdXN0
IGltcGxlbWVudCB0aGUgZGVmYXVsdFZhbHVlIHRyYXAgZm9yIGFwaQogICAgICAgICBvYmplY3Rz
LgogCiAgICAgICAgIEluIGFkZGl0aW9uLCB0aGlzIGJ1ZyBoaWdobGlnaHRzIHRoYXQgZmFjdCB0
aGF0IEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbCB3aWxsIGFsbG93IGEgaGFyZApAQCAtNTU0Nyw3
ICs1NjUyLDcgQEAKIAogICAgICAgICBbUXRdW0FSTV0gU3BlY3VsYXRpdmUgYnVpbGRmaXggYWZ0
ZXIgcjEwOTgzNC4KIAotICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCisg
ICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsODwqFjLgogCiAgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmg6CiAgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNOjphbmQzMik6CkBAIC02MjE1LDcgKzYzMjAsNyBAQAogCiAgICAgICAgIHB1dEJ5SW5kZXgo
KSBwcm92aWRlcyBzaW1pbGFyIGJlaGF2aW9yIHRvIHB1dCgpLCBidXQgZm9yIGluZGV4ZWQgcHJv
cGVydHkgbmFtZXMuCiAgICAgICAgIE1hbnkgcGxhY2VzIGluIEFycmF5UHJvdG90eXBlIGNhbGwg
cHV0QnlJbmRleCgpIHdoZXJlIHRoZXkgcmVhbGx5IG1lYW4gdG8gY2FsbAotICAgICAgICBbW0Rl
ZmluZU93blByb3BlcnR5XV0uIFRoaXMgaXMgb25seSBva2F5IGR1ZSB0byBhIGJ1ZyDigJMgcHV0
QnlJbmRleCBzaG91bGQgYmUKKyAgICAgICAgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dLiBUaGlzIGlz
IG9ubHkgb2theSBkdWUgdG8gYSBidWcgw6LCgMKTIHB1dEJ5SW5kZXggc2hvdWxkIGJlCiAgICAg
ICAgIGNhbGxpbmcgbnVtZXJpYyBhY2Nlc3NvcnMgKCYgcmVzcGVjdGluZyBudW1lcmljIHJlYWQg
b25seSBwcm9wZXJ0aWVzKSBvbiB0aGUKICAgICAgICAgcHJvdG90eXBlIGNoYWluLCBidXQgaXNu
J3QuIEFkZCBhIG5ldyBwdXREaXJlY3RJbmRleCAobWF0Y2hpbmcgSlNPYmplY3QncwogICAgICAg
ICBwdXREaXJlY3QqIG1ldGhvZHMpLCB0byBjb3JyZWN0bHkgcHJvdmlkZSBhIGZhc3QgW1tEZWZp
bmVPd25Qcm9wZXJ0eV1dIGludGVyZmFjZS4KQEAgLTYzNTMsNyArNjQ1OCw3IEBACiAgICAgICAg
IG1lbW9yeSwgaWYgdGhlIExMSW50IGlzIGVuYWJsZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTYyCiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgQ3Nh
YmEgT3N6dHJvZ29uw6FjLgorICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27Dg8Kh
Yy4KICAgICAgICAgCiAgICAgICAgIEZpeCBmb3IgQVJNLCBTSDQuCiAKQEAgLTc3MTMsNyArNzgx
OCw3IEBACiAgICAgICAgIFtRdF0gQnVpbGRmaXggZm9yICJaZXJvIG91dCBDb3BpZWRCbG9ja3Mg
b24gaW5pdGlhbGl6YXRpb24iLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzkxOTkKIAotICAgICAgICBSdWJlciBzdGFtcGVkIGJ5IENzYWJhIE9zenRy
b2dvbsOhYy4KKyAgICAgICAgUnViZXIgc3RhbXBlZCBieSBDc2FiYSBPc3p0cm9nb27Dg8KhYy4K
IAogICAgICAgICBUZW1wb3JhcnkgZml4IHNpbmNlIHRoZSBuZXcgbWVtYmVyIHdhc3RlcyBhIGxp
dHRsZSBzcGFjZSBvbgogICAgICAgICA2NCBiaXQgc3lzdGVtcy4gQWx0aG91Z2ggaXQgaXMgaGFy
bWxlc3MsIGl0IGlzIG9ubHkgbmVlZGVkCkBAIC04ODE1LDcgKzg5MjAsNyBAQAogICAgICAgICBG
aXggbWFzc2l2ZSBjcmFzaGVzIGluIGFsbCB0ZXN0cyBpbnRyb2R1Y2VkIGJ5IHByZXZpb3VzIGJ1
aWxkIGZpeCwgYW5kIGZpeCBub24tREZHIGJ1aWxkLgogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MTIKIAotICAgICAgICBSZXZpZXdlZCBieSBDc2Fi
YSBPc3p0cm9nb27DoWMuCisgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsODwqFj
LgogCiAgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgogICAgICAgICAoSlNDKToKQEAg
LTk5MjgsNyArMTAwMzMsNyBAQAogICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpiZWdpbik6
CiAgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmVuZCk6CiAKLTIwMTItMDItMTYgIENzYWJh
IE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKzIwMTItMDItMTYgIENzYWJhIE9zenRy
b2dvbsODwqFjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJvbGxp
bmcgb3V0IHIxMDc5ODAsIGJlY2F1c2UgaXQgYnJva2UgMzIgYml0IHBsYXRmb3Jtcy4KIApAQCAt
MTExNzAsNyArMTEyNzUsNyBAQAogMjAxMi0wMi0xMCAgVmluZWV0IENoYXVkaGFyeSAgPHJnZjc0
OEBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyNzU2Ci0gICAgICAgIERPTUhUTUxFbGVtZW504oCZcyBhY2Nlc3NLZXkgcHJv
cGVydHkgaXMgZGVjbGFyZWQgYXMgYXZhaWxhYmxlIGluIFdlYktpdCB2ZXJzaW9uIHRoYXQgZGlk
buKAmXQgaGF2ZSBpdCAKKyAgICAgICAgRE9NSFRNTEVsZW1lbnTDosKAwplzIGFjY2Vzc0tleSBw
cm9wZXJ0eSBpcyBkZWNsYXJlZCBhcyBhdmFpbGFibGUgaW4gV2ViS2l0IHZlcnNpb24gdGhhdCBk
aWRuw6LCgMKZdCBoYXZlIGl0IAogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hl
ci4KIApAQCAtMTE5OTMsNyArMTIwOTgsNyBAQAogICAgICAgICBbUXRdIFJlcGxhY2UgR05VIGxp
bmtlciBzY3JpcHQgZm9yIGV4cG9ydHMgd2l0aCBleHBvcnQgbWFjcm9zIGluIFdURi9KU0MKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzIzCiAKLSAg
ICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4KKyAgICAgICAgUmV2aWV3ZWQgYnkg
VG9yIEFybmUgVmVzdGLDg8K4LgogCiAgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEVuYWJsZSB1
c2Ugb2YgZXhwb3J0IG1hY3Jvcy4KIApAQCAtMTI0MzQsNyArMTI1MzksNyBAQAogICAgICAgICAo
SlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6IFJlZmFjdG9yIHRvIHVzZSB0aGUgbmV3CiAg
ICAgICAgIFJlc29sdmVSZXN1bHQgc3RydWN0dXJlLgogCi0yMDEyLTAyLTAxICBDc2FiYSBPc3p0
cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisyMDEyLTAyLTAxICBDc2FiYSBPc3p0cm9nb27D
g8KhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgRXJyb3Iuc3RhY2sK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2OTk0CkBA
IC0xMzA5Niw3ICsxMzIwMSw3IEBACiAKICAgICAgICAgVXNlIEFwcGxlIGNvZGUgcGF0aCBmb3Ig
dW5pY29kZSBkYXRlIGZvcm1hdHMgb24gbWFjLgogCi0gICAgICAgIFJldmlld2VkIGJ5IFRvciBB
cm5lIFZlc3Riw7guCisgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw4PCuC4KIAog
ICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CiAgICAgICAgICgpOgpAQCAtMTMz
ODAsMTMgKzEzNDg1LDEzIEBACiAgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgogICAg
ICAgICAoV1RGKToKIAotMjAxMi0wMS0yNiAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJr
aXQub3JnPgorMjAxMi0wMS0yNiAgQ3NhYmEgT3N6dHJvZ29uw4PCoWMgIDxvc3N5QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgW1F0XVtXaW5dIE9uZSBtb3JlIHNwZWN1bGF0aXZlIGJ1aWxkZml4IGFm
dGVyIHIxMDU5NzAuCiAKICAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6CiAKLTIwMTItMDEt
MjYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKzIwMTItMDEtMjYgIENz
YWJhIE9zenRyb2dvbsODwqFjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bV2lu
XSBTcGVjdWxhdGl2ZSBidWlsZGZpeCBhZnRlciByMTA1OTcwLgogCkBAIC0xNDYzNSw3ICsxNDc0
MCw3IEBACiAgICAgICAgICogd3RmL051bWJlck9mQ29yZXMuY3BwOgogICAgICAgICAqIHd0Zi9Q
YXJhbGxlbEpvYnNHZW5lcmljLmNwcDoKIAotMjAxMi0wMS0xOCAgQ3NhYmEgT3N6dHJvZ29uw6Fj
ICA8b3NzeUB3ZWJraXQub3JnPgorMjAxMi0wMS0xOCAgQ3NhYmEgT3N6dHJvZ29uw4PCoWMgIDxv
c3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jvc3MtcGxhdGZvcm0gcHJvY2Vzc29yIGNvcmUg
Y291bnRlcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY1MzAKQEAgLTE0NzY0LDcgKzE0ODY5LDcgQEAKICAgICAgICAgREZHIHNob3VsZCBiZSBhYmxl
IHRvIGRvIEpTIGFuZCBjdXN0b20gZ2V0dGVyIGNhY2hpbmcKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzYxCiAKLSAgICAgICAgUmV2aWV3ZWQgYnkg
Q3NhYmEgT3N6dHJvZ29uw6FjLgorICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27D
g8KhYy4KICAgICAgICAgCiAgICAgICAgIEZpeCBmb3IgMzItYml0LgogCkBAIC0xNDg2MSw3ICsx
NDk2Niw3IEBACiAgICAgICAgIGFuZCByZW1vdmVzIHRoZSAidXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmUiIHN0YXRlbWVudCBmcm9tCiAgICAgICAgIHR3byBoZWFkZXIgZmlsZXMuCiAKLSAgICAgICAg
UmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4KKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFy
bmUgVmVzdGLDg8K4LgogCiAgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CiAKQEAgLTE1MzI5LDcg
KzE1NDM0LDcgQEAKICAgICAgICAgTWFrZSB0aGUgbmV3IFdURiBtb2R1bGUgYnVpbGQgb24gUXQK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTYzCiAK
LSAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4KKyAgICAgICAgUmV2aWV3ZWQg
YnkgVG9yIEFybmUgVmVzdGLDg8K4LgogCiAgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOiBS
ZW1vdmVkIHd0ZiBmcm9tIHRoZSBzdWJkaXJzIHRvIGJ1aWxkLgogCkBAIC0xNjEwNCw3ICsxNjIw
OSw3IEBACiAKICAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKIAotMjAxMi0wMS0wNiAgVG9yIEFy
bmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CisyMDEyLTAxLTA2ICBUb3Ig
QXJuZSBWZXN0YsODwrggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFtR
dF0gUmVtb3ZlIHVuLW5lZWRlZCBWUEFUSHMgZnJvbSBwcm9qZWN0IGluY2x1ZGVzCiAKQEAgLTE2
MTEzLDcgKzE2MjE4LDcgQEAKICAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6CiAgICAgICAg
ICogd3RmL3d0Zi5wcmk6CiAKLTIwMTItMDEtMDYgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJu
ZS52ZXN0Ym9Abm9raWEuY29tPgorMjAxMi0wMS0wNiAgVG9yIEFybmUgVmVzdGLDg8K4ICA8dG9y
LmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIE1vdmUgbGlzdGluZyBvZiBp
bmNsdWRlIHBhdGhzIGFuZCBsaWJzIHRvIHByaSBmaWxlcyBpbiBzb3VyY2VzCiAKQEAgLTE2Mjkz
LDcgKzE2Mzk4LDcgQEAKICAgICAgICAgKEpTQzo6SlNBcnJheTo6aW5jcmVhc2VWZWN0b3JMZW5n
dGgpOgogICAgICAgICAgICAgLSBJZiBtX2luZGV4QmlhcyBpcyBub24temVybywgZGVjYXkgaXQg
b3ZlciB0aW1lLgogCi0yMDEyLTAxLTA1ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtp
dC5vcmc+CisyMDEyLTAxLTA1ICBDc2FiYSBPc3p0cm9nb27Dg8KhYyAgPG9zc3lAd2Via2l0Lm9y
Zz4KIAogICAgICAgICB1bnNoaWZ0L3BvcCBmaWZvIG1heSBjb25zdW1lIGV4Y2Vzc2l2ZSBtZW1v
cnkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTg4
CkBAIC0xNjMxNSw3ICsxNjQyMCw3IEBACiAKICAgICAgICAgVW5yZXZpZXdlZCBnYXJkZW5pbmcg
YWZ0ZXIgcjc1NjA1LgogCi0gICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IE5PQk9EWSBDc2FiYSBP
c3p0cm9nb27DoWMuCisgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IE5PQk9EWSBDc2FiYSBPc3p0
cm9nb27Dg8KhYy4KIAogICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDoKIApAQCAtMTY0OTcs
NyArMTY2MDIsNyBAQAogICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKICAgICAgICAg
KEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXh1cE5vZGUpOgogCi0yMDEyLTAxLTA0ICBUb3IgQXJu
ZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KKzIwMTItMDEtMDQgIFRvciBB
cm5lIFZlc3Riw4PCuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgW1F0
XSBJbnRyb2R1Y2UgbmV3IHFtYWtlIHZhcmlhYmxlICdXRUJLSVQnIGZvciBzaWduYWxpbmcgZGVw
ZW5kZW5jaWVzCiAKQEAgLTE5OTU2LDcgKzIwMDYxLDcgQEAKIAogICAgICAgICBbUXRdIFY4IGJ1
aWxkIGZpeGVzLgogCi0gICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCisgICAg
ICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw4PCuC4KIAogICAgICAgICAqIHlhcnIveWFy
ci5wcmk6IERvbid0IHJlbHkgb24gU291cmNlL0phdmFTY3JpcHRDb3JlIGJlaW5nIGluCiAgICAg
ICAgIFZQQVRILiBQcmVmaXggU09VUkNFUyBjb3JyZWN0bHkgYW5kIG1ha2Ugc3VyZSB0aGF0IHJ1
bnRpbWUvIGlzCkBAIC0yMDE0OSw3ICsyMDI1NCw3IEBACiAgICAgICAgIFtRdF0gYnVpbGQtanNj
IHNjcmlwdCBkb2Vzbid0IHdvcmsKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczOTEwCiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLD
uC4KKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDg8K4LgogCiAgICAgICAgICog
SmF2YVNjcmlwdENvcmUucHJvOiBCdWlsZCBXVEYgYmVmb3JlIEphdmFTY3JpcHRDb3JlIGFuZCBK
U0MKICAgICAgICAgKG1vdmVkIGZyb20gdG9wLWxldmVsIFdlYktpdC5wcm8pLiBBbHNvIGFkZCB2
OCBzY29wZXMgdG8gb25seSBidWlsZApAQCAtMjAzNDAsNyArMjA0NDUsNyBAQAogICAgICAgICBN
YWNyb0Fzc2VtYmxlclNINCBkb2VzIG5vdCBpbXBsZW1lbnQgcmVhZENhbGxUYXJnZXQKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNDM0CiAKLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgorICAgICAgICBSZXZpZXdlZCBieSBD
c2FiYSBPc3p0cm9nb27Dg8KhYy4KIAogICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clNINC5oOiBTdXBwb3J0IGZvciBTSDQuCiAgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0
OjpyZWFkQ2FsbFRhcmdldCk6CkBAIC0yMDYzOCw3ICsyMDc0Myw3IEBACiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyU0g0IGRvZXMgbm90IGltcGxlbWVudCByZWFkQ2FsbFRhcmdldAogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MzQKIAotICAgICAgICBS
ZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCisgICAgICAgIFJldmlld2VkIGJ5IENzYWJh
IE9zenRyb2dvbsODwqFjLgogCiAgICAgICAgICogYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oOgog
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KTogU3VwcG9ydCBmb3Ig
U0g0LgpAQCAtMjEwMjksNyArMjExMzQsNyBAQAogICAgICAgICAoV1RGOjpSZXRhaW5QdHI6Om9w
ZXJhdG9yPSk6IEFkb3B0IHRoZSBwYXNzZWQtaW4gUmV0YWluUHRyJ3MgdW5kZXJseWluZyBwb2lu
dGVyLCBub3Qgb3VyIG93bgogICAgICAgICBwb2ludGVyLgogCi0yMDExLTExLTMwICBDc2FiYSBP
c3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisyMDExLTExLTMwICBDc2FiYSBPc3p0cm9n
b27Dg8KhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHJvbGxpbmcg
b3V0IGluY29ycmVjdCByMTAxNDgxLgogCkBAIC0yMTA0MCw3ICsyMTE0NSw3IEBACiAKICAgICAg
ICAgRml4IGNvbXBpbGF0aW9uIHdpdGggTWluZ1cuCiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgQ3Nh
YmEgT3N6dHJvZ29uw6FjLgorICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27Dg8Kh
Yy4KIAogICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgogICAgICAgICAoV1RGOjppbml0
aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogTWluZ1cgZG9lc24ndCBzdXBwb3J0IE1TVkMg
ZXhjZXB0aW9uIGhhbmRsaW5nLCBzbyBmb3IKQEAgLTIxMDU5LDcgKzIxMTY0LDcgQEAKICAgICAg
ICAgKiB3dGYvVGhyZWFkU3BlY2lmaWMuaDogVXNlIE9TKFdJTkRPV1MpIGZvciBkZWNsYXJpbmcg
ImRlc3RydWN0b3IiLCBhcyBpdCdzCiAgICAgICAgIG9ubHkgcmVmZXJlbmNlZCBmcm9tIHdpdGhp
biBhbm90aGVyIE9TKFdJTkRPV1MpIHNlY3Rpb24uCiAKLTIwMTEtMTEtMzAgIENzYWJhIE9zenRy
b2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKzIwMTEtMTEtMzAgIENzYWJhIE9zenRyb2dvbsOD
wqFjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgc3BlY3VsYXRpdmUg
YnVpbGRmaXggYWZ0ZXIgcjEwMTQ1Ny4KIApAQCAtMjEwOTAsNyArMjExOTUsNyBAQAogICAgICAg
ICAqIHd0Zi9xdC9UaHJlYWRpbmdRdC5jcHA6IFJlbW92ZWQuCiAgICAgICAgICogd3RmL3d0Zi5w
cm86CiAKLTIwMTEtMTEtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4K
KzIwMTEtMTEtMzAgIENzYWJhIE9zenRyb2dvbsODwqFjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQVJNIGRvZXMgbm90IGltcGxlbWVudCByZWFkQ2FsbFRhcmdl
dAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MTMK
QEAgLTIxNTA0LDcgKzIxNjA5LDcgQEAKIAogICAgICAgICAqIHd0Zi91bmljb2RlL3F0NC9Vbmlj
b2RlUXQ0Lmg6CiAKLTIwMTEtMTEtMjggIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0
Ym9Abm9raWEuY29tPgorMjAxMS0xMS0yOCAgVG9yIEFybmUgVmVzdGLDg8K4ICA8dG9yLmFybmUu
dmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlbW92ZSBjcnVmdCBmcm9tIHByb2pl
Y3QgZmlsZQogCkBAIC0yMTUxNyw3ICsyMTYyMiw3IEBACiAgICAgICAgIFtRdF0gV1RGIHNob3Vs
ZCBiZSBidWlsdCBhcyBzZXBhcmF0ZSBzdGF0aWMgbGlicmFyeQogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyMDEKIAotICAgICAgICBSZXZpZXdlZCBi
eSBUb3IgQXJuZSBWZXN0YsO4LgorICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsOD
wrguCiAKICAgICAgICAgKiBUYXJnZXQucHJpOiBEb24ndCBjbGFpbSB0byBidWlsZCBXVEYsIGFz
IHRoYXQgd291bGQgY2F1c2UKICAgICAgICAgdGhlIGRlYnVnLXdpdGgtc2hsaWJzIGJ1aWxkIHRv
IG5vdCBsaW5rIGluIHd0Zi4KQEAgLTIxOTQzLDcgKzIyMDQ4LDcgQEAKICAgICAgICAgW1F0XSBT
cGVlZCB1cCBkZWJ1ZyBidWlsZHMuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03Mjg4MgogCi0gICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Ri
w7guCisgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw4PCuC4KIAogICAgICAgICAq
IFRhcmdldC5wcmk6IE1ha2UgQlVJTERJTkdfSmF2YVNjcmlwdENvcmUgYXZhaWxhYmxlIGVhcmxp
ZXIsIHNvIGl0IGNhbiBiZQogICAgICAgICB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCkBAIC0y
MjYyNyw3ICsyMjczMiw3IEBACiAKICAgICAgICAgW1F0XSBDZW50cmFsaXplIGhpZGVfc3ltYm9s
cyBhbmQgZW5zdXJlIGFsbCBsaWJzIGFyZSBidWlsdCB3aXRoIHN5bWJvbCB2aXNpYmlsaXR5ICYg
YnN5bWJvbGljX2Z1bmN0aW9ucwogCi0gICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Ri
w7guCisgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw4PCuC4KIAogICAgICAgICAq
IFRhcmdldC5wcmk6IEVsaW1pbmF0ZSBkdXBsaWNhdGVkIHN5bWJvbCBzdHVmZiB0aGF0IGxpdmVz
IG5vdyBpbiBkZWZhdWx0X3Bvc3QucHJmLgogCkBAIC0yMjkyMiw3ICsyMzAyNyw3IEBACiAKICAg
ICAgICAgW1F0XSBDZW50cmFsaXplIGhpZGVfc3ltYm9scyBhbmQgZW5zdXJlIGFsbCBsaWJzIGFy
ZSBidWlsdCB3aXRoIHN5bWJvbCB2aXNpYmlsaXR5ICYgYnN5bWJvbGljX2Z1bmN0aW9ucwogCi0g
ICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCisgICAgICAgIFJldmlld2VkIGJ5
IFRvciBBcm5lIFZlc3Riw4PCuC4KIAogICAgICAgICAqIFRhcmdldC5wcmk6IEVsaW1pbmF0ZSBk
dXBsaWNhdGVkIHN5bWJvbCBzdHVmZiB0aGF0IGxpdmVzIG5vdyBpbiBkZWZhdWx0X3Bvc3QucHJm
LgogCkBAIC0yMzc3Myw3ICsyMzg3OCw3IEBACiAKICAgICAgICAgW1F0XSBSZXBsYWNlIHVzZSBv
ZiBRQXBwbGljYXRpb24gd2l0aCBRR3VpQXBwbGljYXRpb24uCiAKLSAgICAgICAgUmV2aWV3ZWQg
YnkgVG9yIEFybmUgVmVzdGLDuC4KKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLD
g8K4LgogCiAgICAgICAgICogd3RmL3F0L2NvbXBhdC9xZ3VpYXBwbGljYXRpb24uaDoKICAgICAg
ICAgKFFHdWlBcHBsaWNhdGlvbjo6c3R5bGVIaW50cyk6IEludHJvZHVjZSBzdHlsZUhpbnRzIHdy
YXBwZXIgaGFjay4KQEAgLTI1MDI2LDcgKzI1MTMxLDcgQEAKIAogICAgICAgICBCdWlsZGZpeCBm
b3IgMzJiaXQgZGVidWcgbW9kZS4KIAotICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9n
b27DoWMuCisgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsODwqFjLgogCiAgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgogICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmR1bXApOgpAQCAtMjUwMzgsMTMgKzI1MTQzLDEzIEBACiAgICAgICAgIEVuYWJs
ZSB0aGUgREZHIEpJVCBvbiBYODYtNjQgTGludXggcGxhdGZvcm1zCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTM3MwogCi0gICAgICAgIFJldmlld2Vk
IGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KKyAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJv
Z29uw4PCoWMuCiAKICAgICAgICAgKiB3dGYvUGxhdGZvcm0uaCAoRU5BQkxFX0RGR19KSVQpOiBF
bmFibGUgdGhlIERGRyBKSVQgb24gdGhlCiAgICAgICAgIHg4Ni02NCBHTlUvTGludXggcGxhdGZv
cm0uCiAgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6IEFkZCBKU1ZhbHVlNjQgaW1wbGVtZW50
YXRpb25zIHRvIEVGTCBidWlsZC4KIAotMjAxMS0xMS0wOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8
b3NzeUB3ZWJraXQub3JnPgorMjAxMS0xMS0wOSAgQ3NhYmEgT3N6dHJvZ29uw4PCoWMgIDxvc3N5
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgRW5hYmxlIHRoZSBERkcgSklUIG9uIHg4Ni02NCBMaW51
eCBwbGF0Zm9ybXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxMzczCkBAIC0yNTg5MSw3ICsyNTk5Niw3IEBACiAgICAgICAgIChKU0M6OkxpdGVyYWxQ
YXJzZXI6OkxleGVyOjpsZXhTdHJpbmcpOgogICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aDoKIAotMjAxMS0xMS0wNyAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tp
YS5jb20+CisyMDExLTExLTA3ICBUb3IgQXJuZSBWZXN0YsODwrggIDx0b3IuYXJuZS52ZXN0Ym9A
bm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gUHV0IHRoZSBqc2MgYmluYXJ5IGluICdiaW4nIGlu
c3RlYWQgb2YgbGVhdmluZyBpdCBkZWVwIGluIHRoZSBidWlsZCB0cmVlCiAKQEAgLTI2MDkwLDcg
KzI2MTk1LDcgQEAKICAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc0luc3RhbmNlKToKICAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CiAKLTIwMTEtMTEtMDQgIFRvciBBcm5lIFZlc3Riw7gg
IDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgorMjAxMS0xMS0wNCAgVG9yIEFybmUgVmVzdGLD
g8K4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlZmFjdG9y
IGFuZCBjbGVhbiB1cCB0aGUgcW1ha2UgYnVpbGQgc3lzdGVtCiAKQEAgLTI2MTU3LDcgKzI2MjYy
LDcgQEAKICAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CiAgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgogCi0yMDExLTExLTA0ICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisyMDExLTExLTA0ICBDc2FiYSBPc3p0
cm9nb27Dg8KhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBEZS12aXJ0dWFsaXplIEpT
T2JqZWN0OjpoYXNJbnN0YW5jZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzE0MzAKQEAgLTI4MjUwLDEzICsyODM1NSwxMyBAQAogCiAgICAgICAgIEJ1
aWxkIGZpeC4KIAotICAgICAgICBSZXZlcnRlZCByOTg0ODgsIHdoaWNoIGNhdXNlZCB0aGUgc2Ny
aXB0c+KAmSBzdGF0dXMgbWVzc2FnZXMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZAor
ICAgICAgICBSZXZlcnRlZCByOTg0ODgsIHdoaWNoIGNhdXNlZCB0aGUgc2NyaXB0c8OiwoDCmSBz
dGF0dXMgbWVzc2FnZXMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZAogICAgICAgICBm
aWxlcy4KIAogICAgICAgICAqIGNyZWF0ZV9oYXNoX3RhYmxlOgogICAgICAgICAqIGNyZWF0ZV9q
aXRfc3R1YnM6CiAKLTIwMTEtMTAtMjYgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0
Ym9Abm9raWEuY29tPgorMjAxMS0xMC0yNiAgVG9yIEFybmUgVmVzdGLDg8K4ICA8dG9yLmFybmUu
dmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBEb24ndCBwcmludCByZWd1bGFyIG91dHB1dCB0
byBTVERFUlIgd2hlbiBnZW5lcmF0aW5nIGhhc2h0YWJsZXMgYW5kIEpJVCBzdHVicwogCkBAIC0y
OTIyOSw3ICsyOTMzNCw3IEBACiAgICAgICAgIFJlbW92ZSBRdFNjcmlwdCBzb3VyY2UgY29kZSBm
cm9tIFdlYktpdC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY0MDg4CiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4KKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDg8K4LgogCiAgICAgICAgIFJlbW92ZWQgZGVh
ZCBjb2RlIHRoYXQgaXNuJ3QgZGV2ZWxvcGVkIGFueW1vcmUuCiAKQEAgLTMwMjQ5LDcgKzMwMzU0
LDcgQEAKIAogICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmln
OgogCi0yMDExLTEwLTE1ICBEYW4gSG9yw6FrIDxkYW5AZGFubnkuY3o+CisyMDExLTEwLTE1ICBE
YW4gSG9yw4PCoWsgPGRhbkBkYW5ueS5jej4KIAogICAgICAgICBUaGUgczM5MCBhbmQgczM5MHgg
YXJjaGl0ZWN0dXJlcyBib3RoIHVzZSA2NC1iaXQgZG91YmxlIHR5cGUKICAgICAgICAgdGhhdCBj
b25mb3JtcyB0byB0aGUgSUVFRS03NTQgc3RhbmRhcmQuCkBAIC0zMTcwMyw3ICszMTgwOCw3IEBA
CiAgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgogICAgICAgICAg
ICAgLSBjb21wYXJpc29ucyBub3cgcmV0dXJuIGEgc2l6ZV90LgogCi0yMDExLTEwLTExICBUb3Ig
QXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KKzIwMTEtMTAtMTEgIFRv
ciBBcm5lIFZlc3Riw4PCuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAg
W1F0XSBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gUVRESVJfYnVpbGQgYW5kIHN0YW5kYWxvbmVf
cGFja2FnZQogCkBAIC0zMzIzOCw3ICszMzM0Myw3IEBACiAgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgogICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5kZWY6CiAKLTIwMTEtMTAtMDYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9z
c3lAd2Via2l0Lm9yZz4KKzIwMTEtMTAtMDYgIENzYWJhIE9zenRyb2dvbsODwqFjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjk2MzQ3KTogQnVpbGQgaXMgYnJva2Vu
IHdpdGggTVNWQyBjb21waWxlciBpZiAhUExBVEZPUk0oV0lORE9XUykKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDEzCkBAIC0zMzgzOSw3ICszMzk0
NCw3IEBACiAKICAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWRkZWQgSEFWRV9JTlZFUlRFRF9X
SEVFTF9FVkVOVFMgZm9yIExpb24gYW5kIGxhdGVyLgogCi0yMDExLTEwLTA0ICBDc2FiYSBPc3p0
cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisyMDExLTEwLTA0ICBDc2FiYSBPc3p0cm9nb27D
g8KhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBNaW5HVyB3YXJuaW5nIGZpeCBhZnRl
ciByOTYyODYuCiAKQEAgLTMzODQ3LDcgKzMzOTUyLDcgQEAKICAgICAgICAgI2RlZmluZSBfX3N0
ZGNhbGwgX19hdHRyaWJ1dGVfXygoc3RkY2FsbCkpCiAgICAgICAgICNkZWZpbmUgU1REQ0FMTCBf
X3N0ZGNhbGwKIAotICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgorICAgICAg
ICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsODwrguCiAKICAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CiAKQEAgLTM3MDU5LDcgKzM3MTY0LDcgQEAKICAgICAg
ICAgMzItYml0IGNhbGwgY29kZSBjbG9iYmVycyB0aGUgZnVuY3Rpb24gY2VsbCB0YWcKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjA2CiAKLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgorICAgICAgICBSZXZpZXdlZCBieSBD
c2FiYSBPc3p0cm9nb27Dg8KhYy4KICAgICAgICAgCiAgICAgICAgIFRoaXMgaXMgYSBtaW5pbWFs
aXN0aWMgZml4OiBpdCBzaW1wbHkgZW1pdHMgY29kZSB0byByZXN0b3JlIHRoZQogICAgICAgICBj
ZWxsIHRhZyBvbiB0aGUgc2xvdyBwYXRoLCBpZiB3ZSBrbm93IHRoYXQgd2UgZmFpbGVkIGR1ZSB0
bwpAQCAtMzg4MTgsNyArMzg5MjMsNyBAQAogICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CiAgICAg
ICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CiAKLTIwMTEtMDktMTYgIENzYWJhIE9zenRyb2dv
bsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKzIwMTEtMDktMTYgIENzYWJhIE9zenRyb2dvbsODwqFj
ICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjk1MjAxKTogSXQgbWFk
ZSB0d28gdGVzdHMgZmFpbAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjgyMzAKQEAgLTM5NjM5LDcgKzM5NzQ0LDcgQEAKICAgICAgICAgKFdURjo6Qm91
bmRzQ2hlY2tlZFBvaW50ZXI6OnZhbGlkYXRlKToKICAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CiAKLTIwMTEtMDktMTQgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4K
KzIwMTEtMDktMTQgIENzYWJhIE9zenRyb2dvbsODwqFjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFtRdF0gV2luMzIgYnVpbGRzIHdpdGggdGhyZWFkcyB0dXJuZWQgb2ZmCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzg2NApAQCAtNDAyODIs
NyArNDAzODcsNyBAQAogICAgICAgICBbUXRdIEJ1aWxkIGZhaWxzIGFmdGVyIHI5NDkyMCB3aXRo
IHN0cmljdCBjb21waWxlcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njc5MjgKIAotICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMu
CisgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsODwqFjLgogCiAgICAgICAgICog
d3RmL1JlZEJsYWNrVHJlZS5oOgogICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydCk6
IFJlbW92ZSBkZWFkIHZhcmlhYmxlcyB1cGRhdGVTdGFydCBhbmQgbmV3U3ViVHJlZVJvb3QuCkBA
IC00MDU3Myw3ICs0MDY3OCw3IEBACiAgICAgICAgIAogICAgICAgICBRdCBXaW4zMiBpcyBub3Qg
cHRocmVhZCBjb21wYXRpYmxlIGFuZCBjYW5ub3QgcGFydGljaXBhdGUgaW4gbXVsdGl0aHJlYWRl
ZCBKU0Mgb3IgaXQgZmFpbHMgdG8gYnVpbGQuCiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEg
T3N6dHJvZ29uw6FjLgorICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27Dg8KhYy4K
IAogICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgogCkBAIC00MDU4Miw3ICs0MDY4Nyw3IEBACiAg
ICAgICAgIEFSTSBhbmQgTUlQUyBhc3NlbWJsZXJzIHN0aWxsIHJlZmVyIHRvIGV4ZWN1dGFibGUg
cG9vbHMuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NzkwMwogCi0gICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KKyAgICAgICAg
UmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw4PCoWMuCiAKICAgICAgICAgKiBhc3NlbWJsZXIv
QVJNQXNzZW1ibGVyLmNwcDoKICAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpleGVjdXRhYmxl
Q29weSk6CkBAIC00MjMwMCw3ICs0MjQwNSw3IEBACiAKICAgICAgICAgW1F0XVtXSzJdIEZpeCB0
aGUgYnVpbGQKIAotICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMu
CisgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IENzYWJhIE9zenRyb2dvbsODwqFjLgogCiAgICAg
ICAgICogd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2M6IFJlbW92ZSBkZWFkIHZhcmlhYmxl
IGluIGZpbGUgYWRkZWQgaW4gcjk0NDUyLgogICAgICAgICBUaGUgdmFyaWFibGUgZnJhY3Rpb25h
bF9wYXJ0IGlzIG9ubHkgc2V0IGJ1dCBuZXZlciB1c2VkLgpAQCAtNTEzOTUsNyArNTE1MDAsNyBA
QAogCiAgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogUmVtb3ZlZCBnbG9iYWxPYmpl
Y3RDb3VudCBiZWNhdXNlIGl0IHdhcyB1bnVzZWQuCiAKLTIwMTEtMDYtMDggIE1pa2/FgmFqIE1h
xYJlY2tpICA8bS5tYWxlY2tpQHNhbXN1bmcuY29tPgorMjAxMS0wNi0wOCAgTWlrb8OFwoJhaiBN
YcOFwoJlY2tpICA8bS5tYWxlY2tpQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFBhdmVsIEZlbGRtYW4uCiAKQEAgLTU0MjYxLDcgKzU0MzY2LDcgQEAKICAgICAgICAgKEpTQzo6
V3JpdGVCYXJyaWVyOjpXcml0ZUJhcnJpZXIpOgogICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmg6
CiAKLTIwMTEtMDUtMTQgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKzIw
MTEtMDUtMTQgIENzYWJhIE9zenRyb2dvbsODwqFjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4NjQ2OSBhbmQgcjg2NDcxLCBiZWNhdXNlIHRo
ZXkgbWFkZSBodW5kcmVkcyB0ZXN0cyBjcmFzaCBvbiBRdC4KIApAQCAtNTQ1NTQsNyArNTQ2NTks
NyBAQAogCiAyMDExLTA1LTEyICBLZWl0aCBLeXppdmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5j
b20+CiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgorICAgICAgICBS
ZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27Dg8KhYy4KIAogICAgICAgICBbUXRdIEFybSBkZWJ1
ZyBidWlsZCBmYWlsaW5nIG9uIEFSTUFzc2VtYmxlcjo6ZGVidWdPZmZzZXQoKQogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA2ODgKQEAgLTU1Nzg3LDcg
KzU1ODkyLDcgQEAKICAgICAgICAgKiB5YXJyL1lhcnJJbnRlcnByZXRlci5jcHA6CiAgICAgICAg
IChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6ZW1pdERpc2p1bmN0aW9uKToKIAotMjAxMS0wNC0y
OSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorMjAxMS0wNC0yOSAgQ3Nh
YmEgT3N6dHJvZ29uw4PCoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KIApAQCAtNTYyMjcsNyArNTYzMzIsNyBAQAogCiAgICAgICAgICogd3Rm
L1BsYXRmb3JtLmg6IFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSBpcyBvbmx5IHRydWUgZm9yIDY0
LWJpdC4KIAotMjAxMS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3Jn
PgorMjAxMS0wNC0yNyAgQ3NhYmEgT3N6dHJvZ29uw4PCoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBidWlsZGZpeCBhZnRlciByODUwMzYuCiAKQEAgLTU2MzM5LDcg
KzU2NDQ0LDcgQEAKIAogMjAxMS0wNC0yNiAgR2Fib3IgTG9raSAgPGxva2lAd2Via2l0Lm9yZz4K
IAotICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCisgICAgICAgIFJldmll
d2VkIGJ5IENzYWJhIE9zenRyb2dvbsODwqFjLgogCiAgICAgICAgIFNwZWVkaW5nIHVwIFNWRyBm
aWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1cHBvcnQKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzOTAzCkBAIC01NzQzNCw3ICs1NzUzOSw3IEBA
CiAKIDIwMTEtMDQtMjAgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCi0g
ICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KKyAgICAgICAgUmV2aWV3ZWQg
YnkgQ3NhYmEgT3N6dHJvZ29uw4PCoWMuCiAKICAgICAgICAgW1F0XSBDbGVhbnVwIGluY2x1ZGVw
YXRoIGFkanVzdG1lbnQgZm9yIGdlbmVyYXRlZCBmaWxlcwogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4NjkKQEAgLTU3NDk5LDcgKzU3NjA0LDcgQEAK
IAogICAgICAgICAqIHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg6CiAKLTIwMTEtMDQtMTkg
IENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKzIwMTEtMDQtMTkgIENzYWJh
IE9zenRyb2dvbsODwqFjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gUkVHUkVT
U0lPTig4NDE3Nik6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZXZlbnQtbGlzdGVuZXItZ2Mu
aHRtbCBmYWlscwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTg4NzEKQEAgLTYxMDg2LDcgKzYxMTkxLDcgQEAKIAogMjAxMS0wMy0yOCAgQW5kcmFzIEJl
Y3NpICA8YWJlY3NpQHdlYmtpdC5vcmc+CiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6
dHJvZ29uw6FjLgorICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27Dg8KhYy4KIAog
ICAgICAgICBbUXRdIEZpeCB0aGUgbGlua2luZyBvZiBqc2Mgd2l0aCBNaW5HVyBhZnRlciByODE5
NjMuCiAKQEAgLTYxMzcxLDcgKzYxNDc2LDcgQEAKIAogMjAxMS0wMy0yMiAgR2Fib3IgTG9raSAg
PGxva2lAd2Via2l0Lm9yZz4KIAotICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27D
oWMuCisgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsODwqFjLgogCiAgICAgICAg
IFtRdF0gQWRkIERGRyBtb2R1bGUgdG8gYnVpbGQgc3lzdGVtIChkaXNhYmxlZCBieSBkZWZhdWx0
KS4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2ODQ1
CkBAIC02MTU5OCw3ICs2MTcwMyw3IEBACiAKIDIwMTEtMDMtMjEgIEdhYm9yIExva2kgIDxsb2tp
QHdlYmtpdC5vcmc+CiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgor
ICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27Dg8KhYy4KIAogICAgICAgICBFeHRl
bmQgY29uc3RhbnQgcG9vbCB0byBiZSBhYmxlIHRvIHN0b3JlIDE2IGJpdCBpbnN0cnVjdGlvbnMg
d2l0aCBhIGNvbnN0YW50CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Njc5NgpAQCAtNjI1MjcsNyArNjI2MzIsNyBAQAogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEdhdmluIEJhcnJhY2xvdWdoLgogCi0gICAgICAgIExvb2stYWhlYWQgYXNzZXJ0aW9ucyB3
aXRoIGJhY2sgcmVmZXJlbmNlcyBkb27igJl0IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgTG9v
ay1haGVhZCBhc3NlcnRpb25zIHdpdGggYmFjayByZWZlcmVuY2VzIGRvbsOiwoDCmXQgd29yayBh
cyBleHBlY3RlZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTYwODIKIAogICAgICAgICBDaGFuZ2VkIHBhcmVudGhlc2VzIGFzc2VydGlvbiBwcm9jZXNz
aW5nIHRvIHRlbXBvcmFyaWx5IGJhY2sgb3V0IHRoZSAKQEAgLTY0MzA1LDcgKzY0NDEwLDcgQEAK
IAogMjAxMS0wMy0wMSAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQHdlYmtpdC5vcmc+CiAKLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgorICAgICAgICBSZXZpZXdlZCBieSBD
c2FiYSBPc3p0cm9nb27Dg8KhYy4KIAogICAgICAgICBbUXRdIENsZWFuIHVwIHRoZSBwcm9qZWN0
IGZpbGVzIGFuZCBtb3ZlIGNvbW1vbiBvcHRpb25zIHRvIFdlYktpdC5wcmkuCiAKQEAgLTY2Mjg2
LDcgKzY2MzkxLDcgQEAKICAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQmFzZTo6c2V0V2l0aG91
dFdyaXRlQmFycmllcik6CiAgICAgICAgIChKU0M6OldyaXRlQmFycmllcjo6V3JpdGVCYXJyaWVy
KToKIAotMjAxMS0wMi0xNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgor
MjAxMS0wMi0xNyAgQ3NhYmEgT3N6dHJvZ29uw4PCoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZC4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDExNDAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw4IEBA
CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRCN0E3M0Ew
MDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxRTNBNDMxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFFM0E0
NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGMUUzQTVDMTUzQTFEQTkwMDBGOTQ1NiAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERG
R1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdp
c3RlclNhdmVQbGFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyMUMyNjgxNEJFNUY2ODAwQURDNjRCIC8qIEpJVERyaXZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyNjYxNEJFNUY1RTAw
QURDNjRCIC8qIEpJVERyaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJu
ZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIx
QzI3QTE0QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFE
QzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNw
ZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC03NTAsNiArNzUyLDggQEAKIAkJMEYxNUYxNUQxNEI3QTczQTAwNURFMzdE
IC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNDMx
NTM0Q0JBRDAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQXJndW1lbnRQb3NpdGlvbi5oOyBwYXRoID0gZGZnL0RGR0Fy
Z3VtZW50UG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNDQx
NTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvdWJsZUZvcm1hdFN0YXRlLmg7IHBhdGggPSBkZmcvREZH
RG91YmxlRm9ybWF0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcv
REZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
RTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
OyBwYXRoID0gZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyMUMyNjYxNEJFNUY1RTAwQURDNjRCIC8qIEpJVERyaXZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREcml2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFs
aXphdGlvbktpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNp
YWxpemF0aW9uS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3QTE0
QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFeGVjdXRpb25IYXJuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDg0LDYgKzIwODgsOCBAQAogCQkJCTg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAv
KiBERkdSZXBhdGNoLmNwcCAqLywKIAkJCQk4NkJCMDlCRjEzOEUzODFCMDA1NjcwMkYgLyogREZH
UmVwYXRjaC5oICovLAogCQkJCTg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJv
YXJkLmggKi8sCisJCQkJMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lz
dGVyU2F2ZVBsYW4uaCAqLywKKwkJCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJCQk4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcgLyogREZH
U3BlY3VsYXRpdmVKSVQuY3BwICovLAogCQkJCTg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBE
RkdTcGVjdWxhdGl2ZUpJVC5oICovLAogCQkJCTg2ODgwRjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBE
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLywKQEAgLTI1NzAsNiArMjU3Niw4IEBACiAJCQkJ
ODYxMkU0Q0QxNTIzODlFQzAwQzgzNkJFIC8qIE1hdGNoUmVzdWx0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZv
cm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFFM0E1QzE1M0ExREE5MDAwRjk0NTYg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8q
IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDExNDAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsMTUgKzE5NiwxNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7CiAgICAgICAgIGludDhf
dCBzY3JhdGNoR1BSOwotICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZTsKLSAgICAgICAg
aW50MTZfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOwotICAgICAgICBpbnQxNl90IGRlbHRhQ2Fs
bFRvU2xvd0Nhc2U7Ci0gICAgICAgIGludDE2X3QgZGVsdGFDaGVja0ltbVRvQ2FsbDsKKyAgICAg
ICAgaW50MzJfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjazsKKyAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlOworICAgICAg
ICBpbnQzMl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOworICAgICAgICBpbnQzMl90IGRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmU7CiAjZWxzZQotICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvVGFn
TG9hZE9yU3RvcmU7Ci0gICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmU7CisgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZTsKKyAgICAgICAg
aW50MzJfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZTsKICNlbmRpZgogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgJKHJldmlzaW9uIDExNDAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsOCBAQCBpbmxpbmUgY29uc3QgY2hh
ciogdXNlS2luZFRvU3RyaW5nKFVzZUtpCiAgICAgfQogfQogCitlbnVtIFNwaWxsUmVnaXN0ZXJz
TW9kZSB7IE5lZWRUb1NwaWxsLCBEb250U3BpbGwgfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTE0MDE0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKICNpbmNs
dWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCisjaW5j
bHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJ
VC5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgpA
QCAtMTQ5LDE5ICsxNTAsMTkgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBs
aW5rQgogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhtX3By
b3BlcnR5QWNjZXNzZXMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9w
cm9wZXJ0eUFjY2Vzc2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBpbmZvID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpOwotICAgICAgICBDb2Rl
TG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9mdW5jdGlvbkNhbGwpOworICAgICAgICBDb2RlTG9jYXRp
b25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3Bl
cnR5QWNjZXNzZXNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKTsKICAgICAgICAgaW5m
by5jb2RlT3JpZ2luID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fY29kZU9yaWdpbjsKICAgICAg
ICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAg
IGluZm8uZGVsdGFDaGVja0ltbVRvQ2FsbCA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDaGVja0ltbVRv
Q2FsbCksIGNhbGxSZXR1cm5Mb2NhdGlvbik7Ci0gICAgICAgIGluZm8uZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1N0
cnVjdENoZWNrKSk7CisgICAgICAgIGluZm8uZGVsdGFDaGVja0ltbVRvQ2FsbCA9IGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fc3RydWN0dXJlSW1tKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICAgICAgaW5mby5k
ZWx0YUNhbGxUb1N0cnVjdENoZWNrID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1
cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5t
X3N0cnVjdHVyZUNoZWNrKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaW5mby5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Rl
bHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKKyAgICAgICAgaW5mby5kZWx0YUNhbGxUb0xvYWRPclN0
b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2xvYWRPclN0b3JlKSk7CiAj
ZWxzZQotICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSkpOwotICAg
ICAgICBpbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSk7CisgICAg
ICAgIGluZm8uZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV90YWdMb2FkT3JTdG9yZSkpOworICAgICAgICBpbmZvLmRlbHRhQ2FsbFRv
UGF5bG9hZExvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3Bh
eWxvYWRMb2FkT3JTdG9yZSkpOwogI2VuZGlmCi0gICAgICAgIGluZm8uZGVsdGFDYWxsVG9TbG93
Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7Ci0gICAgICAgIGluZm8uZGVsdGFDYWxsVG9Eb25lID0gZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVy
dHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvRG9uZSkpOworICAgICAgICBpbmZvLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc2xvd1BhdGhH
ZW5lcmF0b3ItPmxhYmVsKCkpKTsKKyAgICAgICAgaW5mby5kZWx0YUNhbGxUb0RvbmUgPSBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZG9uZSkpOwogICAgICAgICBpbmZvLmJhc2VH
UFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9iYXNlR1BSOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgIGluZm8udmFsdWVHUFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV92YWx1ZUdQ
UjsKQEAgLTIwMSw2ICsyMDIsOSBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUm
IGVudHJ5CiAgICAgU3BlY3VsYXRpdmVKSVQgc3BlY3VsYXRpdmUoKnRoaXMpOwogICAgIGNvbXBp
bGVCb2R5KHNwZWN1bGF0aXZlKTsKIAorICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgor
ICAgIHNwZWN1bGF0aXZlLnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIAogICAgIC8vIENy
ZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMgaWYgbmVjZXNzYXJ5LgogICAgIHNwZWN1bGF0aXZl
LmNyZWF0ZU9TUkVudHJpZXMoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTE0MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsMTUg
QEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSA8YXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaD4KLSNpbmNsdWRlIDxhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxi
eXRlY29kZS9Db2RlQmxvY2suaD4KLSNpbmNsdWRlIDxkZmcvREZHQ0NhbGxIZWxwZXJzLmg+Ci0j
aW5jbHVkZSA8ZGZnL0RGR0ZQUkluZm8uaD4KLSNpbmNsdWRlIDxkZmcvREZHR1BSSW5mby5oPgot
I2luY2x1ZGUgPGRmZy9ERkdHcmFwaC5oPgotI2luY2x1ZGUgPGRmZy9ERkdSZWdpc3RlckJhbmsu
aD4KLSNpbmNsdWRlIDxqaXQvSklUQ29kZS5oPgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNs
dWRlICJERkdHUFJJbmZvLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdS
ZWdpc3RlckJhbmsuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRDb2RlR2VuZXJhdG9y
OwogY2xhc3MgTm9kZVRvUmVnaXN0ZXJNYXA7CitjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNs
YXNzIFNwZWN1bGF0aXZlSklUOwogY2xhc3MgU3BlY3VsYXRpb25SZWNvdmVyeTsKIApAQCAtMTMw
LDIyICsxMzEsNDMgQEAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKICAgICBlbnVtIFJl
Z2lzdGVyTW9kZSB7IFJlZ2lzdGVyc0ZsdXNoZWQsIFJlZ2lzdGVyc0luVXNlIH07CiAgICAgCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgZGVsdGFDaGVja0ltbVRvQ2Fs
bCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFj
dCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZGVsdGFDYWxs
VG9TbG93Q2FzZSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90
IGJhc2VHUFIsIGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIsIFJlZ2lzdGVyTW9k
ZSByZWdpc3Rlck1vZGUgPSBSZWdpc3RlcnNJblVzZSkKKyAgICBQcm9wZXJ0eUFjY2Vzc1JlY29y
ZCgKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZUltbSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc3RydWN0dXJlQ2hlY2ssCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21w
YWN0IGxvYWRPclN0b3JlLAorICAgICAgICBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGhHZW5l
cmF0b3IsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lLAorICAgICAgICBpbnQ4
X3QgYmFzZUdQUiwKKyAgICAgICAgaW50OF90IHZhbHVlR1BSLAorICAgICAgICBpbnQ4X3Qgc2Ny
YXRjaEdQUiwKKyAgICAgICAgUmVnaXN0ZXJNb2RlIHJlZ2lzdGVyTW9kZSA9IFJlZ2lzdGVyc0lu
VXNlKQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgZGVsdGFD
aGVja0ltbVRvQ2FsbCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsQ29tcGFjdCBkZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlLCBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSwgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBk
ZWx0YUNhbGxUb0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVUYWdHUFIsIGludDhf
dCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIsIFJlZ2lzdGVyTW9kZSByZWdpc3Rlck1vZGUg
PSBSZWdpc3RlcnNJblVzZSkKKyAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKKyAgICAgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRy
IHN0cnVjdHVyZUltbSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3RydWN0dXJlQ2hl
Y2ssCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IHRhZ0xvYWRPclN0
b3JlLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBwYXlsb2FkTG9h
ZE9yU3RvcmUsCisgICAgICAgIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aEdlbmVyYXRvciwK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmUsCisgICAgICAgIGludDhfdCBiYXNl
R1BSLAorICAgICAgICBpbnQ4X3QgdmFsdWVUYWdHUFIsCisgICAgICAgIGludDhfdCB2YWx1ZUdQ
UiwKKyAgICAgICAgaW50OF90IHNjcmF0Y2hHUFIsCisgICAgICAgIFJlZ2lzdGVyTW9kZSByZWdp
c3Rlck1vZGUgPSBSZWdpc3RlcnNJblVzZSkKICNlbmRpZgogICAgICAgICA6IG1fY29kZU9yaWdp
bihjb2RlT3JpZ2luKQotICAgICAgICAsIG1fZGVsdGFDaGVja0ltbVRvQ2FsbChkZWx0YUNoZWNr
SW1tVG9DYWxsKQotICAgICAgICAsIG1fZnVuY3Rpb25DYWxsKGZ1bmN0aW9uQ2FsbCkKLSAgICAg
ICAgLCBtX2RlbHRhQ2FsbFRvU3RydWN0Q2hlY2soZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaykKKyAg
ICAgICAgLCBtX3N0cnVjdHVyZUltbShzdHJ1Y3R1cmVJbW0pCisgICAgICAgICwgbV9zdHJ1Y3R1
cmVDaGVjayhzdHJ1Y3R1cmVDaGVjaykKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAsIG1f
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZShkZWx0YUNhbGxUb0xvYWRPclN0b3JlKQorICAgICAgICAs
IG1fbG9hZE9yU3RvcmUobG9hZE9yU3RvcmUpCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICAsIG1fZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZShkZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlKQotICAgICAgICAsIG1fZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUoZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUpCisgICAgICAgICwgbV90YWdMb2FkT3JTdG9yZSh0YWdMb2Fk
T3JTdG9yZSkKKyAgICAgICAgLCBtX3BheWxvYWRMb2FkT3JTdG9yZShwYXlsb2FkTG9hZE9yU3Rv
cmUpCiAjZW5kaWYKLSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvU2xvd0Nhc2UoZGVsdGFDYWxsVG9T
bG93Q2FzZSkKLSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvRG9uZShkZWx0YUNhbGxUb0RvbmUpCisg
ICAgICAgICwgbV9zbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aEdlbmVyYXRvcikKKyAgICAgICAg
LCBtX2RvbmUoZG9uZSkKICAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQUikKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogICAgICAgICAsIG1fdmFsdWVUYWdHUFIodmFsdWVUYWdHUFIpCkBAIC0xNTcs
MTcgKzE3OSwxNiBAQCBzdHJ1Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewogICAgIH0KIAogICAg
IENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQ
dHIgbV9kZWx0YUNoZWNrSW1tVG9DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fZnVu
Y3Rpb25DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fZGVsdGFDYWxsVG9TdHJ1Y3RD
aGVjazsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1fc3RydWN0dXJlSW1tOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc3RydWN0dXJlQ2hlY2s7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBtX2RlbHRhQ2FsbFRv
TG9hZE9yU3RvcmU7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9sb2Fk
T3JTdG9yZTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbENvbXBhY3QgbV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmU7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV90YWdMb2FkT3JTdG9yZTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBtX3BheWxvYWRMb2FkT3JTdG9y
ZTsKICNlbmRpZgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RlbHRhQ2FsbFRvU2xvd0Nh
c2U7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZGVsdGFDYWxsVG9Eb25lOworICAgIFNs
b3dQYXRoR2VuZXJhdG9yKiBtX3Nsb3dQYXRoR2VuZXJhdG9yOworICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX2RvbmU7CiAgICAgaW50OF90IG1fYmFzZUdQUjsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgIGludDhfdCBtX3ZhbHVlVGFnR1BSOwpAQCAtMTkzLDcgKzIxNCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXgoMCkKICAgICB7CiAgICAgfQot
CisgICAgCiAgICAgYm9vbCBjb21waWxlKEpJVENvZGUmIGVudHJ5KTsKICAgICBib29sIGNvbXBp
bGVGdW5jdGlvbihKSVRDb2RlJiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdp
dGhBcml0eUNoZWNrKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxl
bnRSZWdpc3RlclNhdmVQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuX2gKKyNkZWZpbmUg
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVk
ZSAiREZHRlBSSW5mby5oIgorI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFNpbGVudFNwaWxsQWN0aW9uIHsKKyAgICBEb05v
dGhpbmdGb3JTcGlsbCwKKyAgICBTdG9yZTMyVGFnLAorICAgIFN0b3JlMzJQYXlsb2FkLAorICAg
IFN0b3JlUHRyLAorICAgIFN0b3JlRG91YmxlCit9OworCitlbnVtIFNpbGVudEZpbGxBY3Rpb24g
eworICAgIERvTm90aGluZ0ZvckZpbGwsCisgICAgU2V0SW50MzJDb25zdGFudCwKKyAgICBTZXRC
b29sZWFuQ29uc3RhbnQsCisgICAgU2V0Q2VsbENvbnN0YW50LAorICAgIFNldFRydXN0ZWRKU0Nv
bnN0YW50LAorICAgIFNldEpTQ29uc3RhbnQsCisgICAgU2V0SlNDb25zdGFudFRhZywKKyAgICBT
ZXRKU0NvbnN0YW50UGF5bG9hZCwKKyAgICBTZXRJbnQzMlRhZywKKyAgICBTZXRDZWxsVGFnLAor
ICAgIFNldEJvb2xlYW5UYWcsCisgICAgU2V0RG91YmxlQ29uc3RhbnQsCisgICAgTG9hZDMyVGFn
LAorICAgIExvYWQzMlBheWxvYWQsCisgICAgTG9hZDMyUGF5bG9hZEJveEludCwKKyAgICBMb2Fk
UHRyLAorICAgIExvYWREb3VibGUsCisgICAgTG9hZERvdWJsZUJveERvdWJsZSwKKyAgICBMb2Fk
SlNVbmJveERvdWJsZQorfTsKKworY2xhc3MgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiB7CitwdWJs
aWM6CisgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbigpCisgICAgICAgIDogbV9zcGlsbEFjdGlv
bihEb05vdGhpbmdGb3JTcGlsbCkKKyAgICAgICAgLCBtX2ZpbGxBY3Rpb24oRG9Ob3RoaW5nRm9y
RmlsbCkKKyAgICAgICAgLCBtX3JlZ2lzdGVyKC0xKQorICAgICAgICAsIG1fbm9kZUluZGV4KE5v
Tm9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oU2ls
ZW50U3BpbGxBY3Rpb24gc3BpbGxBY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBT
aWxlbnRGaWxsQWN0aW9uIGZpbGxBY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdw
cikKKyAgICAgICAgOiBtX3NwaWxsQWN0aW9uKHNwaWxsQWN0aW9uKQorICAgICAgICAsIG1fZmls
bEFjdGlvbihmaWxsQWN0aW9uKQorICAgICAgICAsIG1fcmVnaXN0ZXIoZ3ByKQorICAgICAgICAs
IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4oU2lsZW50U3BpbGxBY3Rpb24gc3BpbGxBY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaWxlbnRGaWxsQWN0aW9uIGZpbGxBY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRlBSUmVnIGZwcikKKyAgICAgICAgOiBtX3NwaWxsQWN0aW9uKHNwaWxsQWN0aW9u
KQorICAgICAgICAsIG1fZmlsbEFjdGlvbihmaWxsQWN0aW9uKQorICAgICAgICAsIG1fcmVnaXN0
ZXIoZnByKQorICAgICAgICAsIG1fbm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8U2lsZW50U3BpbGxBY3Rpb24+KG1fc3BpbGxBY3Rpb24pOyB9CisgICAgU2ls
ZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2ls
ZW50RmlsbEFjdGlvbj4obV9maWxsQWN0aW9uKTsgfQorICAgIAorICAgIE5vZGVJbmRleCBub2Rl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX25vZGVJbmRleDsgfQorICAgIAorICAgIEdQUlJlZyBn
cHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fcmVnaXN0ZXIpOyB9Cisg
ICAgRlBSUmVnIGZwcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4obV9yZWdp
c3Rlcik7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50OF90IG1fc3BpbGxBY3Rpb247CisgICAg
aW50OF90IG1fZmlsbEFjdGlvbjsKKyAgICBpbnQ4X3QgbV9yZWdpc3RlcjsKKyAgICBOb2RlSW5k
ZXggbV9ub2RlSW5kZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBs
YW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0
aEdlbmVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Ns
b3dQYXRoR2VuZXJhdG9yX2gKKyNkZWZpbmUgREZHU2xvd1BhdGhHZW5lcmF0b3JfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJ
VC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBTbG93
UGF0aEdlbmVyYXRvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgU2xvd1BhdGhHZW5lcmF0b3IoKSB7IH0KKyAgICB2aXJ0dWFsIH5TbG93UGF0aEdlbmVyYXRv
cigpIHsgfQorICAgIHZvaWQgZ2VuZXJhdGUoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7Cisg
ICAgICAgIG1fbGFiZWwgPSBqaXQtPm1faml0LmxhYmVsKCk7CisgICAgICAgIGdlbmVyYXRlSW50
ZXJuYWwoaml0KTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGppdC0+bV9qaXQuYnJl
YWtwb2ludCgpOyAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgZ2VuZXJhdG9yIGp1bXBzIGJhY2sgdG8g
c29tZXdoZXJlCisjZW5kaWYKKyAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVs
KCkgY29uc3QgeyByZXR1cm4gbV9sYWJlbDsgfQorICAgIHZpcnR1YWwgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gQnkgZGVmYXVsdCBzbG93IHBhdGggZ2VuZXJhdG9ycyBkb24ndCBoYXZlIGEgY2FsbC4KKyAg
ICB9Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3Vs
YXRpdmVKSVQqIGppdCkgPSAwOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2xhYmVsOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CitjbGFzcyBKdW1waW5nU2xvd1BhdGhH
ZW5lcmF0b3IgOiBwdWJsaWMgU2xvd1BhdGhHZW5lcmF0b3IgeworcHVibGljOgorICAgIEp1bXBp
bmdTbG93UGF0aEdlbmVyYXRvcihKdW1wVHlwZSBmcm9tLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
dG8pCisgICAgICAgIDogbV9mcm9tKGZyb20pCisgICAgICAgICwgbV90byh0bykKKyAgICB7Cisg
ICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgbGlua0Zyb20oU3BlY3VsYXRpdmVKSVQq
IGppdCkKKyAgICB7CisgICAgICAgIG1fZnJvbS5saW5rKCZqaXQtPm1faml0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBqdW1wVG8oU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAg
IGppdC0+bV9qaXQuanVtcCgpLmxpbmtUbyhtX3RvLCAmaml0LT5tX2ppdCk7CisgICAgfQorCisg
ICAgSnVtcFR5cGUgbV9mcm9tOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RvOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlw
ZW5hbWUgUmVzdWx0VHlwZT4KK2NsYXNzIENhbGxTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBK
dW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGU+IHsKK3B1YmxpYzoKKyAgICBDYWxsU2xv
d1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBq
aXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNw
aWxsTW9kZSwgUmVzdWx0VHlwZSByZXN1bHQpCisgICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2Vu
ZXJhdG9yPEp1bXBUeXBlPihmcm9tLCBqaXQtPm1faml0LmxhYmVsKCkpCisgICAgICAgICwgbV9m
dW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3NwaWxsTW9kZShzcGlsbE1vZGUpCisgICAg
ICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKG1fc3BpbGxNb2RlID09
IE5lZWRUb1NwaWxsKQorICAgICAgICAgICAgaml0LT5zaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0lt
cGwoZmFsc2UsIG1fcGxhbnMsIHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9j
YWxsOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHNldFVwKFNwZWN1bGF0aXZl
SklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5saW5rRnJvbShqaXQpOworICAgICAgICBp
ZiAobV9zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3BsYW5zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGppdC0+
c2lsZW50U3BpbGwobV9wbGFuc1tpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCByZWNvcmRDYWxsKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCisgICAgeworICAgICAgICBt
X2NhbGwgPSBjYWxsOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlYXJEb3duKFNwZWN1bGF0aXZl
SklUKiBqaXQpCisgICAgeworICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwp
IHsKKyAgICAgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0gU3BlY3VsYXRpdmVKSVQ6OnBpY2tD
YW5UcmFtcGxlKG1fcmVzdWx0KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxh
bnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgIGppdC0+c2lsZW50RmlsbChtX3BsYW5z
W2ldLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLT5qdW1wVG8oaml0KTsK
KyAgICB9CisKKyAgICBGdW5jdGlvblR5cGUgbV9mdW5jdGlvbjsKKyAgICBTcGlsbFJlZ2lzdGVy
c01vZGUgbV9zcGlsbE1vZGU7CisgICAgUmVzdWx0VHlwZSBtX3Jlc3VsdDsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBtX2NhbGw7CisgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4s
IDI+IG1fcGxhbnM7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUg
RnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlPgorY2xhc3MgQ2FsbFJlc3VsdEFuZE5v
QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5l
cmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4geworcHVibGljOgorICAg
IENhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1w
VHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisg
ICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0KQor
ICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBS
ZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwg
cmVzdWx0KQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0
ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRV
cChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlz
LT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCkpOworICAgICAgICB0aGlzLT50ZWFyRG93bihq
aXQpOworICAgIH0KK307CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBl
bmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJn
dW1lbnRUeXBlMT4KK2NsYXNzIENhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJh
dG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlv
blR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1YmxpYzoKKyAgICBDYWxsUmVzdWx0QW5kT25lQXJndW1l
bnRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVK
SVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01v
ZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEp
CisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUs
IFJlc3VsdFR5cGU+KAorICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2Rl
LCByZXN1bHQpCisgICAgICAgICwgbV9hcmd1bWVudDEoYXJndW1lbnQxKQorICAgIHsKKyAgICB9
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZl
SklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlz
LT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5t
X3Jlc3VsdCwgbV9hcmd1bWVudDEpKTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAg
ICB9CisKKyAgICBBcmd1bWVudFR5cGUxIG1fYXJndW1lbnQxOworfTsKKwordGVtcGxhdGU8Cisg
ICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVz
dWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5
cGUyPgorY2xhc3MgQ2FsbFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yCisg
ICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUs
IFJlc3VsdFR5cGU+IHsKK3B1YmxpYzoKKyAgICBDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBq
aXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNw
aWxsTW9kZSwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLAorICAg
ICAgICBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MikKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5l
cmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4oCisgICAgICAgICAgICBm
cm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCkKKyAgICAgICAgLCBtX2FyZ3Vt
ZW50MShhcmd1bWVudDEpCisgICAgICAgICwgbV9hcmd1bWVudDIoYXJndW1lbnQyKQorICAgIHsK
KyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1
bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAg
ICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0
aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEsIG1fYXJndW1lbnQyKSk7CisgICAgICAgIHRoaXMt
PnRlYXJEb3duKGppdCk7CisgICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsK
KyAgICBBcmd1bWVudFR5cGUyIG1fYXJndW1lbnQyOworfTsKKwordGVtcGxhdGU8CisgICAgdHlw
ZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlw
ZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0
eXBlbmFtZSBBcmd1bWVudFR5cGUzPgorY2xhc3MgQ2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRz
U2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVt
cFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4geworcHVibGljOgorICAgIENhbGxSZXN1
bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBm
cm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAg
IFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVu
dFR5cGUxIGFyZ3VtZW50MSwKKyAgICAgICAgQXJndW1lbnRUeXBlMiBhcmd1bWVudDIsIEFyZ3Vt
ZW50VHlwZTMgYXJndW1lbnQzKQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1w
VHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwg
ZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFyZ3Vt
ZW50MSkKKyAgICAgICAgLCBtX2FyZ3VtZW50Mihhcmd1bWVudDIpCisgICAgICAgICwgbV9hcmd1
bWVudDMoYXJndW1lbnQzKQorICAgIHsKKyAgICB9CisKK3Byb3RlY3RlZDogICAgCisgICAgdm9p
ZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0
aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKAorICAgICAgICAgICAg
aml0LT5jYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIHRo
aXMtPm1fcmVzdWx0LCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCisgICAgICAgICAgICAgICAg
bV9hcmd1bWVudDMpKTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisKKyAg
ICBBcmd1bWVudFR5cGUxIG1fYXJndW1lbnQxOworICAgIEFyZ3VtZW50VHlwZTIgbV9hcmd1bWVu
dDI7CisgICAgQXJndW1lbnRUeXBlMyBtX2FyZ3VtZW50MzsKK307CisKK3RlbXBsYXRlPAorICAg
IHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3Vs
dFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBl
MiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGU0Pgor
Y2xhc3MgQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcgorICAgIDog
cHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1
bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwg
RnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxN
b2RlLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsCisgICAgICAg
IEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLCBBcmd1bWVudFR5cGUzIGFyZ3VtZW50MywgQXJndW1l
bnRUeXBlNCBhcmd1bWVudDQpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBU
eXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAorICAgICAgICAgICAgZnJvbSwgaml0LCBm
dW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpCisgICAgICAgICwgbV9hcmd1bWVudDEoYXJndW1l
bnQxKQorICAgICAgICAsIG1fYXJndW1lbnQyKGFyZ3VtZW50MikKKyAgICAgICAgLCBtX2FyZ3Vt
ZW50Myhhcmd1bWVudDMpCisgICAgICAgICwgbV9hcmd1bWVudDQoYXJndW1lbnQ0KQorICAgIHsK
KyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1
bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAg
ICB0aGlzLT5yZWNvcmRDYWxsKAorICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKAorICAg
ICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZ3VtZW50
MSwgbV9hcmd1bWVudDIsCisgICAgICAgICAgICAgICAgbV9hcmd1bWVudDMsIG1fYXJndW1lbnQ0
KSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAgfQorCisgICAgQXJndW1lbnRU
eXBlMSBtX2FyZ3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUyIG1fYXJndW1lbnQyOworICAgIEFy
Z3VtZW50VHlwZTMgbV9hcmd1bWVudDM7CisgICAgQXJndW1lbnRUeXBlNCBtX2FyZ3VtZW50NDsK
K307CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlv
blR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwg
dHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywKKyAgICB0eXBl
bmFtZSBBcmd1bWVudFR5cGU0LCB0eXBlbmFtZSBBcmd1bWVudFR5cGU1PgorY2xhc3MgQ2FsbFJl
c3VsdEFuZEZpdmVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxT
bG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPiB7Citw
dWJsaWM6CisgICAgQ2FsbFJlc3VsdEFuZEZpdmVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBl
IGZ1bmN0aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRU
eXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsCisgICAgICAgIEFyZ3VtZW50VHlw
ZTIgYXJndW1lbnQyLCBBcmd1bWVudFR5cGUzIGFyZ3VtZW50MywgQXJndW1lbnRUeXBlNCBhcmd1
bWVudDQsCisgICAgICAgIEFyZ3VtZW50VHlwZTUgYXJndW1lbnQ1KQorICAgICAgICA6IENhbGxT
bG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAg
ICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgICAg
ICAsIG1fYXJndW1lbnQxKGFyZ3VtZW50MSkKKyAgICAgICAgLCBtX2FyZ3VtZW50Mihhcmd1bWVu
dDIpCisgICAgICAgICwgbV9hcmd1bWVudDMoYXJndW1lbnQzKQorICAgICAgICAsIG1fYXJndW1l
bnQ0KGFyZ3VtZW50NCkKKyAgICAgICAgLCBtX2FyZ3VtZW50NShhcmd1bWVudDUpCisgICAgewor
ICAgIH0KKworcHJvdGVjdGVkOiAgICAKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3Vs
YXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAg
IHRoaXMtPnJlY29yZENhbGwoCisgICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCisgICAg
ICAgICAgICAgICAgdGhpcy0+bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJndW1lbnQx
LCBtX2FyZ3VtZW50MiwKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50MywgbV9hcmd1bWVudDQs
IG1fYXJndW1lbnQ1KSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAgfQorCisg
ICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUyIG1fYXJndW1l
bnQyOworICAgIEFyZ3VtZW50VHlwZTMgbV9hcmd1bWVudDM7CisgICAgQXJndW1lbnRUeXBlNCBt
X2FyZ3VtZW50NDsKKyAgICBBcmd1bWVudFR5cGU1IG1fYXJndW1lbnQ1OworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVz
dWx0VHlwZT4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aENh
bGwoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBl
IGZ1bmN0aW9uLAorICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3Bp
bGxNb2RlID0gTmVlZFRvU3BpbGwpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBu
ZXcgQ2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAg
ICBKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgICAgICBm
cm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCkpOworfQorCit0ZW1wbGF0ZTwK
KyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBS
ZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTE+CitpbmxpbmUgUGFzc093blB0
cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBl
IHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsCisgICAgU3BpbGxSZWdpc3RlcnNNb2Rl
IHNwaWxsTW9kZSA9IE5lZWRUb1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAg
ICAgbmV3IENhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yPAorICAgICAg
ICAgICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRUeXBlMT4o
CisgICAgICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQs
IGFyZ3VtZW50MSkpOworfQorCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFy
Z3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTI+CitpbmxpbmUgUGFzc093blB0cjxT
bG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1
bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJl
c3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAor
ICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRQdHIoCisgICAgICAgIG5ldyBDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1
bHRUeXBlLCBBcmd1bWVudFR5cGUxLCBBcmd1bWVudFR5cGUyPigKKyAgICAgICAgICAgICAgICBm
cm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCwgYXJndW1lbnQxLCBhcmd1bWVu
dDIpKTsKK30KKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5
cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzPgoraW5s
aW5lIFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKKyAgICBKdW1w
VHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisg
ICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLCBBcmd1bWVudFR5
cGUyIGFyZ3VtZW50MiwKKyAgICBBcmd1bWVudFR5cGUzIGFyZ3VtZW50MywgU3BpbGxSZWdpc3Rl
cnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRUb1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigK
KyAgICAgICAgbmV3IENhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9y
PAorICAgICAgICAgICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1l
bnRUeXBlMSwgQXJndW1lbnRUeXBlMiwKKyAgICAgICAgICAgIEFyZ3VtZW50VHlwZTM+KAorICAg
ICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0LCBhcmd1
bWVudDEsIGFyZ3VtZW50MiwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDMpKTsKK30KKwordGVt
cGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlw
ZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBB
cmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLAorICAgIHR5cGVuYW1lIEFyZ3Vt
ZW50VHlwZTQ+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhD
YWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVu
dDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAorICAgIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQz
LCBBcmd1bWVudFR5cGU0IGFyZ3VtZW50NCwKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxN
b2RlID0gTmVlZFRvU3BpbGwpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcg
Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAg
IEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGUsIEFyZ3VtZW50VHlwZTEsIEFyZ3Vt
ZW50VHlwZTIsCisgICAgICAgICAgICBBcmd1bWVudFR5cGUzLCBBcmd1bWVudFR5cGU0PigKKyAg
ICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCwgYXJn
dW1lbnQxLCBhcmd1bWVudDIsCisgICAgICAgICAgICAgICAgYXJndW1lbnQzLCBhcmd1bWVudDQp
KTsKK30KKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUx
LCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLAorICAgIHR5
cGVuYW1lIEFyZ3VtZW50VHlwZTQsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTU+CitpbmxpbmUgUGFz
c093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1
bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJn
dW1lbnQyLAorICAgIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQzLCBBcmd1bWVudFR5cGU0IGFyZ3Vt
ZW50NCwgQXJndW1lbnRUeXBlNSBhcmd1bWVudDUsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNw
aWxsTW9kZSA9IE5lZWRUb1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAg
bmV3IENhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAg
ICAgICBKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5cGUxLCBB
cmd1bWVudFR5cGUyLAorICAgICAgICAgICAgQXJndW1lbnRUeXBlMywgQXJndW1lbnRUeXBlNCwg
QXJndW1lbnRUeXBlNT4oCisgICAgICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3Bp
bGxNb2RlLCByZXN1bHQsIGFyZ3VtZW50MSwgYXJndW1lbnQyLAorICAgICAgICAgICAgICAgIGFy
Z3VtZW50MywgYXJndW1lbnQ0LCBhcmd1bWVudDUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
SnVtcFR5cGUsIHR5cGVuYW1lIERlc3RpbmF0aW9uVHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZT4K
K2NsYXNzIEFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdTbG93UGF0
aEdlbmVyYXRvcjxKdW1wVHlwZT4geworcHVibGljOgorICAgIEFzc2lnbmluZ1Nsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdG8s
IERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlvbiwgU291cmNlVHlwZSBzb3VyY2UpCisgICAgICAg
IDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlPihmcm9tLCB0bykKKyAgICAgICAg
LCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkK
KyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50
ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIHRoaXMtPmxpbmtGcm9t
KGppdCk7CisgICAgICAgIGppdC0+bV9qaXQubW92ZShtX3NvdXJjZSwgbV9kZXN0aW5hdGlvbik7
CisgICAgICAgIHRoaXMtPmp1bXBUbyhqaXQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEZXN0
aW5hdGlvblR5cGUgbV9kZXN0aW5hdGlvbjsKKyAgICBTb3VyY2VUeXBlIG1fc291cmNlOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIERlc3RpbmF0aW9uVHlwZSwg
dHlwZW5hbWUgU291cmNlVHlwZT4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9y
PiBzbG93UGF0aE1vdmUoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwg
U291cmNlVHlwZSBzb3VyY2UsIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlvbikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRQdHIoCisgICAgICAgIG5ldyBBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcjwK
KyAgICAgICAgICAgIEp1bXBUeXBlLCBEZXN0aW5hdGlvblR5cGUsIFNvdXJjZVR5cGU+KAorICAg
ICAgICAgICAgICAgIGZyb20sIGppdC0+bV9qaXQubGFiZWwoKSwgZGVzdGluYXRpb24sIHNvdXJj
ZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEQo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Nsb3dQYXRoR2VuZXJhdG9yX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAxMTQwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogCi0jaW5jbHVkZSAi
SlNCeXRlQXJyYXkuaCIKLQogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0J5dGVBcnJheS5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzU4LDYgKzM1
OSwzMSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgcmV0
dXJuIEludmFsaWRHUFJSZWc7CiB9CiAKK2NsYXNzIFZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVy
YXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6
SnVtcCwgRF9ERkdPcGVyYXRpb25fRUosIEdQUlJlZz4geworcHVibGljOgorICAgIFZhbHVlVG9O
dW1iZXJTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJv
bSwgU3BlY3VsYXRpdmVKSVQqIGppdCwKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVn
IGpzVmFsdWVHUFIpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1i
bGVyOjpKdW1wLCBEX0RGR09wZXJhdGlvbl9FSiwgR1BSUmVnPigKKyAgICAgICAgICAgIGZyb20s
IGppdCwgZGZnQ29udmVydEpTVmFsdWVUb051bWJlciwgTmVlZFRvU3BpbGwsIHJlc3VsdEdQUikK
KyAgICAgICAgLCBtX2pzVmFsdWVHUFIoanNWYWx1ZUdQUikKKyAgICB7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQq
IGppdCkKKyAgICB7CisgICAgICAgIHNldFVwKGppdCk7CisgICAgICAgIHJlY29yZENhbGwoaml0
LT5jYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIsIEZQUkluZm86OnJldHVy
blZhbHVlRlBSLCBtX2pzVmFsdWVHUFIpKTsKKyAgICAgICAgaml0LT5ib3hEb3VibGUoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIG1fcmVzdWx0KTsKKyAgICAgICAgdGVhckRvd24oaml0KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgR1BSUmVnIG1fanNWYWx1ZUdQUjsKK307CisKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2RlJiBub2RlKQogewog
ICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CkBAIC0zODUs
MTkgKzQxMSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAg
ICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBncHIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGhh
c1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CiAKLSAgICAvLyBOZXh0IGhhbmRsZSBjZWxs
cyAoJiBvdGhlciBKUyBpbW1lZGlhdGVzKQotICAgIG5vbk51bWVyaWMubGluaygmbV9qaXQpOwot
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdD
b252ZXJ0SlNWYWx1ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwganNWYWx1ZUdw
cik7Ci0gICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBncHIpOwotICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxs
ZWRUb051bWJlciA9IG1faml0Lmp1bXAoKTsKLSAgICAKICAgICAvLyBGaW5hbGx5LCBoYW5kbGUg
aW50ZWdlcnMuCiAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKICAgICBtX2ppdC5vclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7CiAgICAgaGFz
VW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7Ci0gICAgaGFzQ2FsbGVkVG9OdW1iZXIubGluaygm
bV9qaXQpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBWYWx1
ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3Iobm9uTnVtZXJpYywgdGhpcywgZ3ByLCBqc1ZhbHVl
R3ByKSkpOwogICAgIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KQEAgLTQyMSwxMyArNDQwLDEx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICAgICAgRlBS
UmVnIGZwciA9IG9wMS5mcHIoKTsKICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsK
ICAgICAgICAgb3AxLnVzZSgpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0cnVuY2F0ZWRU
b0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJ
VENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7Ci0gICAgICAgIAotICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKHRv
SW50MzIsIGdwciwgZnByKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5i
cmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJ
ZlRydW5jYXRlRmFpbGVkKTsKICAgICAgICAgCi0gICAgICAgIHRydW5jYXRlZFRvSW50ZWdlci5s
aW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywgdG9JbnQzMiwgZ3ByLCBm
cHIpKTsKKwogICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00Mzgs
MTggKzQ1NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBvcDEudXNlKCk7CiAKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKLQotICAgIC8vIEZpcnN0IGhhbmRsZSBub24taW50ZWdlcnMKLSAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVy
dEpTVmFsdWVUb0ludDMyLCByZXN1bHRHUFIsIGpzVmFsdWVHcHIpOwotICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRU
b0ludDMyID0gbV9qaXQuanVtcCgpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90SW50ZWdl
ciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGpzVmFsdWVHcHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKLSAgICAvLyBUaGVuIGhhbmRsZSBpbnRl
Z2Vycy4KLSAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwogICAgIG1faml0Lnplcm9FeHRlbmQz
MlRvUHRyKGpzVmFsdWVHcHIsIHJlc3VsdEdQUik7Ci0gICAgaGFzQ2FsbGVkVG9JbnQzMi5saW5r
KCZtX2ppdCk7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIHNsb3dQ
YXRoQ2FsbChpc05vdEludGVnZXIsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgcmVz
dWx0R1BSLCBqc1ZhbHVlR3ByKSk7CisKICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKQEAgLTQ3Nyw3
ICs0ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJbnQzCiAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotSklUQ29t
cGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hH
UFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRo
VGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBH
UFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUpCiB7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVU
b0NvbXBhcmU7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21w
YXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigt
MSkpKTsKQEAgLTQ4NSwzMSArNDk3LDMxIEBAIEpJVENvbXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWQKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAg
ICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9h
ZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKLSAg
ICAKLSAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKLSAgICAgICAgc2xvd1BhdGhUYXJn
ZXQubGluaygmbV9qaXQpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9
IG1faml0LmxhYmVsKCk7Ci0KLSAgICBpZiAoc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQotICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRHUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwot
ICAgIGlmIChzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCi0gICAgICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAKLSAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAK
ICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLQotICAg
IG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4s
IHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgbG9hZFdp
dGhQYXRjaCwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwg
c2FmZUNhc3Q8aW50OF90PihyZXN1bHRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIp
LCBzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwgPyBQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0
ZXJzSW5Vc2UgOiBQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJzRmx1c2hlZCkpOwogICAg
IAorICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CisgICAgaWYgKCFzbG93
UGF0aFRhcmdldC5pc1NldCgpKSB7CisgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgc3RydWN0dXJlQ2hlY2ssIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0R1BSLCBiYXNlR1BSLAorICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVy
TnVtYmVyKSwgc3BpbGxNb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNo
ZWNrKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7CisgICAgICAg
IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdEdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAg
IGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlciksIHNwaWxsTW9kZSk7CisgICAgfQorICAgIG1f
aml0LmFkZFByb3BlcnR5QWNjZXNzKAorICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKKyAg
ICAgICAgICAgIGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ss
IGxvYWRXaXRoUGF0Y2gsIHNsb3dQYXRoLmdldCgpLAorICAgICAgICAgICAgZG9uZUxhYmVsLCBz
YWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHJlc3VsdEdQUiksCisg
ICAgICAgICAgICBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpLAorICAgICAgICAgICAgc3Bp
bGxNb2RlID09IE5lZWRUb1NwaWxsID8gUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lzdGVyc0lu
VXNlIDogUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lzdGVyc0ZsdXNoZWQpKTsKKyAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOworCiAgICAgaWYgKHNjcmF0Y2hH
UFIgIT0gcmVzdWx0R1BSICYmIHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyAmJiBzcGlsbE1v
ZGUgPT0gTmVlZFRvU3BpbGwpCiAgICAgICAgIHVubG9jayhzY3JhdGNoR1BSKTsKLSAgICAKLSAg
ICByZXR1cm4gZnVuY3Rpb25DYWxsOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQ
dXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1
ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJn
ZXQpCkBAIC01MjMsMTYgKzUzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQoQ29kZU8KICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CiAgICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJX
aXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCAwKSk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OwotCi0gICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQpOwotCi0gICAgaWYgKHNsb3dQYXRo
VGFyZ2V0LmlzU2V0KCkpCi0gICAgICAgIHNsb3dQYXRoVGFyZ2V0LmxpbmsoJm1faml0KTsKLQot
ICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBKSVRDb21waWxlcjo6
TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKKyAgICAKICAgICBWX0RGR09wZXJhdGlv
bl9FSkNJIG9wdGltaXplZENhbGw7CiAgICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3IoYXQobV9j
b21waWxlSW5kZXgpLmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVj
dCkKQEAgLTU0NSwxMyArNTQ5LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQoQ29kZU8KICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgZnVuY3Rpb25DYWxsID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRDYWxsLCB2YWx1ZUdQUiwg
YmFzZUdQUiwgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
IEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotCi0gICAgbV9q
aXQuYWRkUHJvcGVydHlBY2Nlc3MoUHJvcGVydHlBY2Nlc3NSZWNvcmQoY29kZU9yaWdpbiwgc3Ry
dWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwsIHN0cnVjdHVyZUNoZWNrLCBKSVRDb21waWxl
cjo6RGF0YUxhYmVsQ29tcGFjdChzdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwgc2xvd0Nhc2UsIGRv
bmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50OF90Pih2YWx1
ZUdQUiksIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikpKTsKKyAgICBPd25QdHI8U2xvd1Bh
dGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgIGlmICghc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkg
eworICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHN0cnVjdHVy
ZUNoZWNrLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBJbnZhbGlkR1BSUmVnLCB2YWx1ZUdQUiwgYmFz
ZUdQUiwKKyAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoc3RydWN0dXJlQ2hlY2spOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKHNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wdGltaXplZENhbGwsIEludmFsaWRHUFJSZWcs
IHZhbHVlR1BSLCBiYXNlR1BSLAorICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVt
YmVyKSk7CisgICAgfQorICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNz
UmVjb3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHN0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLCBzbG93
UGF0aC5nZXQoKSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZlQ2Fz
dDxpbnQ4X3Q+KHZhbHVlR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSkpOworICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9w
ZXJhbmQsIGJvb2wgaW52ZXJ0KQpAQCAtODQwLDYgKzg1MiwzNSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAganVtcChub3RUYWtlbik7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIEp1bXBUeXBlPgorY2xhc3MgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0
aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwg
U19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKK3B1YmxpYzoKKyAgICBDb21wYXJlQW5kQm94
Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxh
dGl2ZUpJVCogaml0LAorICAgICAgICBTX0RGR09wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICAgICAgOiBDYWxsU2xvd1Bh
dGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAg
ICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRUb1NwaWxsLCByZXN1bHQpCisgICAgICAg
ICwgbV9hcmcxKGFyZzEpCisgICAgICAgICwgbV9hcmcyKGFyZzIpCisgICAgeworICAgIH0KKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxh
dGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAgICAg
dGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgdGhp
cy0+bV9yZXN1bHQsIG1fYXJnMSwgbV9hcmcyKSk7CisgICAgICAgIGppdC0+bV9qaXQuYW5kMzIo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgdGhpcy0+bV9yZXN1bHQpOworICAgICAgICBq
aXQtPm1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgdGhp
cy0+bV9yZXN1bHQpOworICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KKyAgIAor
cHJpdmF0ZToKKyAgICBHUFJSZWcgbV9hcmcxOworICAgIEdQUlJlZyBtX2FyZzI7Cit9OworCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9k
ZSYgbm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKQEAgLTg2MCw1NiArOTAxLDQyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkp
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKLQotICAgICAgICBub3RFcXVhbENhc2UubGluaygmbV9qaXQpOwotICAg
ICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRHUFIs
IGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgYWRvcHRQdHIoCisgICAgICAgICAgICAgICAgbmV3IENvbXBhcmVBbmRCb3hCb29sZWFu
U2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXA+KAorICAgICAgICAgICAgICAg
ICAgICBub3RFcXVhbENhc2UsIHRoaXMsIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJl
c3VsdEdQUiwgYXJnMUdQUiwKKyAgICAgICAgICAgICAgICAgICAgYXJnMkdQUikpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBtX2ppdC5vclB0cihhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIp
OwogICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoQ2FzZXM7
CisgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBsZWZ0
T0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbGVmdERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8s
IGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHNsb3dQ
YXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8s
IGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBsZWZ0
T0subGluaygmbV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCByaWdodE9LID0gbV9q
aXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGFyZzJHUFIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHJpZ2h0
RG91YmxlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgc2xvd1BhdGhDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIHJpZ2h0T0subGlu
aygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihpbnZlcnQgPyBK
SVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRvbmUxID0gbV9qaXQuanVtcCgpOworICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgdHdvQ2VsbHNDYXNlLmxp
bmsoJm1faml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9q
aXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUik7Cisg
ICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1v
dmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbigh
aW52ZXJ0KSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZTIgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBsZWZ0RG91YmxlLmxp
bmsoJm1faml0KTsKLSAgICAgICAgcmlnaHREb3VibGUubGluaygmbV9qaXQpOwotICAgICAgICBu
b3RFcXVhbENhc2UubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICBhZG9wdFB0cigKKyAgICAgICAgICAgICAgICBuZXcgQ29tcGFy
ZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+
KAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhc2VzLCB0aGlzLCBvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMUdQUiwKKyAgICAgICAgICAgICAgICAgICAgYXJn
MkdQUikpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotCi0gICAgICAgIGRvbmUxLmxpbmsoJm1faml0KTsK
LQotICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lMi5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0KICAgICAKICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0xNzY2LDEzICsxNzkzLDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAKICAgICBtX2ppdC5tb3ZlKGFyZzFH
UFIsIHJlc3VsdEdQUik7CiAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1
bXAgZmFzdENhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6
Ok5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpOwogICAgIAotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcx
R1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgCi0gICAg
ZmFzdENhc2UubGluaygmbV9qaXQpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFu
LCByZXN1bHRHUFIsIGFyZzFHUFIpKTsKICAgICAKICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwogICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVh
biwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTI1NDUsMTUgKzI1NjksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIHByb3BlcnR5
LnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHdpdGhpbkFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICAvLyBDb2RlIHRv
IGhhbmRsZSBwdXQgYmV5b25kIGFycmF5IGJvdW5kcy4KLSAgICAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMoc2NyYXRjaFJlZyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuY29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsIGJh
c2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZyk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMoc2NyYXRjaFJlZyk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHdhc0JleW9uZEFy
cmF5Qm91bmRzID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIHdpdGhpbkFycmF5Qm91bmRzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3Vu
ZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKIAogICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuCiAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKQEAgLTI1NzUsNyArMjU5MSwxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIFN0
b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSkpOwogCi0gICAgICAgIHdhc0JleW9uZEFycmF5Qm91bmRzLmxpbmsoJm1faml0
KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRoaXMsCisgICAgICAgICAg
ICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZh
bHVlUmVnKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2MiwxNSArMjc4MiwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0
LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsK
ICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzdG9yYWdlTGVu
Z3RoR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2gsIHN0b3Jh
Z2VMZW5ndGhHUFIsIHZhbHVlR1BSLCBiYXNlR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQ
dXNoLCBJbnZhbGlkR1BSUmVnLCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgIHZh
bHVlR1BSLCBiYXNlR1BSKSk7CiAgICAgICAgIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3Jh
Z2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0yODA4LDIz
ICsyODIzLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpKTsKICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOwotICAgICAgICAKLSAgICAgICAgZG9u
ZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgCi0gICAgICAgIGhvbGVDYXNlLmxpbmso
Jm1faml0KTsKLSAgICAgICAgZW1wdHlBcnJheUNhc2UubGluaygmbV9qaXQpOwotICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVt
cCgpKTsKLSAgICAgICAgCi0gICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAg
Ci0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHZhbHVlR1BSKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpOwotICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHZhbHVlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRv
bmUubGluaygmbV9qaXQpOwotICAgICAgICAKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAgICAgICAgaG9sZUNhc2UsIHRo
aXMsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgCisgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJh
c2VHUFIpKTsKKwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI5MjQsMjEgKzI5MzEsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoIShtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGlj
dEJvb2xlYW4pKSkKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwog
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBhbHJl
YWR5UHJpbWl0aXZlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZl
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFH
UFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgYWxyZWFkeVByaW1p
dGl2ZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTU3RyaW5nOjpzX2luZm8pKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvUHJpbWl0aXZlLCByZXN1bHRHUFIs
IG9wMUdQUik7Ci0gICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJp
bWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3Ax
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OmNsYXNzSW5m
b09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTU3RyaW5nOjpzX2lu
Zm8pKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZt
X2ppdCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90UHJpbWl0
aXZlLCB0aGlzLCBvcGVyYXRpb25Ub1ByaW1pdGl2ZSwgcmVzdWx0R1BSLCBvcDFHUFIpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29t
cGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAtMzA5NCwxOCArMzA5
NCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IAogICAgICAgICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHNsb3dQYXRo
LmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlzSW5saW5lZCwg
cmVzdWx0R1BSLCBwcm90b0dQUiwgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIHByb3RvR1BSKTsKLSAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Cisg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVh
dGVUaGlzSW5saW5lZCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBwcm90b0dQUiwg
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZVRoaXMsIHJl
c3VsdEdQUiwgcHJvdG9HUFIpKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogICAgICAgICBicmVhazsKQEAgLTMxMjIsMTUgKzMxMTksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBlbWl0QWxsb2Nh
dGVKU0ZpbmFsT2JqZWN0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKSwgcmVz
dWx0R1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgc2xv
d1BhdGgubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmpl
Y3QsIHJlc3VsdEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld09i
amVjdCwgcmVzdWx0R1BSKSk7CiAgICAgICAgIAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3MDUsMjEgKzM2OTQsMTgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2pp
dC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQubW92ZShK
SVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZXNvbHZlSW5mb0FkZHJlc3MpLCByZXNvbHZlSW5m
b0dQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2
ZUluZm9HUFIsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgc3RydWN0dXJlKSks
IHJlc3VsdEdQUik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZXNNYXRjaCA9
IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGls
ZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7
Ci0KLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlR2xvYmFsLCByZXN1bHRHUFIsIHJlc29sdmVJ
bmZvR1BSLCAmbV9qaXQuY29kZUJsb2NrKCktPmlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVt
YmVyKSk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLQotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCB3YXNTbG93ID0gbV9qaXQuanVtcCgpOworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVzRG9udE1hdGNoID0gbV9qaXQuYnJhbmNoUHRyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKIAogICAgICAgICAvLyBG
YXN0IGNhc2UKLSAgICAgICAgc3RydWN0dXJlc01hdGNoLmxpbmsoJm1faml0KTsKICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoR2xvYmFsUmVzb2x2ZUluZm8sIG9mZnNldCkpLCByZXNvbHZlSW5mb0dQUik7CiAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJlc29s
dmVJbmZvR1BSLCBKSVRDb21waWxlcjo6U2NhbGVQdHIpLCByZXN1bHRHUFIpOwogCi0gICAgICAg
IHdhc1Nsb3cubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzRG9udE1h
dGNoLCB0aGlzLCBvcGVyYXRpb25SZXNvbHZlR2xvYmFsLAorICAgICAgICAgICAgICAgIHJlc3Vs
dEdQUiwgcmVzb2x2ZUluZm9HUFIsCisgICAgICAgICAgICAgICAgJm1faml0LmNvZGVCbG9jaygp
LT5pZGVudGlmaWVyKGRhdGEuaWRlbnRpZmllck51bWJlcikpKTsKIAogICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3
MzQsMTMgKzM3MjAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAg
ICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGFscmVhZHlDcmVhdGVkID0gbV9qaXQu
YnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29t
cGlsZXI6Olplcm8sIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNy
ZWF0ZUFjdGl2YXRpb24sIHJlc3VsdEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGFscmVhZHlDcmVhdGVkLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0
aENhbGwobm90Q3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbiwgcmVzdWx0
R1BSKSk7CiAgICAgICAgIAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3NTAsMTMgKzM3MzMsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVk
ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgdmFsdWVHUFIpOwotICAg
ICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24sIHZhbHVlR1BS
KTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29t
cGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSKTsKICAgICAgICAgCi0gICAgICAgIG5vdENyZWF0ZWQu
bGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbChjcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbiwg
SW52YWxpZEdQUlJlZywgdmFsdWVHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzc1LDE0ICszNzU1LDEyIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAg
IG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBhbHJlYWR5Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29t
cGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAg
ICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb24sIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJsb2NrKCkt
PmZ1bmN0aW9uRGVjbChub2RlLmZ1bmN0aW9uRGVjbEluZGV4KCkpKTsKLSAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0
R1BSKTsKICAgICAgICAgCi0gICAgICAgIGFscmVhZHlDcmVhdGVkLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICAgICAgbm90Q3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uTmV3RnVuY3Rpb24sCisg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBtX2ppdC5jb2RlQmxvY2soKS0+ZnVuY3Rpb25EZWNs
KG5vZGUuZnVuY3Rpb25EZWNsSW5kZXgoKSkpKTsKICAgICAgICAgCiAgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDExNDAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsNDIgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJK
U0J5dGVBcnJheS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCitTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29t
cGlsZXImIGppdCkKKyAgICA6IG1fY29tcGlsZU9rYXkodHJ1ZSkKKyAgICAsIG1faml0KGppdCkK
KyAgICAsIG1fY29tcGlsZUluZGV4KDApCisgICAgLCBtX2luZGV4SW5CbG9jaygwKQorICAgICwg
bV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMp
CisgICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpKQorICAgICwg
bV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpCisgICAgLCBtX3Zh
cmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQo
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAsIG1fc3RhdGUobV9qaXQuZ3Jh
cGgoKSkKK3sKK30KKworU3BlY3VsYXRpdmVKSVQ6On5TcGVjdWxhdGl2ZUpJVCgpCit7CisgICAg
V1RGOjpkZWxldGVBbGxWYWx1ZXMobV9zbG93UGF0aEdlbmVyYXRvcnMpOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPiBzbG93UGF0aEdlbmVyYXRvcikKK3sKKyAgICBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5h
cHBlbmQoc2xvd1BhdGhHZW5lcmF0b3IubGVha1B0cigpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9zbG93UGF0aEdlbmVyYXRvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fc2xvd1Bh
dGhHZW5lcmF0b3JzW2ldLT5nZW5lcmF0ZSh0aGlzKTsKK30KKwogLy8gT24gV2luZG93cyB3ZSBu
ZWVkIHRvIHdyYXAgZm1vZDsgb24gb3RoZXIgcGxhdGZvcm1zIHdlIGNhbiBjYWxsIGl0IGRpcmVj
dGx5LgogLy8gT24gQVJNdjcgd2UgYXNzZXJ0IHRoYXQgYWxsIGZ1bmN0aW9uIHBvaW50ZXJzIGhh
dmUgdG8gbG93IGJpdCBzZXQgKHBvaW50IHRvIHRodW1iIGNvZGUpLgogI2lmIENBTExJTkdfQ09O
VkVOVElPTl9JU19TVERDQUxMIHx8IENQVShBUk1fVEhVTUIyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTE0MDE0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgog
I2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAiREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9j
YXRvci5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKK2NsYXNzIFNsb3dQYXRoR2Vu
ZXJhdG9yOwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiBjbGFzcyBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZDsKIGNsYXNzIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZDsKQEAgLTE3NSw2ICsxNzcs
NyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAgIFNwZWN1bGF0aXZlSklUKEpJVENvbXBp
bGVyJik7CisgICAgflNwZWN1bGF0aXZlSklUKCk7CiAKICAgICBib29sIGNvbXBpbGUoKTsKICAg
ICB2b2lkIGNyZWF0ZU9TUkVudHJpZXMoKTsKQEAgLTM2Niw3ICszNjksOSBAQCBwdWJsaWM6CiAg
ICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGVJbmRleCk7CiAgICAgR2VuZXJhdGVk
T3BlcmFuZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlSW5kZXgpOwogCi1w
cml2YXRlOgorICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxTbG93UGF0
aEdlbmVyYXRvcj4pOworICAgIHZvaWQgcnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CisgICAgCiAg
ICAgdm9pZCBjb21waWxlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsK
ICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwpAQCAtMzgwLDI0MyArMzg1LDMyMSBAQCBw
cml2YXRlOgogICAgIC8vIHRoZXkgc3BpbGwgYWxsIGxpdmUgdmFsdWVzIHRvIHRoZSBhcHByb3By
aWF0ZQogICAgIC8vIHNsb3RzIGluIHRoZSBSZWdpc3RlckZpbGUgd2l0aG91dCBjaGFuZ2luZyBh
bnkgc3RhdGUKICAgICAvLyBpbiB0aGUgR2VuZXJhdGlvbkluZm8uCi0gICAgdm9pZCBzaWxlbnRT
cGlsbEdQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgR1BSUmVnIHNvdXJjZSkKKyAgICBTaWxl
bnRSZWdpc3RlclNhdmVQbGFuIHNpbGVudFNhdmVQbGFuRm9yR1BSKFZpcnR1YWxSZWdpc3RlciBz
cGlsbE1lLCBHUFJSZWcgc291cmNlKQogICAgIHsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdp
c3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91YmxlKTsKLQotICAgICAgICBpZiAoIWluZm8u
bmVlZHNTcGlsbCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCisgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICBOb2RlJiBub2RlID0gYXQobm9k
ZUluZGV4KTsKICAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0
ZXJGb3JtYXQoKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEFTU0VSVChpbmZvLmdw
cigpID09IHNvdXJjZSk7Ci0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
SW50ZWdlcikKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc291cmNlLCBKSVRDb21waWxlcjo6
YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9y
bWF0RG91YmxlKTsKKyAgICAgICAgCisgICAgICAgIFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0
aW9uOworICAgICAgICBTaWxlbnRGaWxsQWN0aW9uIGZpbGxBY3Rpb247CisgICAgICAgIAorICAg
ICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKQorICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBE
b05vdGhpbmdGb3JTcGlsbDsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVn
aXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1h
dENlbGwgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwotICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoc291cmNlLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1l
KSk7Ci0gICAgICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlmIChyZWdp
c3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUykgewotICAgICAgICAgICAgQVNTRVJUKGluZm8udGFn
R1BSKCkgPT0gc291cmNlIHx8IGluZm8ucGF5bG9hZEdQUigpID09IHNvdXJjZSk7Ci0gICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgc291cmNlID09IGluZm8udGFnR1BSKCkgPyBKSVRD
b21waWxlcjo6dGFnRm9yKHNwaWxsTWUpIDogSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxN
ZSkpOwotICAgICAgICB9IGVsc2UgeworI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBB
U1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihz
b3VyY2UsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAg
ICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmUzMlBheWxvYWQ7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMg
fHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgcmVnaXN0ZXJGb3JtYXQgPT0g
RGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmVQ
dHI7CisgICAgICAgICAgICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAg
aWYgKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGluZm8udGFnR1BSKCkgPT0gc291cmNlIHx8IGluZm8ucGF5bG9hZEdQUigpID09IHNvdXJj
ZSk7CisgICAgICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBzb3VyY2UgPT0gaW5mby50YWdHUFIo
KSA/IFN0b3JlMzJUYWcgOiBTdG9yZTMyUGF5bG9hZDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKKyAgICAgICAgICAg
ICAgICBzcGlsbEFjdGlvbiA9IFN0b3JlMzJQYXlsb2FkOworICAgICAgICAgICAgfQogI2VuZGlm
Ci0gICAgfQotICAgIHZvaWQgc2lsZW50U3BpbGxGUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUs
IEZQUlJlZyBzb3VyY2UpCi0gICAgewotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0gICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0KLSAgICAgICAgaWYgKCFpbmZvLm5lZWRzU3Bp
bGwoKSkgewotICAgICAgICAgICAgLy8gaXQncyBlaXRoZXIgYSBjb25zdGFudCBvciBpdCdzIGFs
cmVhZHkgYmVlbiBzcGlsbGVkCi0gICAgICAgICAgICBBU1NFUlQoYXQoaW5mby5ub2RlSW5kZXgo
KSkuaGFzQ29uc3RhbnQoKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUp
OwotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBp
dCdzIG5laXRoZXIgYSBjb25zdGFudCBub3IgaGFzIGl0IGJlZW4gc3BpbGxlZC4KLSAgICAgICAg
QVNTRVJUKCFhdChpbmZvLm5vZGVJbmRleCgpKS5oYXNDb25zdGFudCgpKTsKLSAgICAgICAgQVNT
RVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgIEFTU0VS
VChpbmZvLmZwcigpID09IHNvdXJjZSk7Ci0KLSAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoc291
cmNlLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzaWxlbnRGaWxsR1BSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcgdGFyZ2V0KQot
ICAgIHsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Nw
aWxsTWVdOwotCi0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgp
OwotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgIEFTU0VSVChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0gICAgICAgIERhdGFG
b3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7Ci0KICAgICAgICAg
aWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3By
KCkgPT0gc291cmNlKTsKICAgICAgICAgICAgIEFTU0VSVChpc0pTSW50ZWdlcihpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkpKTsKICAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4
KSksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldEludDMyQ29uc3Rh
bnQ7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBE
YXRhRm9ybWF0Qm9vbGVhbikgeworICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQ
YXlsb2FkOworICAgICAgICB9IGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRC
b29sZWFuKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIEFTU0VSVChpbmZv
LmdwcigpID09IHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3Vy
Y2UpOwogICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChpc0Jvb2xlYW5Db25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5vZGVJbmRl
eCkpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRCb29sZWFuQ29u
c3RhbnQ7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7CiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
Q2VsbCkgewotICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCkgeworICAgICAg
ICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAgICAgICAgIGlmIChub2Rl
Lmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuaXND
ZWxsKCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2YWx1ZS5h
c0NlbGwoKSksIHRhcmdldCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZ2lzdGVyRm9y
bWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIo
KSA9PSB0YXJnZXQpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAg
ICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldENlbGxDb25zdGFudDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0g
dGFyZ2V0KTsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAg
aWYgKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNDZWxsKCkpCi0gICAgICAgICAgICAg
ICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRyKG5vZGVJbmRleCkuYXNUcnVz
dGVkSW1tUHRyKCksIHRhcmdldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRyKG5vZGVJbmRleCksIHRhcmdldCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRl
Z2VyKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpT
SW50ZWdlcik7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHRhcmdldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5mby5z
cGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChy
ZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAg
ICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHRhcmdl
dCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBmaWxsQWN0
aW9uID0gTG9hZFB0cjsKICNlbHNlCi0gICAgICAgIEFTU0VSVChpbmZvLnRhZ0dQUigpID09IHRh
cmdldCB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSB0YXJnZXQpOwotICAgICAgICBpZiAobm9kZS5o
YXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShpbmZvLnRhZ0dQUigpID09IHRh
cmdldCA/IEltbTMyKHYudGFnKCkpIDogSW1tMzIodi5wYXlsb2FkKCkpLCB0YXJnZXQpOwotICAg
ICAgICB9IGVsc2UgaWYgKGluZm8ucGF5bG9hZEdQUigpID09IHRhcmdldCkKLSAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsK
LSAgICAgICAgZWxzZSB7IC8vIEZpbGwgdGhlIFRhZwotICAgICAgICAgICAgc3dpdGNoIChpbmZv
LnNwaWxsRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6Cisg
ICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7CisjZW5kaWYKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
U3RvcmFnZSkgeworICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKKyAg
ICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkUHRyOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKKyAgICAg
ICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc0NlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
ZmlsbEFjdGlvbiA9IFNldFRydXN0ZWRKU0NvbnN0YW50OworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldEpTQ29uc3RhbnQ7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikg
ewogICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJ
bnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZv
cm1hdCA9PSBEYXRhRm9ybWF0SlNDZWxsKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0Jvb2xlYW4pOwotICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0
YXJnZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSwg
dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmaWxsQWN0
aW9uID0gTG9hZDMyUGF5bG9hZEJveEludDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5z
cGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgICAgICAg
ICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZUJveERvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkUHRyOworI2Vsc2UKKyAgICAgICAgICAg
IEFTU0VSVChpbmZvLnRhZ0dQUigpID09IHNvdXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBz
b3VyY2UpOworICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAg
ICAgICAgIEpTVmFsdWUgdiA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgZmlsbEFjdGlvbiA9IGluZm8udGFnR1BSKCkgPT0gdGFyZ2V0ID8gU2V0SlNDb25z
dGFudFRhZyA6IFNldEpTQ29uc3RhbnRQYXlsb2FkOworICAgICAgICAgICAgfSBlbHNlIGlmIChp
bmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpCisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9
IExvYWQzMlBheWxvYWQ7CisgICAgICAgICAgICBlbHNlIHsgLy8gRmlsbCB0aGUgVGFnCisgICAg
ICAgICAgICAgICAgc3dpdGNoIChpbmZvLnNwaWxsRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgICAgICAgICAgICAg
IGZpbGxBY3Rpb24gPSBTZXRJbnQzMlRhZzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0NlbGwpOworICAgICAgICAgICAg
ICAgICAgICBmaWxsQWN0aW9uID0gU2V0Q2VsbFRhZzsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0Jvb2xlYW4pOwor
ICAgICAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0Qm9vbGVhblRhZzsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlRhZzsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CiAjZW5kaWYK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFNpbGVudFJlZ2lzdGVyU2F2ZVBs
YW4oc3BpbGxBY3Rpb24sIGZpbGxBY3Rpb24sIG5vZGVJbmRleCwgc291cmNlKTsKICAgICB9Ci0K
LSAgICB2b2lkIHNpbGVudEZpbGxGUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBj
YW5UcmFtcGxlLCBGUFJSZWcgdGFyZ2V0KQorICAgIAorICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBs
YW4gc2lsZW50U2F2ZVBsYW5Gb3JGUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEZQUlJlZyBz
b3VyY2UpCiAgICAgewogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bc3BpbGxNZV07Ci0gICAgICAgIEFTU0VSVChpbmZvLmZwcigpID09IHRhcmdldCk7Ci0K
ICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CiAgICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7CisgICAg
ICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7Cisg
ICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKTsKIAotICAg
ICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNOdW1i
ZXJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKGJp
dHdpc2VfY2FzdDx2b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpKSwgY2Fu
VHJhbXBsZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoY2FuVHJhbXBsZSwg
dGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU2lsZW50U3BpbGxBY3Rpb24g
c3BpbGxBY3Rpb247CisgICAgICAgIFNpbGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbjsKKyAgICAg
ICAgCisgICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpCisgICAgICAgICAgICBzcGlsbEFj
dGlvbiA9IERvTm90aGluZ0ZvclNwaWxsOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFT
U0VSVCghYXQoaW5mby5ub2RlSW5kZXgoKSkuaGFzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBB
U1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAgICAg
IEFTU0VSVChpbmZvLmZwcigpID09IHNvdXJjZSk7CisgICAgICAgICAgICBzcGlsbEFjdGlvbiA9
IFN0b3JlRG91YmxlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaW5mby5zcGls
bEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lICYmIGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0RG91YmxlKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaWYgKG5vZGUuaGFz
Q29uc3RhbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGlzTnVtYmVyQ29uc3RhbnQobm9kZUlu
ZGV4KSk7CisgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0RG91YmxlQ29uc3RhbnQ7CisgICAg
ICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lICYmIGlu
Zm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91YmxlKSB7CiAgICAgICAgICAgICAvLyBp
dCB3YXMgYWxyZWFkeSBzcGlsbGVkIHByZXZpb3VzbHkgYW5kIG5vdCBhcyBhIGRvdWJsZSwgd2hp
Y2ggbWVhbnMgd2UgbmVlZCB1bmJveGluZy4KICAgICAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxs
Rm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgY2FuVHJhbXBsZSk7Ci0gICAgICAgICAgICB1
bmJveERvdWJsZShjYW5UcmFtcGxlLCB0YXJnZXQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihzcGlsbE1lKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkSlNVbmJv
eERvdWJsZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZERv
dWJsZTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIFVOVVNFRF9QQVJBTShjYW5U
cmFtcGxlKTsKICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0RG91YmxlIHx8IGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUp
OwogICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
aXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGZpbGxBY3Rpb24gPSBTZXREb3VibGVDb25zdGFudDsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUp
LCB0YXJnZXQpOworICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWREb3VibGU7CiAjZW5kaWYK
LSAgICB9CiAKLSAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEdQUlJlZyBleGNsdWRl
LCBHUFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gU2lsZW50
UmVnaXN0ZXJTYXZlUGxhbihzcGlsbEFjdGlvbiwgZmlsbEFjdGlvbiwgbm9kZUluZGV4LCBzb3Vy
Y2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNpbGVudFNwaWxsKGNvbnN0IFNpbGVudFJlZ2lz
dGVyU2F2ZVBsYW4mIHBsYW4pCiAgICAgewotICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVy
ID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBpdGVyLnJlZ0lEKCk7Ci0gICAgICAgICAgICBpZiAoaXRlci5u
YW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBncHIgIT0gZXhjbHVkZSAmJiBncHIg
IT0gZXhjbHVkZTIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxHUFIoaXRlci5uYW1lKCks
IGdwcik7CisgICAgICAgIHN3aXRjaCAocGxhbi5zcGlsbEFjdGlvbigpKSB7CisgICAgICAgIGNh
c2UgRG9Ob3RoaW5nRm9yU3BpbGw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
dG9yZTMyVGFnOgorICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwbGFuLmdwcigpLCBKSVRDb21w
aWxlcjo6dGFnRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZTMyUGF5bG9hZDoKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIocGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXQo
cGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN0b3JlUHRyOgorICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocGxh
bi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmly
dHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3Jl
RG91YmxlOgorICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocGxhbi5mcHIoKSwgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChmcHJfaXRlcmF0b3Ig
aXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAg
ICAgICAgICAgICAgICBzaWxlbnRTcGlsbEZQUihpdGVyLm5hbWUoKSwgaXRlci5yZWdJRCgpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzaWxlbnRGaWxsKGNvbnN0IFNpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4mIHBsYW4sIEdQUlJlZyBjYW5UcmFtcGxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChw
bGFuLmZpbGxBY3Rpb24oKSkgeworICAgICAgICBjYXNlIERvTm90aGluZ0ZvckZpbGw6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRJbnQzMkNvbnN0YW50OgorICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChwbGFuLm5vZGVJbmRleCgp
KSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0Qm9v
bGVhbkNvbnN0YW50OgorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIodmFsdWVP
ZkJvb2xlYW5Db25zdGFudChwbGFuLm5vZGVJbmRleCgpKSksIHBsYW4uZ3ByKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0Q2VsbENvbnN0YW50OgorICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZUluZGV4
KCkpLmFzQ2VsbCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICBjYXNlIFNldFRydXN0ZWRKU0NvbnN0YW50OgorICAgICAgICAg
ICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRyKHBsYW4ubm9kZUluZGV4KCkp
LmFzVHJ1c3RlZEltbVB0cigpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNldEpTQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZK
U0NvbnN0YW50QXNJbW1QdHIocGxhbi5ub2RlSW5kZXgoKSksIHBsYW4uZ3ByKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0RG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlT2ZOdW1iZXJDb25z
dGFudChwbGFuLm5vZGVJbmRleCgpKSkpLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmVQdHJUb0RvdWJsZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIExvYWQzMlBheWxvYWRCb3hJbnQ6CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmly
dHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBMb2FkRG91YmxlQm94RG91YmxlOgorICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuc3ViUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkSlNVbmJveERvdWJsZToKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSku
dmlydHVhbFJlZ2lzdGVyKCkpLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgICAgIHVuYm94RG91Ymxl
KGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAg
ICAgICBjYXNlIFNldEpTQ29uc3RhbnRUYWc6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMy
KHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpLnRhZygpKSwgcGxhbi5ncHIoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRKU0NvbnN0YW50UGF5bG9hZDoK
KyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2Rl
SW5kZXgoKSkucGF5bG9hZCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTZXRJbnQzMlRhZzoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTZXRDZWxsVGFnOgorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU2V0Qm9vbGVhblRhZzoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNldERvdWJsZUNvbnN0YW50OgorICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZShhZGRyZXNzT2ZET3VibGVDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKSwg
cGxhbi5mcHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIExv
YWQzMlRhZzoKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKGF0
KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkMzJQYXlsb2FkOgorICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkp
LnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBMb2FkUHRyOgorICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBs
YW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZERvdWJsZToK
KyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQo
cGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmZwcigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhGUFJSZWcgZXhjbHVkZSkKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZT4KKyAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbChib29sIGRvU3Bp
bGwsIENvbGxlY3Rpb25UeXBlJiBwbGFucywgR1BSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBleGNsdWRl
MiA9IEludmFsaWRHUFJSZWcsIEZQUlJlZyBmcHJFeGNsdWRlID0gSW52YWxpZEZQUlJlZykKICAg
ICB7CisgICAgICAgIEFTU0VSVChwbGFucy5pc0VtcHR5KCkpOwogICAgICAgICBmb3IgKGdwcl9p
dGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQotICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsR1BSKGl0ZXIubmFtZSgpLCBpdGVyLnJl
Z0lEKCkpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IGl0ZXIucmVnSUQoKTsKKyAgICAgICAg
ICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGdwciAhPSBl
eGNsdWRlICYmIGdwciAhPSBleGNsdWRlMikgeworICAgICAgICAgICAgICAgIFNpbGVudFJlZ2lz
dGVyU2F2ZVBsYW4gcGxhbiA9IHNpbGVudFNhdmVQbGFuRm9yR1BSKGl0ZXIubmFtZSgpLCBncHIp
OworICAgICAgICAgICAgICAgIGlmIChkb1NwaWxsKQorICAgICAgICAgICAgICAgICAgICBzaWxl
bnRTcGlsbChwbGFuKTsKKyAgICAgICAgICAgICAgICBwbGFucy5hcHBlbmQocGxhbik7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1f
ZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAg
ICBGUFJSZWcgZnByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgp
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZnByICE9IGV4Y2x1ZGUpCi0gICAgICAgICAg
ICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1lKCksIGZwcik7CisgICAgICAgICAgICBpZiAo
aXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBpdGVyLnJlZ0lEKCkgIT0g
ZnByRXhjbHVkZSkgeworICAgICAgICAgICAgICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gcGxh
biA9IHNpbGVudFNhdmVQbGFuRm9yRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAg
ICAgICAgICAgICAgIGlmIChkb1NwaWxsKQorICAgICAgICAgICAgICAgICAgICBzaWxlbnRTcGls
bChwbGFuKTsKKyAgICAgICAgICAgICAgICBwbGFucy5hcHBlbmQocGxhbik7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICB2b2lkIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
R1BSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBleGNsdWRlMiA9IEludmFsaWRHUFJSZWcpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVyc0ltcGwoYm9vbCBkb1NwaWxsLCBDb2xsZWN0aW9uVHlwZSYgcGxhbnMsIEZQUlJlZyBl
eGNsdWRlKQogICAgIHsKLSAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdU
MDsKLSAgICAgICAgaWYgKGV4Y2x1ZGUgPT0gR1BSSW5mbzo6cmVnVDApCi0gICAgICAgICAgICBj
YW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGZwcl9p
dGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1w
bGUsIGl0ZXIucmVnSUQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3Ig
aXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0
ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYg
Z3ByICE9IGV4Y2x1ZGUyKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxHUFIoaXRlci5uYW1l
KCksIGdwcik7Ci0gICAgICAgIH0KKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBs
KGRvU3BpbGwsIHBsYW5zLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnLCBleGNsdWRlKTsK
ICAgICB9Ci0gICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEZQUlJlZyBleGNsdWRlKQor
ICAgIAorICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoR1BSUmVnIGV4Y2x1ZGUsIEdQ
UlJlZyBleGNsdWRlMiA9IEludmFsaWRHUFJSZWcsIEZQUlJlZyBmcHJFeGNsdWRlID0gSW52YWxp
ZEZQUlJlZykKICAgICB7Ci0gICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbCh0cnVlLCBtX3BsYW5zLCBl
eGNsdWRlLCBleGNsdWRlMiwgZnByRXhjbHVkZSk7CisgICAgfQorICAgIHZvaWQgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUpCisgICAgeworICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnLCBleGNsdWRlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIEdQUlJlZyBwaWNrQ2FuVHJhbXBsZShHUFJSZWcgZXhjbHVk
ZSkKKyAgICB7CisgICAgICAgIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBleGNsdWRlKQorICAgICAgICAgICAgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHN0YXRpYyBHUFJSZWcg
cGlja0NhblRyYW1wbGUoRlBSUmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdQUkluZm86OnJl
Z1QwOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWdpc3RlclR5cGU+Cisg
ICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKFJlZ2lzdGVyVHlwZSBleGNsdWRlKQorICAg
IHsKKyAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBwaWNrQ2FuVHJhbXBsZShleGNsdWRlKTsK
ICAgICAgICAgCi0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4o
KTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyICYmIGZwciAhPSBleGNsdWRlKQotICAgICAgICAgICAgICAgIHNpbGVu
dEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGZwcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3By
cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsR1BSKGl0ZXIubmFt
ZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgICAgICB3aGlsZSAoIW1fcGxhbnMuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuJiBwbGFuID0gbV9wbGFucy5sYXN0
KCk7CisgICAgICAgICAgICBzaWxlbnRGaWxsKHBsYW4sIGNhblRyYW1wbGUpOworICAgICAgICAg
ICAgbV9wbGFucy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg5OCwxMiAr
OTgxLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihO
b2RlJik7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKE5vZGUmKTsKIAot
ICAgIGVudW0gU3BpbGxSZWdpc3RlcnNNb2RlIHsgTmVlZFRvU3BpbGwsIERvbnRTcGlsbCB9Owog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FjaGVkR2V0QnlJZChD
b2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0
Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVl
ZFRvU3BpbGwpOworICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQg
Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBFZGdl
IHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6
SnVtcCgpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVRhZ0dQUk9yTm9uZSwgR1BSUmVn
IGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxS
ZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOworICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2Rl
T3JpZ2luLCBHUFJSZWcgYmFzZVRhZ0dQUk9yTm9uZSwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBH
UFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0
Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVl
ZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwg
RWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXAoKSk7CiAjZW5kaWYKIApAQCAtMTIyNSw2ICsxMzA3LDExIEBAIHByaXZhdGU6CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBhcmcxKTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0RGR09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwpAQCAtMTI1
NSw2ICsxMzQyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVu
dFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzPgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1l
bnRUeXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFyZzIsIEFyZ3VtZW50VHlwZTMgYXJnMykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3Bl
cmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKQEAgLTE0MjMsNiArMTUxNiwxMSBA
QCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJldHVybiBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBh
cmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXls
b2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKQEAgLTE0NDgsNiAr
MTU0NiwxOCBAQCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMiwgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBl
bmFtZSBBcmd1bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVudFR5cGU0PgorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSwgQXJndW1lbnRUeXBlMiBhcmcyLCBBcmd1
bWVudFR5cGUzIGFyZzMsIEFyZ3VtZW50VHlwZTQgYXJnNCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7CisgICAgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTIsIHR5cGVuYW1l
IEFyZ3VtZW50VHlwZTMsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQsIHR5cGVuYW1lIEFyZ3VtZW50
VHlwZTU+CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlv
bl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBBcmd1
bWVudFR5cGUyIGFyZzIsIEFyZ3VtZW50VHlwZTMgYXJnMywgQXJndW1lbnRUeXBlNCBhcmc0LCBB
cmd1bWVudFR5cGU1IGFyZzUpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEludmFs
aWRHUFJSZWcpOworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZzEs
IGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOworICAgIH0KIAogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKQEAgLTE5NTEsOCAr
MjA2MSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsK
ICAgICB9CiAgICAgCi0gICAgLy8gVGhlIEpJVCwgd2hpbGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fz
c2VtYmxlciBmdW5jdGlvbmFsaXR5LgogICAgIEpJVENvbXBpbGVyJiBtX2ppdDsKKwogICAgIC8v
IFRoZSBjdXJyZW50IG5vZGUgYmVpbmcgZ2VuZXJhdGVkLgogICAgIEJsb2NrSW5kZXggbV9ibG9j
azsKICAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7CkBAIC0xOTg0LDYgKzIwOTQsOSBAQCBw
cml2YXRlOgogICAgIAogICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKKyAgICBWZWN0
b3I8U2xvd1BhdGhHZW5lcmF0b3IqLCA4PiBtX3Nsb3dQYXRoR2VuZXJhdG9yczsgLy8gZG9lc24n
dCB1c2UgT3duUHRyPD4gYmVjYXVzZSBJIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBERkdTbG93UGF0
aEdlbmVyYXRvci5oCisgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4+IG1fcGxhbnM7
CisKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVl
U291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGlu
dCBvcGVyYW5kKQpAQCAtMjYwMywyMCArMjcxNiw2IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1f
Z3ByT3JJbnZhbGlkOwogfTsKIAotaW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VChKSVRDb21waWxlciYgaml0KQotICAgIDogbV9jb21waWxlT2theSh0cnVlKQotICAgICwgbV9q
aXQoaml0KQotICAgICwgbV9jb21waWxlSW5kZXgoMCkKLSAgICAsIG1faW5kZXhJbkJsb2NrKDAp
Ci0gICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJl
Z2lzdGVycykKLSAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCkp
Ci0gICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkKLSAg
ICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQotICAgICwgbV9sYXN0U2V0
T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9zdGF0ZSht
X2ppdC5ncmFwaCgpKQotewotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRp
Zgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137228</attachid>
            <date>2012-04-14 20:16:36 -0700</date>
            <delta_ts>2012-04-15 01:37:04 -0700</delta_ts>
            <desc>defoobared the changelog</desc>
            <filename>slowpaths_patch_2.diff</filename>
            <type>text/plain</type>
            <size>97986</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0MjA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxMi0wNC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBvdXQtb2YtbGluZSBzbG93IHBhdGhzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4K
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKFN0cnVjdHVy
ZVN0dWJJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wZXJ0eUFjY2Vzc1JlY29yZDo6UHJvcGVydHlBY2Nlc3NSZWNvcmQpOgorICAgICAgICAoUHJv
cGVydHlBY2Nlc3NSZWNvcmQpOgorICAgICAgICAoSklUQ29tcGlsZXIpOgorICAgICAgICAqIGRm
Zy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW46OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4pOgorICAgICAgICAoSlND
OjpERkc6OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW46OnNwaWxsQWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuOjpmaWxsQWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuOjpub2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW46Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbjo6ZnByKToKKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoU2xvd1BhdGhHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpTbG93UGF0aEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6On5TbG93UGF0
aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVy
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6bGFiZWwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpjYWxsKToKKyAgICAgICAgKEp1bXBp
bmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6SnVtcGluZ1Nsb3dQYXRo
R2VuZXJhdG9yOjpKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6
Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6bGlua0Zyb20pOgorICAgICAgICAoSlNDOjpERkc6
Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6anVtcFRvKToKKyAgICAgICAgKENhbGxTbG93UGF0
aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjpD
YWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdl
bmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9y
OjpzZXRVcCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjpyZWNv
cmRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsU2xvd1BhdGhHZW5lcmF0b3I6OnRlYXJE
b3duKToKKyAgICAgICAgKENhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvcjo6Q2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9y
OjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKENhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNs
b3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kT25lQXJn
dW1lbnRTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZE9uZUFyZ3VtZW50U2xvd1BhdGhH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNs
b3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKENhbGxSZXN1bHRB
bmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2Fs
bFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kVHdv
QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1
bHRBbmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6Cisg
ICAgICAgIChDYWxsUmVzdWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5l
cmF0b3I6OkNhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVy
YXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kRm91ckFyZ3Vt
ZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5k
Rm91ckFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kRm91ckFyZ3VtZW50
c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kRm91
ckFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAg
KENhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpERkc6OkNhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OkNh
bGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpERkc6OkNhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVy
YXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OnNsb3dQYXRoQ2FsbCk6CisgICAgICAg
IChBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6QXNzaWdu
aW5nU2xvd1BhdGhHZW5lcmF0b3I6OkFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhNb3ZlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpT
cGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjp+U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBS
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwaWNrQ2FuVHJhbXBsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChWYWx1ZVRvTnVt
YmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlVG9OdW1iZXJT
bG93UGF0aEdlbmVyYXRvcjo6VmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50
ZXJuYWwpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChDb21wYXJlQW5kQm94Qm9v
bGVhblNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94
Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMi0wNC0xMyAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjExNDE4NS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxMTQwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBA
QAogCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNB
MDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0Fy
Z3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRTNB
NDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0
NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjFFM0E1QzE1M0ExREE5MDAwRjk0NTYgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBE
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMjFDMjY4MTRCRTVGNjgwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjY2MTRCRTVGNUUw
MEFEQzY0QiAvKiBKSVREcml2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3QzE0QkU3Mjc2MDBBREM2NEIgLyogRXhlY3V0aW9uSGFy
bmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
MUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3RDE0QkU3MjdBMDBB
REM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVT
cGVjaWFsaXphdGlvbktpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNzUwLDYgKzc1Miw4IEBACiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3
RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTQz
MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50UG9zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdB
cmd1bWVudFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTQ0
MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RG
R0RvdWJsZUZvcm1hdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUUz
QTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZn
L0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aDsgcGF0aCA9IGRmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMjFDMjY2MTRCRTVGNUUwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURHJpdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTcGVj
aWFsaXphdGlvbktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyN0Ex
NEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9uSGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjA4NCw2ICsyMDg4LDggQEAKIAkJCQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYg
LyogREZHUmVwYXRjaC5jcHAgKi8sCiAJCQkJODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERG
R1JlcGF0Y2guaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVC
b2FyZC5oICovLAorCQkJCTBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdp
c3RlclNhdmVQbGFuLmggKi8sCisJCQkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Ns
b3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1NwZWN1bGF0aXZlSklULmNwcCAqLywKIAkJCQk4NkVDOURDMzEzMjhERjgyMDAyQjJBRDcgLyog
REZHU3BlY3VsYXRpdmVKSVQuaCAqLywKIAkJCQk4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyog
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi8sCkBAIC0yNTcwLDYgKzI1NzYsOCBAQAogCQkJ
CTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRjaFJlc3VsdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVG
b3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRTNBNUMxNTNBMURBOTAwMEY5NDU2
IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAv
KiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAxMTQwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDE1ICsxOTYsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgaW50OF90IHZhbHVlR1BSOwogICAgICAgICBpbnQ4
X3Qgc2NyYXRjaEdQUjsKLSAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7Ci0gICAgICAg
IGludDE2X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKLSAgICAgICAgaW50MTZfdCBkZWx0YUNh
bGxUb1Nsb3dDYXNlOwotICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CisgICAg
ICAgIGludDMyX3QgZGVsdGFDYWxsVG9Eb25lOworICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2s7CisgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKKyAgICAg
ICAgaW50MzJfdCBkZWx0YUNoZWNrSW1tVG9DYWxsOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKKyAgICAgICAgaW50MzJfdCBkZWx0
YUNhbGxUb0xvYWRPclN0b3JlOwogI2Vsc2UKLSAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlOwotICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlOworICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmU7CisgICAgICAg
IGludDMyX3QgZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmU7CiAjZW5kaWYKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCShyZXZpc2lvbiAxMTQwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDggQEAgaW5saW5lIGNvbnN0IGNo
YXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaQogICAgIH0KIH0KIAorZW51bSBTcGlsbFJlZ2lzdGVy
c01vZGUgeyBOZWVkVG9TcGlsbCwgRG9udFNwaWxsIH07CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDExNDAxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5j
bHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgorI2lu
Y2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVK
SVQuaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIK
QEAgLTE0OSwxOSArMTUwLDE5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9w
cm9wZXJ0eUFjY2Vzc2VzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
cHJvcGVydHlBY2Nlc3Nlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgaW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsKLSAgICAgICAgQ29k
ZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9w
ZXJ0eUFjY2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSk7CiAgICAgICAgIGlu
Zm8uY29kZU9yaWdpbiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2NvZGVPcmlnaW47CiAgICAg
ICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAg
ICBpbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2hlY2tJbW1U
b0NhbGwpLCBjYWxsUmV0dXJuTG9jYXRpb24pOwotICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2sgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjaykpOworICAgICAgICBpbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nl
c1tpXS5tX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8u
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0
dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0u
bV9zdHJ1Y3R1cmVDaGVjaykpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGluZm8uZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9k
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8uZGVsdGFDYWxsVG9Mb2FkT3JT
dG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9sb2FkT3JTdG9yZSkpOwog
I2Vsc2UKLSAgICAgICAgaW5mby5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpKTsKLSAg
ICAgICAgaW5mby5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3By
b3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSkpOworICAg
ICAgICBpbmZvLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0
eUFjY2Vzc2VzW2ldLm1fdGFnTG9hZE9yU3RvcmUpKTsKKyAgICAgICAgaW5mby5kZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9w
YXlsb2FkTG9hZE9yU3RvcmUpKTsKICNlbmRpZgotICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9TbG93
Q2FzZSkpOwotICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3Bl
cnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICAgICAgaW5mby5kZWx0YUNh
bGxUb1Nsb3dDYXNlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3Nsb3dQYXRo
R2VuZXJhdG9yLT5sYWJlbCgpKSk7CisgICAgICAgIGluZm8uZGVsdGFDYWxsVG9Eb25lID0gZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RvbmUpKTsKICAgICAgICAgaW5mby5iYXNl
R1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fYmFzZUdQUjsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICBpbmZvLnZhbHVlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdmFsdWVH
UFI7CkBAIC0yMDEsNiArMjAyLDkgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2Rl
JiBlbnRyeQogICAgIFNwZWN1bGF0aXZlSklUIHNwZWN1bGF0aXZlKCp0aGlzKTsKICAgICBjb21w
aWxlQm9keShzcGVjdWxhdGl2ZSk7CiAKKyAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29kZS4K
KyAgICBzcGVjdWxhdGl2ZS5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICAKICAgICAvLyBD
cmVhdGUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzIGlmIG5lY2Vzc2FyeS4KICAgICBzcGVjdWxhdGl2
ZS5jcmVhdGVPU1JFbnRyaWVzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDExNDAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4LDE1
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmg+Ci0jaW5jbHVkZSA8YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg+Ci0jaW5jbHVkZSA8
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR0NDYWxsSGVscGVycy5oPgot
I2luY2x1ZGUgPGRmZy9ERkdGUFJJbmZvLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR0dQUkluZm8uaD4K
LSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDxkZmcvREZHUmVnaXN0ZXJCYW5r
Lmg+Ci0jaW5jbHVkZSA8aml0L0pJVENvZGUuaD4KKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJERkdGUFJJbmZvLmgiCisjaW5j
bHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZH
UmVnaXN0ZXJCYW5rLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtNDgsNiArNDgsNyBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29kZUdlbmVyYXRv
cjsKIGNsYXNzIE5vZGVUb1JlZ2lzdGVyTWFwOworY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBj
bGFzcyBTcGVjdWxhdGl2ZUpJVDsKIGNsYXNzIFNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAKQEAgLTEz
MCwyMiArMTMxLDQzIEBAIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7CiAgICAgZW51bSBS
ZWdpc3Rlck1vZGUgeyBSZWdpc3RlcnNGbHVzaGVkLCBSZWdpc3RlcnNJblVzZSB9OwogICAgIAog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGRlbHRhQ2hlY2tJbW1Ub0Nh
bGwsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBh
Y3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRlbHRhQ2Fs
bFRvU2xvd0Nhc2UsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkZWx0YUNhbGxUb0RvbmUsIGludDhf
dCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSLCBSZWdpc3Rlck1v
ZGUgcmVnaXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCisgICAgUHJvcGVydHlBY2Nlc3NSZWNv
cmQoCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVJbW0sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHN0cnVjdHVyZUNoZWNrLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29t
cGFjdCBsb2FkT3JTdG9yZSwKKyAgICAgICAgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoR2Vu
ZXJhdG9yLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSwKKyAgICAgICAgaW50
OF90IGJhc2VHUFIsCisgICAgICAgIGludDhfdCB2YWx1ZUdQUiwKKyAgICAgICAgaW50OF90IHNj
cmF0Y2hHUFIsCisgICAgICAgIFJlZ2lzdGVyTW9kZSByZWdpc3Rlck1vZGUgPSBSZWdpc3RlcnNJ
blVzZSkKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGRlbHRh
Q2hlY2tJbW1Ub0NhbGwsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbENvbXBhY3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSwgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbENvbXBhY3QgZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUsIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
ZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlVGFnR1BSLCBpbnQ4
X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSLCBSZWdpc3Rlck1vZGUgcmVnaXN0ZXJNb2Rl
ID0gUmVnaXN0ZXJzSW5Vc2UpCisgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoCisgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBzdHJ1Y3R1cmVJbW0sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN0cnVjdHVyZUNo
ZWNrLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCB0YWdMb2FkT3JT
dG9yZSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgcGF5bG9hZExv
YWRPclN0b3JlLAorICAgICAgICBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGhHZW5lcmF0b3Is
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lLAorICAgICAgICBpbnQ4X3QgYmFz
ZUdQUiwKKyAgICAgICAgaW50OF90IHZhbHVlVGFnR1BSLAorICAgICAgICBpbnQ4X3QgdmFsdWVH
UFIsCisgICAgICAgIGludDhfdCBzY3JhdGNoR1BSLAorICAgICAgICBSZWdpc3Rlck1vZGUgcmVn
aXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCiAjZW5kaWYKICAgICAgICAgOiBtX2NvZGVPcmln
aW4oY29kZU9yaWdpbikKLSAgICAgICAgLCBtX2RlbHRhQ2hlY2tJbW1Ub0NhbGwoZGVsdGFDaGVj
a0ltbVRvQ2FsbCkKLSAgICAgICAgLCBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlvbkNhbGwpCi0gICAg
ICAgICwgbV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spCisg
ICAgICAgICwgbV9zdHJ1Y3R1cmVJbW0oc3RydWN0dXJlSW1tKQorICAgICAgICAsIG1fc3RydWN0
dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgLCBt
X2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUoZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKKyAgICAgICAg
LCBtX2xvYWRPclN0b3JlKGxvYWRPclN0b3JlKQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgLCBtX2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUoZGVsdGFDYWxsVG9UYWdMb2FkT3JT
dG9yZSkKLSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKGRlbHRhQ2Fs
bFRvUGF5bG9hZExvYWRPclN0b3JlKQorICAgICAgICAsIG1fdGFnTG9hZE9yU3RvcmUodGFnTG9h
ZE9yU3RvcmUpCisgICAgICAgICwgbV9wYXlsb2FkTG9hZE9yU3RvcmUocGF5bG9hZExvYWRPclN0
b3JlKQogI2VuZGlmCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb1Nsb3dDYXNlKGRlbHRhQ2FsbFRv
U2xvd0Nhc2UpCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb0RvbmUoZGVsdGFDYWxsVG9Eb25lKQor
ICAgICAgICAsIG1fc2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhHZW5lcmF0b3IpCisgICAgICAg
ICwgbV9kb25lKGRvbmUpCiAgICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIpCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICAgICAgLCBtX3ZhbHVlVGFnR1BSKHZhbHVlVGFnR1BSKQpAQCAtMTU3
LDE3ICsxNzksMTYgQEAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKICAgICB9CiAKICAg
ICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyIG1fZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2Z1
bmN0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2RlbHRhQ2FsbFRvU3RydWN0
Q2hlY2s7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX3N0cnVjdHVyZUltbTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3N0cnVjdHVyZUNoZWNrOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9kZWx0YUNhbGxU
b0xvYWRPclN0b3JlOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fbG9h
ZE9yU3RvcmU7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpE
YXRhTGFiZWxDb21wYWN0IG1fZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZTsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBtX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3Jl
OworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fdGFnTG9hZE9yU3RvcmU7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9wYXlsb2FkTG9hZE9yU3Rv
cmU7CiAjZW5kaWYKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kZWx0YUNhbGxUb1Nsb3dD
YXNlOwotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RlbHRhQ2FsbFRvRG9uZTsKKyAgICBT
bG93UGF0aEdlbmVyYXRvciogbV9zbG93UGF0aEdlbmVyYXRvcjsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9kb25lOwogICAgIGludDhfdCBtX2Jhc2VHUFI7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBpbnQ4X3QgbV92YWx1ZVRhZ0dQUjsKQEAgLTE5Myw3ICsyMTQsNyBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4KDApCiAgICAgewogICAgIH0K
LQorICAgIAogICAgIGJvb2wgY29tcGlsZShKSVRDb2RlJiBlbnRyeSk7CiAgICAgYm9vbCBjb21w
aWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgZW50cnlX
aXRoQXJpdHlDaGVjayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbl9oCisjZGVmaW5l
IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW5faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1
ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBTaWxlbnRTcGlsbEFjdGlvbiB7CisgICAgRG9O
b3RoaW5nRm9yU3BpbGwsCisgICAgU3RvcmUzMlRhZywKKyAgICBTdG9yZTMyUGF5bG9hZCwKKyAg
ICBTdG9yZVB0ciwKKyAgICBTdG9yZURvdWJsZQorfTsKKworZW51bSBTaWxlbnRGaWxsQWN0aW9u
IHsKKyAgICBEb05vdGhpbmdGb3JGaWxsLAorICAgIFNldEludDMyQ29uc3RhbnQsCisgICAgU2V0
Qm9vbGVhbkNvbnN0YW50LAorICAgIFNldENlbGxDb25zdGFudCwKKyAgICBTZXRUcnVzdGVkSlND
b25zdGFudCwKKyAgICBTZXRKU0NvbnN0YW50LAorICAgIFNldEpTQ29uc3RhbnRUYWcsCisgICAg
U2V0SlNDb25zdGFudFBheWxvYWQsCisgICAgU2V0SW50MzJUYWcsCisgICAgU2V0Q2VsbFRhZywK
KyAgICBTZXRCb29sZWFuVGFnLAorICAgIFNldERvdWJsZUNvbnN0YW50LAorICAgIExvYWQzMlRh
ZywKKyAgICBMb2FkMzJQYXlsb2FkLAorICAgIExvYWQzMlBheWxvYWRCb3hJbnQsCisgICAgTG9h
ZFB0ciwKKyAgICBMb2FkRG91YmxlLAorICAgIExvYWREb3VibGVCb3hEb3VibGUsCisgICAgTG9h
ZEpTVW5ib3hEb3VibGUKK307CisKK2NsYXNzIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4geworcHVi
bGljOgorICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oKQorICAgICAgICA6IG1fc3BpbGxBY3Rp
b24oRG9Ob3RoaW5nRm9yU3BpbGwpCisgICAgICAgICwgbV9maWxsQWN0aW9uKERvTm90aGluZ0Zv
ckZpbGwpCisgICAgICAgICwgbV9yZWdpc3RlcigtMSkKKyAgICAgICAgLCBtX25vZGVJbmRleChO
b05vZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKFNp
bGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBn
cHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlvbikKKyAgICAgICAgLCBtX2Zp
bGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAgICAgLCBtX3JlZ2lzdGVyKGdwcikKKyAgICAgICAg
LCBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuKFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlv
bikKKyAgICAgICAgLCBtX2ZpbGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAgICAgLCBtX3JlZ2lz
dGVyKGZwcikKKyAgICAgICAgLCBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFNpbGVudFNwaWxsQWN0aW9uPihtX3NwaWxsQWN0aW9uKTsgfQorICAgIFNp
bGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNp
bGVudEZpbGxBY3Rpb24+KG1fZmlsbEFjdGlvbik7IH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9k
ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlSW5kZXg7IH0KKyAgICAKKyAgICBHUFJSZWcg
Z3ByKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3JlZ2lzdGVyKTsgfQor
ICAgIEZQUlJlZyBmcHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KG1fcmVn
aXN0ZXIpOyB9CisgICAgCitwcml2YXRlOgorICAgIGludDhfdCBtX3NwaWxsQWN0aW9uOworICAg
IGludDhfdCBtX2ZpbGxBY3Rpb247CisgICAgaW50OF90IG1fcmVnaXN0ZXI7CisgICAgTm9kZUlu
ZGV4IG1fbm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1Bh
dGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdT
bG93UGF0aEdlbmVyYXRvcl9oCisjZGVmaW5lIERGR1Nsb3dQYXRoR2VuZXJhdG9yX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgiCisjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVK
SVQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU2xv
d1BhdGhHZW5lcmF0b3IgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIFNsb3dQYXRoR2VuZXJhdG9yKCkgeyB9CisgICAgdmlydHVhbCB+U2xvd1BhdGhHZW5lcmF0
b3IoKSB7IH0KKyAgICB2b2lkIGdlbmVyYXRlKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgewor
ICAgICAgICBtX2xhYmVsID0gaml0LT5tX2ppdC5sYWJlbCgpOworICAgICAgICBnZW5lcmF0ZUlu
dGVybmFsKGppdCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBqaXQtPm1faml0LmJy
ZWFrcG9pbnQoKTsgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGdlbmVyYXRvciBqdW1wcyBiYWNrIHRv
IHNvbWV3aGVyZQorI2VuZGlmCisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWw7IH0KKyAgICB2aXJ0dWFsIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEJ5IGRlZmF1bHQgc2xvdyBwYXRoIGdlbmVyYXRvcnMgZG9uJ3QgaGF2ZSBhIGNhbGwuCisg
ICAgfQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1
bGF0aXZlSklUKiBqaXQpID0gMDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJlbDsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlPgorY2xhc3MgSnVtcGluZ1Nsb3dQYXRo
R2VuZXJhdG9yIDogcHVibGljIFNsb3dQYXRoR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBKdW1w
aW5nU2xvd1BhdGhHZW5lcmF0b3IoSnVtcFR5cGUgZnJvbSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IHRvKQorICAgICAgICA6IG1fZnJvbShmcm9tKQorICAgICAgICAsIG1fdG8odG8pCisgICAgewor
ICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGxpbmtGcm9tKFNwZWN1bGF0aXZlSklU
KiBqaXQpCisgICAgeworICAgICAgICBtX2Zyb20ubGluaygmaml0LT5tX2ppdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQganVtcFRvKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAg
ICBqaXQtPm1faml0Lmp1bXAoKS5saW5rVG8obV90bywgJmppdC0+bV9qaXQpOworICAgIH0KKwor
ICAgIEp1bXBUeXBlIG1fZnJvbTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV90bzsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5
cGVuYW1lIFJlc3VsdFR5cGU+CitjbGFzcyBDYWxsU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMg
SnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCog
aml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBz
cGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0KQorICAgICAgICA6IEp1bXBpbmdTbG93UGF0aEdl
bmVyYXRvcjxKdW1wVHlwZT4oZnJvbSwgaml0LT5tX2ppdC5sYWJlbCgpKQorICAgICAgICAsIG1f
ZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9zcGlsbE1vZGUoc3BpbGxNb2RlKQorICAg
ICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgICAgIGlmIChtX3NwaWxsTW9kZSA9
PSBOZWVkVG9TcGlsbCkKKyAgICAgICAgICAgIGppdC0+c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJ
bXBsKGZhbHNlLCBtX3BsYW5zLCByZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Y2FsbDsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRVcChTcGVjdWxhdGl2
ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+bGlua0Zyb20oaml0KTsKKyAgICAgICAg
aWYgKG1fc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wbGFucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQt
PnNpbGVudFNwaWxsKG1fcGxhbnNbaV0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZv
aWQgcmVjb3JkQ2FsbChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQorICAgIHsKKyAgICAgICAg
bV9jYWxsID0gY2FsbDsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZWFyRG93bihTcGVjdWxhdGl2
ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgaWYgKG1fc3BpbGxNb2RlID09IE5lZWRUb1NwaWxs
KSB7CisgICAgICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IFNwZWN1bGF0aXZlSklUOjpwaWNr
Q2FuVHJhbXBsZShtX3Jlc3VsdCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Bs
YW5zLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICBqaXQtPnNpbGVudEZpbGwobV9wbGFu
c1tpXSwgY2FuVHJhbXBsZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy0+anVtcFRvKGppdCk7
CisgICAgfQorCisgICAgRnVuY3Rpb25UeXBlIG1fZnVuY3Rpb247CisgICAgU3BpbGxSZWdpc3Rl
cnNNb2RlIG1fc3BpbGxNb2RlOworICAgIFJlc3VsdFR5cGUgbV9yZXN1bHQ7CisgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgbV9jYWxsOworICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFu
LCAyPiBtX3BsYW5zOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1l
IEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZT4KK2NsYXNzIENhbGxSZXN1bHRBbmRO
b0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1YmxpYzoKKyAg
ICBDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVt
cFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAor
ICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3VsdCkK
KyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwg
UmVzdWx0VHlwZT4oCisgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUs
IHJlc3VsdCkKKyAgICB7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZ2VuZXJh
dGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0
VXAoaml0KTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhp
cy0+bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQpKTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24o
aml0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFy
Z3VtZW50VHlwZTE+CitjbGFzcyBDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVy
YXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rp
b25UeXBlLCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJlc3VsdEFuZE9uZUFyZ3Vt
ZW50U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZl
SklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNN
b2RlIHNwaWxsTW9kZSwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQx
KQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBl
LCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9k
ZSwgcmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFyZ3VtZW50MSkKKyAgICB7CisgICAg
fQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2
ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAgICAgdGhp
cy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgdGhpcy0+
bV9yZXN1bHQsIG1fYXJndW1lbnQxKSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7Cisg
ICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsKK307CisKK3RlbXBsYXRlPAor
ICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJl
c3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRU
eXBlMj4KK2NsYXNzIENhbGxSZXN1bHRBbmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcgor
ICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBl
LCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Ns
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCog
aml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBz
cGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZ3VtZW50MSwKKyAg
ICAgICAgQXJndW1lbnRUeXBlMiBhcmd1bWVudDIpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAorICAgICAgICAgICAg
ZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpCisgICAgICAgICwgbV9hcmd1
bWVudDEoYXJndW1lbnQxKQorICAgICAgICAsIG1fYXJndW1lbnQyKGFyZ3VtZW50MikKKyAgICB7
CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVj
dWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAg
ICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwg
dGhpcy0+bV9yZXN1bHQsIG1fYXJndW1lbnQxLCBtX2FyZ3VtZW50MikpOworICAgICAgICB0aGlz
LT50ZWFyRG93bihqaXQpOworICAgIH0KKworICAgIEFyZ3VtZW50VHlwZTEgbV9hcmd1bWVudDE7
CisgICAgQXJndW1lbnRUeXBlMiBtX2FyZ3VtZW50MjsKK307CisKK3RlbXBsYXRlPAorICAgIHR5
cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5
cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwg
dHlwZW5hbWUgQXJndW1lbnRUeXBlMz4KK2NsYXNzIENhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50
c1Nsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1YmxpYzoKKyAgICBDYWxsUmVz
dWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUg
ZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgICAg
ICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1l
bnRUeXBlMSBhcmd1bWVudDEsCisgICAgICAgIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLCBBcmd1
bWVudFR5cGUzIGFyZ3VtZW50MykKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVt
cFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4oCisgICAgICAgICAgICBmcm9tLCBqaXQs
IGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCkKKyAgICAgICAgLCBtX2FyZ3VtZW50MShhcmd1
bWVudDEpCisgICAgICAgICwgbV9hcmd1bWVudDIoYXJndW1lbnQyKQorICAgICAgICAsIG1fYXJn
dW1lbnQzKGFyZ3VtZW50MykKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6ICAgIAorICAgIHZv
aWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAg
dGhpcy0+c2V0VXAoaml0KTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbCgKKyAgICAgICAgICAg
IGppdC0+Y2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0
aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEsIG1fYXJndW1lbnQyLAorICAgICAgICAgICAgICAg
IG1fYXJndW1lbnQzKSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAgfQorCisg
ICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUyIG1fYXJndW1l
bnQyOworICAgIEFyZ3VtZW50VHlwZTMgbV9hcmd1bWVudDM7Cit9OworCit0ZW1wbGF0ZTwKKyAg
ICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1
bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlw
ZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTMsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlND4K
K2NsYXNzIENhbGxSZXN1bHRBbmRGb3VyQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6
IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVz
dWx0VHlwZT4geworcHVibGljOgorICAgIENhbGxSZXN1bHRBbmRGb3VyQXJndW1lbnRzU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQs
IEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLAorICAgICAg
ICBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MiwgQXJndW1lbnRUeXBlMyBhcmd1bWVudDMsIEFyZ3Vt
ZW50VHlwZTQgYXJndW1lbnQ0KQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1w
VHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwg
ZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFyZ3Vt
ZW50MSkKKyAgICAgICAgLCBtX2FyZ3VtZW50Mihhcmd1bWVudDIpCisgICAgICAgICwgbV9hcmd1
bWVudDMoYXJndW1lbnQzKQorICAgICAgICAsIG1fYXJndW1lbnQ0KGFyZ3VtZW50NCkKKyAgICB7
CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVj
dWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAg
ICAgdGhpcy0+cmVjb3JkQ2FsbCgKKyAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigKKyAg
ICAgICAgICAgICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVu
dDEsIG1fYXJndW1lbnQyLAorICAgICAgICAgICAgICAgIG1fYXJndW1lbnQzLCBtX2FyZ3VtZW50
NCkpOworICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KKworICAgIEFyZ3VtZW50
VHlwZTEgbV9hcmd1bWVudDE7CisgICAgQXJndW1lbnRUeXBlMiBtX2FyZ3VtZW50MjsKKyAgICBB
cmd1bWVudFR5cGUzIG1fYXJndW1lbnQzOworICAgIEFyZ3VtZW50VHlwZTQgbV9hcmd1bWVudDQ7
Cit9OworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rp
b25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEs
IHR5cGVuYW1lIEFyZ3VtZW50VHlwZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTMsCisgICAgdHlw
ZW5hbWUgQXJndW1lbnRUeXBlNCwgdHlwZW5hbWUgQXJndW1lbnRUeXBlNT4KK2NsYXNzIENhbGxS
ZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxs
U2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4gewor
cHVibGljOgorICAgIENhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgUmVzdWx0
VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLAorICAgICAgICBBcmd1bWVudFR5
cGUyIGFyZ3VtZW50MiwgQXJndW1lbnRUeXBlMyBhcmd1bWVudDMsIEFyZ3VtZW50VHlwZTQgYXJn
dW1lbnQ0LAorICAgICAgICBBcmd1bWVudFR5cGU1IGFyZ3VtZW50NSkKKyAgICAgICAgOiBDYWxs
U2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4oCisg
ICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCkKKyAgICAg
ICAgLCBtX2FyZ3VtZW50MShhcmd1bWVudDEpCisgICAgICAgICwgbV9hcmd1bWVudDIoYXJndW1l
bnQyKQorICAgICAgICAsIG1fYXJndW1lbnQzKGFyZ3VtZW50MykKKyAgICAgICAgLCBtX2FyZ3Vt
ZW50NChhcmd1bWVudDQpCisgICAgICAgICwgbV9hcmd1bWVudDUoYXJndW1lbnQ1KQorICAgIHsK
KyAgICB9CisKK3Byb3RlY3RlZDogICAgCisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1
bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAg
ICB0aGlzLT5yZWNvcmRDYWxsKAorICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKAorICAg
ICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZ3VtZW50
MSwgbV9hcmd1bWVudDIsCisgICAgICAgICAgICAgICAgbV9hcmd1bWVudDMsIG1fYXJndW1lbnQ0
LCBtX2FyZ3VtZW50NSkpOworICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KKwor
ICAgIEFyZ3VtZW50VHlwZTEgbV9hcmd1bWVudDE7CisgICAgQXJndW1lbnRUeXBlMiBtX2FyZ3Vt
ZW50MjsKKyAgICBBcmd1bWVudFR5cGUzIG1fYXJndW1lbnQzOworICAgIEFyZ3VtZW50VHlwZTQg
bV9hcmd1bWVudDQ7CisgICAgQXJndW1lbnRUeXBlNSBtX2FyZ3VtZW50NTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJl
c3VsdFR5cGU+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhD
YWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNw
aWxsTW9kZSA9IE5lZWRUb1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAg
bmV3IENhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAg
ICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4oCisgICAgICAgICAgICAgICAg
ZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpKTsKK30KKwordGVtcGxhdGU8
CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUg
UmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxPgoraW5saW5lIFBhc3NPd25Q
dHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKKyAgICBKdW1wVHlwZSBmcm9tLCBT
cGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgUmVzdWx0VHlw
ZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLAorICAgIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIoCisgICAg
ICAgIG5ldyBDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAg
ICAgICAgIEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGUsIEFyZ3VtZW50VHlwZTE+
KAorICAgICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0
LCBhcmd1bWVudDEpKTsKK30KKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBB
cmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyPgoraW5saW5lIFBhc3NPd25QdHI8
U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVj
dWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgUmVzdWx0VHlwZSBy
ZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLCBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MiwK
KyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3BpbGwpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Ns
b3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVz
dWx0VHlwZSwgQXJndW1lbnRUeXBlMSwgQXJndW1lbnRUeXBlMj4oCisgICAgICAgICAgICAgICAg
ZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQsIGFyZ3VtZW50MSwgYXJndW1l
bnQyKSk7Cit9CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRU
eXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMz4KK2lu
bGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aENhbGwoCisgICAgSnVt
cFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAor
ICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZ3VtZW50MSwgQXJndW1lbnRU
eXBlMiBhcmd1bWVudDIsCisgICAgQXJndW1lbnRUeXBlMyBhcmd1bWVudDMsIFNwaWxsUmVnaXN0
ZXJzTW9kZSBzcGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
CisgICAgICAgIG5ldyBDYWxsUmVzdWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRv
cjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGUsIEFyZ3Vt
ZW50VHlwZTEsIEFyZ3VtZW50VHlwZTIsCisgICAgICAgICAgICBBcmd1bWVudFR5cGUzPigKKyAg
ICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCwgYXJn
dW1lbnQxLCBhcmd1bWVudDIsCisgICAgICAgICAgICAgICAgYXJndW1lbnQzKSk7Cit9CisKK3Rl
bXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5
cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUg
QXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywKKyAgICB0eXBlbmFtZSBBcmd1
bWVudFR5cGU0PgoraW5saW5lIFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRo
Q2FsbCgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5
cGUgZnVuY3Rpb24sCisgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1l
bnQxLCBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MiwKKyAgICBBcmd1bWVudFR5cGUzIGFyZ3VtZW50
MywgQXJndW1lbnRUeXBlNCBhcmd1bWVudDQsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSA9IE5lZWRUb1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3
IENhbGxSZXN1bHRBbmRGb3VyQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAg
ICBKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5cGUxLCBBcmd1
bWVudFR5cGUyLAorICAgICAgICAgICAgQXJndW1lbnRUeXBlMywgQXJndW1lbnRUeXBlND4oCisg
ICAgICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQsIGFy
Z3VtZW50MSwgYXJndW1lbnQyLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50MywgYXJndW1lbnQ0
KSk7Cit9CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5j
dGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBl
MSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywKKyAgICB0
eXBlbmFtZSBBcmd1bWVudFR5cGU0LCB0eXBlbmFtZSBBcmd1bWVudFR5cGU1PgoraW5saW5lIFBh
c3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKKyAgICBKdW1wVHlwZSBm
cm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgUmVz
dWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLCBBcmd1bWVudFR5cGUyIGFy
Z3VtZW50MiwKKyAgICBBcmd1bWVudFR5cGUzIGFyZ3VtZW50MywgQXJndW1lbnRUeXBlNCBhcmd1
bWVudDQsIEFyZ3VtZW50VHlwZTUgYXJndW1lbnQ1LAorICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBz
cGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIoCisgICAgICAg
IG5ldyBDYWxsUmVzdWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAg
ICAgICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRUeXBlMSwg
QXJndW1lbnRUeXBlMiwKKyAgICAgICAgICAgIEFyZ3VtZW50VHlwZTMsIEFyZ3VtZW50VHlwZTQs
IEFyZ3VtZW50VHlwZTU+KAorICAgICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNw
aWxsTW9kZSwgcmVzdWx0LCBhcmd1bWVudDEsIGFyZ3VtZW50MiwKKyAgICAgICAgICAgICAgICBh
cmd1bWVudDMsIGFyZ3VtZW50NCwgYXJndW1lbnQ1KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEp1bXBUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvblR5cGUsIHR5cGVuYW1lIFNvdXJjZVR5cGU+
CitjbGFzcyBBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1Bh
dGhHZW5lcmF0b3I8SnVtcFR5cGU+IHsKK3B1YmxpYzoKKyAgICBBc3NpZ25pbmdTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHRv
LCBEZXN0aW5hdGlvblR5cGUgZGVzdGluYXRpb24sIFNvdXJjZVR5cGUgc291cmNlKQorICAgICAg
ICA6IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZT4oZnJvbSwgdG8pCisgICAgICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2Up
CisgICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUlu
dGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5saW5rRnJv
bShqaXQpOworICAgICAgICBqaXQtPm1faml0Lm1vdmUobV9zb3VyY2UsIG1fZGVzdGluYXRpb24p
OworICAgICAgICB0aGlzLT5qdW1wVG8oaml0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGVz
dGluYXRpb25UeXBlIG1fZGVzdGluYXRpb247CisgICAgU291cmNlVHlwZSBtX3NvdXJjZTsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvblR5cGUs
IHR5cGVuYW1lIFNvdXJjZVR5cGU+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRv
cj4gc2xvd1BhdGhNb3ZlKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQs
IFNvdXJjZVR5cGUgc291cmNlLCBEZXN0aW5hdGlvblR5cGUgZGVzdGluYXRpb24pCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQXNzaWduaW5nU2xvd1BhdGhHZW5lcmF0b3I8
CisgICAgICAgICAgICBKdW1wVHlwZSwgRGVzdGluYXRpb25UeXBlLCBTb3VyY2VUeXBlPigKKyAg
ICAgICAgICAgICAgICBmcm9tLCBqaXQtPm1faml0LmxhYmVsKCksIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxE
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTbG93UGF0aEdlbmVyYXRvcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMTE0MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDExIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKIAotI2luY2x1ZGUg
IkpTQnl0ZUFycmF5LmgiCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIKKwogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTM1OCw2ICsz
NTksMzEgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgIHJl
dHVybiBJbnZhbGlkR1BSUmVnOwogfQogCitjbGFzcyBWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5l
cmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6
Okp1bXAsIERfREZHT3BlcmF0aW9uX0VKLCBHUFJSZWc+IHsKK3B1YmxpYzoKKyAgICBWYWx1ZVRv
TnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJl
ZyBqc1ZhbHVlR1BSKQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCwgRF9ERkdPcGVyYXRpb25fRUosIEdQUlJlZz4oCisgICAgICAgICAgICBmcm9t
LCBqaXQsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIsIE5lZWRUb1NwaWxsLCByZXN1bHRHUFIp
CisgICAgICAgICwgbV9qc1ZhbHVlR1BSKGpzVmFsdWVHUFIpCisgICAgeworICAgIH0KKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklU
KiBqaXQpCisgICAgeworICAgICAgICBzZXRVcChqaXQpOworICAgICAgICByZWNvcmRDYWxsKGpp
dC0+Y2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUiwgbV9qc1ZhbHVlR1BSKSk7CisgICAgICAgIGppdC0+Ym94RG91YmxlKEZQUklu
Zm86OnJldHVyblZhbHVlRlBSLCBtX3Jlc3VsdCk7CisgICAgICAgIHRlYXJEb3duKGppdCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEdQUlJlZyBtX2pzVmFsdWVHUFI7Cit9OworCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSYgbm9kZSkKIHsK
ICAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewpAQCAtMzg1
LDE5ICs0MTEsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQog
ICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgZ3ByKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBo
YXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCi0gICAgLy8gTmV4dCBoYW5kbGUgY2Vs
bHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKLSAgICBub25OdW1lcmljLmxpbmsoJm1faml0KTsK
LSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgIGNhbGxPcGVyYXRpb24oZGZn
Q29udmVydEpTVmFsdWVUb051bWJlciwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIGpzVmFsdWVH
cHIpOwotICAgIGJveERvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgZ3ByKTsKLSAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2Fs
bGVkVG9OdW1iZXIgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCiAgICAgLy8gRmluYWxseSwgaGFuZGxl
IGludGVnZXJzLgogICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBqc1ZhbHVlR3ByLCBncHIpOwogICAgIGhh
c1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwotICAgIGhhc0NhbGxlZFRvTnVtYmVyLmxpbmso
Jm1faml0KTsKKyAgICAKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9wdFB0cihuZXcgVmFs
dWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKG5vbk51bWVyaWMsIHRoaXMsIGdwciwganNWYWx1
ZUdwcikpKTsKICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CkBAIC00MjEsMTMgKzQ0MCwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgICAgIEZQ
UlJlZyBmcHIgPSBvcDEuZnByKCk7CiAgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7
CiAgICAgICAgIG9wMS51c2UoKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVk
VG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBK
SVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOwotICAgICAgICAKLSAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbih0
b0ludDMyLCBncHIsIGZwcik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQu
YnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNo
SWZUcnVuY2F0ZUZhaWxlZCk7CiAgICAgICAgIAotICAgICAgICB0cnVuY2F0ZWRUb0ludGVnZXIu
bGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwg
ZnByKSk7CisKICAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG1fY29tcGlsZUluZGV4LCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDM4
LDE4ICs0NTUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQog
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgb3AxLnVzZSgpOwogCi0g
ICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7Ci0KLSAgICAvLyBGaXJzdCBoYW5kbGUgbm9uLWludGVnZXJzCi0gICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZl
cnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BSLCBqc1ZhbHVlR3ByKTsKLSAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2FsbGVk
VG9JbnQzMiA9IG1faml0Lmp1bXAoKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdEludGVn
ZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBqc1ZhbHVlR3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCi0gICAgLy8gVGhlbiBoYW5kbGUgaW50
ZWdlcnMuCi0gICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKICAgICBtX2ppdC56ZXJvRXh0ZW5k
MzJUb1B0cihqc1ZhbHVlR3ByLCByZXN1bHRHUFIpOwotICAgIGhhc0NhbGxlZFRvSW50MzIubGlu
aygmbV9qaXQpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93
UGF0aENhbGwoaXNOb3RJbnRlZ2VyLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIsIHJl
c3VsdEdQUiwganNWYWx1ZUdwcikpOworCiAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCkBAIC00Nzcs
NyArNDg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVVSW50MwogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLUpJVENv
bXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNo
R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwg
R1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01v
ZGUgc3BpbGxNb2RlKQogewogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJl
VG9Db21wYXJlOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQu
YnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29t
cGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
LTEpKSk7CkBAIC00ODUsMzEgKzQ5NywzMSBAQCBKSVRDb21waWxlcjo6Q2FsbCBTcGVjdWxhdGl2
ZUpJVDo6Y2FjaGVkCiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAg
ICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9hZFdpdGhQYXRjaCA9IG1faml0Lmxv
YWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIDApLCByZXN1bHRHUFIpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7Ci0g
ICAgCi0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0gICAgICAgIHNsb3dQYXRoVGFy
Z2V0LmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2Ug
PSBtX2ppdC5sYWJlbCgpOwotCi0gICAgaWYgKHNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCkKLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0R1BSLCBiYXNlR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsK
LSAgICBpZiAoc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQotICAgICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAg
CiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7Ci0KLSAg
ICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vzc1JlY29yZChjb2RlT3JpZ2lu
LCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJlQ2hlY2ssIGxvYWRX
aXRoUGF0Y2gsIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZUdQUiks
IHNhZmVDYXN0PGludDhfdD4ocmVzdWx0R1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BS
KSwgc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsID8gUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lz
dGVyc0luVXNlIDogUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lzdGVyc0ZsdXNoZWQpKTsKICAg
ICAKKyAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgIGlmICghc2xv
d1BhdGhUYXJnZXQuaXNTZXQoKSkgeworICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgK
KyAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNrLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHJlc3VsdEdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmll
ck51bWJlciksIHNwaWxsTW9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzdHJ1Y3R1cmVD
aGVjayk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOworICAgICAg
ICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRHUFIsIGJhc2VHUFIsCisgICAgICAgICAg
ICBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpLCBzcGlsbE1vZGUpOworICAgIH0KKyAgICBt
X2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygKKyAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoCisg
ICAgICAgICAgICBjb2RlT3JpZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNr
LCBsb2FkV2l0aFBhdGNoLCBzbG93UGF0aC5nZXQoKSwKKyAgICAgICAgICAgIGRvbmVMYWJlbCwg
c2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50OF90PihyZXN1bHRHUFIpLAor
ICAgICAgICAgICAgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSwKKyAgICAgICAgICAgIHNw
aWxsTW9kZSA9PSBOZWVkVG9TcGlsbCA/IFByb3BlcnR5QWNjZXNzUmVjb3JkOjpSZWdpc3RlcnNJ
blVzZSA6IFByb3BlcnR5QWNjZXNzUmVjb3JkOjpSZWdpc3RlcnNGbHVzaGVkKSk7CisgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKKwogICAgIGlmIChzY3JhdGNo
R1BSICE9IHJlc3VsdEdQUiAmJiBzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcgJiYgc3BpbGxN
b2RlID09IE5lZWRUb1NwaWxsKQogICAgICAgICB1bmxvY2soc2NyYXRjaEdQUik7Ci0gICAgCi0g
ICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVk
UHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFs
dWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0KQpAQCAtNTIzLDE2ICs1MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRC
eUlkKENvZGVPCiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwogICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRy
V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgMCkpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKLQotICAgIGlmIChzbG93UGF0
aFRhcmdldC5pc1NldCgpKQotICAgICAgICBzbG93UGF0aFRhcmdldC5saW5rKCZtX2ppdCk7Ci0K
LSAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2UgPSBtX2ppdC5sYWJlbCgpOwotCi0gICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgSklUQ29tcGlsZXI6
OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CisgICAgCiAgICAgVl9ERkdPcGVyYXRp
b25fRUpDSSBvcHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKGF0KG1f
Y29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKSkgewogICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJl
Y3QpCkBAIC01NDUsMTMgKzU0OSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRC
eUlkKENvZGVPCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0aW1pemVkQ2FsbCwgdmFsdWVHUFIs
IGJhc2VHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwotICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0KLSAgICBkb25lLmxpbmsoJm1faml0KTsKLSAg
ICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLQotICAgIG1f
aml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0
cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbENvbXBhY3Qoc3RvcmVXaXRoUGF0Y2gubGFiZWwoKSksIHNsb3dDYXNlLCBk
b25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZUdQUiksIHNhZmVDYXN0PGludDhfdD4odmFs
dWVHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7CisgICAgT3duUHRyPFNsb3dQ
YXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkp
IHsKKyAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzdHJ1Y3R1
cmVDaGVjaywgdGhpcywgb3B0aW1pemVkQ2FsbCwgSW52YWxpZEdQUlJlZywgdmFsdWVHUFIsIGJh
c2VHUFIsCisgICAgICAgICAgICBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChzbG93UGF0aFRhcmdldCk7CisgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBJbnZhbGlkR1BSUmVn
LCB2YWx1ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51
bWJlcikpOworICAgIH0KKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vz
c1JlY29yZChjb2RlT3JpZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLCBK
SVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChzdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwgc2xv
d1BhdGguZ2V0KCksIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNh
c3Q8aW50OF90Pih2YWx1ZUdQUiksIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikpKTsKKyAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoRWRnZSBv
cGVyYW5kLCBib29sIGludmVydCkKQEAgLTg0MCw2ICs4NTIsMzUgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGp1bXAobm90VGFrZW4pOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBKdW1wVHlwZT4KK2NsYXNzIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1Bh
dGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUs
IFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7CitwdWJsaWM6CisgICAgQ29tcGFyZUFuZEJv
eEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3Vs
YXRpdmVKSVQqIGppdCwKKyAgICAgICAgU19ERkdPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgICAgIDogQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4oCisgICAg
ICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBOZWVkVG9TcGlsbCwgcmVzdWx0KQorICAgICAg
ICAsIG1fYXJnMShhcmcxKQorICAgICAgICAsIG1fYXJnMihhcmcyKQorICAgIHsKKyAgICB9Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3Vs
YXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAg
IHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRo
aXMtPm1fcmVzdWx0LCBtX2FyZzEsIG1fYXJnMikpOworICAgICAgICBqaXQtPm1faml0LmFuZDMy
KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHRoaXMtPm1fcmVzdWx0KTsKKyAgICAgICAg
aml0LT5tX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHRo
aXMtPm1fcmVzdWx0KTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisgICAK
K3ByaXZhdGU6CisgICAgR1BSUmVnIG1fYXJnMTsKKyAgICBHUFJSZWcgbV9hcmcyOworfTsKKwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5v
ZGUmIG5vZGUsIGJvb2wgaW52ZXJ0KQogewogICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CkBAIC04NjAsNTYgKzkwMSw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWludmVydCkp
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgbm90RXF1YWxDYXNlLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BS
LCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgIGFkb3B0UHRyKAorICAgICAgICAgICAgICAgIG5ldyBDb21wYXJlQW5kQm94Qm9vbGVh
blNsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wPigKKyAgICAgICAgICAgICAg
ICAgICAgbm90RXF1YWxDYXNlLCB0aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCBy
ZXN1bHRHUFIsIGFyZzFHUFIsCisgICAgICAgICAgICAgICAgICAgIGFyZzJHUFIpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9qaXQub3JQdHIoYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BS
KTsKICAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aENhc2Vz
OworICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9q
aXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVm
dE9LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGFyZzFHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGxlZnREb3VibGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJv
LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBzbG93
UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJv
LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgbGVm
dE9LLmxpbmsoJm1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1f
aml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCByaWdo
dERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzJH
UFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHNsb3dQYXRoQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzJH
UFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICByaWdodE9LLmxp
bmsoJm1faml0KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmNvbXBhcmVQdHIoaW52ZXJ0ID8g
SklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcy
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBkb25lMSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIHR3b0NlbGxzQ2FzZS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsQ2FzZSA9IG1f
aml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpOwor
ICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5t
b3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
IWludmVydCkpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUyID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgbGVmdERvdWJsZS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgIHJpZ2h0RG91YmxlLmxpbmsoJm1faml0KTsKLSAgICAgICAg
bm90RXF1YWxDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgYWRvcHRQdHIoCisgICAgICAgICAgICAgICAgbmV3IENvbXBh
cmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
PigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYXNlcywgdGhpcywgb3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCByZXN1bHRHUFIsIGFyZzFHUFIsCisgICAgICAgICAgICAgICAgICAgIGFy
ZzJHUFIpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKLQotICAgICAgICBkb25lMS5saW5rKCZtX2ppdCk7
Ci0KLSAgICAgICAgbV9qaXQub3IzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZTIubGluaygmbV9qaXQpOwor
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICB9CiAgICAgCiAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAtMTc2NiwxMyArMTc5MywxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgCiAgICAgbV9qaXQubW92ZShhcmcx
R1BSLCByZXN1bHRHUFIpOwogICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpK
dW1wIGZhc3RDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7CisgICAgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVy
OjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKTsKICAgICAKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAg
IGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJn
MUdQUik7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIAotICAg
IGZhc3RDYXNlLmxpbmsoJm1faml0KTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVh
biwgcmVzdWx0R1BSLCBhcmcxR1BSKSk7CiAgICAgCiAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xl
YW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0yNTQ1LDE1ICsyNTY5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBwcm9wZXJ0
eS51c2UoKTsKICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCB3aXRoaW5BcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0KLSAgICAgICAgLy8gQ29kZSB0
byBoYW5kbGUgcHV0IGJleW9uZCBhcnJheSBib3VuZHMuCi0gICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHNjcmF0Y2hSZWcpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKHNjcmF0Y2hSZWcpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB3YXNCZXlvbmRB
cnJheUJvdW5kcyA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICB3aXRoaW5BcnJheUJvdW5kcy5s
aW5rKCZtX2ppdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7CiAKICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9yYWdlLgogICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0Y2hSZWc7CkBAIC0yNTc1LDcgKzI1OTEsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBT
dG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1
ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKIAotICAgICAgICB3YXNCZXlvbmRBcnJheUJvdW5kcy5saW5rKCZtX2pp
dCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAorICAgICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLAorICAgICAgICAg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2
YWx1ZVJlZykpOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKQEAgLTI3NjIsMTUgKzI3ODIsMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7
CiAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3Rv
cmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgc2xvd1BhdGgubGluaygmbV9q
aXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc3RvcmFnZUxl
bmd0aEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQdXNoLCBzdG9y
YWdlTGVuZ3RoR1BSLCB2YWx1ZUdQUiwgYmFzZUdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMoc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5
UHVzaCwgSW52YWxpZEdQUlJlZywgc3RvcmFnZUxlbmd0aEdQUiwKKyAgICAgICAgICAgICAgICB2
YWx1ZUdQUiwgYmFzZUdQUikpOwogICAgICAgICAKICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9y
YWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjgwOCwy
MyArMjgyMywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSk7CiAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgCi0gICAgICAgIGRv
bmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgICAgICBob2xlQ2FzZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIGVtcHR5QXJyYXlDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7Ci0gICAgICAgIAotICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh2YWx1ZUdQUik7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKTsKLSAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh2YWx1ZUdQUik7Ci0gICAgICAgIAotICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgIGhvbGVDYXNlLCB0
aGlzLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgIAorICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBi
YXNlR1BSKSk7CisKICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yOTI0LDIxICsyOTMxLDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKCEobV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRp
Y3RCb29sZWFuKSkpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsK
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgYWxy
ZWFkeVByaW1pdGl2ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2
ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3Ax
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGFscmVhZHlQcmlt
aXRpdmUuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU1N0cmluZzo6c19pbmZvKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub1ByaW1pdGl2ZSwgcmVzdWx0R1BS
LCBvcDFHUFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVBy
aW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9w
MUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpjbGFzc0lu
Zm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU1N0cmluZzo6c19p
bmZvKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygm
bV9qaXQpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdFByaW1p
dGl2ZSwgdGhpcywgb3BlcmF0aW9uVG9QcmltaXRpdmUsIHJlc3VsdEdQUiwgb3AxR1BSKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTMwOTQsMTggKzMw
OTQsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAKICAgICAgICAgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChzY3JhdGNoR1BSLCByZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBzbG93UGF0
aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpc0lubGluZWQs
IHJlc3VsdEdQUiwgcHJvdG9HUFIsIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBwcm90b0dQUik7Ci0gICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3Jl
YXRlVGhpc0lubGluZWQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgcHJvdG9HUFIs
IG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCBy
ZXN1bHRHUFIsIHByb3RvR1BSKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKICAgICAgICAgYnJlYWs7CkBAIC0zMTIyLDE1ICszMTE5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgZW1pdEFsbG9j
YXRlSlNGaW5hbE9iamVjdChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSksIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHNs
b3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2Jq
ZWN0LCByZXN1bHRHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdP
YmplY3QsIHJlc3VsdEdQUikpOwogICAgICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzA1LDIxICszNjk0LDE4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9q
aXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Io
bm9kZS5jb2RlT3JpZ2luKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0Lm1vdmUo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVzb2x2ZUluZm9BZGRyZXNzKSwgcmVzb2x2ZUlu
Zm9HUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29s
dmVJbmZvR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoR2xvYmFsUmVzb2x2ZUluZm8sIHN0cnVjdHVyZSkp
LCByZXN1bHRHUFIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVzTWF0Y2gg
PSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkp
OwotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUdsb2JhbCwgcmVzdWx0R1BSLCByZXNvbHZl
SW5mb0dQUiwgJm1faml0LmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGRhdGEuaWRlbnRpZmllck51
bWJlcikpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0KLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgd2FzU2xvdyA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlc0RvbnRNYXRjaCA9IG1faml0LmJyYW5jaFB0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xv
YmFsT2JqZWN0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAKICAgICAgICAgLy8g
RmFzdCBjYXNlCi0gICAgICAgIHN0cnVjdHVyZXNNYXRjaC5saW5rKCZtX2ppdCk7CiAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09G
RlNFVE9GKEdsb2JhbFJlc29sdmVJbmZvLCBvZmZzZXQpKSwgcmVzb2x2ZUluZm9HUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCByZXNv
bHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyKSwgcmVzdWx0R1BSKTsKIAotICAgICAg
ICB3YXNTbG93LmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc3RydWN0dXJlc0RvbnRN
YXRjaCwgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbCwKKyAgICAgICAgICAgICAgICByZXN1
bHRHUFIsIHJlc29sdmVJbmZvR1BSLAorICAgICAgICAgICAgICAgICZtX2ppdC5jb2RlQmxvY2so
KS0+aWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIpKSk7CiAKICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0z
NzM0LDEzICszNzIwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAg
ICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBhbHJlYWR5Q3JlYXRlZCA9IG1faml0
LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUik7CisgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
cmVhdGVBY3RpdmF0aW9uLCByZXN1bHRHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBhbHJlYWR5Q3JlYXRlZC5saW5rKCZt
X2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24sIHJlc3Vs
dEdQUikpOwogICAgICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzUwLDEzICszNzMzLDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRl
ZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlR1BSKTsKLSAg
ICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRlYXJPZmZBY3RpdmF0aW9uLCB2YWx1ZUdQ
Uik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUik7CiAgICAgICAgIAotICAgICAgICBub3RDcmVhdGVk
LmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICBzbG93UGF0aENhbGwoY3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24s
IEludmFsaWRHUFJSZWcsIHZhbHVlR1BSKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc3NSwxNCArMzc1NSwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAg
ICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgYWxyZWFkeUNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbigKLSAgICAg
ICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsIG1faml0LmNvZGVCbG9jaygp
LT5mdW5jdGlvbkRlY2wobm9kZS5mdW5jdGlvbkRlY2xJbmRleCgpKSk7Ci0gICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3Vs
dEdQUik7CiAgICAgICAgIAotICAgICAgICBhbHJlYWR5Q3JlYXRlZC5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgICAgIG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLAor
ICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJsb2NrKCktPmZ1bmN0aW9uRGVj
bChub2RlLmZ1bmN0aW9uRGVjbEluZGV4KCkpKSk7CiAgICAgICAgIAogICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAxMTQwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDQyIEBACiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
SlNCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAorU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENv
bXBpbGVyJiBqaXQpCisgICAgOiBtX2NvbXBpbGVPa2F5KHRydWUpCisgICAgLCBtX2ppdChqaXQp
CisgICAgLCBtX2NvbXBpbGVJbmRleCgwKQorICAgICwgbV9pbmRleEluQmxvY2soMCkKKyAgICAs
IG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KQorICAgICwgbV9ibG9ja0hlYWRzKGppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKKyAgICAs
IG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKQorICAgICwgbV92
YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2NhbFZhcnMpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5k
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgLCBtX3N0YXRlKG1faml0Lmdy
YXBoKCkpCit7Cit9CisKK1NwZWN1bGF0aXZlSklUOjp+U3BlY3VsYXRpdmVKSVQoKQoreworICAg
IFdURjo6ZGVsZXRlQWxsVmFsdWVzKG1fc2xvd1BhdGhHZW5lcmF0b3JzKTsKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxTbG93UGF0aEdl
bmVyYXRvcj4gc2xvd1BhdGhHZW5lcmF0b3IpCit7CisgICAgbV9zbG93UGF0aEdlbmVyYXRvcnMu
YXBwZW5kKHNsb3dQYXRoR2VuZXJhdG9yLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2xvd1BhdGhHZW5lcmF0b3JzLnNpemUoKTsgKytpKQorICAgICAgICBtX3Nsb3dQ
YXRoR2VuZXJhdG9yc1tpXS0+Z2VuZXJhdGUodGhpcyk7Cit9CisKIC8vIE9uIFdpbmRvd3Mgd2Ug
bmVlZCB0byB3cmFwIGZtb2Q7IG9uIG90aGVyIHBsYXRmb3JtcyB3ZSBjYW4gY2FsbCBpdCBkaXJl
Y3RseS4KIC8vIE9uIEFSTXY3IHdlIGFzc2VydCB0aGF0IGFsbCBmdW5jdGlvbiBwb2ludGVycyBo
YXZlIHRvIGxvdyBiaXQgc2V0IChwb2ludCB0byB0aHVtYiBjb2RlKS4KICNpZiBDQUxMSU5HX0NP
TlZFTlRJT05fSVNfU1REQ0FMTCB8fCBDUFUoQVJNX1RIVU1CMikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDExNDAxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE0IEBACiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIK
ICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIkRGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNpbmNsdWRlICJNYXJrZWRBbGxv
Y2F0b3IuaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CitjbGFzcyBTbG93UGF0aEdl
bmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwogY2xhc3MgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQ7CiBjbGFzcyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ7CkBAIC0xNzUsNiArMTc3
LDcgQEAgcHJpdmF0ZToKICAgICAKIHB1YmxpYzoKICAgICBTcGVjdWxhdGl2ZUpJVChKSVRDb21w
aWxlciYpOworICAgIH5TcGVjdWxhdGl2ZUpJVCgpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAg
ICAgdm9pZCBjcmVhdGVPU1JFbnRyaWVzKCk7CkBAIC0zNjYsNyArMzY5LDkgQEAgcHVibGljOgog
ICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlSW5kZXgpOwogICAgIEdlbmVyYXRl
ZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9kZUluZGV4KTsKIAot
cHJpdmF0ZToKKyAgICB2b2lkIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1Bh
dGhHZW5lcmF0b3I+KTsKKyAgICB2b2lkIHJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIAog
ICAgIHZvaWQgY29tcGlsZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7
CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKQEAgLTM4MCwyNDMgKzM4NSwzMjEgQEAg
cHJpdmF0ZToKICAgICAvLyB0aGV5IHNwaWxsIGFsbCBsaXZlIHZhbHVlcyB0byB0aGUgYXBwcm9w
cmlhdGUKICAgICAvLyBzbG90cyBpbiB0aGUgUmVnaXN0ZXJGaWxlIHdpdGhvdXQgY2hhbmdpbmcg
YW55IHN0YXRlCiAgICAgLy8gaW4gdGhlIEdlbmVyYXRpb25JbmZvLgotICAgIHZvaWQgc2lsZW50
U3BpbGxHUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBzb3VyY2UpCisgICAgU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbiBzaWxlbnRTYXZlUGxhbkZvckdQUihWaXJ0dWFsUmVnaXN0ZXIg
c3BpbGxNZSwgR1BSUmVnIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgIEFTU0VSVChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0KLSAgICAgICAgaWYgKCFpbmZv
Lm5lZWRzU3BpbGwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQorICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5v
ZGVJbmRleCk7CiAgICAgICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJlZ2lz
dGVyRm9ybWF0KCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBBU1NFUlQoaW5mby5n
cHIoKSA9PSBzb3VyY2UpOwotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1h
dEludGVnZXIpCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgIT0g
RGF0YUZvcm1hdE5vbmUpOworICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZv
cm1hdERvdWJsZSk7CisgICAgICAgIAorICAgICAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFj
dGlvbjsKKyAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwoKSkKKyAgICAgICAgICAgIHNwaWxsQWN0aW9uID0g
RG9Ob3RoaW5nRm9yU3BpbGw7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHNvdXJjZSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxN
ZSkpOwotICAgICAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBpZiAocmVn
aXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLnRh
Z0dQUigpID09IHNvdXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOwotICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihzb3VyY2UsIHNvdXJjZSA9PSBpbmZvLnRhZ0dQUigpID8gSklU
Q29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSA6IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxs
TWUpKTsKLSAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAg
QVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
c291cmNlLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAg
ICAgICAgICAgICBzcGlsbEFjdGlvbiA9IFN0b3JlMzJQYXlsb2FkOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpT
IHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09
IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9IFN0b3Jl
UHRyOworICAgICAgICAgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAg
IGlmIChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIEFT
U0VSVChpbmZvLnRhZ0dQUigpID09IHNvdXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3Vy
Y2UpOworICAgICAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gc291cmNlID09IGluZm8udGFnR1BS
KCkgPyBTdG9yZTMyVGFnIDogU3RvcmUzMlBheWxvYWQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAgICAgICAg
ICAgICAgc3BpbGxBY3Rpb24gPSBTdG9yZTMyUGF5bG9hZDsKKyAgICAgICAgICAgIH0KICNlbmRp
ZgotICAgIH0KLSAgICB2b2lkIHNpbGVudFNwaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1l
LCBGUFJSZWcgc291cmNlKQotICAgIHsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZv
cm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOwotCi0gICAgICAgIGlmICghaW5mby5uZWVkc1Nw
aWxsKCkpIHsKLSAgICAgICAgICAgIC8vIGl0J3MgZWl0aGVyIGEgY29uc3RhbnQgb3IgaXQncyBh
bHJlYWR5IGJlZW4gc3BpbGxlZAotICAgICAgICAgICAgQVNTRVJUKGF0KGluZm8ubm9kZUluZGV4
KCkpLmhhc0NvbnN0YW50KCkgfHwgaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25l
KTsKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8g
aXQncyBuZWl0aGVyIGEgY29uc3RhbnQgbm9yIGhhcyBpdCBiZWVuIHNwaWxsZWQuCi0gICAgICAg
IEFTU0VSVCghYXQoaW5mby5ub2RlSW5kZXgoKSkuaGFzQ29uc3RhbnQoKSk7Ci0gICAgICAgIEFT
U0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICBBU1NF
UlQoaW5mby5mcHIoKSA9PSBzb3VyY2UpOwotCi0gICAgICAgIG1faml0LnN0b3JlRG91YmxlKHNv
dXJjZSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgIH0KLQotICAgIHZv
aWQgc2lsZW50RmlsbEdQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgR1BSUmVnIHRhcmdldCkK
LSAgICB7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tz
cGlsbE1lXTsKLQotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgo
KTsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICBBU1NFUlQo
aW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpOwotICAgICAgICBEYXRh
Rm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotCiAgICAgICAg
IGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAgICAgICAgICAg
QVNTRVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdw
cigpID09IHNvdXJjZSk7CiAgICAgICAgICAgICBBU1NFUlQoaXNKU0ludGVnZXIoaW5mby5yZWdp
c3RlckZvcm1hdCgpKSk7CiAgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRJbnQzMkNvbnN0
YW50OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0g
RGF0YUZvcm1hdEJvb2xlYW4pIHsKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDMy
UGF5bG9hZDsKKyAgICAgICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
Qm9vbGVhbikgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBBU1NFUlQoaW5m
by5ncHIoKSA9PSB0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291
cmNlKTsKICAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIodmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5k
ZXgpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0Qm9vbGVhbkNv
bnN0YW50OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICAgICAg
ICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1h
dENlbGwpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CiAgICAgICAgICAgICBpZiAobm9k
ZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLmlz
Q2VsbCgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWUu
YXNDZWxsKCkpLCB0YXJnZXQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWdpc3RlckZv
cm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSkgewotICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3By
KCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAg
ICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRDZWxsQ29uc3RhbnQ7CisgICAgICAgICAgICB9
IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09
IHRhcmdldCk7Ci0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzQ2VsbCgpKQotICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihub2RlSW5kZXgpLmFzVHJ1
c3RlZEltbVB0cigpLCB0YXJnZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihub2RlSW5kZXgpLCB0YXJnZXQp
OwotICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50
ZWdlcikgewotICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRK
U0ludGVnZXIpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2Fk
Rm9yKHNwaWxsTWUpLCB0YXJnZXQpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
cmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAg
ICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJn
ZXQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZmlsbEFj
dGlvbiA9IExvYWRQdHI7CiAjZWxzZQotICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSB0
YXJnZXQgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgaWYgKG5vZGUu
aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoaW5mby50YWdHUFIoKSA9PSB0
YXJnZXQgPyBJbW0zMih2LnRhZygpKSA6IEltbTMyKHYucGF5bG9hZCgpKSwgdGFyZ2V0KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpbmZvLnBheWxvYWRHUFIoKSA9PSB0YXJnZXQpCi0gICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7
Ci0gICAgICAgIGVsc2UgeyAvLyBGaWxsIHRoZSBUYWcKLSAgICAgICAgICAgIHN3aXRjaCAoaW5m
by5zcGlsbEZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgor
ICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOworI2VuZGlmCisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1h
dFN0b3JhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7Cisg
ICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAg
ICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNDZWxsKCkpCisgICAgICAgICAgICAgICAgICAg
IGZpbGxBY3Rpb24gPSBTZXRUcnVzdGVkSlNDb25zdGFudDsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRKU0NvbnN0YW50OworICAgICAg
ICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIp
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpT
SW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJG
b3JtYXQgPT0gRGF0YUZvcm1hdEpTQ2VsbCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgICAgICAgICAg
ICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNCb29sZWFuKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwg
dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3Ioc3BpbGxNZSks
IHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZmlsbEFj
dGlvbiA9IExvYWQzMlBheWxvYWRCb3hJbnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgICAgICAgICAg
ICAgZmlsbEFjdGlvbiA9IExvYWREb3VibGVCb3hEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKKyNlbHNlCisgICAgICAgICAg
ICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSBzb3VyY2UgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0g
c291cmNlKTsKKyAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAg
ICAgICAgICAgIGZpbGxBY3Rpb24gPSBpbmZvLnRhZ0dQUigpID09IHRhcmdldCA/IFNldEpTQ29u
c3RhbnRUYWcgOiBTZXRKU0NvbnN0YW50UGF5bG9hZDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
aW5mby5wYXlsb2FkR1BSKCkgPT0gc291cmNlKQorICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24g
PSBMb2FkMzJQYXlsb2FkOworICAgICAgICAgICAgZWxzZSB7IC8vIEZpbGwgdGhlIFRhZworICAg
ICAgICAgICAgICAgIHN3aXRjaCAoaW5mby5zcGlsbEZvcm1hdCgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgICAgICAg
ICBmaWxsQWN0aW9uID0gU2V0SW50MzJUYWc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAgICAgICAg
ICAgICAgICAgZmlsbEFjdGlvbiA9IFNldENlbGxUYWc7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
KyAgICAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldEJvb2xlYW5UYWc7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJUYWc7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQogI2VuZGlm
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuKHNwaWxsQWN0aW9uLCBmaWxsQWN0aW9uLCBub2RlSW5kZXgsIHNvdXJjZSk7CiAgICAgfQot
Ci0gICAgdm9pZCBzaWxlbnRGaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcg
Y2FuVHJhbXBsZSwgRlBSUmVnIHRhcmdldCkKKyAgICAKKyAgICBTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuIHNpbGVudFNhdmVQbGFuRm9yRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBGUFJSZWcg
c291cmNlKQogICAgIHsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3NwaWxsTWVdOwotICAgICAgICBBU1NFUlQoaW5mby5mcHIoKSA9PSB0YXJnZXQpOwot
CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAg
ICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOworICAg
ICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwor
ICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSk7CiAKLSAg
ICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGlzTnVt
YmVyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKEltbVB0cihi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSksIGNh
blRyYW1wbGUpOwotICAgICAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKGNhblRyYW1wbGUs
IHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFNpbGVudFNwaWxsQWN0aW9u
IHNwaWxsQWN0aW9uOworICAgICAgICBTaWxlbnRGaWxsQWN0aW9uIGZpbGxBY3Rpb247CisgICAg
ICAgIAorICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKQorICAgICAgICAgICAgc3BpbGxB
Y3Rpb24gPSBEb05vdGhpbmdGb3JTcGlsbDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlQoIWF0KGluZm8ubm9kZUluZGV4KCkpLmhhc0NvbnN0YW50KCkpOworICAgICAgICAgICAg
QVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5mby5mcHIoKSA9PSBzb3VyY2UpOworICAgICAgICAgICAgc3BpbGxBY3Rpb24g
PSBTdG9yZURvdWJsZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGluZm8uc3Bp
bGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdERvdWJsZSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGlmIChub2RlLmhh
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGVJ
bmRleCkpOworICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldERvdWJsZUNvbnN0YW50OworICAg
ICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBp
bmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSkgewogICAgICAgICAgICAgLy8g
aXQgd2FzIGFscmVhZHkgc3BpbGxlZCBwcmV2aW91c2x5IGFuZCBub3QgYXMgYSBkb3VibGUsIHdo
aWNoIG1lYW5zIHdlIG5lZWQgdW5ib3hpbmcuCiAgICAgICAgICAgICBBU1NFUlQoaW5mby5zcGls
bEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIGNhblRyYW1wbGUpOwotICAgICAgICAgICAg
dW5ib3hEb3VibGUoY2FuVHJhbXBsZSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZEpTVW5i
b3hEb3VibGU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWRE
b3VibGU7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBVTlVTRURfUEFSQU0oY2Fu
VHJhbXBsZSk7CiAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdERvdWJsZSB8fCBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTRG91Ymxl
KTsKICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgQVNTRVJU
KGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRleCksIHRhcmdldCk7CisgICAgICAg
ICAgICBmaWxsQWN0aW9uID0gU2V0RG91YmxlQ29uc3RhbnQ7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1l
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkRG91YmxlOwogI2VuZGlm
Ci0gICAgfQogCi0gICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVk
ZSwgR1BSUmVnIGV4Y2x1ZGUyID0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIFNpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4oc3BpbGxBY3Rpb24sIGZpbGxBY3Rpb24sIG5vZGVJbmRleCwgc291
cmNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaWxlbnRTcGlsbChjb25zdCBTaWxlbnRSZWdp
c3RlclNhdmVQbGFuJiBwbGFuKQogICAgIHsKLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRl
ciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0ZXIu
bmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3By
ICE9IGV4Y2x1ZGUyKQotICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsR1BSKGl0ZXIubmFtZSgp
LCBncHIpOworICAgICAgICBzd2l0Y2ggKHBsYW4uc3BpbGxBY3Rpb24oKSkgeworICAgICAgICBj
YXNlIERvTm90aGluZ0ZvclNwaWxsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U3RvcmUzMlRhZzoKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocGxhbi5ncHIoKSwgSklUQ29t
cGlsZXI6OnRhZ0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmUzMlBheWxvYWQ6CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGF0
KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdG9yZVB0cjoKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHBs
YW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZp
cnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9y
ZURvdWJsZToKKyAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHBsYW4uZnByKCksIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3Rlcigp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9y
IGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2lsZW50RmlsbChjb25zdCBTaWxlbnRSZWdpc3RlclNh
dmVQbGFuJiBwbGFuLCBHUFJSZWcgY2FuVHJhbXBsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cGxhbi5maWxsQWN0aW9uKCkpIHsKKyAgICAgICAgY2FzZSBEb05vdGhpbmdGb3JGaWxsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0SW50MzJDb25zdGFudDoKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgo
KSkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldEJv
b2xlYW5Db25zdGFudDoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHZhbHVl
T2ZCb29sZWFuQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkpLCBwbGFuLmdwcigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldENlbGxDb25zdGFudDoKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGVJbmRl
eCgpKS5hc0NlbGwoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgY2FzZSBTZXRUcnVzdGVkSlNDb25zdGFudDoKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihwbGFuLm5vZGVJbmRleCgp
KS5hc1RydXN0ZWRJbW1QdHIoKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTZXRKU0NvbnN0YW50OgorICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9m
SlNDb25zdGFudEFzSW1tUHRyKHBsYW4ubm9kZUluZGV4KCkpLCBwbGFuLmdwcigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldERvdWJsZUNvbnN0YW50OgorICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQocGxhbi5ub2RlSW5kZXgoKSkpKSwgY2FuVHJhbXBsZSk7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlUHRyVG9Eb3VibGUoY2FuVHJhbXBsZSwgcGxhbi5mcHIoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBMb2FkMzJQYXlsb2FkQm94SW50OgorICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZp
cnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5vclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTG9hZERvdWJsZUJveERvdWJsZToKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSku
dmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LnN1YlB0
cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHBsYW4uZ3ByKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZEpTVW5ib3hEb3VibGU6CisgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkp
LnZpcnR1YWxSZWdpc3RlcigpKSwgY2FuVHJhbXBsZSk7CisgICAgICAgICAgICB1bmJveERvdWJs
ZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAg
ICAgICAgY2FzZSBTZXRKU0NvbnN0YW50VGFnOgorICAgICAgICAgICAgbV9qaXQubW92ZShJbW0z
Mih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKS50YWcoKSksIHBsYW4uZ3ByKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0SlNDb25zdGFudFBheWxvYWQ6
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9k
ZUluZGV4KCkpLnBheWxvYWQoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU2V0SW50MzJUYWc6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU2V0Q2VsbFRhZzoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNldEJvb2xlYW5UYWc6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTZXREb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoYWRkcmVzc09mRE91YmxlQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSks
IHBsYW4uZnByKCkpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBM
b2FkMzJUYWc6CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcihh
dChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDMyUGF5bG9hZDoKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTG9hZFB0cjoKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBw
bGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWREb3VibGU6
CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0
KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5mcHIoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQotICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMoRlBSUmVnIGV4Y2x1ZGUpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVj
dGlvblR5cGU+CisgICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoYm9vbCBkb1Nw
aWxsLCBDb2xsZWN0aW9uVHlwZSYgcGxhbnMsIEdQUlJlZyBleGNsdWRlLCBHUFJSZWcgZXhjbHVk
ZTIgPSBJbnZhbGlkR1BSUmVnLCBGUFJSZWcgZnByRXhjbHVkZSA9IEludmFsaWRGUFJSZWcpCiAg
ICAgeworICAgICAgICBBU1NFUlQocGxhbnMuaXNFbXB0eSgpKTsKICAgICAgICAgZm9yIChncHJf
aXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKLSAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSwgaXRlci5y
ZWdJRCgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBpdGVyLnJlZ0lEKCk7CisgICAgICAg
ICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBncHIgIT0g
ZXhjbHVkZSAmJiBncHIgIT0gZXhjbHVkZTIpIHsKKyAgICAgICAgICAgICAgICBTaWxlbnRSZWdp
c3RlclNhdmVQbGFuIHBsYW4gPSBzaWxlbnRTYXZlUGxhbkZvckdQUihpdGVyLm5hbWUoKSwgZ3By
KTsKKyAgICAgICAgICAgICAgICBpZiAoZG9TcGlsbCkKKyAgICAgICAgICAgICAgICAgICAgc2ls
ZW50U3BpbGwocGxhbik7CisgICAgICAgICAgICAgICAgcGxhbnMuYXBwZW5kKHBsYW4pOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBt
X2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAg
ICAgRlBSUmVnIGZwciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUo
KSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGZwciAhPSBleGNsdWRlKQotICAgICAgICAg
ICAgICAgIHNpbGVudFNwaWxsRlBSKGl0ZXIubmFtZSgpLCBmcHIpOworICAgICAgICAgICAgaWYg
KGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgaXRlci5yZWdJRCgpICE9
IGZwckV4Y2x1ZGUpIHsKKyAgICAgICAgICAgICAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIHBs
YW4gPSBzaWxlbnRTYXZlUGxhbkZvckZQUihpdGVyLm5hbWUoKSwgaXRlci5yZWdJRCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZG9TcGlsbCkKKyAgICAgICAgICAgICAgICAgICAgc2lsZW50U3Bp
bGwocGxhbik7CisgICAgICAgICAgICAgICAgcGxhbnMuYXBwZW5kKHBsYW4pOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KEdQUlJlZyBleGNsdWRlLCBHUFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIHZvaWQgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnNJbXBsKGJvb2wgZG9TcGlsbCwgQ29sbGVjdGlvblR5cGUmIHBsYW5zLCBGUFJSZWcg
ZXhjbHVkZSkKICAgICB7Ci0gICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVn
VDA7Ci0gICAgICAgIGlmIChleGNsdWRlID09IEdQUkluZm86OnJlZ1QwKQotICAgICAgICAgICAg
Y2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QxOwotICAgICAgICAKLSAgICAgICAgZm9yIChmcHJf
aXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKLSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsRlBSKGl0ZXIubmFtZSgpLCBjYW5UcmFt
cGxlLCBpdGVyLnJlZ0lEKCkpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9y
IGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChp
dGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGdwciAhPSBleGNsdWRlICYm
IGdwciAhPSBleGNsdWRlMikKLSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsR1BSKGl0ZXIubmFt
ZSgpLCBncHIpOwotICAgICAgICB9CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1w
bChkb1NwaWxsLCBwbGFucywgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZywgZXhjbHVkZSk7
CiAgICAgfQotICAgIHZvaWQgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhGUFJSZWcgZXhjbHVkZSkK
KyAgICAKKyAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEdQUlJlZyBleGNsdWRlLCBH
UFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnLCBGUFJSZWcgZnByRXhjbHVkZSA9IEludmFs
aWRGUFJSZWcpCiAgICAgewotICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJl
Z1QwOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwodHJ1ZSwgbV9wbGFucywg
ZXhjbHVkZSwgZXhjbHVkZTIsIGZwckV4Y2x1ZGUpOworICAgIH0KKyAgICB2b2lkIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKEZQUlJlZyBleGNsdWRlKQorICAgIHsKKyAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZywgZXhjbHVkZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBHUFJSZWcgcGlja0NhblRyYW1wbGUoR1BSUmVnIGV4Y2x1
ZGUpCisgICAgeworICAgICAgICBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
ICAgIGlmIChyZXN1bHQgPT0gZXhjbHVkZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QxOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzdGF0aWMgR1BSUmVn
IHBpY2tDYW5UcmFtcGxlKEZQUlJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBHUFJJbmZvOjpy
ZWdUMDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVnaXN0ZXJUeXBlPgor
ICAgIHZvaWQgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhSZWdpc3RlclR5cGUgZXhjbHVkZSkKKyAg
ICB7CisgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0gcGlja0NhblRyYW1wbGUoZXhjbHVkZSk7
CiAgICAgICAgIAotICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2lu
KCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIEZQUlJlZyBm
cHIgPSBpdGVyLnJlZ0lEKCk7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlciAmJiBmcHIgIT0gZXhjbHVkZSkKLSAgICAgICAgICAgICAgICBzaWxl
bnRGaWxsRlBSKGl0ZXIubmFtZSgpLCBjYW5UcmFtcGxlLCBmcHIpOwotICAgICAgICB9Ci0gICAg
ICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dw
cnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50RmlsbEdQUihpdGVyLm5h
bWUoKSwgaXRlci5yZWdJRCgpKTsKKyAgICAgICAgd2hpbGUgKCFtX3BsYW5zLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiYgcGxhbiA9IG1fcGxhbnMubGFz
dCgpOworICAgICAgICAgICAgc2lsZW50RmlsbChwbGFuLCBjYW5UcmFtcGxlKTsKKyAgICAgICAg
ICAgIG1fcGxhbnMucmVtb3ZlTGFzdCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC04OTgsMTIg
Kzk4MSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIo
Tm9kZSYpOwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVVSW50MzJUb051bWJlcihOb2RlJik7CiAK
LSAgICBlbnVtIFNwaWxsUmVnaXN0ZXJzTW9kZSB7IE5lZWRUb1NwaWxsLCBEb250U3BpbGwgfTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhY2hlZEdldEJ5SWQo
Q29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5l
ZWRUb1NwaWxsKTsKKyAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJh
c2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKICAgICB2b2lk
IGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1ZSwgRWRn
ZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6
Okp1bXAoKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQUlJl
ZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxv
YWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRD
b21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxs
UmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKKyAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29k
ZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwg
R1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5l
ZWRUb1NwaWxsKTsKICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJh
c2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIs
IEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCkpOwogI2VuZGlmCiAKQEAgLTEyMjUsNiArMTMwNywxMSBAQCBwcml2YXRlOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUMgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgYXJnMSk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKQEAgLTEy
NTUsNiArMTM0MiwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1l
bnRUeXBlMiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMz4KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3Vt
ZW50VHlwZTEgYXJnMSwgQXJndW1lbnRUeXBlMiBhcmcyLCBBcmd1bWVudFR5cGUzIGFyZzMpCisg
ICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEludmFsaWRHUFJSZWcpOworICAgICAgICBy
ZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0K
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0VKIG9w
ZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CkBAIC0xNDIzLDYgKzE1MTYsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgewor
ICAgICAgICBBU1NFUlQocmVzdWx0ID09IEludmFsaWRHUFJSZWcpOworICAgICAgICByZXR1cm4g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZzEpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5
bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CkBAIC0xNDQ4LDYg
KzE1NDYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIsIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlw
ZW5hbWUgQXJndW1lbnRUeXBlMywgdHlwZW5hbWUgQXJndW1lbnRUeXBlND4KKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZzEsIEFyZ3VtZW50VHlwZTIgYXJnMiwgQXJn
dW1lbnRUeXBlMyBhcmczLCBBcmd1bWVudFR5cGU0IGFyZzQpCisgICAgeworICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEludmFsaWRHUFJSZWcpOworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOworICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFt
ZSBBcmd1bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVudFR5cGU0LCB0eXBlbmFtZSBBcmd1bWVu
dFR5cGU1PgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSwgQXJn
dW1lbnRUeXBlMiBhcmcyLCBBcmd1bWVudFR5cGUzIGFyZzMsIEFyZ3VtZW50VHlwZTQgYXJnNCwg
QXJndW1lbnRUeXBlNSBhcmc1KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmcx
LCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKKyAgICB9CiAKICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CkBAIC0xOTUxLDgg
KzIwNjEsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07
CiAgICAgfQogICAgIAotICAgIC8vIFRoZSBKSVQsIHdoaWxlIGFsc28gcHJvdmlkZXMgTWFjcm9B
c3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KICAgICBKSVRDb21waWxlciYgbV9qaXQ7CisKICAgICAv
LyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1fYmxv
Y2s7CiAgICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OwpAQCAtMTk4NCw2ICsyMDk0LDkgQEAg
cHJpdmF0ZToKICAgICAKICAgICBBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAgICAgCisgICAgVmVj
dG9yPFNsb3dQYXRoR2VuZXJhdG9yKiwgOD4gbV9zbG93UGF0aEdlbmVyYXRvcnM7IC8vIGRvZXNu
J3QgdXNlIE93blB0cjw+IGJlY2F1c2UgSSBkb24ndCB3YW50IHRvIGluY2x1ZGUgREZHU2xvd1Bh
dGhHZW5lcmF0b3IuaAorICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuPiBtX3BsYW5z
OworCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1
ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihp
bnQgb3BlcmFuZCkKQEAgLTI2MDMsMjAgKzI3MTYsNiBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBt
X2dwck9ySW52YWxpZDsKIH07CiAKLWlubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsZXImIGppdCkKLSAgICA6IG1fY29tcGlsZU9rYXkodHJ1ZSkKLSAgICAsIG1f
aml0KGppdCkKLSAgICAsIG1fY29tcGlsZUluZGV4KDApCi0gICAgLCBtX2luZGV4SW5CbG9jaygw
KQotICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMpCi0gICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgp
KQotICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpCi0g
ICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKLSAgICAsIG1fbGFzdFNl
dE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAsIG1fc3RhdGUo
bV9qaXQuZ3JhcGgoKSkKLXsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137231</attachid>
            <date>2012-04-15 01:37:04 -0700</date>
            <delta_ts>2012-04-15 14:50:04 -0700</delta_ts>
            <desc>it works but not on 32-bit</desc>
            <filename>slowpaths_patch_3.diff</filename>
            <type>text/plain</type>
            <size>102963</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0MjExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxMi0wNC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBvdXQtb2YtbGluZSBzbG93IHBhdGhzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4K
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKFN0cnVjdHVy
ZVN0dWJJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wZXJ0eUFjY2Vzc1JlY29yZDo6UHJvcGVydHlBY2Nlc3NSZWNvcmQpOgorICAgICAgICAoUHJv
cGVydHlBY2Nlc3NSZWNvcmQpOgorICAgICAgICAoSklUQ29tcGlsZXIpOgorICAgICAgICAqIGRm
Zy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW46OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4pOgorICAgICAgICAoSlND
OjpERkc6OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW46OnNwaWxsQWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuOjpmaWxsQWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuOjpub2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW46Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbjo6ZnByKToKKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoU2xvd1BhdGhHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpTbG93UGF0aEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6On5TbG93UGF0
aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVy
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6bGFiZWwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpjYWxsKToKKyAgICAgICAgKEp1bXBp
bmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6SnVtcGluZ1Nsb3dQYXRo
R2VuZXJhdG9yOjpKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6
Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6bGlua0Zyb20pOgorICAgICAgICAoSlNDOjpERkc6
Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6anVtcFRvKToKKyAgICAgICAgKENhbGxTbG93UGF0
aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjpD
YWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdl
bmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9y
OjpzZXRVcCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjpyZWNv
cmRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsU2xvd1BhdGhHZW5lcmF0b3I6OnRlYXJE
b3duKToKKyAgICAgICAgKENhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvcjo6Q2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9y
OjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKENhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNs
b3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kT25lQXJn
dW1lbnRTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZE9uZUFyZ3VtZW50U2xvd1BhdGhH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNs
b3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKENhbGxSZXN1bHRB
bmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2Fs
bFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kVHdv
QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1
bHRBbmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6Cisg
ICAgICAgIChDYWxsUmVzdWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5l
cmF0b3I6OkNhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVy
YXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kRm91ckFyZ3Vt
ZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5k
Rm91ckFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kRm91ckFyZ3VtZW50
c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kRm91
ckFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAg
KENhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpERkc6OkNhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OkNh
bGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpERkc6OkNhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVy
YXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OnNsb3dQYXRoQ2FsbCk6CisgICAgICAg
IChBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6QXNzaWdu
aW5nU2xvd1BhdGhHZW5lcmF0b3I6OkFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhNb3ZlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpT
cGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjp+U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBS
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwaWNrQ2FuVHJhbXBsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChWYWx1ZVRvTnVt
YmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlVG9OdW1iZXJT
bG93UGF0aEdlbmVyYXRvcjo6VmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50
ZXJuYWwpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChDb21wYXJlQW5kQm94Qm9v
bGVhblNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94
Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMi0wNC0xMyAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjExNDE4NS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBA
QAogCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNB
MDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0Fy
Z3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRTNB
NDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0
NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjFFM0E1QzE1M0ExREE5MDAwRjk0NTYgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBE
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMjFDMjY4MTRCRTVGNjgwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjY2MTRCRTVGNUUw
MEFEQzY0QiAvKiBKSVREcml2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3QzE0QkU3Mjc2MDBBREM2NEIgLyogRXhlY3V0aW9uSGFy
bmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
MUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3RDE0QkU3MjdBMDBB
REM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVT
cGVjaWFsaXphdGlvbktpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNzUwLDYgKzc1Miw4IEBACiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3
RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTQz
MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50UG9zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdB
cmd1bWVudFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTQ0
MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RG
R0RvdWJsZUZvcm1hdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUUz
QTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZn
L0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aDsgcGF0aCA9IGRmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMjFDMjY2MTRCRTVGNUUwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURHJpdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTcGVj
aWFsaXphdGlvbktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyN0Ex
NEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9uSGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjA4NCw2ICsyMDg4LDggQEAKIAkJCQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYg
LyogREZHUmVwYXRjaC5jcHAgKi8sCiAJCQkJODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERG
R1JlcGF0Y2guaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVC
b2FyZC5oICovLAorCQkJCTBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdp
c3RlclNhdmVQbGFuLmggKi8sCisJCQkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Ns
b3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1NwZWN1bGF0aXZlSklULmNwcCAqLywKIAkJCQk4NkVDOURDMzEzMjhERjgyMDAyQjJBRDcgLyog
REZHU3BlY3VsYXRpdmVKSVQuaCAqLywKIAkJCQk4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyog
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi8sCkBAIC0yNTcwLDYgKzI1NzYsOCBAQAogCQkJ
CTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRjaFJlc3VsdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVG
b3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRTNBNUMxNTNBMURBOTAwMEY5NDU2
IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAv
KiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDE1ICsyMDAsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7CiAgICAg
ICAgICAgICAgICAgaW50OF90IHNjcmF0Y2hHUFI7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBk
ZWx0YUNhbGxUb0RvbmU7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1N0cnVj
dENoZWNrOwotICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKLSAg
ICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CisgICAgICAgICAgICAg
ICAgaW50MzJfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0
YUNhbGxUb1N0cnVjdENoZWNrOworICAgICAgICAgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9T
bG93Q2FzZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3Jl
OwogI2Vsc2UKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3Rv
cmU7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9y
ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmU7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZTsKICNl
bmRpZgogICAgICAgICAgICAgfSBkZmc7CiAgICAgICAgICAgICBzdHJ1Y3QgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQs
NiArMTE0LDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaQogICAg
IH0KIH0KIAorZW51bSBTcGlsbFJlZ2lzdGVyc01vZGUgeyBOZWVkVG9TcGlsbCwgRG9udFNwaWxs
IH07CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
REZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgorI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKQEAgLTE0OSwxOSArMTUwLDE5IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBtX2NvZGVCbG9jay0+c2V0TnVt
YmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vzc2VzLnNpemUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1
cmVTdHViSW5mbyhpKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZnVuY3Rp
b25DYWxsKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5l
cmF0b3ItPmNhbGwoKSk7CiAgICAgICAgIGluZm8uY29kZU9yaWdpbiA9IG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX2NvZGVPcmlnaW47CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0g
Y2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1t
VG9DYWxsID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNoZWNrSW1tVG9DYWxsKSwgY2FsbFJldHVybkxv
Y2F0aW9uKTsKLSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nl
c1tpXS5tX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fc3RydWN0dXJlQ2hlY2spKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKKyAgICAgICAgaW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV9sb2FkT3JTdG9yZSkpOwogI2Vsc2UKLSAgICAgICAgaW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihj
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNz
ZXNbaV0ubV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlB
Y2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSk7CisgICAgICAgIGlu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9w
ZXJ0eUFjY2Vzc2VzW2ldLm1fdGFnTG9hZE9yU3RvcmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fcGF5bG9hZExvYWRPclN0b3JlKSk7CiAjZW5kaWYKLSAgICAgICAgaW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihj
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNz
ZXNbaV0ubV9kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNh
bGxUb0RvbmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFi
ZWwoKSkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUgPSBkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZG9uZSkpOwogICAgICAgICBpbmZvLnBhdGNoLmRm
Zy5iYXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fYmFzZUdQUjsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICBpbmZvLnBhdGNoLmRmZy52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX3ZhbHVlR1BSOwpAQCAtMjAxLDYgKzIwMiw5IEBAIGJvb2wgSklUQ29tcGlsZXI6
OmNvbXBpbGUoSklUQ29kZSYgZW50cnkKICAgICBTcGVjdWxhdGl2ZUpJVCBzcGVjdWxhdGl2ZSgq
dGhpcyk7CiAgICAgY29tcGlsZUJvZHkoc3BlY3VsYXRpdmUpOwogCisgICAgLy8gR2VuZXJhdGUg
c2xvdyBwYXRoIGNvZGUuCisgICAgc3BlY3VsYXRpdmUucnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7
CisgICAgCiAgICAgLy8gQ3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9saW5lcyBpZiBuZWNlc3Nhcnku
CiAgICAgc3BlY3VsYXRpdmUuY3JlYXRlT1NSRW50cmllcygpOwogCkBAIC0yNzAsNiArMjc0LDkg
QEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIG1vdmUoR1BS
SW5mbzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBqdW1wKGZyb21B
cml0eUNoZWNrKTsKICAgICAKKyAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29kZS4KKyAgICBz
cGVjdWxhdGl2ZS5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICAKICAgICAvLyBDcmVhdGUg
T1NSIGVudHJ5IHRyYW1wb2xpbmVzIGlmIG5lY2Vzc2FyeS4KICAgICBzcGVjdWxhdGl2ZS5jcmVh
dGVPU1JFbnRyaWVzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4LDE1IEBACiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPGFzc2VtYmxlci9MaW5rQnVmZmVyLmg+
Ci0jaW5jbHVkZSA8YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg+Ci0jaW5jbHVkZSA8Ynl0ZWNv
ZGUvQ29kZUJsb2NrLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR0NDYWxsSGVscGVycy5oPgotI2luY2x1
ZGUgPGRmZy9ERkdGUFJJbmZvLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR0dQUkluZm8uaD4KLSNpbmNs
dWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDxkZmcvREZHUmVnaXN0ZXJCYW5rLmg+Ci0j
aW5jbHVkZSA8aml0L0pJVENvZGUuaD4KKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJERkdDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJERkdGUFJJbmZvLmgiCisjaW5jbHVkZSAi
REZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUmVnaXN0
ZXJCYW5rLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKIGNs
YXNzIE5vZGVUb1JlZ2lzdGVyTWFwOworY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBjbGFzcyBT
cGVjdWxhdGl2ZUpJVDsKIGNsYXNzIFNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAKQEAgLTEzMCwyMiAr
MTMxLDQzIEBAIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7CiAgICAgZW51bSBSZWdpc3Rl
ck1vZGUgeyBSZWdpc3RlcnNGbHVzaGVkLCBSZWdpc3RlcnNJblVzZSB9OwogICAgIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZGVs
dGFDYWxsVG9TdHJ1Y3RDaGVjaywgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRlbHRhQ2FsbFRvU2xv
d0Nhc2UsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkZWx0YUNhbGxUb0RvbmUsIGludDhfdCBiYXNl
R1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSLCBSZWdpc3Rlck1vZGUgcmVn
aXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCisgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoCisg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbFB0ciBzdHJ1Y3R1cmVJbW0sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN0
cnVjdHVyZUNoZWNrLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBs
b2FkT3JTdG9yZSwKKyAgICAgICAgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoR2VuZXJhdG9y
LAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSwKKyAgICAgICAgaW50OF90IGJh
c2VHUFIsCisgICAgICAgIGludDhfdCB2YWx1ZUdQUiwKKyAgICAgICAgaW50OF90IHNjcmF0Y2hH
UFIsCisgICAgICAgIFJlZ2lzdGVyTW9kZSByZWdpc3Rlck1vZGUgPSBSZWdpc3RlcnNJblVzZSkK
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGRlbHRhQ2hlY2tJ
bW1Ub0NhbGwsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJl
bENvbXBhY3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSwgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbENvbXBhY3QgZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUsIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZGVsdGFD
YWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlVGFnR1BSLCBpbnQ4X3QgdmFs
dWVHUFIsIGludDhfdCBzY3JhdGNoR1BSLCBSZWdpc3Rlck1vZGUgcmVnaXN0ZXJNb2RlID0gUmVn
aXN0ZXJzSW5Vc2UpCisgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoCisgICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1
Y3R1cmVJbW0sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrLAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCB0YWdMb2FkT3JTdG9yZSwK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgcGF5bG9hZExvYWRPclN0
b3JlLAorICAgICAgICBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGhHZW5lcmF0b3IsCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lLAorICAgICAgICBpbnQ4X3QgYmFzZUdQUiwK
KyAgICAgICAgaW50OF90IHZhbHVlVGFnR1BSLAorICAgICAgICBpbnQ4X3QgdmFsdWVHUFIsCisg
ICAgICAgIGludDhfdCBzY3JhdGNoR1BSLAorICAgICAgICBSZWdpc3Rlck1vZGUgcmVnaXN0ZXJN
b2RlID0gUmVnaXN0ZXJzSW5Vc2UpCiAjZW5kaWYKICAgICAgICAgOiBtX2NvZGVPcmlnaW4oY29k
ZU9yaWdpbikKLSAgICAgICAgLCBtX2RlbHRhQ2hlY2tJbW1Ub0NhbGwoZGVsdGFDaGVja0ltbVRv
Q2FsbCkKLSAgICAgICAgLCBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlvbkNhbGwpCi0gICAgICAgICwg
bV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spCisgICAgICAg
ICwgbV9zdHJ1Y3R1cmVJbW0oc3RydWN0dXJlSW1tKQorICAgICAgICAsIG1fc3RydWN0dXJlQ2hl
Y2soc3RydWN0dXJlQ2hlY2spCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgLCBtX2RlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUoZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKKyAgICAgICAgLCBtX2xv
YWRPclN0b3JlKGxvYWRPclN0b3JlKQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
LCBtX2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUoZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSkK
LSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKGRlbHRhQ2FsbFRvUGF5
bG9hZExvYWRPclN0b3JlKQorICAgICAgICAsIG1fdGFnTG9hZE9yU3RvcmUodGFnTG9hZE9yU3Rv
cmUpCisgICAgICAgICwgbV9wYXlsb2FkTG9hZE9yU3RvcmUocGF5bG9hZExvYWRPclN0b3JlKQog
I2VuZGlmCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb1Nsb3dDYXNlKGRlbHRhQ2FsbFRvU2xvd0Nh
c2UpCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb0RvbmUoZGVsdGFDYWxsVG9Eb25lKQorICAgICAg
ICAsIG1fc2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhHZW5lcmF0b3IpCisgICAgICAgICwgbV9k
b25lKGRvbmUpCiAgICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIpCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgLCBtX3ZhbHVlVGFnR1BSKHZhbHVlVGFnR1BSKQpAQCAtMTU3LDE3ICsx
NzksMTYgQEAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKICAgICB9CiAKICAgICBDb2Rl
T3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1f
ZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2Z1bmN0aW9u
Q2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2RlbHRhQ2FsbFRvU3RydWN0Q2hlY2s7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX3N0cnVjdHVyZUltbTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3N0cnVjdHVyZUNoZWNrOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9kZWx0YUNhbGxUb0xvYWRP
clN0b3JlOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fbG9hZE9yU3Rv
cmU7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFi
ZWxDb21wYWN0IG1fZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZTsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6RGF0YUxhYmVsQ29tcGFjdCBtX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlOworICAg
IE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fdGFnTG9hZE9yU3RvcmU7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9wYXlsb2FkTG9hZE9yU3RvcmU7CiAj
ZW5kaWYKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kZWx0YUNhbGxUb1Nsb3dDYXNlOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RlbHRhQ2FsbFRvRG9uZTsKKyAgICBTbG93UGF0
aEdlbmVyYXRvciogbV9zbG93UGF0aEdlbmVyYXRvcjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9kb25lOwogICAgIGludDhfdCBtX2Jhc2VHUFI7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBpbnQ4X3QgbV92YWx1ZVRhZ0dQUjsKQEAgLTE5Myw3ICsyMTQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4KDApCiAgICAgewogICAgIH0KLQorICAg
IAogICAgIGJvb2wgY29tcGlsZShKSVRDb2RlJiBlbnRyeSk7CiAgICAgYm9vbCBjb21waWxlRnVu
Y3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgZW50cnlXaXRoQXJp
dHlDaGVjayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbl9oCisjZGVmaW5lIERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW5faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRG
R0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworZW51bSBTaWxlbnRTcGlsbEFjdGlvbiB7CisgICAgRG9Ob3RoaW5n
Rm9yU3BpbGwsCisgICAgU3RvcmUzMlRhZywKKyAgICBTdG9yZTMyUGF5bG9hZCwKKyAgICBTdG9y
ZVB0ciwKKyAgICBTdG9yZURvdWJsZQorfTsKKworZW51bSBTaWxlbnRGaWxsQWN0aW9uIHsKKyAg
ICBEb05vdGhpbmdGb3JGaWxsLAorICAgIFNldEludDMyQ29uc3RhbnQsCisgICAgU2V0Qm9vbGVh
bkNvbnN0YW50LAorICAgIFNldENlbGxDb25zdGFudCwKKyAgICBTZXRUcnVzdGVkSlNDb25zdGFu
dCwKKyAgICBTZXRKU0NvbnN0YW50LAorICAgIFNldEpTQ29uc3RhbnRUYWcsCisgICAgU2V0SlND
b25zdGFudFBheWxvYWQsCisgICAgU2V0SW50MzJUYWcsCisgICAgU2V0Q2VsbFRhZywKKyAgICBT
ZXRCb29sZWFuVGFnLAorICAgIFNldERvdWJsZUNvbnN0YW50LAorICAgIExvYWQzMlRhZywKKyAg
ICBMb2FkMzJQYXlsb2FkLAorICAgIExvYWQzMlBheWxvYWRCb3hJbnQsCisgICAgTG9hZFB0ciwK
KyAgICBMb2FkRG91YmxlLAorICAgIExvYWREb3VibGVCb3hEb3VibGUsCisgICAgTG9hZEpTVW5i
b3hEb3VibGUKK307CisKK2NsYXNzIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4geworcHVibGljOgor
ICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oKQorICAgICAgICA6IG1fc3BpbGxBY3Rpb24oRG9O
b3RoaW5nRm9yU3BpbGwpCisgICAgICAgICwgbV9maWxsQWN0aW9uKERvTm90aGluZ0ZvckZpbGwp
CisgICAgICAgICwgbV9yZWdpc3RlcigtMSkKKyAgICAgICAgLCBtX25vZGVJbmRleChOb05vZGUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKFNpbGVudFNw
aWxsQWN0aW9uIHNwaWxsQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lsZW50
RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIpCisg
ICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlvbikKKyAgICAgICAgLCBtX2ZpbGxBY3Rp
b24oZmlsbEFjdGlvbikKKyAgICAgICAgLCBtX3JlZ2lzdGVyKGdwcikKKyAgICAgICAgLCBtX25v
ZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuKFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZQUlJlZyBmcHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlvbikKKyAg
ICAgICAgLCBtX2ZpbGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAgICAgLCBtX3JlZ2lzdGVyKGZw
cikKKyAgICAgICAgLCBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFNpbGVudFNwaWxsQWN0aW9uPihtX3NwaWxsQWN0aW9uKTsgfQorICAgIFNpbGVudEZp
bGxBY3Rpb24gZmlsbEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNpbGVudEZp
bGxBY3Rpb24+KG1fZmlsbEFjdGlvbik7IH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9kZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlSW5kZXg7IH0KKyAgICAKKyAgICBHUFJSZWcgZ3ByKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3JlZ2lzdGVyKTsgfQorICAgIEZQ
UlJlZyBmcHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KG1fcmVnaXN0ZXIp
OyB9CisgICAgCitwcml2YXRlOgorICAgIGludDhfdCBtX3NwaWxsQWN0aW9uOworICAgIGludDhf
dCBtX2ZpbGxBY3Rpb247CisgICAgaW50OF90IG1fcmVnaXN0ZXI7CisgICAgTm9kZUluZGV4IG1f
bm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5l
cmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xv
d1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTbG93UGF0
aEdlbmVyYXRvcl9oCisjZGVmaW5lIERGR1Nsb3dQYXRoR2VuZXJhdG9yX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdD
b21tb24uaCIKKyNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgiCisjaW5jbHVk
ZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3IgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIFNsb3dQYXRoR2VuZXJhdG9yKCkgeyB9CisgICAgdmlydHVh
bCB+U2xvd1BhdGhHZW5lcmF0b3IoKSB7IH0KKyAgICB2b2lkIGdlbmVyYXRlKFNwZWN1bGF0aXZl
SklUKiBqaXQpCisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAg
ZGF0YUxvZygiR2VuZXJhdGluZyBzbG93IHBhdGggJXAgYXQgb2Zmc2V0IDB4JXhcbiIsIHRoaXMs
IGppdC0+bV9qaXQuZGVidWdPZmZzZXQoKSk7CisjZW5kaWYKKyAgICAgICAgbV9sYWJlbCA9IGpp
dC0+bV9qaXQubGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdGVJbnRlcm5hbChqaXQpOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICAgICAgaml0LT5tX2ppdC5icmVha3BvaW50KCk7IC8vIG1ha2Ug
c3VyZSB0aGF0IHRoZSBnZW5lcmF0b3IganVtcHMgYmFjayB0byBzb21ld2hlcmUKKyNlbmRpZgor
ICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwoKSBjb25zdCB7IHJldHVybiBt
X2xhYmVsOyB9CisgICAgdmlydHVhbCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBCeSBkZWZhdWx0IHNsb3cg
cGF0aCBnZW5lcmF0b3JzIGRvbid0IGhhdmUgYSBjYWxsLgorICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OkNhbGwoKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkgPSAwOworICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX2xhYmVsOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+Citj
bGFzcyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgU2xvd1BhdGhHZW5lcmF0b3Ig
eworcHVibGljOgorICAgIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcihKdW1wVHlwZSBmcm9tLCBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgdG8pCisgICAgICAgIDogbV9mcm9tKGZyb20pCisgICAgICAg
ICwgbV90byh0bykKKyAgICB7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgbGlu
a0Zyb20oU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIG1fZnJvbS5saW5rKCZq
aXQtPm1faml0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBqdW1wVG8oU3BlY3VsYXRpdmVKSVQq
IGppdCkKKyAgICB7CisgICAgICAgIGppdC0+bV9qaXQuanVtcCgpLmxpbmtUbyhtX3RvLCAmaml0
LT5tX2ppdCk7CisgICAgfQorCisgICAgSnVtcFR5cGUgbV9mcm9tOworICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3RvOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZT4KK2NsYXNzIENhbGxTbG93UGF0
aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGU+IHsK
K3B1YmxpYzoKKyAgICBDYWxsU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAg
U3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgUmVzdWx0VHlwZSByZXN1bHQpCisgICAgICAg
IDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlPihmcm9tLCBqaXQtPm1faml0Lmxh
YmVsKCkpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3NwaWxs
TW9kZShzcGlsbE1vZGUpCisgICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgIHsKKyAgICAg
ICAgaWYgKG1fc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAgICAgICAgICAgaml0LT5zaWxl
bnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZmFsc2UsIG1fcGxhbnMsIHJlc3VsdCk7CisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9jYWxsOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIHNldFVwKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5saW5r
RnJvbShqaXQpOworICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsYW5zLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgIGppdC0+c2lsZW50U3BpbGwobV9wbGFuc1tpXSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCByZWNvcmRDYWxsKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwpCisgICAgeworICAgICAgICBtX2NhbGwgPSBjYWxsOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHRlYXJEb3duKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICBpZiAobV9zcGls
bE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKKyAgICAgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0g
U3BlY3VsYXRpdmVKSVQ6OnBpY2tDYW5UcmFtcGxlKG1fcmVzdWx0KTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgIGpp
dC0+c2lsZW50RmlsbChtX3BsYW5zW2ldLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLT5qdW1wVG8oaml0KTsKKyAgICB9CisKKyAgICBGdW5jdGlvblR5cGUgbV9mdW5jdGlv
bjsKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgbV9zcGlsbE1vZGU7CisgICAgUmVzdWx0VHlwZSBt
X3Jlc3VsdDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7CisgICAgVmVjdG9yPFNp
bGVudFJlZ2lzdGVyU2F2ZVBsYW4sIDI+IG1fcGxhbnM7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlPgor
Y2xhc3MgQ2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1
YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0
VHlwZT4geworcHVibGljOgorICAgIENhbGxSZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5j
dGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUs
IFJlc3VsdFR5cGUgcmVzdWx0KQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1w
VHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwg
ZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAg
eworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGpp
dC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCkpOworICAg
ICAgICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KK307CisKK3RlbXBsYXRlPAorICAgIHR5
cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5
cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMT4KK2NsYXNzIENhbGxSZXN1bHRBbmRPbmVB
cmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1YmxpYzoKKyAgICBD
YWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5
cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAg
ICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJn
dW1lbnRUeXBlMSBhcmd1bWVudDEpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAorICAgICAgICAgICAgZnJvbSwgaml0
LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpCisgICAgICAgICwgbV9hcmd1bWVudDEoYXJn
dW1lbnQxKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0
ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRV
cChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlz
LT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEpKTsKKyAgICAgICAgdGhp
cy0+dGVhckRvd24oaml0KTsKKyAgICB9CisKKyAgICBBcmd1bWVudFR5cGUxIG1fYXJndW1lbnQx
OworfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUx
LCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyPgorY2xhc3MgQ2FsbFJlc3VsdEFuZFR3b0FyZ3VtZW50
c1Nsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1YmxpYzoKKyAgICBDYWxsUmVz
dWx0QW5kVHdvQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAg
U3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50
VHlwZTEgYXJndW1lbnQxLAorICAgICAgICBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MikKKyAgICAg
ICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0
VHlwZT4oCisgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3Vs
dCkKKyAgICAgICAgLCBtX2FyZ3VtZW50MShhcmd1bWVudDEpCisgICAgICAgICwgbV9hcmd1bWVu
dDIoYXJndW1lbnQyKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBn
ZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlz
LT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlv
bih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEsIG1fYXJndW1l
bnQyKSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAgfQorCisgICAgQXJndW1l
bnRUeXBlMSBtX2FyZ3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUyIG1fYXJndW1lbnQyOworfTsK
KwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlw
ZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBl
bmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzPgorY2xhc3MgQ2FsbFJl
c3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxs
U2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4gewor
cHVibGljOgorICAgIENhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5
cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsIFJlc3Vs
dFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZ3VtZW50MSwKKyAgICAgICAgQXJndW1lbnRU
eXBlMiBhcmd1bWVudDIsIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQzKQorICAgICAgICA6IENhbGxT
bG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAg
ICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgICAg
ICAsIG1fYXJndW1lbnQxKGFyZ3VtZW50MSkKKyAgICAgICAgLCBtX2FyZ3VtZW50Mihhcmd1bWVu
dDIpCisgICAgICAgICwgbV9hcmd1bWVudDMoYXJndW1lbnQzKQorICAgIHsKKyAgICB9CisKK3By
b3RlY3RlZDogICAgCisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBq
aXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNv
cmRDYWxsKAorICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAg
IHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVu
dDIsCisgICAgICAgICAgICAgICAgbV9hcmd1bWVudDMpKTsKKyAgICAgICAgdGhpcy0+dGVhckRv
d24oaml0KTsKKyAgICB9CisKKyAgICBBcmd1bWVudFR5cGUxIG1fYXJndW1lbnQxOworICAgIEFy
Z3VtZW50VHlwZTIgbV9hcmd1bWVudDI7CisgICAgQXJndW1lbnRUeXBlMyBtX2FyZ3VtZW50MzsK
K307CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlv
blR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwg
dHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywKKyAgICB0eXBl
bmFtZSBBcmd1bWVudFR5cGU0PgorY2xhc3MgQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93
UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlw
ZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJlc3VsdEFu
ZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwg
U3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgICAgICBTcGls
bFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBl
MSBhcmd1bWVudDEsCisgICAgICAgIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLCBBcmd1bWVudFR5
cGUzIGFyZ3VtZW50MywgQXJndW1lbnRUeXBlNCBhcmd1bWVudDQpCisgICAgICAgIDogQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAorICAg
ICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpCisgICAgICAg
ICwgbV9hcmd1bWVudDEoYXJndW1lbnQxKQorICAgICAgICAsIG1fYXJndW1lbnQyKGFyZ3VtZW50
MikKKyAgICAgICAgLCBtX2FyZ3VtZW50Myhhcmd1bWVudDMpCisgICAgICAgICwgbV9hcmd1bWVu
dDQoYXJndW1lbnQ0KQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBn
ZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlz
LT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKAorICAgICAgICAgICAgaml0
LT5jYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMt
Pm1fcmVzdWx0LCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCisgICAgICAgICAgICAgICAgbV9h
cmd1bWVudDMsIG1fYXJndW1lbnQ0KSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7Cisg
ICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUy
IG1fYXJndW1lbnQyOworICAgIEFyZ3VtZW50VHlwZTMgbV9hcmd1bWVudDM7CisgICAgQXJndW1l
bnRUeXBlNCBtX2FyZ3VtZW50NDsKK307CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBU
eXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlw
ZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJn
dW1lbnRUeXBlMywKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGU0LCB0eXBlbmFtZSBBcmd1bWVu
dFR5cGU1PgorY2xhc3MgQ2FsbFJlc3VsdEFuZEZpdmVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRv
cgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25U
eXBlLCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJlc3VsdEFuZEZpdmVBcmd1bWVu
dHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVK
SVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01v
ZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEs
CisgICAgICAgIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLCBBcmd1bWVudFR5cGUzIGFyZ3VtZW50
MywgQXJndW1lbnRUeXBlNCBhcmd1bWVudDQsCisgICAgICAgIEFyZ3VtZW50VHlwZTUgYXJndW1l
bnQ1KQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25U
eXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxs
TW9kZSwgcmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFyZ3VtZW50MSkKKyAgICAgICAg
LCBtX2FyZ3VtZW50Mihhcmd1bWVudDIpCisgICAgICAgICwgbV9hcmd1bWVudDMoYXJndW1lbnQz
KQorICAgICAgICAsIG1fYXJndW1lbnQ0KGFyZ3VtZW50NCkKKyAgICAgICAgLCBtX2FyZ3VtZW50
NShhcmd1bWVudDUpCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOiAgICAKKyAgICB2b2lkIGdl
bmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIHRoaXMt
PnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoCisgICAgICAgICAgICBqaXQt
PmNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgdGhpcy0+bV9mdW5jdGlvbiwgdGhpcy0+
bV9yZXN1bHQsIG1fYXJndW1lbnQxLCBtX2FyZ3VtZW50MiwKKyAgICAgICAgICAgICAgICBtX2Fy
Z3VtZW50MywgbV9hcmd1bWVudDQsIG1fYXJndW1lbnQ1KSk7CisgICAgICAgIHRoaXMtPnRlYXJE
b3duKGppdCk7CisgICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsKKyAgICBB
cmd1bWVudFR5cGUyIG1fYXJndW1lbnQyOworICAgIEFyZ3VtZW50VHlwZTMgbV9hcmd1bWVudDM7
CisgICAgQXJndW1lbnRUeXBlNCBtX2FyZ3VtZW50NDsKKyAgICBBcmd1bWVudFR5cGU1IG1fYXJn
dW1lbnQ1OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZT4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRo
R2VuZXJhdG9yPiBzbG93UGF0aENhbGwoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVK
SVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBT
cGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3BpbGwpCit7CisgICAgcmV0dXJu
IGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhH
ZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBl
PigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3Vs
dCkpOworfQorCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVu
Y3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlw
ZTE+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAor
ICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5j
dGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsCisg
ICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRUb1NwaWxsKQoreworICAgIHJl
dHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQ
YXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0
VHlwZSwgQXJndW1lbnRUeXBlMT4oCisgICAgICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlv
biwgc3BpbGxNb2RlLCByZXN1bHQsIGFyZ3VtZW50MSkpOworfQorCit0ZW1wbGF0ZTwKKyAgICB0
eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRU
eXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTI+
CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAg
IEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlv
biwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsIEFyZ3Vt
ZW50VHlwZTIgYXJndW1lbnQyLAorICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUgPSBO
ZWVkVG9TcGlsbCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIoCisgICAgICAgIG5ldyBDYWxsUmVz
dWx0QW5kVHdvQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlw
ZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5cGUxLCBBcmd1bWVudFR5cGUy
PigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3Vs
dCwgYXJndW1lbnQxLCBhcmd1bWVudDIpKTsKK30KKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUg
SnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAg
ICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFt
ZSBBcmd1bWVudFR5cGUzPgoraW5saW5lIFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNs
b3dQYXRoQ2FsbCgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5j
dGlvblR5cGUgZnVuY3Rpb24sCisgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEg
YXJndW1lbnQxLCBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MiwKKyAgICBBcmd1bWVudFR5cGUzIGFy
Z3VtZW50MywgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRUb1NwaWxsKQorewor
ICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxSZXN1bHRBbmRUaHJlZUFyZ3Vt
ZW50c1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlw
ZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRUeXBlMSwgQXJndW1lbnRUeXBlMiwKKyAgICAgICAgICAg
IEFyZ3VtZW50VHlwZTM+KAorICAgICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNw
aWxsTW9kZSwgcmVzdWx0LCBhcmd1bWVudDEsIGFyZ3VtZW50MiwKKyAgICAgICAgICAgICAgICBh
cmd1bWVudDMpKTsKK30KKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1
bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUz
LAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQ+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0
aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZl
SklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwg
QXJndW1lbnRUeXBlMSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAorICAgIEFy
Z3VtZW50VHlwZTMgYXJndW1lbnQzLCBBcmd1bWVudFR5cGU0IGFyZ3VtZW50NCwKKyAgICBTcGls
bFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3BpbGwpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvcjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGUs
IEFyZ3VtZW50VHlwZTEsIEFyZ3VtZW50VHlwZTIsCisgICAgICAgICAgICBBcmd1bWVudFR5cGUz
LCBBcmd1bWVudFR5cGU0PigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBz
cGlsbE1vZGUsIHJlc3VsdCwgYXJndW1lbnQxLCBhcmd1bWVudDIsCisgICAgICAgICAgICAgICAg
YXJndW1lbnQzLCBhcmd1bWVudDQpKTsKK30KKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVt
cFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0
eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBB
cmd1bWVudFR5cGUzLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQsIHR5cGVuYW1lIEFyZ3Vt
ZW50VHlwZTU+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhD
YWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVu
dDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAorICAgIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQz
LCBBcmd1bWVudFR5cGU0IGFyZ3VtZW50NCwgQXJndW1lbnRUeXBlNSBhcmd1bWVudDUsCisgICAg
U3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRUb1NwaWxsKQoreworICAgIHJldHVy
biBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxSZXN1bHRBbmRGaXZlQXJndW1lbnRzU2xvd1Bh
dGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRU
eXBlLCBBcmd1bWVudFR5cGUxLCBBcmd1bWVudFR5cGUyLAorICAgICAgICAgICAgQXJndW1lbnRU
eXBlMywgQXJndW1lbnRUeXBlNCwgQXJndW1lbnRUeXBlNT4oCisgICAgICAgICAgICAgICAgZnJv
bSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQsIGFyZ3VtZW50MSwgYXJndW1lbnQy
LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50MywgYXJndW1lbnQ0LCBhcmd1bWVudDUpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIERlc3RpbmF0aW9uVHlwZSwg
dHlwZW5hbWUgU291cmNlVHlwZT4KK2NsYXNzIEFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yIDog
cHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZT4geworcHVibGljOgorICAg
IEFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgdG8sIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlvbiwgU291cmNl
VHlwZSBzb3VyY2UpCisgICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBl
Pihmcm9tLCB0bykKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAg
ICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7Cisg
ICAgICAgIHRoaXMtPmxpbmtGcm9tKGppdCk7CisgICAgICAgIGppdC0+bV9qaXQubW92ZShtX3Nv
dXJjZSwgbV9kZXN0aW5hdGlvbik7CisgICAgICAgIHRoaXMtPmp1bXBUbyhqaXQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBEZXN0aW5hdGlvblR5cGUgbV9kZXN0aW5hdGlvbjsKKyAgICBTb3Vy
Y2VUeXBlIG1fc291cmNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVu
YW1lIERlc3RpbmF0aW9uVHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZT4KK2lubGluZSBQYXNzT3du
UHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aE1vdmUoCisgICAgSnVtcFR5cGUgZnJvbSwg
U3BlY3VsYXRpdmVKSVQqIGppdCwgU291cmNlVHlwZSBzb3VyY2UsIERlc3RpbmF0aW9uVHlwZSBk
ZXN0aW5hdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIoCisgICAgICAgIG5ldyBBc3NpZ25p
bmdTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBEZXN0aW5hdGlvblR5
cGUsIFNvdXJjZVR5cGU+KAorICAgICAgICAgICAgICAgIGZyb20sIGppdC0+bV9qaXQubGFiZWwo
KSwgZGVzdGluYXRpb24sIHNvdXJjZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEQoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Nsb3dQYXRoR2Vu
ZXJhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MCArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2
ZUpJVC5oIgogCi0jaW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIKLQogI2lmIEVOQUJMRShERkdfSklU
KQogCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0J5dGVB
cnJheS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQpAQCAtMzU4LDYgKzM1OSwzMSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxK
U1ZhbHVlKE5vZGVJCiAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiB9CiAKK2NsYXNzIFZhbHVl
VG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVy
YXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgRF9ERkdPcGVyYXRpb25fRUosIEdQUlJlZz4gewor
cHVibGljOgorICAgIFZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiwgR1BSUmVnIGpzVmFsdWVHUFIpCisgICAgICAgIDogQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBEX0RGR09wZXJhdGlvbl9FSiwgR1BSUmVn
PigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZGZnQ29udmVydEpTVmFsdWVUb051bWJlciwgTmVl
ZFRvU3BpbGwsIHJlc3VsdEdQUikKKyAgICAgICAgLCBtX2pzVmFsdWVHUFIoanNWYWx1ZUdQUikK
KyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50
ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIHNldFVwKGppdCk7Cisg
ICAgICAgIHJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9O
dW1iZXIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBtX2pzVmFsdWVHUFIpKTsKKyAgICAgICAg
aml0LT5ib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIG1fcmVzdWx0KTsKKyAgICAg
ICAgdGVhckRvd24oaml0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1BSUmVnIG1fanNWYWx1
ZUdQUjsKK307CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051
bWJlcihOb2RlJiBub2RlKQogewogICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgp
LmluZGV4KCkpKSB7CkBAIC0zODUsMTkgKzQxMSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBncHIpOwogICAg
IEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CiAKLSAg
ICAvLyBOZXh0IGhhbmRsZSBjZWxscyAoJiBvdGhlciBKUyBpbW1lZGlhdGVzKQotICAgIG5vbk51
bWVyaWMubGluaygmbV9qaXQpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUiwganNWYWx1ZUdwcik7Ci0gICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZh
bHVlRlBSLCBncHIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb051bWJlciA9IG1faml0Lmp1bXAoKTsKLSAgICAKICAg
ICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0
KTsKICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGpzVmFs
dWVHcHIsIGdwcik7CiAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7Ci0gICAgaGFz
Q2FsbGVkVG9OdW1iZXIubGluaygmbV9qaXQpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKGFkb3B0UHRyKG5ldyBWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3Iobm9uTnVtZXJp
YywgdGhpcywgZ3ByLCBqc1ZhbHVlR3ByKSkpOwogICAgIAogICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
IH0KQEAgLTQyMSwxMyArNDQwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlVmFsdWUKICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKICAgICAgICAgR1BSUmVn
IGdwciA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgb3AxLnVzZSgpOwotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJs
ZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1
bCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIGdwciwgZnByKTsKLSAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhncHIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0
ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIs
IEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKICAgICAgICAgCi0gICAgICAg
IHRydW5jYXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwg
dGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKKwogICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwg
bV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC00MzgsMTggKzQ1NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICBvcDEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAgIC8vIEZpcnN0IGhhbmRsZSBub24t
aW50ZWdlcnMKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIGNh
bGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0ludDMyLCByZXN1bHRHUFIsIGpzVmFsdWVH
cHIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBoYXNDYWxsZWRUb0ludDMyID0gbV9qaXQuanVtcCgpOworICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzTm90SW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKLSAg
ICAvLyBUaGVuIGhhbmRsZSBpbnRlZ2Vycy4KLSAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwog
ICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGpzVmFsdWVHcHIsIHJlc3VsdEdQUik7Ci0gICAg
aGFzQ2FsbGVkVG9JbnQzMi5saW5rKCZtX2ppdCk7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgIHNsb3dQYXRoQ2FsbChpc05vdEludGVnZXIsIHRoaXMsIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BSLCBqc1ZhbHVlR3ByKSk7CisKICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CiB9CiAKQEAgLTQ3Nyw3ICs0ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVVJbnQzCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4KTsKIH0KIAotSklUQ29tcGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdl
dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3Vs
dEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJn
ZXQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCiB7CiAgICAgSklUQ29tcGlsZXI6OkRh
dGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3Ry
dWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKQEAgLTQ4NSwzMSArNDk3LDMxIEBAIEpJVENvbXBp
bGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWQKICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFn
ZSgpKSwgcmVzdWx0R1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2Fk
V2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CiAgICAgCi0gICAg
SklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIHN0cnVjdHVyZUNo
ZWNrLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkK
LSAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOwotICAgIAotICAgIEpJVENvbXBp
bGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBpZiAoc3BpbGxNb2Rl
ID09IE5lZWRUb1NwaWxsKQotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRHUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIo
aWRlbnRpZmllck51bWJlcikpOwotICAgIGlmIChzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCi0g
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAKLSAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0g
bV9qaXQubGFiZWwoKTsKLQotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNj
ZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBz
dHJ1Y3R1cmVDaGVjaywgbG9hZFdpdGhQYXRjaCwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNh
c3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50OF90PihyZXN1bHRHUFIpLCBzYWZlQ2Fz
dDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpLCBzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwgPyBQcm9wZXJ0
eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJzSW5Vc2UgOiBQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UmVn
aXN0ZXJzRmx1c2hlZCkpOwogICAgIAorICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xv
d1BhdGg7CisgICAgaWYgKCFzbG93UGF0aFRhcmdldC5pc1NldCgpKSB7CisgICAgICAgIHNsb3dQ
YXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc3RydWN0dXJlQ2hlY2ssIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0R1BSLCBiYXNlR1BSLAorICAgICAgICAgICAg
aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSwgc3BpbGxNb2RlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93
UGF0aFRhcmdldCk7CisgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdEdQUiwg
YmFzZUdQUiwKKyAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlciksIHNwaWxs
TW9kZSk7CisgICAgfQorICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKAorICAgICAgICBQcm9w
ZXJ0eUFjY2Vzc1JlY29yZCgKKyAgICAgICAgICAgIGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29t
cGFyZSwgc3RydWN0dXJlQ2hlY2ssIGxvYWRXaXRoUGF0Y2gsIHNsb3dQYXRoLmdldCgpLAorICAg
ICAgICAgICAgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZlQ2FzdDxp
bnQ4X3Q+KHJlc3VsdEdQUiksCisgICAgICAgICAgICBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hH
UFIpLAorICAgICAgICAgICAgc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsID8gUHJvcGVydHlBY2Nl
c3NSZWNvcmQ6OlJlZ2lzdGVyc0luVXNlIDogUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lzdGVy
c0ZsdXNoZWQpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkp
OworCiAgICAgaWYgKHNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSICYmIHNjcmF0Y2hHUFIgIT0gSW52
YWxpZEdQUlJlZyAmJiBzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCiAgICAgICAgIHVubG9jayhz
Y3JhdGNoR1BSKTsKLSAgICAKLSAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVn
IGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hH
UFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCkBAIC01MjMsMTYgKzUzNSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgp
KSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBh
dGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQp
OwotCi0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0gICAgICAgIHNsb3dQYXRoVGFy
Z2V0LmxpbmsoJm1faml0KTsKLQotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1f
aml0LmxhYmVsKCk7Ci0KLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVn
KTsKKyAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKKyAg
ICAKICAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CiAgICAgaWYgKG1faml0
LnN0cmljdE1vZGVGb3IoYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pKSB7CiAgICAgICAg
IGlmIChwdXRLaW5kID09IERpcmVjdCkKQEAgLTU0NSwxMyArNTQ5LDIxIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICAgICAgZWxzZQogICAgICAgICAgICAg
b3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gY2FsbE9wZXJhdGlvbihvcHRp
bWl6ZWRDYWxsLCB2YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVy
KSk7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLQotICAgIGRv
bmUubGluaygmbV9qaXQpOwotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2pp
dC5sYWJlbCgpOwotCi0gICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoUHJvcGVydHlBY2Nlc3NS
ZWNvcmQoY29kZU9yaWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwsIHN0cnVj
dHVyZUNoZWNrLCBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChzdG9yZVdpdGhQYXRjaC5s
YWJlbCgpKSwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwg
c2FmZUNhc3Q8aW50OF90Pih2YWx1ZUdQUiksIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikp
KTsKKyAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgIGlmICghc2xv
d1BhdGhUYXJnZXQuaXNTZXQoKSkgeworICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgK
KyAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNrLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBJbnZhbGlk
R1BSUmVnLCB2YWx1ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRp
Zmllck51bWJlcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc3RydWN0dXJlQ2hlY2spOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgc2xvd1Bh
dGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wdGltaXpl
ZENhbGwsIEludmFsaWRHUFJSZWcsIHZhbHVlR1BSLCBiYXNlR1BSLAorICAgICAgICAgICAgaWRl
bnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgfQorICAgIG1faml0LmFkZFByb3BlcnR5
QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFy
ZSwgc3RydWN0dXJlQ2hlY2ssIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHN0b3JlV2l0
aFBhdGNoLmxhYmVsKCkpLCBzbG93UGF0aC5nZXQoKSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4
X3Q+KGJhc2VHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVlR1BSKSwgc2FmZUNhc3Q8aW50OF90
PihzY3JhdGNoR1BSKSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVh
c2UoKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhv
bGVDb21wYXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQpAQCAtODQwLDYgKzg1Miwz
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAganVtcChu
b3RUYWtlbik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlPgorY2xhc3MgQ29tcGFy
ZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0
aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKK3B1Ymxp
YzoKKyAgICBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBK
dW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LAorICAgICAgICBTX0RGR09wZXJhdGlv
bl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
KyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9u
X0VKSiwgR1BSUmVnPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRUb1Nw
aWxsLCByZXN1bHQpCisgICAgICAgICwgbV9hcmcxKGFyZzEpCisgICAgICAgICwgbV9hcmcyKGFy
ZzIpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+
c2V0VXAoaml0KTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24o
dGhpcy0+bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJnMSwgbV9hcmcyKSk7CisgICAg
ICAgIGppdC0+bV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgdGhpcy0+
bV9yZXN1bHQpOworICAgICAgICBqaXQtPm1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihWYWx1ZUZhbHNlKSwgdGhpcy0+bV9yZXN1bHQpOworICAgICAgICB0aGlzLT50ZWFyRG93
bihqaXQpOworICAgIH0KKyAgIAorcHJpdmF0ZToKKyAgICBHUFJSZWcgbV9hcmcxOworICAgIEdQ
UlJlZyBtX2FyZzI7Cit9OworCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKQEAgLTg2MCw1NiArOTAxLDQyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgCiAgICAg
ICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICBub3RFcXVhbENh
c2UubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXFDZWxsLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5hbmRQ
dHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9q
aXQub3IzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgYWRvcHRQdHIoCisgICAgICAgICAgICAgICAgbmV3
IENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1
bXA+KAorICAgICAgICAgICAgICAgICAgICBub3RFcXVhbENhc2UsIHRoaXMsIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgYXJnMkdQUikpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5vclB0cihhcmcxR1BS
LCBhcmcyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNsb3dQYXRoQ2FzZXM7CisgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCBy
ZXN1bHRHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBsZWZ0T0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFi
b3ZlT3JFcXVhbCwgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3RQdHIo
SklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIo
SklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwogICAgICAgICBsZWZ0T0subGluaygmbV9qaXQpOwogICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCByaWdodE9LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1
YWwsIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHJpZ2h0RG91YmxlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21w
aWxlcjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
KyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21w
aWxlcjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CiAgICAgICAgIHJpZ2h0T0subGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgbV9qaXQu
Y29tcGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6
RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm9yMzIo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUxID0gbV9qaXQuanVtcCgpOworICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAg
ICAgICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
YXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpKTsKICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTIgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAot
ICAgICAgICBsZWZ0RG91YmxlLmxpbmsoJm1faml0KTsKLSAgICAgICAgcmlnaHREb3VibGUubGlu
aygmbV9qaXQpOwotICAgICAgICBub3RFcXVhbENhc2UubGluaygmbV9qaXQpOwotICAgICAgICAK
LSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMUdQUiwg
YXJnMkdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBhZG9wdFB0cigKKyAgICAg
ICAgICAgICAgICBuZXcgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcjxNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Q+KAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhc2Vz
LCB0aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMUdQUiwKKyAg
ICAgICAgICAgICAgICAgICAgYXJnMkdQUikpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFu
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotCi0gICAgICAg
IGRvbmUxLmxpbmsoJm1faml0KTsKLQotICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBk
b25lMi5saW5rKCZtX2ppdCk7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0KICAg
ICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0xNzY2LDEzICsx
NzkzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAK
ICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7CiAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdENhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJ
VENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5j
aFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogICAgIAotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9v
bGVhbiwgcmVzdWx0R1BSLCBhcmcxR1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdEdQUik7Ci0gICAgCi0gICAgZmFzdENhc2UubGluaygmbV9qaXQpOworICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIGRmZ0Nv
bnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIpKTsKICAgICAKICAgICBt
X2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkp
LCByZXN1bHRHUFIpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAg
LTI1NDUsMTUgKzI1NjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdpdGhpbkFycmF5Qm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
LQotICAgICAgICAvLyBDb2RlIHRvIGhhbmRsZSBwdXQgYmV5b25kIGFycmF5IGJvdW5kcy4KLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaFJlZyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24obV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZyk7Ci0gICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaFJlZyk7Ci0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIHdhc0JleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAg
IHdpdGhpbkFycmF5Qm91bmRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKIAogICAgICAgICAvLyBHZXQgdGhl
IGFycmF5IHN0b3JhZ2UuCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsK
QEAgLTI1NzUsNyArMjU5MSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAg
IG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCi0gICAgICAgIHdhc0JleW9uZEFy
cmF5Qm91bmRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3Vu
ZHMsIHRoaXMsCisgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgSW52
YWxpZEdQUlJlZywgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAKICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMjc2MiwxNSArMjc4MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0g
ICAgICAgIAotICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2gsIHN0b3JhZ2VMZW5ndGhHUFIsIHZhbHVlR1BS
LCBiYXNlR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhzdG9yYWdlTGVuZ3Ro
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
ICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBJbnZhbGlkR1BSUmVnLCBz
dG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CiAg
ICAgICAgIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0yODA4LDIzICsyODIzLDE1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAg
bV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBkb25lOwotICAgICAgICAKLSAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKLSAgICAgICAgCi0gICAgICAgIGhvbGVDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgZW1w
dHlBcnJheUNhc2UubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVl
R1BSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHZhbHVlR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25B
cnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKHZhbHVlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
ICAgICAKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0
aE1vdmUoCisgICAgICAgICAgICAgICAgaG9sZUNhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0
aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKwogICAgICAgICBq
c1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTI5MjQsMjEgKzI5MzEsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoIShtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdEJvb2xlYW4pKSkKICAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBhbHJlYWR5UHJpbWl0aXZlOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlcikpOwotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ax
R1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoJkpTU3RyaW5nOjpzX2luZm8pKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRvUHJpbWl0aXZlLCByZXN1bHRHUFIsIG9wMUdQUik7Ci0gICAgICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZl
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTU3RyaW5nOjpzX2luZm8pKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0aGlzLCBvcGVyYXRpb25U
b1ByaW1pdGl2ZSwgcmVzdWx0R1BSLCBvcDFHUFIpKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAtMzA5NCwxOCArMzA5NCwxNSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBlbWl0QWxsb2Nh
dGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2xvd1Bh
dGgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAg
IGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlzSW5saW5lZCwgcmVzdWx0R1BSLCBwcm90b0dQUiwg
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1
bHRHUFIsIHByb3RvR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGlmIChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzSW5saW5lZCwKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBwcm90b0dQUiwgbm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZVRoaXMsIHJlc3VsdEdQUiwgcHJvdG9HUFIpKTsK
KyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29t
cGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsK
QEAgLTMxMjIsMTUgKzMxMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIAogICAgICAgICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVP
cmlnaW4pLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBz
bG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwot
ICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUik7Ci0gICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BSKSk7CiAg
ICAgICAgIAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKQEAgLTM3MDUsMjEgKzM2OTQsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihyZXNvbHZlSW5mb0FkZHJlc3MpLCByZXNvbHZlSW5mb0dQUik7CiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9HUFIsIE9CSkVDVF9PRkZT
RVRPRihHbG9iYWxSZXNvbHZlSW5mbywgc3RydWN0dXJlKSksIHJlc3VsdEdQUik7Ci0gICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZXNNYXRjaCA9IG1faml0LmJyYW5jaFB0cihKSVRD
b21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7Ci0KLSAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25SZXNvbHZlR2xvYmFsLCByZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCAmbV9qaXQuY29kZUJs
b2NrKCktPmlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCB3YXNTbG93ID0gbV9qaXQuanVtcCgpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1
Y3R1cmVzRG9udE1hdGNoID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
cmVzdWx0R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpKTsKIAogICAgICAgICAvLyBGYXN0IGNhc2UKLSAgICAgICAgc3Ry
dWN0dXJlc01hdGNoLmxpbmsoJm1faml0KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5
U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoR2xvYmFsUmVzb2x2ZUlu
Zm8sIG9mZnNldCkpLCByZXNvbHZlSW5mb0dQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRDb21waWxl
cjo6U2NhbGVQdHIpLCByZXN1bHRHUFIpOwogCi0gICAgICAgIHdhc1Nsb3cubGluaygmbV9qaXQp
OworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bCgKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzRG9udE1hdGNoLCB0aGlzLCBvcGVyYXRpb25S
ZXNvbHZlR2xvYmFsLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIs
CisgICAgICAgICAgICAgICAgJm1faml0LmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGRhdGEuaWRl
bnRpZmllck51bWJlcikpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3MzQsMTMgKzM3MjAsMTAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
bV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGFscmVhZHlDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21w
aWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQ
Uik7CiAgICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24sIHJlc3Vs
dEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAg
ICAgCi0gICAgICAgIGFscmVhZHlDcmVhdGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwobm90Q3JlYXRlZCwgdGhp
cywgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbiwgcmVzdWx0R1BSKSk7CiAgICAgICAgIAogICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVh
azsKQEAgLTM3NTAsMTMgKzM3MzMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihKSVRDb21waWxlcjo6WmVybywgdmFsdWVHUFIpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24sIHZhbHVlR1BSKTsKLSAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
Y3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVl
R1BSKTsKICAgICAgICAgCi0gICAgICAgIG5vdENyZWF0ZWQubGluaygmbV9qaXQpOworICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChjcmVhdGVk
LCB0aGlzLCBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbiwgSW52YWxpZEdQUlJlZywgdmFsdWVH
UFIpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgYnJlYWs7CkBAIC0zNzc1LDE0ICszNzU1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBhbHJlYWR5
Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3Vs
dEdQUik7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgb3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJsb2NrKCktPmZ1bmN0aW9uRGVjbChub2RlLmZ1
bmN0aW9uRGVjbEluZGV4KCkpKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAg
ICAgIGFscmVhZHlDcmVhdGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgbm90Q3Jl
YXRlZCwgdGhpcywgb3BlcmF0aW9uTmV3RnVuY3Rpb24sCisgICAgICAgICAgICAgICAgcmVzdWx0
R1BSLCBtX2ppdC5jb2RlQmxvY2soKS0+ZnVuY3Rpb25EZWNsKG5vZGUuZnVuY3Rpb25EZWNsSW5k
ZXgoKSkpKTsKICAgICAgICAgCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxMSArMjgsNDUgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAi
REZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0J5dGVBcnJheS5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitT
cGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKKyAgICA6IG1f
Y29tcGlsZU9rYXkodHJ1ZSkKKyAgICAsIG1faml0KGppdCkKKyAgICAsIG1fY29tcGlsZUluZGV4
KDApCisgICAgLCBtX2luZGV4SW5CbG9jaygwKQorICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2pp
dC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCisgICAgLCBtX2Jsb2NrSGVhZHMo
aml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpKQorICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5t
X2xvY2FsVmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkKKyAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKK3sKK30KKworU3BlY3Vs
YXRpdmVKSVQ6On5TcGVjdWxhdGl2ZUpJVCgpCit7CisgICAgV1RGOjpkZWxldGVBbGxWYWx1ZXMo
bV9zbG93UGF0aEdlbmVyYXRvcnMpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjphZGRTbG93
UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aEdlbmVy
YXRvcikKK3sKKyAgICBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5hcHBlbmQoc2xvd1BhdGhHZW5lcmF0
b3IubGVha1B0cigpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6cnVuU2xvd1BhdGhHZW5l
cmF0b3JzKCkKK3sKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZygi
UnVubmluZyAlbHUgc2xvdyBwYXRoIGdlbmVyYXRvcnMuXG4iLCBtX3Nsb3dQYXRoR2VuZXJhdG9y
cy5zaXplKCkpOworI2VuZGlmCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvd1Bh
dGhHZW5lcmF0b3JzLnNpemUoKTsgKytpKQorICAgICAgICBtX3Nsb3dQYXRoR2VuZXJhdG9yc1tp
XS0+Z2VuZXJhdGUodGhpcyk7Cit9CisKIC8vIE9uIFdpbmRvd3Mgd2UgbmVlZCB0byB3cmFwIGZt
b2Q7IG9uIG90aGVyIHBsYXRmb3JtcyB3ZSBjYW4gY2FsbCBpdCBkaXJlY3RseS4KIC8vIE9uIEFS
TXY3IHdlIGFzc2VydCB0aGF0IGFsbCBmdW5jdGlvbiBwb2ludGVycyBoYXZlIHRvIGxvdyBiaXQg
c2V0IChwb2ludCB0byB0aHVtYiBjb2RlKS4KICNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1RE
Q0FMTCB8fCBDUFUoQVJNX1RIVU1CMikKQEAgLTE1ODUsMTMgKzE2MTksMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBGUFJSZWcgZnByID0gb3Ax
LmZwcigpOwogICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRy
dW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNh
dGVTdWNjZXNzZnVsKTsKLQotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3By
KTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgZ3ByLCBmcHIpOwotICAgICAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOworICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3Vi
bGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CiAK
LSAgICAgICAgICAgIHRydW5jYXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgICAgICAg
ICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0yMDY0LDE3ICsyMDk1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQg
PSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7CiAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZmFpbGVkOwogICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQotICAg
ICAgICAgICAgZG9uZSA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdw
ciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVTdWNjZXNzZnVsKTsKKyAgICAgICAg
ICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwg
TWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBkb25lID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIs
IGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVTdWNjZXNzZnVsKTsKLQotICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KHRvSW50MzIsIGdwciwgZnByKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIp
OworICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQz
MihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAg
ICAgICAKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwg
dGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
ICAgICAgICAgZml4ZWQubGluaygmbV9qaXQpOwogICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQp
OwogICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTIgKzMzLDE0IEBACiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJE
RkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNp
bmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CitjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNs
YXNzIFNwZWN1bGF0aXZlSklUOwogY2xhc3MgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ7CiBjbGFz
cyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ7CkBAIC0xNzUsNiArMTc3LDcgQEAgcHJpdmF0
ZToKICAgICAKIHB1YmxpYzoKICAgICBTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYpOworICAg
IH5TcGVjdWxhdGl2ZUpJVCgpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAgICAgdm9pZCBjcmVh
dGVPU1JFbnRyaWVzKCk7CkBAIC0zNjYsNyArMzY5LDkgQEAgcHVibGljOgogICAgIEdQUlJlZyBm
aWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlSW5kZXgpOwogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBl
IGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9kZUluZGV4KTsKIAotcHJpdmF0ZToKKyAg
ICB2b2lkIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+
KTsKKyAgICB2b2lkIHJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIAogICAgIHZvaWQgY29t
cGlsZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7CiAgICAgdm9pZCBj
b21waWxlKEJhc2ljQmxvY2smKTsKQEAgLTM4MCwyNDMgKzM4NSwzMjAgQEAgcHJpdmF0ZToKICAg
ICAvLyB0aGV5IHNwaWxsIGFsbCBsaXZlIHZhbHVlcyB0byB0aGUgYXBwcm9wcmlhdGUKICAgICAv
LyBzbG90cyBpbiB0aGUgUmVnaXN0ZXJGaWxlIHdpdGhvdXQgY2hhbmdpbmcgYW55IHN0YXRlCiAg
ICAgLy8gaW4gdGhlIEdlbmVyYXRpb25JbmZvLgotICAgIHZvaWQgc2lsZW50U3BpbGxHUFIoVmly
dHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBzb3VyY2UpCisgICAgU2lsZW50UmVnaXN0ZXJT
YXZlUGxhbiBzaWxlbnRTYXZlUGxhbkZvckdQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgR1BS
UmVnIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1tzcGlsbE1lXTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0KLSAgICAgICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQorICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
aW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAg
ICAgICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7
Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3Vy
Y2UpOwotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCi0g
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
c3BpbGxNZSkpOworICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5v
bmUpOworICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdERvdWJsZSk7
CisgICAgICAgIAorICAgICAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlvbjsKKyAgICAg
ICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uOworICAgICAgICAKKyAgICAgICAgaWYgKCFp
bmZvLm5lZWRzU3BpbGwoKSkKKyAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gRG9Ob3RoaW5nRm9y
U3BpbGw7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0
ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKLSAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKHNvdXJjZSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAg
ICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQg
JiBEYXRhRm9ybWF0SlMpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLnRhZ0dQUigpID09IHNv
dXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOwotICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihzb3VyY2UsIHNvdXJjZSA9PSBpbmZvLnRhZ0dQUigpID8gSklUQ29tcGlsZXI6OnRh
Z0ZvcihzcGlsbE1lKSA6IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKLSAgICAg
ICAgfSBlbHNlIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgQVNTRVJUKGluZm8u
Z3ByKCkgPT0gc291cmNlKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc291cmNlLCBKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBz
cGlsbEFjdGlvbiA9IFN0b3JlMzJQYXlsb2FkOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVy
Rm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRT
dG9yYWdlKTsKKyAgICAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9IFN0b3JlUHRyOworICAgICAg
ICAgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIGlmIChyZWdpc3Rl
ckZvcm1hdCAmIERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLnRh
Z0dQUigpID09IHNvdXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOworICAgICAg
ICAgICAgICAgIHNwaWxsQWN0aW9uID0gc291cmNlID09IGluZm8udGFnR1BSKCkgPyBTdG9yZTMy
VGFnIDogU3RvcmUzMlBheWxvYWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAgICAgICAgICAgICAgc3BpbGxB
Y3Rpb24gPSBTdG9yZTMyUGF5bG9hZDsKKyAgICAgICAgICAgIH0KICNlbmRpZgotICAgIH0KLSAg
ICB2b2lkIHNpbGVudFNwaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBGUFJSZWcgc291
cmNlKQotICAgIHsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3NwaWxsTWVdOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERh
dGFGb3JtYXREb3VibGUpOwotCi0gICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpIHsKLSAg
ICAgICAgICAgIC8vIGl0J3MgZWl0aGVyIGEgY29uc3RhbnQgb3IgaXQncyBhbHJlYWR5IGJlZW4g
c3BpbGxlZAotICAgICAgICAgICAgQVNTRVJUKGF0KGluZm8ubm9kZUluZGV4KCkpLmhhc0NvbnN0
YW50KCkgfHwgaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKTsKLSAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gaXQncyBuZWl0aGVy
IGEgY29uc3RhbnQgbm9yIGhhcyBpdCBiZWVuIHNwaWxsZWQuCi0gICAgICAgIEFTU0VSVCghYXQo
aW5mby5ub2RlSW5kZXgoKSkuaGFzQ29uc3RhbnQoKSk7Ci0gICAgICAgIEFTU0VSVChpbmZvLnNw
aWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICBBU1NFUlQoaW5mby5mcHIo
KSA9PSBzb3VyY2UpOwotCi0gICAgICAgIG1faml0LnN0b3JlRG91YmxlKHNvdXJjZSwgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2lsZW50Rmls
bEdQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgR1BSUmVnIHRhcmdldCkKLSAgICB7Ci0gICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKLQot
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAg
Tm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpOwotICAgICAgICBEYXRhRm9ybWF0IHJlZ2lz
dGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotCiAgICAgICAgIGlmIChyZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAgICAgICAgICAgQVNTRVJUKGluZm8u
Z3ByKCkgPT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJj
ZSk7CiAgICAgICAgICAgICBBU1NFUlQoaXNKU0ludGVnZXIoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSk7CiAgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCB0YXJnZXQp
OworICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRJbnQzMkNvbnN0YW50OwogICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEJv
b2xlYW4pIHsKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDMyUGF5bG9hZDsKKyAg
ICAgICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Qm9vbGVhbikgewog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNl
bGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSB0
YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAg
ICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
aXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIodmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5kZXgpKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0Qm9vbGVhbkNvbnN0YW50OwogICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGZpbGxBY3Rp
b24gPSBMb2FkMzJQYXlsb2FkOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBp
ZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpbmZvLmdwcigpID09IHNvdXJjZSk7CiAgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFu
dCgpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2VsbCgpKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWUuYXNDZWxsKCkpLCB0
YXJnZXQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRh
Rm9ybWF0U3RvcmFnZSkgewotICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0
KTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3Bp
bGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAg
IGZpbGxBY3Rpb24gPSBTZXRDZWxsQ29uc3RhbnQ7CisgICAgICAgICAgICB9IGVsc2UgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7Ci0g
ICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZU9m
SlNDb25zdGFudChub2RlSW5kZXgpLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihub2RlSW5kZXgpLmFzVHJ1c3RlZEltbVB0cigp
LCB0YXJnZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
dmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihub2RlSW5kZXgpLCB0YXJnZXQpOwotICAgICAgICB9
IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAg
ICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwot
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUp
LCB0YXJnZXQpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICBtX2pp
dC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWRQ
dHI7CiAjZWxzZQotICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgfHwgaW5m
by5wYXlsb2FkR1BSKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQo
KSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgPyBJbW0z
Mih2LnRhZygpKSA6IEltbTMyKHYucGF5bG9hZCgpKSwgdGFyZ2V0KTsKLSAgICAgICAgfSBlbHNl
IGlmIChpbmZvLnBheWxvYWRHUFIoKSA9PSB0YXJnZXQpCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgIGVs
c2UgeyAvLyBGaWxsIHRoZSBUYWcKLSAgICAgICAgICAgIHN3aXRjaCAoaW5mby5zcGlsbEZvcm1h
dCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICAgICAg
ICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOworI2VuZGlmCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2UpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAgICAgICAgICBm
aWxsQWN0aW9uID0gTG9hZFB0cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAgICAgICAgICBpZiAo
bm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGVJbmRleCkuaXNDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24g
PSBTZXRUcnVzdGVkSlNDb25zdGFudDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRKU0NvbnN0YW50OworICAgICAgICAgICAgfSBlbHNl
IGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDoKLSAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0
YUZvcm1hdEpTQ2VsbCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgICAgICAgICAgICAgIEFTU0VSVChy
ZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNCb29sZWFuKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFyZ2V0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQz
MlBheWxvYWRCb3hJbnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVy
Rm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlv
biA9IExvYWREb3VibGVCb3hEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKKyNlbHNlCisgICAgICAgICAgICBBU1NFUlQoaW5m
by50YWdHUFIoKSA9PSBzb3VyY2UgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0gc291cmNlKTsKKyAg
ICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBKU1Zh
bHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGZp
bGxBY3Rpb24gPSBpbmZvLnRhZ0dQUigpID09IHRhcmdldCA/IFNldEpTQ29uc3RhbnRUYWcgOiBT
ZXRKU0NvbnN0YW50UGF5bG9hZDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5wYXlsb2Fk
R1BSKCkgPT0gc291cmNlKQorICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXls
b2FkOworICAgICAgICAgICAgZWxzZSB7IC8vIEZpbGwgdGhlIFRhZworICAgICAgICAgICAgICAg
IHN3aXRjaCAoaW5mby5zcGlsbEZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0SW50ZWdlcjoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0
ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgICAgICAgICBmaWxsQWN0aW9u
ID0gU2V0SW50MzJUYWc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZWdp
c3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAgICAgICAgICAgICAgICAgZmls
bEFjdGlvbiA9IFNldENlbGxUYWc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgICAg
ICAgICAgICAgZmlsbEFjdGlvbiA9IFNldEJvb2xlYW5UYWc7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGZp
bGxBY3Rpb24gPSBMb2FkMzJUYWc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQogI2VuZGlmCisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKHNwaWxsQWN0
aW9uLCBmaWxsQWN0aW9uLCBub2RlSW5kZXgsIHNvdXJjZSk7CiAgICAgfQotCi0gICAgdm9pZCBz
aWxlbnRGaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcgY2FuVHJhbXBsZSwg
RlBSUmVnIHRhcmdldCkKKyAgICAKKyAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIHNpbGVudFNh
dmVQbGFuRm9yRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBGUFJSZWcgc291cmNlKQogICAg
IHsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxs
TWVdOwotICAgICAgICBBU1NFUlQoaW5mby5mcHIoKSA9PSB0YXJnZXQpOwotCiAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAgICBOb2RlJiBub2Rl
ID0gYXQobm9kZUluZGV4KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBBU1NFUlQoaW5m
by5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOwogCi0gICAgICAgIGlmIChu
b2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50
KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW1QdHIoYml0d2lzZV9jYXN0
PHZvaWQqPih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkpLCBjYW5UcmFtcGxlKTsK
LSAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShjYW5UcmFtcGxlLCB0YXJnZXQpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlv
bjsKKyAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwoKSkKKyAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gRG9O
b3RoaW5nRm9yU3BpbGw7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKCFhdChp
bmZvLm5vZGVJbmRleCgpKS5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmZv
LnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICAgICAgQVNTRVJUKGlu
Zm8uZnByKCkgPT0gc291cmNlKTsKKyAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmVEb3Vi
bGU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkg
IT0gRGF0YUZvcm1hdE5vbmUgJiYgaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXREb3Vi
bGUpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgp
KSB7CisgICAgICAgICAgICBBU1NFUlQoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXREb3VibGVDb25zdGFudDsKKyAgICAgICAgfSBlbHNl
IGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUgJiYgaW5mby5zcGlsbEZv
cm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAgICAgICAgIC8vIGl0IHdhcyBhbHJl
YWR5IHNwaWxsZWQgcHJldmlvdXNseSBhbmQgbm90IGFzIGEgZG91YmxlLCB3aGljaCBtZWFucyB3
ZSBuZWVkIHVuYm94aW5nLgogICAgICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAm
IERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHNwaWxsTWUpLCBjYW5UcmFtcGxlKTsKLSAgICAgICAgICAgIHVuYm94RG91Ymxl
KGNhblRyYW1wbGUsIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUp
LCB0YXJnZXQpOworICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWRKU1VuYm94RG91YmxlOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkRG91YmxlOwogI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgVU5VU0VEX1BBUkFNKGNhblRyYW1wbGUpOwog
ICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUg
fHwgaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAg
IGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc051bWJlckNv
bnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNz
T2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpLCB0YXJnZXQpOworICAgICAgICAgICAgZmlsbEFj
dGlvbiA9IFNldERvdWJsZUNvbnN0YW50OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7
CisgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZTsKICNlbmRpZgotICAgIH0KIAot
ICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoR1BSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBl
eGNsdWRlMiA9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBTaWxlbnRSZWdpc3RlclNh
dmVQbGFuKHNwaWxsQWN0aW9uLCBmaWxsQWN0aW9uLCBub2RlSW5kZXgsIHNvdXJjZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2lsZW50U3BpbGwoY29uc3QgU2lsZW50UmVnaXN0ZXJTYXZlUGxh
biYgcGxhbikKICAgICB7Ci0gICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMu
YmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgR1BS
UmVnIGdwciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGdwciAhPSBleGNsdWRlICYmIGdwciAhPSBleGNsdWRl
MikKLSAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSwgZ3ByKTsKKyAg
ICAgICAgc3dpdGNoIChwbGFuLnNwaWxsQWN0aW9uKCkpIHsKKyAgICAgICAgY2FzZSBEb05vdGhp
bmdGb3JTcGlsbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlMzJUYWc6
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjp0YWdG
b3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlMzJQYXlsb2FkOgorICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihwbGFuLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJ
bmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU3RvcmVQdHI6CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihwbGFuLmdwcigpLCBK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0
ZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmVEb3VibGU6Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShwbGFuLmZwcigpLCBKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9m
cHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAg
IGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAgICAg
ICAgIHNpbGVudFNwaWxsRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNpbGVudEZpbGwoY29uc3QgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiYgcGxh
biwgR1BSUmVnIGNhblRyYW1wbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHBsYW4uZmlsbEFj
dGlvbigpKSB7CisgICAgICAgIGNhc2UgRG9Ob3RoaW5nRm9yRmlsbDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNldEludDMyQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSwgcGxhbi5n
cHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRCb29sZWFuQ29uc3Rh
bnQ6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZU9mQm9vbGVhbkNv
bnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTZXRDZWxsQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkuYXNDZWxs
KCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIGNhc2UgU2V0VHJ1c3RlZEpTQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIocGxhbi5ub2RlSW5kZXgoKSkuYXNUcnVzdGVk
SW1tUHRyKCksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U2V0SlNDb25zdGFudDoKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRB
c0ltbVB0cihwbGFuLm5vZGVJbmRleCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTZXREb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4u
bm9kZUluZGV4KCkpKSksIGNhblRyYW1wbGUpOworICAgICAgICAgICAgbV9qaXQubW92ZVB0clRv
RG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTG9hZDMyUGF5bG9hZEJveEludDoKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0
ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExvYWREb3VibGVCb3hEb3VibGU6CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdp
c3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIExvYWRKU1VuYm94RG91YmxlOgorICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVn
aXN0ZXIoKSksIGNhblRyYW1wbGUpOworICAgICAgICAgICAgdW5ib3hEb3VibGUoY2FuVHJhbXBs
ZSwgcGxhbi5mcHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGNhc2Ug
U2V0SlNDb25zdGFudFRhZzoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpT
Q29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkudGFnKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldEpTQ29uc3RhbnRQYXlsb2FkOgorICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKS5w
YXlsb2FkKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFNldEludDMyVGFnOgorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNldENlbGxUYWc6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTZXRCb29sZWFuVGFnOgorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZyksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU2V0RG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKGFkZHJlc3NPZkRPdWJsZUNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpLCBwbGFuLmZwcigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGNhc2UgTG9hZDMyVGFnOgor
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IoYXQocGxhbi5ub2Rl
SW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIExvYWQzMlBheWxvYWQ6CisgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJl
Z2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IExvYWRQdHI6CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRG91YmxlOgorICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJ
bmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZnByKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgfQogICAgIH0KLSAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEZQUlJl
ZyBleGNsdWRlKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgor
ICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKGJvb2wgZG9TcGlsbCwgQ29sbGVj
dGlvblR5cGUmIHBsYW5zLCBHUFJSZWcgZXhjbHVkZSwgR1BSUmVnIGV4Y2x1ZGUyID0gSW52YWxp
ZEdQUlJlZywgRlBSUmVnIGZwckV4Y2x1ZGUgPSBJbnZhbGlkRlBSUmVnKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKHBsYW5zLmlzRW1wdHkoKSk7CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0
ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAg
ICAgICAgICAgICAgc2lsZW50U3BpbGxHUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOworICAgICAgICAgICAgaWYgKGl0
ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYg
Z3ByICE9IGV4Y2x1ZGUyKSB7CisgICAgICAgICAgICAgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxh
biBwbGFuID0gc2lsZW50U2F2ZVBsYW5Gb3JHUFIoaXRlci5uYW1lKCksIGdwcik7CisgICAgICAg
ICAgICAgICAgaWYgKGRvU3BpbGwpCisgICAgICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsKHBs
YW4pOworICAgICAgICAgICAgICAgIHBsYW5zLmFwcGVuZChwbGFuKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2lu
KCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIEZQUlJlZyBm
cHIgPSBpdGVyLnJlZ0lEKCk7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlciAmJiBmcHIgIT0gZXhjbHVkZSkKLSAgICAgICAgICAgICAgICBzaWxl
bnRTcGlsbEZQUihpdGVyLm5hbWUoKSwgZnByKTsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUo
KSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGl0ZXIucmVnSUQoKSAhPSBmcHJFeGNsdWRl
KSB7CisgICAgICAgICAgICAgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBwbGFuID0gc2lsZW50
U2F2ZVBsYW5Gb3JGUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKGRvU3BpbGwpCisgICAgICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsKHBsYW4pOwor
ICAgICAgICAgICAgICAgIHBsYW5zLmFwcGVuZChwbGFuKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KLQotICAgIHZvaWQgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhj
bHVkZSwgR1BSUmVnIGV4Y2x1ZGUyID0gSW52YWxpZEdQUlJlZykKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1w
bChib29sIGRvU3BpbGwsIENvbGxlY3Rpb25UeXBlJiBwbGFucywgRlBSUmVnIGV4Y2x1ZGUpCiAg
ICAgewotICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QwOwotICAgICAg
ICBpZiAoZXhjbHVkZSA9PSBHUFJJbmZvOjpyZWdUMCkKLSAgICAgICAgICAgIGNhblRyYW1wbGUg
PSBHUFJJbmZvOjpyZWdUMTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0
ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAg
ICAgICAgICAgICAgc2lsZW50RmlsbEZQUihpdGVyLm5hbWUoKSwgY2FuVHJhbXBsZSwgaXRlci5y
ZWdJRCgpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9n
cHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAg
IEdQUlJlZyBncHIgPSBpdGVyLnJlZ0lEKCk7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBncHIgIT0gZXhjbHVkZSAmJiBncHIgIT0gZXhj
bHVkZTIpCi0gICAgICAgICAgICAgICAgc2lsZW50RmlsbEdQUihpdGVyLm5hbWUoKSwgZ3ByKTsK
LSAgICAgICAgfQorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZG9TcGlsbCwg
cGxhbnMsIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcsIGV4Y2x1ZGUpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEdQUlJlZyBleGNsdWRlLCBHUFJS
ZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnLCBGUFJSZWcgZnByRXhjbHVkZSA9IEludmFsaWRG
UFJSZWcpCisgICAgeworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwodHJ1ZSwg
bV9wbGFucywgZXhjbHVkZSwgZXhjbHVkZTIsIGZwckV4Y2x1ZGUpOworICAgIH0KKyAgICB2b2lk
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEZQUlJlZyBleGNsdWRlKQorICAgIHsKKyAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZywgZXhj
bHVkZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHUFJSZWcgcGlja0NhblRyYW1wbGUoR1BS
UmVnIGV4Y2x1ZGUpCisgICAgeworICAgICAgICBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgICAgIGlmIChyZXN1bHQgPT0gZXhjbHVkZSkKKyAgICAgICAgICAgIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QxOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzdGF0
aWMgR1BSUmVnIHBpY2tDYW5UcmFtcGxlKEZQUlJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBH
UFJJbmZvOjpyZWdUMDsKICAgICB9Ci0gICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEZQ
UlJlZyBleGNsdWRlKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJlZ2lzdGVyVHlwZT4K
KyAgICB2b2lkIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoUmVnaXN0ZXJUeXBlIGV4Y2x1ZGUpCiAg
ICAgewotICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QwOworICAgICAg
ICBHUFJSZWcgY2FuVHJhbXBsZSA9IHBpY2tDYW5UcmFtcGxlKGV4Y2x1ZGUpOwogICAgICAgICAK
LSAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9
IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBGUFJSZWcgZnByID0gaXRlci5y
ZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIgJiYgZnByICE9IGV4Y2x1ZGUpCi0gICAgICAgICAgICAgICAgc2lsZW50RmlsbEZQUihp
dGVyLm5hbWUoKSwgY2FuVHJhbXBsZSwgZnByKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGdw
cl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxHUFIoaXRlci5uYW1lKCksIGl0ZXIu
cmVnSUQoKSk7CisgICAgICAgIHdoaWxlICghbV9wbGFucy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4mIHBsYW4gPSBtX3BsYW5zLmxhc3QoKTsKKyAgICAg
ICAgICAgIHNpbGVudEZpbGwocGxhbiwgY2FuVHJhbXBsZSk7CisgICAgICAgICAgICBtX3BsYW5z
LnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODk4LDEyICs5ODAsMTEgQEAg
cHJpdmF0ZToKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUmKTsKICAg
ICB2b2lkIG5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSYpOwogCi0gICAgZW51bSBT
cGlsbFJlZ2lzdGVyc01vZGUgeyBOZWVkVG9TcGlsbCwgRG9udFNwaWxsIH07CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4s
IEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQg
PSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7
CisgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgp
LCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7CiAgICAgdm9pZCBjYWNoZWRQdXRC
eUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2Us
IEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwog
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWNoZWRHZXRC
eUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxv
YWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01v
ZGUgPSBOZWVkVG9TcGlsbCk7CisgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1
bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQg
PSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7
CiAgICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQ
UiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBFZGdlIHZhbHVl
VXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2lu
ZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgp
KTsKICNlbmRpZgogCkBAIC0xMjI1LDYgKzEzMDYsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0ID09IEludmFsaWRHUFJSZWcpOworICAgICAgICByZXR1cm4gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIGFyZzEpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CkBA
IC0xMjU1LDYgKzEzNDEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFy
Z3VtZW50VHlwZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTM+CisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihGdW5jdGlvblR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBB
cmd1bWVudFR5cGUxIGFyZzEsIEFyZ3VtZW50VHlwZTIgYXJnMiwgQXJndW1lbnRUeXBlMyBhcmcz
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmcxLCBh
cmcyLCBhcmczKTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihE
X0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwpA
QCAtMTQyMyw2ICsxNTE1LDExIEBAIHByaXZhdGU6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBhcmcxKTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RG
R09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCwgR1BSUmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIsIFRy
dXN0ZWRJbW1QdHIocG9pbnRlcikpOwpAQCAtMTQ0OCw2ICsxNTQ1LDE4IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmcz
UGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFyZ3VtZW50
VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTMsIHR5
cGVuYW1lIEFyZ3VtZW50VHlwZTQ+CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0RGR09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRU
eXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFyZzIsIEFyZ3VtZW50VHlwZTMgYXJnMywgQXJndW1l
bnRUeXBlNCBhcmc0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1l
bnRUeXBlMywgdHlwZW5hbWUgQXJndW1lbnRUeXBlNCwgdHlwZW5hbWUgQXJndW1lbnRUeXBlNT4K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKUFAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZzEsIEFyZ3VtZW50VHlw
ZTIgYXJnMiwgQXJndW1lbnRUeXBlMyBhcmczLCBBcmd1bWVudFR5cGU0IGFyZzQsIEFyZ3VtZW50
VHlwZTUgYXJnNSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQg
PT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CisgICAgfQogCiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewpAQCAt
MTQ2NSw2ICsxNTc0LDQ3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
KGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMT4KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKAorICAgICAgICBGdW5jdGlvblR5cGUgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyBy
ZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0LnRhZygpLCByZXN1bHQucGF5bG9hZCgpLCBhcmcxKTsK
KyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBBcmd1
bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyPgorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oCisgICAgICAgIEZ1bmN0aW9uVHlwZSBvcGVyYXRpb24sIEpTVmFsdWVS
ZWdzIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFyZzIpCisgICAg
eworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlc3VsdC50YWcoKSwg
cmVzdWx0LnBheWxvYWQoKSwgYXJnMSwgYXJnMik7CisgICAgfQorICAgIHRlbXBsYXRlPAorICAg
ICAgICB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVu
YW1lIEFyZ3VtZW50VHlwZTIsCisgICAgICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTM+CisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgRnVuY3Rpb25UeXBlIG9w
ZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZzEsIEFyZ3VtZW50
VHlwZTIgYXJnMiwKKyAgICAgICAgQXJndW1lbnRUeXBlMyBhcmczKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZXN1bHQudGFnKCksIHJlc3VsdC5wYXls
b2FkKCksIGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KKyAgICB0ZW1wbGF0ZTwKKyAgICAgICAg
dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBB
cmd1bWVudFR5cGUyLAorICAgICAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLCB0eXBlbmFtZSBB
cmd1bWVudFR5cGU0PgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisgICAg
ICAgIEZ1bmN0aW9uVHlwZSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgQXJndW1lbnRU
eXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFyZzIsCisgICAgICAgIEFyZ3VtZW50VHlwZTMgYXJn
MywgQXJndW1lbnRUeXBlNCBhcmc0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCByZXN1bHQudGFnKCksIHJlc3VsdC5wYXlsb2FkKCksIGFyZzEsIGFyZzIs
IGFyZzMsIGFyZzQpOworICAgIH0KKyAgICB0ZW1wbGF0ZTwKKyAgICAgICAgdHlwZW5hbWUgRnVu
Y3Rpb25UeXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUy
LAorICAgICAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVudFR5cGU0
LCB0eXBlbmFtZSBBcmd1bWVudFR5cGU1PgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oCisgICAgICAgIEZ1bmN0aW9uVHlwZSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3Vs
dCwgQXJndW1lbnRUeXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFyZzIsCisgICAgICAgIEFyZ3Vt
ZW50VHlwZTMgYXJnMywgQXJndW1lbnRUeXBlNCBhcmc0LCBBcmd1bWVudFR5cGU1IGFyZzUpCisg
ICAgeworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgIG9wZXJhdGlv
biwgcmVzdWx0LnRhZygpLCByZXN1bHQucGF5bG9hZCgpLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0
LCBhcmc1KTsKKyAgICB9CiAjZW5kaWYKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYWRkIGNhbGwg
aW5zdHJ1Y3Rpb25zLCB3aXRoIG9wdGlvbmFsIGV4Y2VwdGlvbiBjaGVja3MgJiBzZXR0aW5nIHJl
c3VsdHMuCkBAIC0xOTUxLDggKzIxMDEsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV92
YXJpYWJsZXNbb3BlcmFuZF07CiAgICAgfQogICAgIAotICAgIC8vIFRoZSBKSVQsIHdoaWxlIGFs
c28gcHJvdmlkZXMgTWFjcm9Bc3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KICAgICBKSVRDb21waWxl
ciYgbV9qaXQ7CisKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KICAg
ICBCbG9ja0luZGV4IG1fYmxvY2s7CiAgICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OwpAQCAt
MTk4NCw2ICsyMTM0LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBBYnN0cmFjdFN0YXRlIG1fc3Rh
dGU7CiAgICAgCisgICAgVmVjdG9yPFNsb3dQYXRoR2VuZXJhdG9yKiwgOD4gbV9zbG93UGF0aEdl
bmVyYXRvcnM7IC8vIGRvZXNuJ3QgdXNlIE93blB0cjw+IGJlY2F1c2UgSSBkb24ndCB3YW50IHRv
IGluY2x1ZGUgREZHU2xvd1BhdGhHZW5lcmF0b3IuaAorICAgIFZlY3RvcjxTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuPiBtX3BsYW5zOworCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKQEAgLTI2MDMsMjAgKzI3NTYsNiBAQCBwcml2
YXRlOgogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKLWlubGluZSBTcGVjdWxhdGl2
ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKLSAgICA6IG1fY29tcGlsZU9r
YXkodHJ1ZSkKLSAgICAsIG1faml0KGppdCkKLSAgICAsIG1fY29tcGlsZUluZGV4KDApCi0gICAg
LCBtX2luZGV4SW5CbG9jaygwKQotICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxv
Y2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCi0gICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBo
KCkubV9ibG9ja3Muc2l6ZSgpKQotICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCkpCi0gICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFy
cykKLSAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkKLSAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKLXsKLX0KLQogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYK
</data>
<flag name="commit-queue"
          id="142237"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137250</attachid>
            <date>2012-04-15 14:50:04 -0700</date>
            <delta_ts>2012-04-15 18:11:31 -0700</delta_ts>
            <desc>I think it works</desc>
            <filename>slowpaths_patch_4.diff</filename>
            <type>text/plain</type>
            <size>140397</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0MjEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxMi0wNC0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBvdXQtb2YtbGluZSBzbG93IHBhdGhzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlcyB0aGUgbm90
aW9uIG9mIHNsb3cgcGF0aCBjb2RlIGdlbmVyYXRpb24gY2xvc3VyZXMgaW4gdGhlIERGRy4KKyAg
ICAgICAgVGhlc2UgYXJlIGRlZmluZWQgaW4gREZHU2xvd1BhdGhHZW5lcmF0b3IuaCwgdGhvdWdo
IHRoZXkgYXJlIGZhaXJseQorICAgICAgICBleHRlbnNpYmxlIHNvIERGR1NwZWN1bGF0aXZlSklU
NjQuY3BwIGFuZCBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorICAgICAgICBkZWZpbmUgYSBj
b3VwbGUgc3BlY2lhbC1wdXJwb3NlIG9uZXMuIEEgc2xvdyBwYXRoIGdlbmVyYXRpb24gY2xvc3Vy
ZQorICAgICAgICAoREZHOjpTbG93UGF0aEdlbmVyYXRvcikgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhl
IG1haW4gc3BlY3VsYXRpdmUgcGF0aCBpcworICAgICAgICBnZW5lcmF0ZWQuIFRoaXMgbWFrZXMg
dGhlbSBncmVhdCBmb3Igc2NoZWR1bGluZyBzbG93IHBhdGggY29kZSBvdXQgb2YKKyAgICAgICAg
dGhlIHdheSBvZiB0aGUgaG90IHBhdGhzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIGNvbnZlcnRzIG1vc3QgLSBidXQgbm90IGFsbCAtIG9mIHRoZSBERkcgdG8gdXNlIHNsb3cK
KyAgICAgICAgcGF0aCBnZW5lcmF0b3JzIGluc3RlYWQgb2YgaW5saW5lIHNsb3cgcGF0aHMuCisg
ICAgICAgIAorICAgICAgICBUaGUgcmVzdWx0IGlzIGEgc3ViLTElIGltcHJvdmVtZW50IG9uIFN1
blNwaWRlciBhbmQgVjgsIGFuZCBhIG1pbmlzY3VsZQorICAgICAgICByZWdyZXNzaW9uIG9uIEty
YWtlbi4KKyAgICAgICAgCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyOjpU
cnVzdGVkSW1tUHRyKToKKyAgICAgICAgKFRydXN0ZWRJbW1QdHIpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzI6OlRydXN0ZWRJbW0zMik6CisgICAg
ICAgIChUcnVzdGVkSW1tMzIpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
Lmg6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlBY2Nlc3NS
ZWNvcmQ6OlByb3BlcnR5QWNjZXNzUmVjb3JkKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzUmVj
b3JkKToKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuOjpzcGlsbEFjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2lsZW50
UmVnaXN0ZXJTYXZlUGxhbjo6ZmlsbEFjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2lsZW50
UmVnaXN0ZXJTYXZlUGxhbjo6bm9kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNpbGVudFJlZ2lzdGVy
U2F2ZVBsYW46OmZwcik6CisgICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6U2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjp+U2xvd1BhdGhHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6OmxhYmVsKToKKyAgICAgICAgKEpTQzo6REZH
OjpTbG93UGF0aEdlbmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKdW1waW5nU2xvd1BhdGhHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6SnVt
cGluZ1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpKdW1waW5nU2xvd1Bh
dGhHZW5lcmF0b3I6OmxpbmtGcm9tKToKKyAgICAgICAgKEpTQzo6REZHOjpKdW1waW5nU2xvd1Bh
dGhHZW5lcmF0b3I6Omp1bXBUbyk6CisgICAgICAgIChDYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsU2xvd1BhdGhHZW5lcmF0b3I6OmNhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6c2V0VXApOgorICAg
ICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6cmVjb3JkQ2FsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjp0ZWFyRG93bik6CisgICAgICAg
IChDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxS
ZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRl
cm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZE9uZUFyZ3VtZW50U2xvd1BhdGhH
ZW5lcmF0b3I6OkNhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRv
cjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRz
U2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRUd29B
cmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Nsb3dQ
YXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kVHdvQXJndW1l
bnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoQ2FsbFJl
c3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVz
dWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRl
SW50ZXJuYWwpOgorICAgICAgICAoQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNT
bG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93
UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5k
Rml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxs
UmVzdWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kRml2
ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVz
dWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6REZHOjpzbG93UGF0aENhbGwpOgorICAgICAgICAoQXNzaWduaW5nU2xv
d1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2lnbmluZ1Nsb3dQYXRoR2Vu
ZXJhdG9yOjpBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzaWduaW5nU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpERkc6OnNsb3dQYXRoTW92ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6flNw
ZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkU2xv
d1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpydW5T
bG93UGF0aEdlbmVyYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBS
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwaWNrQ2FuVHJhbXBsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChWYWx1ZVRv
TnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlVG9OdW1i
ZXJTbG93UGF0aEdlbmVyYXRvcjo6VmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRl
SW50ZXJuYWwpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChDb21wYXJlQW5kQm94
Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5k
Qm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQ
YXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0
RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5v
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKFZhbHVlVG9OdW1iZXJT
bG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVUb051bWJlclNsb3dQ
YXRoR2VuZXJhdG9yOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpERkc6OlZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5h
bCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKENvbXBhcmVBbmRCb3hCb29sZWFu
U2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29s
ZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5l
cmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDQtMTMg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTQxODUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDYgKzgwLDggQEAKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRo
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYx
NUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1
NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQ
b3NpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0
Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYxRTNBNUMxNTNBMURBOTAwMEY5NDU2
IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjFFM0E2NzE1M0EyMUUyMDAw
Rjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERG
R1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI2ODE0QkU1RjY4MDBBREM2NEIgLyogSklURHJpdmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI2
NjE0QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4
ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0
QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc1MCw2ICs3NTIsOCBAQAogCQkwRjE1RjE1RDE0QjdB
NzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcmd1bWVudFBvc2l0aW9uLmg7IHBhdGgg
PSBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRG91YmxlRm9ybWF0U3RhdGUuaDsgcGF0
aCA9IGRmZy9ERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsg
cGF0aCA9IGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmg7IHBhdGggPSBkZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyogSklU
RHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERyaXZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyog
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvbkhhcm5lc3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwODQsNiArMjA4OCw4IEBACiAJCQkJODZCQjA5QkUxMzhFMzgx
QjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovLAogCQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2
NzAyRiAvKiBERkdSZXBhdGNoLmggKi8sCiAJCQkJODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8q
IERGR1Njb3JlQm9hcmQuaCAqLywKKwkJCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovLAorCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1
NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJC
MkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi8sCiAJCQkJODZFQzlEQzMxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAw
QjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovLApAQCAtMjU3MCw2ICsyNTc2
LDggQEAKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyog
REZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUUzQTVDMTUzQTFE
QTkwMDBGOTQ1NiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkwRjFFM0E2NzE1M0EyMUUy
MDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MSw2ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAgLy8gaW4gYSBjbGFzcyByZXF1aXJpbmcg
ZXhwbGljaXQgY29uc3RydWN0aW9uIGluIG9yZGVyIHRvIGRpZmZlcmVudGlhdGUKICAgICAvLyBm
cm9tIHBvaW50ZXJzIHVzZWQgYXMgYWJzb2x1dGUgYWRkcmVzc2VzIHRvIG1lbW9yeSBvcGVyYXRp
b25zCiAgICAgc3RydWN0IFRydXN0ZWRJbW1QdHIgeworICAgICAgICBUcnVzdGVkSW1tUHRyKCkg
eyB9CisgICAgICAgIAogICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tUHRyKGNvbnN0IHZvaWQq
IHZhbHVlKQogICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CkBAIC0yMTks
NiArMjIxLDggQEAgcHVibGljOgogICAgIC8vICh3aGljaCBhcmUgaW1wbGVtZW50ZWQgYXMgYW4g
ZW51bSkgZnJvbSBhY2NpZGVudGFsbHkgYmVpbmcgcGFzc2VkIGFzCiAgICAgLy8gaW1tZWRpYXRl
IHZhbHVlcy4KICAgICBzdHJ1Y3QgVHJ1c3RlZEltbTMyIHsKKyAgICAgICAgVHJ1c3RlZEltbTMy
KCkgeyB9CisgICAgICAgIAogICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tMzIoaW50MzJfdCB2
YWx1ZSkKICAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICNpZiBDUFUoQVJNKSB8fCBDUFUo
TUlQUykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDE1
ICsyMDAsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBpbnQ4
X3QgdmFsdWVHUFI7CiAgICAgICAgICAgICAgICAgaW50OF90IHNjcmF0Y2hHUFI7Ci0gICAgICAg
ICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7Ci0gICAgICAgICAgICAgICAgaW50MTZf
dCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOwotICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFD
YWxsVG9TbG93Q2FzZTsKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0Nh
bGw7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAgICAgICAg
ICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOworICAgICAgICAgICAgICAgIGlu
dDMyX3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRh
Q2hlY2tJbW1Ub0NhbGw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBpbnQx
Nl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0
YUNhbGxUb0xvYWRPclN0b3JlOwogI2Vsc2UKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRh
Q2FsbFRvVGFnTG9hZE9yU3RvcmU7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRv
VGFnTG9hZE9yU3RvcmU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZTsKICNlbmRpZgogICAgICAgICAgICAgfSBkZmc7CiAgICAgICAgICAgICBz
dHJ1Y3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lv
biAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRU
b1N0cmluZyhVc2VLaQogICAgIH0KIH0KIAorZW51bSBTcGlsbFJlZ2lzdGVyc01vZGUgeyBOZWVk
VG9TcGlsbCwgRG9udFNwaWxsIH07CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgorI2luY2x1ZGUgIkRGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNs
dWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKQEAgLTE0OSwxOSAr
MTUwLDE5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBt
X2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vz
c2VzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nl
c3Nlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1f
Y29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxs
UmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSk7CiAgICAgICAgIGluZm8uY29kZU9yaWdp
biA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2NvZGVPcmlnaW47CiAgICAgICAgIGluZm8uY2Fs
bFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBpbmZvLnBhdGNo
LmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNoZWNrSW1tVG9D
YWxsKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9j
YXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0
YUNhbGxUb1N0cnVjdENoZWNrKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJ
bW1Ub0NhbGwgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlv
bik7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc3RydWN0dXJlQ2hlY2spKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3Jl
ID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3Rv
cmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IGRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9sb2FkT3JTdG9yZSkpOwogI2Vsc2UKLSAg
ICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSk7Ci0g
ICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUg
PSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdGFnTG9hZE9yU3RvcmUpKTsKKyAg
ICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fcGF5bG9hZExvYWRPclN0b3JlKSk7CiAjZW5k
aWYKLSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAg
IGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9j
YXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zbG93
UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0RvbmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZG9uZSkpOwogICAg
ICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fYmFz
ZUdQUjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBpbmZvLnBhdGNoLmRmZy52YWx1ZUdQ
UiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3ZhbHVlR1BSOwpAQCAtMjAxLDYgKzIwMiw5IEBA
IGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkKICAgICBTcGVjdWxhdGl2
ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgY29tcGlsZUJvZHkoc3BlY3VsYXRpdmUpOwog
CisgICAgLy8gR2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCisgICAgc3BlY3VsYXRpdmUucnVuU2xv
d1BhdGhHZW5lcmF0b3JzKCk7CisgICAgCiAgICAgLy8gQ3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9s
aW5lcyBpZiBuZWNlc3NhcnkuCiAgICAgc3BlY3VsYXRpdmUuY3JlYXRlT1NSRW50cmllcygpOwog
CkBAIC0yNzAsNiArMjc0LDkgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJ
VENvZAogICAgIG1vdmUoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICBqdW1wKGZyb21Bcml0eUNoZWNrKTsKICAgICAKKyAgICAvLyBHZW5lcmF0ZSBzbG93
IHBhdGggY29kZS4KKyAgICBzcGVjdWxhdGl2ZS5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAg
ICAKICAgICAvLyBDcmVhdGUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzIGlmIG5lY2Vzc2FyeS4KICAg
ICBzcGVjdWxhdGl2ZS5jcmVhdGVPU1JFbnRyaWVzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTUgKzI4LDE1IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg+Ci0jaW5jbHVkZSA8YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg+
Ci0jaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR0NDYWxs
SGVscGVycy5oPgotI2luY2x1ZGUgPGRmZy9ERkdGUFJJbmZvLmg+Ci0jaW5jbHVkZSA8ZGZnL0RG
R0dQUkluZm8uaD4KLSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDxkZmcvREZH
UmVnaXN0ZXJCYW5rLmg+Ci0jaW5jbHVkZSA8aml0L0pJVENvZGUuaD4KKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJERkdGUFJJ
bmZvLmgiCisjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisj
aW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNDgsNiArNDgsNyBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklU
Q29kZUdlbmVyYXRvcjsKIGNsYXNzIE5vZGVUb1JlZ2lzdGVyTWFwOworY2xhc3MgU2xvd1BhdGhH
ZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKIGNsYXNzIFNwZWN1bGF0aW9uUmVjb3Zl
cnk7CiAKQEAgLTEzMCwyMiArMTMxLDQzIEBAIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7
CiAgICAgZW51bSBSZWdpc3Rlck1vZGUgeyBSZWdpc3RlcnNGbHVzaGVkLCBSZWdpc3RlcnNJblVz
ZSB9OwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGRlbHRh
Q2hlY2tJbW1Ub0NhbGwsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbENvbXBhY3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkZWx0YUNhbGxU
b0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BS
LCBSZWdpc3Rlck1vZGUgcmVnaXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCisgICAgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQoCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVJbW0sCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBsb2FkT3JTdG9yZSwKKyAgICAgICAgU2xvd1BhdGhHZW5lcmF0b3Iq
IHNsb3dQYXRoR2VuZXJhdG9yLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSwK
KyAgICAgICAgaW50OF90IGJhc2VHUFIsCisgICAgICAgIGludDhfdCB2YWx1ZUdQUiwKKyAgICAg
ICAgaW50OF90IHNjcmF0Y2hHUFIsCisgICAgICAgIFJlZ2lzdGVyTW9kZSByZWdpc3Rlck1vZGUg
PSBSZWdpc3RlcnNJblVzZSkKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgUHJvcGVydHlB
Y2Nlc3NSZWNvcmQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9u
Q2FsbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgTWFjcm9B
c3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSwgTWFj
cm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVl
VGFnR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSLCBSZWdpc3Rlck1vZGUg
cmVnaXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCisgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQo
CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVJbW0sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHN0cnVjdHVyZUNoZWNrLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFj
dCB0YWdMb2FkT3JTdG9yZSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBh
Y3QgcGF5bG9hZExvYWRPclN0b3JlLAorICAgICAgICBTbG93UGF0aEdlbmVyYXRvciogc2xvd1Bh
dGhHZW5lcmF0b3IsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lLAorICAgICAg
ICBpbnQ4X3QgYmFzZUdQUiwKKyAgICAgICAgaW50OF90IHZhbHVlVGFnR1BSLAorICAgICAgICBp
bnQ4X3QgdmFsdWVHUFIsCisgICAgICAgIGludDhfdCBzY3JhdGNoR1BSLAorICAgICAgICBSZWdp
c3Rlck1vZGUgcmVnaXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCiAjZW5kaWYKICAgICAgICAg
OiBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICAgICAgLCBtX2RlbHRhQ2hlY2tJbW1Ub0Nh
bGwoZGVsdGFDaGVja0ltbVRvQ2FsbCkKLSAgICAgICAgLCBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlv
bkNhbGwpCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKGRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spCisgICAgICAgICwgbV9zdHJ1Y3R1cmVJbW0oc3RydWN0dXJlSW1tKQorICAgICAg
ICAsIG1fc3RydWN0dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUoZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSkKKyAgICAgICAgLCBtX2xvYWRPclN0b3JlKGxvYWRPclN0b3JlKQogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUoZGVsdGFDYWxs
VG9UYWdMb2FkT3JTdG9yZSkKLSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlKGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKQorICAgICAgICAsIG1fdGFnTG9hZE9y
U3RvcmUodGFnTG9hZE9yU3RvcmUpCisgICAgICAgICwgbV9wYXlsb2FkTG9hZE9yU3RvcmUocGF5
bG9hZExvYWRPclN0b3JlKQogI2VuZGlmCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb1Nsb3dDYXNl
KGRlbHRhQ2FsbFRvU2xvd0Nhc2UpCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb0RvbmUoZGVsdGFD
YWxsVG9Eb25lKQorICAgICAgICAsIG1fc2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhHZW5lcmF0
b3IpCisgICAgICAgICwgbV9kb25lKGRvbmUpCiAgICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIp
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgLCBtX3ZhbHVlVGFnR1BSKHZhbHVlVGFn
R1BSKQpAQCAtMTU3LDE3ICsxNzksMTYgQEAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsK
ICAgICB9CiAKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6RGF0YUxhYmVsUHRyIG1fZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBtX2Z1bmN0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2RlbHRh
Q2FsbFRvU3RydWN0Q2hlY2s7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX3N0
cnVjdHVyZUltbTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3N0cnVjdHVyZUNoZWNrOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3Qg
bV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxD
b21wYWN0IG1fbG9hZE9yU3RvcmU7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBtX2RlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fdGFn
TG9hZE9yU3RvcmU7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9wYXls
b2FkTG9hZE9yU3RvcmU7CiAjZW5kaWYKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kZWx0
YUNhbGxUb1Nsb3dDYXNlOwotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RlbHRhQ2FsbFRv
RG9uZTsKKyAgICBTbG93UGF0aEdlbmVyYXRvciogbV9zbG93UGF0aEdlbmVyYXRvcjsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIGludDhfdCBtX2Jhc2VHUFI7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBpbnQ4X3QgbV92YWx1ZVRhZ0dQUjsKQEAgLTE5Myw3ICsy
MTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4KDApCiAg
ICAgewogICAgIH0KLQorICAgIAogICAgIGJvb2wgY29tcGlsZShKSVRDb2RlJiBlbnRyeSk7CiAg
ICAgYm9vbCBjb21waWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYgZW50cnlXaXRoQXJpdHlDaGVjayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFu
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxh
bl9oCisjZGVmaW5lIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW5faAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorI2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBTaWxlbnRTcGlsbEFjdGlv
biB7CisgICAgRG9Ob3RoaW5nRm9yU3BpbGwsCisgICAgU3RvcmUzMlRhZywKKyAgICBTdG9yZTMy
UGF5bG9hZCwKKyAgICBTdG9yZVB0ciwKKyAgICBTdG9yZURvdWJsZQorfTsKKworZW51bSBTaWxl
bnRGaWxsQWN0aW9uIHsKKyAgICBEb05vdGhpbmdGb3JGaWxsLAorICAgIFNldEludDMyQ29uc3Rh
bnQsCisgICAgU2V0Qm9vbGVhbkNvbnN0YW50LAorICAgIFNldENlbGxDb25zdGFudCwKKyAgICBT
ZXRUcnVzdGVkSlNDb25zdGFudCwKKyAgICBTZXRKU0NvbnN0YW50LAorICAgIFNldEpTQ29uc3Rh
bnRUYWcsCisgICAgU2V0SlNDb25zdGFudFBheWxvYWQsCisgICAgU2V0SW50MzJUYWcsCisgICAg
U2V0Q2VsbFRhZywKKyAgICBTZXRCb29sZWFuVGFnLAorICAgIFNldERvdWJsZUNvbnN0YW50LAor
ICAgIExvYWQzMlRhZywKKyAgICBMb2FkMzJQYXlsb2FkLAorICAgIExvYWQzMlBheWxvYWRCb3hJ
bnQsCisgICAgTG9hZFB0ciwKKyAgICBMb2FkRG91YmxlLAorICAgIExvYWREb3VibGVCb3hEb3Vi
bGUsCisgICAgTG9hZEpTVW5ib3hEb3VibGUKK307CisKK2NsYXNzIFNpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4geworcHVibGljOgorICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oKQorICAgICAgICA6
IG1fc3BpbGxBY3Rpb24oRG9Ob3RoaW5nRm9yU3BpbGwpCisgICAgICAgICwgbV9maWxsQWN0aW9u
KERvTm90aGluZ0ZvckZpbGwpCisgICAgICAgICwgbV9yZWdpc3RlcigtMSkKKyAgICAgICAgLCBt
X25vZGVJbmRleChOb05vZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuKFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdQUlJlZyBncHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlvbikKKyAg
ICAgICAgLCBtX2ZpbGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAgICAgLCBtX3JlZ2lzdGVyKGdw
cikKKyAgICAgICAgLCBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlv
bihzcGlsbEFjdGlvbikKKyAgICAgICAgLCBtX2ZpbGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAg
ICAgLCBtX3JlZ2lzdGVyKGZwcikKKyAgICAgICAgLCBtX25vZGVJbmRleChub2RlSW5kZXgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNpbGVudFNwaWxsQWN0aW9uPihtX3NwaWxsQWN0aW9u
KTsgfQorICAgIFNpbGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFNpbGVudEZpbGxBY3Rpb24+KG1fZmlsbEFjdGlvbik7IH0KKyAgICAKKyAgICBO
b2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlSW5kZXg7IH0KKyAgICAK
KyAgICBHUFJSZWcgZ3ByKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3Jl
Z2lzdGVyKTsgfQorICAgIEZQUlJlZyBmcHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxG
UFJSZWc+KG1fcmVnaXN0ZXIpOyB9CisgICAgCitwcml2YXRlOgorICAgIGludDhfdCBtX3NwaWxs
QWN0aW9uOworICAgIGludDhfdCBtX2ZpbGxBY3Rpb247CisgICAgaW50OF90IG1fcmVnaXN0ZXI7
CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
bG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdTbG93UGF0aEdlbmVyYXRvcl9oCisjZGVmaW5lIERGR1Nsb3dQYXRoR2VuZXJh
dG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3RlclNh
dmVQbGFuLmgiCisjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKKyNpbmNsdWRlIDx3dGYv
RmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3IgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNsb3dQYXRoR2VuZXJhdG9y
KCkgeyB9CisgICAgdmlydHVhbCB+U2xvd1BhdGhHZW5lcmF0b3IoKSB7IH0KKyAgICB2b2lkIGdl
bmVyYXRlKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBzbG93IHBhdGggJXAgYXQgb2Zm
c2V0IDB4JXhcbiIsIHRoaXMsIGppdC0+bV9qaXQuZGVidWdPZmZzZXQoKSk7CisjZW5kaWYKKyAg
ICAgICAgbV9sYWJlbCA9IGppdC0+bV9qaXQubGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdGVJbnRl
cm5hbChqaXQpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgaml0LT5tX2ppdC5icmVh
a3BvaW50KCk7IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBnZW5lcmF0b3IganVtcHMgYmFjayB0byBz
b21ld2hlcmUKKyNlbmRpZgorICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwo
KSBjb25zdCB7IHJldHVybiBtX2xhYmVsOyB9CisgICAgdmlydHVhbCBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBCeSBkZWZhdWx0IHNsb3cgcGF0aCBnZW5lcmF0b3JzIGRvbid0IGhhdmUgYSBjYWxsLgorICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkNhbGwoKTsKKyAgICB9Citwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkgPSAw
OworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2xhYmVsOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgSnVtcFR5cGU+CitjbGFzcyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMg
U2xvd1BhdGhHZW5lcmF0b3IgeworcHVibGljOgorICAgIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRv
cihKdW1wVHlwZSBmcm9tLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdG8pCisgICAgICAgIDogbV9m
cm9tKGZyb20pCisgICAgICAgICwgbV90byh0bykKKyAgICB7CisgICAgfQorICAgIAorcHJvdGVj
dGVkOgorICAgIHZvaWQgbGlua0Zyb20oU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAg
ICAgIG1fZnJvbS5saW5rKCZqaXQtPm1faml0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBqdW1w
VG8oU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIGppdC0+bV9qaXQuanVtcCgp
LmxpbmtUbyhtX3RvLCAmaml0LT5tX2ppdCk7CisgICAgfQorCisgICAgSnVtcFR5cGUgbV9mcm9t
OworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RvOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZT4K
K2NsYXNzIENhbGxTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5l
cmF0b3I8SnVtcFR5cGU+IHsKK3B1YmxpYzoKKyAgICBDYWxsU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBm
dW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgUmVzdWx0VHlw
ZSByZXN1bHQpCisgICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlPihm
cm9tLCBqaXQtPm1faml0LmxhYmVsKCkpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikK
KyAgICAgICAgLCBtX3NwaWxsTW9kZShzcGlsbE1vZGUpCisgICAgICAgICwgbV9yZXN1bHQocmVz
dWx0KQorICAgIHsKKyAgICAgICAgaWYgKG1fc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAg
ICAgICAgICAgaml0LT5zaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZmFsc2UsIG1fcGxhbnMs
IHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jYWxsOworICAgIH0KKyAgICAK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIHNldFVwKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgewor
ICAgICAgICB0aGlzLT5saW5rRnJvbShqaXQpOworICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0g
TmVlZFRvU3BpbGwpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Bs
YW5zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGppdC0+c2lsZW50U3BpbGwobV9wbGFu
c1tpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCByZWNvcmRDYWxsKE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwpCisgICAgeworICAgICAgICBtX2NhbGwgPSBjYWxsOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHRlYXJEb3duKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgewor
ICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKKyAgICAgICAgICAgIEdQ
UlJlZyBjYW5UcmFtcGxlID0gU3BlY3VsYXRpdmVKSVQ6OnBpY2tDYW5UcmFtcGxlKG1fcmVzdWx0
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQor
ICAgICAgICAgICAgICAgIGppdC0+c2lsZW50RmlsbChtX3BsYW5zW2ldLCBjYW5UcmFtcGxlKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLT5qdW1wVG8oaml0KTsKKyAgICB9CisKKyAgICBGdW5j
dGlvblR5cGUgbV9mdW5jdGlvbjsKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgbV9zcGlsbE1vZGU7
CisgICAgUmVzdWx0VHlwZSBtX3Jlc3VsdDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2Nh
bGw7CisgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4sIDI+IG1fcGxhbnM7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBl
bmFtZSBSZXN1bHRUeXBlPgorY2xhc3MgQ2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhH
ZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1
bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4geworcHVibGljOgorICAgIENhbGxSZXN1bHRBbmROb0Fy
Z3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxh
dGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0
ZXJzTW9kZSBzcGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0KQorICAgICAgICA6IENhbGxTbG93
UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAg
ICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgIHsKKyAg
ICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0
aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0
aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlz
LT5tX3Jlc3VsdCkpOworICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KK307CisK
K3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUs
IHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMT4KK2NsYXNz
IENhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMg
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+
IHsKK3B1YmxpYzoKKyAgICBDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25U
eXBlIGZ1bmN0aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1
bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEpCisgICAgICAgIDogQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAorICAg
ICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpCisgICAgICAg
ICwgbV9hcmd1bWVudDEoYXJndW1lbnQxKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgewor
ICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+
Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVu
dDEpKTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisKKyAgICBBcmd1bWVu
dFR5cGUxIG1fYXJndW1lbnQxOworfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5
cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBl
bmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyPgorY2xhc3MgQ2FsbFJl
c3VsdEFuZFR3b0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1
YmxpYzoKKyAgICBDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBm
dW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgUmVzdWx0VHlw
ZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLAorICAgICAgICBBcmd1bWVudFR5cGUy
IGFyZ3VtZW50MikKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1
bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4oCisgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9u
LCBzcGlsbE1vZGUsIHJlc3VsdCkKKyAgICAgICAgLCBtX2FyZ3VtZW50MShhcmd1bWVudDEpCisg
ICAgICAgICwgbV9hcmd1bWVudDIoYXJndW1lbnQyKQorICAgIHsKKyAgICB9CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisg
ICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxs
KGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9h
cmd1bWVudDEsIG1fYXJndW1lbnQyKSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7Cisg
ICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUy
IG1fYXJndW1lbnQyOworfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBB
cmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5
cGUzPgorY2xhc3MgQ2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IK
KyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlw
ZSwgUmVzdWx0VHlwZT4geworcHVibGljOgorICAgIENhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50
c1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJ
VCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZ3VtZW50MSwK
KyAgICAgICAgQXJndW1lbnRUeXBlMiBhcmd1bWVudDIsIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQz
KQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBl
LCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9k
ZSwgcmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFyZ3VtZW50MSkKKyAgICAgICAgLCBt
X2FyZ3VtZW50Mihhcmd1bWVudDIpCisgICAgICAgICwgbV9hcmd1bWVudDMoYXJndW1lbnQzKQor
ICAgIHsKKyAgICB9CisKK3Byb3RlY3RlZDogICAgCisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFs
KFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOwor
ICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKAorICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9u
KAorICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2Fy
Z3VtZW50MSwgbV9hcmd1bWVudDIsCisgICAgICAgICAgICAgICAgbV9hcmd1bWVudDMpKTsKKyAg
ICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisKKyAgICBBcmd1bWVudFR5cGUxIG1f
YXJndW1lbnQxOworICAgIEFyZ3VtZW50VHlwZTIgbV9hcmd1bWVudDI7CisgICAgQXJndW1lbnRU
eXBlMyBtX2FyZ3VtZW50MzsKK307CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBl
LCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5h
bWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1l
bnRUeXBlMywKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGU0PgorY2xhc3MgQ2FsbFJlc3VsdEFu
ZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0
aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6
CisgICAgQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0
aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJl
c3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsCisgICAgICAgIEFyZ3VtZW50VHlwZTIgYXJn
dW1lbnQyLCBBcmd1bWVudFR5cGUzIGFyZ3VtZW50MywgQXJndW1lbnRUeXBlNCBhcmd1bWVudDQp
CisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUs
IFJlc3VsdFR5cGU+KAorICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2Rl
LCByZXN1bHQpCisgICAgICAgICwgbV9hcmd1bWVudDEoYXJndW1lbnQxKQorICAgICAgICAsIG1f
YXJndW1lbnQyKGFyZ3VtZW50MikKKyAgICAgICAgLCBtX2FyZ3VtZW50Myhhcmd1bWVudDMpCisg
ICAgICAgICwgbV9hcmd1bWVudDQoYXJndW1lbnQ0KQorICAgIHsKKyAgICB9CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisg
ICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxs
KAorICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgIHRoaXMt
Pm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCisg
ICAgICAgICAgICAgICAgbV9hcmd1bWVudDMsIG1fYXJndW1lbnQ0KSk7CisgICAgICAgIHRoaXMt
PnRlYXJEb3duKGppdCk7CisgICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsK
KyAgICBBcmd1bWVudFR5cGUyIG1fYXJndW1lbnQyOworICAgIEFyZ3VtZW50VHlwZTMgbV9hcmd1
bWVudDM7CisgICAgQXJndW1lbnRUeXBlNCBtX2FyZ3VtZW50NDsKK307CisKK3RlbXBsYXRlPAor
ICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJl
c3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRU
eXBlMiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGU0
LCB0eXBlbmFtZSBBcmd1bWVudFR5cGU1PgorY2xhc3MgQ2FsbFJlc3VsdEFuZEZpdmVBcmd1bWVu
dHNTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxK
dW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJl
c3VsdEFuZEZpdmVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUg
ZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgICAg
ICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1l
bnRUeXBlMSBhcmd1bWVudDEsCisgICAgICAgIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLCBBcmd1
bWVudFR5cGUzIGFyZ3VtZW50MywgQXJndW1lbnRUeXBlNCBhcmd1bWVudDQsCisgICAgICAgIEFy
Z3VtZW50VHlwZTUgYXJndW1lbnQ1KQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxK
dW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGpp
dCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFy
Z3VtZW50MSkKKyAgICAgICAgLCBtX2FyZ3VtZW50Mihhcmd1bWVudDIpCisgICAgICAgICwgbV9h
cmd1bWVudDMoYXJndW1lbnQzKQorICAgICAgICAsIG1fYXJndW1lbnQ0KGFyZ3VtZW50NCkKKyAg
ICAgICAgLCBtX2FyZ3VtZW50NShhcmd1bWVudDUpCisgICAgeworICAgIH0KKworcHJvdGVjdGVk
OiAgICAKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAg
ICB7CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwo
CisgICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgdGhpcy0+
bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJndW1lbnQxLCBtX2FyZ3VtZW50MiwKKyAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50MywgbV9hcmd1bWVudDQsIG1fYXJndW1lbnQ1KSk7Cisg
ICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBt
X2FyZ3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUyIG1fYXJndW1lbnQyOworICAgIEFyZ3VtZW50
VHlwZTMgbV9hcmd1bWVudDM7CisgICAgQXJndW1lbnRUeXBlNCBtX2FyZ3VtZW50NDsKKyAgICBB
cmd1bWVudFR5cGU1IG1fYXJndW1lbnQ1OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5
cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZT4KK2lubGluZSBQ
YXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aENhbGwoCisgICAgSnVtcFR5cGUg
ZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgIFJl
c3VsdFR5cGUgcmVzdWx0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3Bp
bGwpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZE5v
QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rp
b25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9u
LCBzcGlsbE1vZGUsIHJlc3VsdCkpOworfQorCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1w
VHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5
cGVuYW1lIEFyZ3VtZW50VHlwZTE+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRv
cj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQs
IEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRU
eXBlMSBhcmd1bWVudDEsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRU
b1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxSZXN1bHRB
bmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5cGUsIEZ1
bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRUeXBlMT4oCisgICAgICAgICAgICAgICAg
ZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQsIGFyZ3VtZW50MSkpOworfQor
Cit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBl
LCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVu
YW1lIEFyZ3VtZW50VHlwZTI+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4g
c2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1
bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBl
MSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAorICAgIFNwaWxsUmVnaXN0ZXJz
TW9kZSBzcGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIoCisg
ICAgICAgIG5ldyBDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8Cisg
ICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5
cGUxLCBBcmd1bWVudFR5cGUyPigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9u
LCBzcGlsbE1vZGUsIHJlc3VsdCwgYXJndW1lbnQxLCBhcmd1bWVudDIpKTsKK30KKwordGVtcGxh
dGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5h
bWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1
bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzPgoraW5saW5lIFBhc3NPd25QdHI8U2xv
d1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxh
dGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgUmVzdWx0VHlwZSByZXN1
bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLCBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MiwKKyAg
ICBBcmd1bWVudFR5cGUzIGFyZ3VtZW50MywgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9
IE5lZWRUb1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxS
ZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVt
cFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRUeXBlMSwgQXJndW1lbnRU
eXBlMiwKKyAgICAgICAgICAgIEFyZ3VtZW50VHlwZTM+KAorICAgICAgICAgICAgICAgIGZyb20s
IGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0LCBhcmd1bWVudDEsIGFyZ3VtZW50MiwK
KyAgICAgICAgICAgICAgICBhcmd1bWVudDMpKTsKK30KKwordGVtcGxhdGU8CisgICAgdHlwZW5h
bWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwK
KyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBl
bmFtZSBBcmd1bWVudFR5cGUzLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQ+CitpbmxpbmUg
UGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBl
IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBS
ZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIg
YXJndW1lbnQyLAorICAgIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQzLCBBcmd1bWVudFR5cGU0IGFy
Z3VtZW50NCwKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3BpbGwp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZEZvdXJB
cmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBGdW5jdGlv
blR5cGUsIFJlc3VsdFR5cGUsIEFyZ3VtZW50VHlwZTEsIEFyZ3VtZW50VHlwZTIsCisgICAgICAg
ICAgICBBcmd1bWVudFR5cGUzLCBBcmd1bWVudFR5cGU0PigKKyAgICAgICAgICAgICAgICBmcm9t
LCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCwgYXJndW1lbnQxLCBhcmd1bWVudDIs
CisgICAgICAgICAgICAgICAgYXJndW1lbnQzLCBhcmd1bWVudDQpKTsKK30KKwordGVtcGxhdGU8
CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUg
UmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVu
dFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlw
ZTQsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTU+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdl
bmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklU
KiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJn
dW1lbnRUeXBlMSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAorICAgIEFyZ3Vt
ZW50VHlwZTMgYXJndW1lbnQzLCBBcmd1bWVudFR5cGU0IGFyZ3VtZW50NCwgQXJndW1lbnRUeXBl
NSBhcmd1bWVudDUsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRUb1Nw
aWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxSZXN1bHRBbmRG
aXZlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVu
Y3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5cGUxLCBBcmd1bWVudFR5cGUyLAorICAg
ICAgICAgICAgQXJndW1lbnRUeXBlMywgQXJndW1lbnRUeXBlNCwgQXJndW1lbnRUeXBlNT4oCisg
ICAgICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQsIGFy
Z3VtZW50MSwgYXJndW1lbnQyLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50MywgYXJndW1lbnQ0
LCBhcmd1bWVudDUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1l
IERlc3RpbmF0aW9uVHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZSwgdW5zaWduZWQgbnVtYmVyT2ZB
c3NpZ25tZW50cz4KK2NsYXNzIEFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1
bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZT4geworcHVibGljOgorICAgIEFzc2lnbmlu
Z1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgdG8sIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlvbltudW1iZXJPZkFzc2lnbm1l
bnRzXSwgU291cmNlVHlwZSBzb3VyY2VbbnVtYmVyT2ZBc3NpZ25tZW50c10pCisgICAgICAgIDog
SnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlPihmcm9tLCB0bykKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXNzaWdubWVudHM7IGktLTspIHsKKyAgICAg
ICAgICAgIG1fZGVzdGluYXRpb25baV0gPSBkZXN0aW5hdGlvbltpXTsKKyAgICAgICAgICAgIG1f
c291cmNlW2ldID0gc291cmNlW2ldOworICAgICAgICB9CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAg
ICB7CisgICAgICAgIHRoaXMtPmxpbmtGcm9tKGppdCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG51bWJlck9mQXNzaWdubWVudHM7IGktLTspCisgICAgICAgICAgICBqaXQtPm1faml0Lm1v
dmUobV9zb3VyY2VbaV0sIG1fZGVzdGluYXRpb25baV0pOworICAgICAgICB0aGlzLT5qdW1wVG8o
aml0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGVzdGluYXRpb25UeXBlIG1fZGVzdGluYXRp
b25bbnVtYmVyT2ZBc3NpZ25tZW50c107CisgICAgU291cmNlVHlwZSBtX3NvdXJjZVtudW1iZXJP
ZkFzc2lnbm1lbnRzXTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFt
ZSBEZXN0aW5hdGlvblR5cGUsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHVuc2lnbmVkIG51bWJlck9m
QXNzaWdubWVudHM+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1Bh
dGhNb3ZlKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIFNvdXJjZVR5
cGUgc291cmNlW251bWJlck9mQXNzaWdubWVudHNdLCBEZXN0aW5hdGlvblR5cGUgZGVzdGluYXRp
b25bbnVtYmVyT2ZBc3NpZ25tZW50c10pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAg
ICBuZXcgQXNzaWduaW5nU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwg
RGVzdGluYXRpb25UeXBlLCBTb3VyY2VUeXBlLCBudW1iZXJPZkFzc2lnbm1lbnRzPigKKyAgICAg
ICAgICAgICAgICBmcm9tLCBqaXQtPm1faml0LmxhYmVsKCksIGRlc3RpbmF0aW9uLCBzb3VyY2Up
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIERlc3RpbmF0aW9u
VHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZT4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPiBzbG93UGF0aE1vdmUoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQq
IGppdCwgU291cmNlVHlwZSBzb3VyY2UsIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlvbikKK3sK
KyAgICBTb3VyY2VUeXBlIHNvdXJjZUFycmF5WzFdID0geyBzb3VyY2UgfTsKKyAgICBEZXN0aW5h
dGlvblR5cGUgZGVzdGluYXRpb25BcnJheVsxXSA9IHsgZGVzdGluYXRpb24gfTsKKyAgICByZXR1
cm4gYWRvcHRQdHIoCisgICAgICAgIG5ldyBBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcjwKKyAg
ICAgICAgICAgIEp1bXBUeXBlLCBEZXN0aW5hdGlvblR5cGUsIFNvdXJjZVR5cGUsIDE+KAorICAg
ICAgICAgICAgICAgIGZyb20sIGppdC0+bV9qaXQubGFiZWwoKSwgZGVzdGluYXRpb25BcnJheSwg
c291cmNlQXJyYXkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1l
IERlc3RpbmF0aW9uVHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZT4KK2lubGluZSBQYXNzT3duUHRy
PFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aE1vdmUoCisgICAgSnVtcFR5cGUgZnJvbSwgU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgU291cmNlVHlwZSBzb3VyY2UxLCBEZXN0aW5hdGlvblR5cGUgZGVz
dGluYXRpb24xLCBTb3VyY2VUeXBlIHNvdXJjZTIsIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlv
bjIpCit7CisgICAgU291cmNlVHlwZSBzb3VyY2VBcnJheVsyXSA9IHsgc291cmNlMSwgc291cmNl
MiB9OworICAgIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlvbkFycmF5WzJdID0geyBkZXN0aW5h
dGlvbjEsIGRlc3RpbmF0aW9uMiB9OworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3
IEFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5cGUsIERlc3Rp
bmF0aW9uVHlwZSwgU291cmNlVHlwZSwgMj4oCisgICAgICAgICAgICAgICAgZnJvbSwgaml0LT5t
X2ppdC5sYWJlbCgpLCBkZXN0aW5hdGlvbkFycmF5LCBzb3VyY2VBcnJheSkpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEQoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR1Nsb3dQYXRoR2VuZXJhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
MTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAorI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNC
eXRlQXJyYXkuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMzU4LDYg
KzM1OSwzMyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5kCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2NsYXNzIFZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcgor
ICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcCwg
RF9ERkdPcGVyYXRpb25fRUosIEpTVmFsdWVSZWdzPiB7CitwdWJsaWM6CisgICAgVmFsdWVUb051
bWJlclNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9t
LCBTcGVjdWxhdGl2ZUpJVCogaml0LAorICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZEdQUiwgR1BSUmVnIGpzVmFsdWVUYWdHUFIsIEdQUlJlZyBqc1ZhbHVl
UGF5bG9hZEdQUikKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJs
ZXI6Okp1bXAsIERfREZHT3BlcmF0aW9uX0VKLCBKU1ZhbHVlUmVncz4oCisgICAgICAgICAgICBm
cm9tLCBqaXQsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIsIE5lZWRUb1NwaWxsLCBKU1ZhbHVl
UmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpKQorICAgICAgICAsIG1fanNWYWx1
ZVRhZ0dQUihqc1ZhbHVlVGFnR1BSKQorICAgICAgICAsIG1fanNWYWx1ZVBheWxvYWRHUFIoanNW
YWx1ZVBheWxvYWRHUFIpCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
dm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAg
ICBzZXRVcChqaXQpOworICAgICAgICByZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbihkZmdD
b252ZXJ0SlNWYWx1ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgbV9qc1ZhbHVl
VGFnR1BSLCBtX2pzVmFsdWVQYXlsb2FkR1BSKSk7CisgICAgICAgIGppdC0+Ym94RG91YmxlKEZQ
UkluZm86OnJldHVyblZhbHVlRlBSLCBtX3Jlc3VsdC50YWdHUFIoKSwgbV9yZXN1bHQucGF5bG9h
ZEdQUigpKTsKKyAgICAgICAgdGVhckRvd24oaml0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
R1BSUmVnIG1fanNWYWx1ZVRhZ0dQUjsKKyAgICBHUFJSZWcgbV9qc1ZhbHVlUGF5bG9hZEdQUjsK
K307CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihO
b2RlJiBub2RlKQogewogICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4
KCkpKSB7CkBAIC0zOTMsMjMgKzQyMSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVZhbHVlCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZykpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKIAotICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3
ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCi0gICAgSklUQ29tcGlsZXI6Okp1
bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIC8vIE5leHQgaGFuZGxl
IGNlbGxzICgmIG90aGVyIEpTIGltbWVkaWF0ZXMpCi0gICAgbm9uTnVtZXJpYy5saW5rKCZtX2pp
dCk7Ci0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXls
b2FkR1BSKTsKLSAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIsIEZQ
UkluZm86OnJldHVyblZhbHVlRlBSLCB0YWdHUFIsIHBheWxvYWRHUFIpOwotICAgIGJveERvdWJs
ZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9h
ZEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2FsbGVkVG9OdW1iZXIgPSBtX2ppdC5q
dW1wKCk7Ci0gICAgCi0gICAgLy8gRmluYWxseSwgaGFuZGxlIGludGVnZXJzLgogICAgIGlzSW50
ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CiAg
ICAgbV9qaXQubW92ZSh0YWdHUFIsIHJlc3VsdFRhZ0dQUik7CiAgICAgbV9qaXQubW92ZShwYXls
b2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBoYXNDYWxsZWRUb051bWJlci5saW5rKCZt
X2ppdCk7CisKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9wdFB0cihuZXcgVmFsdWVUb051
bWJlclNsb3dQYXRoR2VuZXJhdG9yKG5vbk51bWVyaWMsIHRoaXMsIHJlc3VsdFRhZ0dQUiwgcmVz
dWx0UGF5bG9hZEdQUiwgdGFnR1BSLCBwYXlsb2FkR1BSKSkpOworCiAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCkBAIC00MzIsMTMgKzQ0OSwxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgICAgIEZQUlJlZyBmcHIgPSBv
cDEuZnByKCk7CiAgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIG9w
MS51c2UoKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0g
bV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6
QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIo
ZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKIAotICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKHRv
SW50MzIsIGdwciwgZnByKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwor
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9J
bnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwogCi0gICAgICAgIHRydW5jYXRlZFRv
SW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBtX2NvbXBp
bGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTQ1MCwxOSArNDY0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlVmFsdWUKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIG9w
MS51c2UoKTsKIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKTsKLQotICAgIC8vIEZpcnN0IGhhbmRsZSBub24taW50ZWdlcnMKLSAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIGNhbGxPcGVyYXRpb24oZGZnQ29u
dmVydEpTVmFsdWVUb0ludDMyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgdGFnR1BSLCBwYXls
b2FkR1BSKTsKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBoYXNDYWxsZWRUb0ludDMyID0gbV9qaXQuanVtcCgpOworICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzTm90SW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKIAotICAg
IC8vIFRoZW4gaGFuZGxlIGludGVnZXJzLgotICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CiAg
ICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHUFIpOwotICAgIGhhc0NhbGxlZFRvSW50
MzIubGluaygmbV9qaXQpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChpc05vdEludGVnZXIsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0
R1BSLCB0YWdHUFIsIHBheWxvYWRHUFIpKTsKKyAgICAKICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAK
QEAgLTQ5Myw3ICs1MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJ
bnQzCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotSklUQ29tcGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVRhZ0dQ
Uk9yTm9uZSwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVy
c01vZGUgc3BpbGxNb2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBh
eWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6
Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCiB7CiAg
ICAgbV9qaXQuYmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKTsKICAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKQEAgLTUwNCwzMiArNTExLDUwIEBAIEpJ
VENvbXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWQKICAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsQ29tcGFjdCB0YWdMb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZDMyV2l0aENvbXBh
Y3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwg
cmVzdWx0VGFnR1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBwYXlsb2Fk
TG9hZFdpdGhQYXRjaCA9IG1faml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNo
KEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWRHUFIsIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BS
KTsKICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0g
ICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQpOwotICAgIAotICAgIGlmIChzbG93UGF0aFRh
cmdldC5pc1NldCgpKQotICAgICAgICBzbG93UGF0aFRhcmdldC5saW5rKCZtX2ppdCk7Ci0gICAg
Ci0gICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dDYXNlID0gbV9qaXQubGFiZWwoKTsKLQotICAg
IGlmIChzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgZnVuY3Rpb25DYWxsOwotICAgIGlmIChiYXNlVGFnR1BST3JOb25lID09IEludmFsaWRH
UFJSZWcpCi0gICAgICAgIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIEpTVmFsdWU6OkNl
bGxUYWcsIGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGJhc2VUYWdHUFJP
ck5vbmUsIGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKLSAg
ICBpZiAoc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQotICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgCi0gICAgZG9uZS5s
aW5rKCZtX2ppdCk7Ci0gICAgCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1f
aml0LmxhYmVsKCk7CiAKLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vz
c1JlY29yZChjb2RlT3JpZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3Ry
dWN0dXJlQ2hlY2ssIHRhZ0xvYWRXaXRoUGF0Y2gsIHBheWxvYWRMb2FkV2l0aFBhdGNoLCBzbG93
Q2FzZSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VQYXlsb2FkR1BSKSwgc2FmZUNh
c3Q8aW50OF90PihyZXN1bHRUYWdHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHJlc3VsdFBheWxvYWRH
UFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpLCBzcGlsbE1vZGUgPT0gTmVlZFRvU3Bp
bGwgPyBQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJzSW5Vc2UgOiBQcm9wZXJ0eUFjY2Vz
c1JlY29yZDo6UmVnaXN0ZXJzRmx1c2hlZCkpOwotICAgIAotICAgIHJldHVybiBmdW5jdGlvbkNh
bGw7CisgICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICBpZiAoYmFz
ZVRhZ0dQUk9yTm9uZSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGlmICghc2xvd1BhdGhU
YXJnZXQuaXNTZXQoKSkgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICAgICAgc3RydWN0dXJlQ2hlY2ssIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KEpTVmFsdWU6
OkNlbGxUYWcpLCBiYXNlUGF5bG9hZEdQUiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyKGlk
ZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0
cnVjdHVyZUNoZWNrKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJn
ZXQpOworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsCisgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwKKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSwgYmFzZVBh
eWxvYWRHUFIsCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0Lmlz
U2V0KCkpIHsKKyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUNoZWNrLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsCisg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
KSwgYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIsCisgICAgICAgICAgICAgICAgaWRl
bnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChzdHJ1Y3R1cmVDaGVjayk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNs
b3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAor
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQ
UiksIGJhc2VUYWdHUFJPck5vbmUsIGJhc2VQYXlsb2FkR1BSLAorICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9CisgICAgfQorICAgIG1faml0
LmFkZFByb3BlcnR5QWNjZXNzKAorICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKKyAgICAg
ICAgICAgIGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCisg
ICAgICAgICAgICB0YWdMb2FkV2l0aFBhdGNoLCBwYXlsb2FkTG9hZFdpdGhQYXRjaCwgc2xvd1Bh
dGguZ2V0KCksIGRvbmVMYWJlbCwKKyAgICAgICAgICAgIHNhZmVDYXN0PGludDhfdD4oYmFzZVBh
eWxvYWRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHJlc3VsdFRhZ0dQUiksCisgICAgICAgICAgICBz
YWZlQ2FzdDxpbnQ4X3Q+KHJlc3VsdFBheWxvYWRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0
Y2hHUFIpLAorICAgICAgICAgICAgc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsID8gUHJvcGVydHlB
Y2Nlc3NSZWNvcmQ6OlJlZ2lzdGVyc0luVXNlIDogUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lz
dGVyc0ZsdXNoZWQpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNl
KCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQ
UlJlZyB2YWx1ZVBheWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpK
dW1wIHNsb3dQYXRoVGFyZ2V0KQpAQCAtNTQ1LDE2ICs1NzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHRh
Z1N0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFs
dWVUYWdHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWwzMiBwYXlsb2FkU3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCkpKTsKIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
Ci0KLSAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAoc2xvd1BhdGhU
YXJnZXQuaXNTZXQoKSkKLSAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOwotCi0g
ICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dDYXNlID0gbV9qaXQubGFiZWwoKTsKLQotICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIEpJVENvbXBpbGVyOjpM
YWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwogICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kg
b3B0aW1pemVkQ2FsbDsKICAgICBpZiAobV9qaXQuc3RyaWN0TW9kZUZvcihhdChtX2NvbXBpbGVJ
bmRleCkuY29kZU9yaWdpbikpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQpAQCAt
NTY3LDEzICs1ODMsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2Rl
TwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5j
dGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wdGltaXplZENhbGwsIHZhbHVlVGFnR1BSLCB2YWx1
ZVBheWxvYWRHUFIsIGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIp
KTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotCi0gICAgZG9u
ZS5saW5rKCZtX2ppdCk7Ci0gICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0
LmxhYmVsKCk7Ci0KLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vzc1Jl
Y29yZChjb2RlT3JpZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0
dXJlQ2hlY2ssIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHRhZ1N0b3JlV2l0aFBhdGNo
LmxhYmVsKCkpLCBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChwYXlsb2FkU3RvcmVXaXRo
UGF0Y2gubGFiZWwoKSksIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFz
ZVBheWxvYWRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVlVGFnR1BSKSwgc2FmZUNhc3Q8aW50
OF90Pih2YWx1ZVBheWxvYWRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7Cisg
ICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICBpZiAoIXNsb3dQYXRo
VGFyZ2V0LmlzU2V0KCkpIHsKKyAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAg
ICAgICAgICBzdHJ1Y3R1cmVDaGVjaywgdGhpcywgb3B0aW1pemVkQ2FsbCwgSW52YWxpZEdQUlJl
ZywgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwKKyAgICAgICAgICAgIGJhc2VQYXlsb2Fk
R1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKHN0cnVjdHVyZUNoZWNrKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRh
cmdldCk7CisgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBJbnZhbGlkR1BSUmVnLCB2YWx1ZVRhZ0dQUiwg
dmFsdWVQYXlsb2FkR1BSLAorICAgICAgICAgICAgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXIo
aWRlbnRpZmllck51bWJlcikpOworICAgIH0KKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygK
KyAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoCisgICAgICAgICAgICBjb2RlT3JpZ2luLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLAorICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbENvbXBhY3QodGFnU3RvcmVXaXRoUGF0Y2gubGFiZWwoKSksCisgICAgICAg
ICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChwYXlsb2FkU3RvcmVXaXRoUGF0Y2gu
bGFiZWwoKSksCisgICAgICAgICAgICBzbG93UGF0aC5nZXQoKSwgZG9uZUxhYmVsLCBzYWZlQ2Fz
dDxpbnQ4X3Q+KGJhc2VQYXlsb2FkR1BSKSwKKyAgICAgICAgICAgIHNhZmVDYXN0PGludDhfdD4o
dmFsdWVUYWdHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVlUGF5bG9hZEdQUiksCisgICAgICAg
ICAgICBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7CisgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZl
cnQpCkBAIC03NDQsNiArNzc1LDQyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlUGVlcGgKICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CitjbGFzcyBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQ
YXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBl
LCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4geworcHVibGljOgorICAgIENvbXBhcmVBbmRC
b3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1
bGF0aXZlSklUKiBqaXQsCisgICAgICAgIFNfREZHT3BlcmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwKKyAgICAgICAg
R1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICAgICAgOiBDYWxsU2xvd1Bh
dGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAg
ICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRUb1NwaWxsLCByZXN1bHQpCisgICAgICAg
ICwgbV9hcmcxVGFnKGFyZzFUYWcpCisgICAgICAgICwgbV9hcmcxUGF5bG9hZChhcmcxUGF5bG9h
ZCkKKyAgICAgICAgLCBtX2FyZzJUYWcoYXJnMlRhZykKKyAgICAgICAgLCBtX2FyZzJQYXlsb2Fk
KGFyZzJQYXlsb2FkKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAg
ICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoCisgICAgICAg
ICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgdGhpcy0+bV9mdW5jdGlv
biwgdGhpcy0+bV9yZXN1bHQsIG1fYXJnMVRhZywgbV9hcmcxUGF5bG9hZCwgbV9hcmcyVGFnLAor
ICAgICAgICAgICAgICAgIG1fYXJnMlBheWxvYWQpKTsKKyAgICAgICAgaml0LT5tX2ppdC5hbmQz
MihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCB0aGlzLT5tX3Jlc3VsdCk7CisgICAgICAg
IHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAgfQorICAgCitwcml2YXRlOgorICAgIEdQUlJlZyBt
X2FyZzFUYWc7CisgICAgR1BSUmVnIG1fYXJnMVBheWxvYWQ7CisgICAgR1BSUmVnIG1fYXJnMlRh
ZzsKKyAgICBHUFJSZWcgbV9hcmcyUGF5bG9hZDsKK307CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJG
dW5jdGlvbikKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwpAQCAtNzgxLDE3ICs4NDgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZQogICAgICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFy
ZzJQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAKICAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8ICFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMigpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZl
UmVzdWx0ID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgICAgICAgICAgc2xvd1BhdGgubGluaygm
bV9qaXQpOwotICAgICAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlv
biwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdH
UFIsIGFyZzJQYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYW5kUHRyKFRy
dXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIAotICAgICAgICAgICAg
aGF2ZVJlc3VsdC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihhZG9wdFB0cigKKyAgICAgICAgICAgICAgICBuZXcgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93
UGF0aEdlbmVyYXRvcjxKSVRDb21waWxlcjo6SnVtcExpc3Q+KAorICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCwgdGhpcywgaGVscGVyRnVuY3Rpb24sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFU
YWdHUFIsCisgICAgICAgICAgICAgICAgICAgIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBh
cmcyUGF5bG9hZEdQUikpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbGVhblJl
c3VsdChyZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKQEAgLTg2Nyw2ICs5MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlCiAgICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAvLyBz
ZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSBy
ZWZlcmVuY2UgdGhlIHNhbWUKICAgICAgICAgLy8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3Ry
aWN0bHkgZXF1YWwuCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBmbHVzaCByZWdpc3Rl
cnMgaW5zdGVhZCBvZiBzaWxlbnQgc3BpbGwvZmlsbC4KICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
YXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSKTsKICAgICAgICAgCiAgICAgICAgIG1faml0
Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMighaW52ZXJ0KSwgcmVzdWx0UGF5bG9hZEdQ
Uik7CkBAIC0xNjY0LDE3ICsxNzI1LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dpY2FsTm90KE4KICAgICAgICAgCiAgICAgYXJnMS51c2UoKTsKIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wIGZhc3RDYXNlID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcx
VGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwotICAgICAgICAKLSAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcx
VGFnR1BSLCBhcmcxUGF5bG9hZEdQUik7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRQYXlsb2FkR1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBkb05vdCA9IG1faml0Lmp1bXAo
KTsKLSAgICAgICAgCi0gICAgZmFzdENhc2UubGluaygmbV9qaXQpOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBh
cmcxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworICAgIAogICAg
IG1faml0Lm1vdmUoYXJnMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogCi0gICAgZG9O
b3QubGluaygmbV9qaXQpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVU
b0Jvb2xlYW4sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsCisgICAgICAgICAgICBhcmcx
UGF5bG9hZEdQUikpOworICAgIAogICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVz
dWx0UGF5bG9hZEdQUik7CiAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBtX2Nv
bXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KQEAgLTI1MDksMTUg
KzI1NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdpdGhpbkFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAg
ICAvLyBDb2RlIHRvIGhhbmRsZSBwdXQgYmV5b25kIGFycmF5IGJvdW5kcy4KLSAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaFJlZyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
bV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2Fk
UmVnKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoUmVnKTsKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgd2FzQmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5qdW1wKCk7
Ci0KLSAgICAgICAgd2l0aGluQXJyYXlCb3VuZHMubGluaygmbV9qaXQpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogCiAgICAgICAg
IC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
Y3JhdGNoUmVnOwpAQCAtMjUzOSw4ICsyNTkwLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJh
eS4KICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIo
dmFsdWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSk7Ci0KLSAgICAgICAgd2FzQmV5b25kQXJyYXlCb3VuZHMubGluaygmbV9q
aXQpOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRoaXMs
CisgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgSW52YWxpZEdQUlJl
ZywgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsK
IAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKICAgICAgICAgYnJlYWs7CkBAIC0yNzMxLDE1ICsyNzg2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgc3RvcmFnZUdQUik7CiAg
ICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OwotICAgICAgICAKLSAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgICAgICAKLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
Uik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQdXNoLCBzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBiYXNlR1BS
KTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bkFycmF5UHVzaCwgSlNWYWx1ZVJlZ3Moc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiksIHZh
bHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAgICAg
IGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKQEAgLTI3NjQsNyArMjgxMSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9y
YWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZW1w
dHlBcnJheUNhc2UgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZp
bmVkQ2FzZXM7CisgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIApAQCAtMjc3NSwzMCArMjgyMywyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwogCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGhvbGVDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BSKTsKKyAg
ICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCB2YWx1ZVRh
Z0dQUikpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZyksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSk7CiAKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIAotICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAKLSAgICAgICAgaG9sZUNhc2UubGluaygmbV9q
aXQpOwotICAgICAgICBlbXB0eUFycmF5Q2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwg
dmFsdWVUYWdHUFIpOwotICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIpOwotICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2Uu
bGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
dmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQXJyYXlQb3AsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIpOwot
ICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRH
UFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAorICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAg
ICAgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkudGFnKCkpLCB2YWx1ZVRh
Z0dQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5k
ZWZpbmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXlsb2FkR1BSKSk7CisgICAgICAgIAorICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsCisgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIp
KTsKKwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIs
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjkxNCwyMiArMjk1
NSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKG9wMVRhZ0dQUiwgcmVzdWx0VGFnR1BSKTsKICAgICAgICAgICAgIG1f
aml0Lm1vdmUob3AxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgYWxyZWFkeVByaW1pdGl2
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5h
cHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AxUGF5bG9hZEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU1N0cmluZzo6c19pbmZvKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIs
IHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
b1ByaW1pdGl2ZSwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBvcDFUYWdHUFIsIG9w
MVBheWxvYWRHUFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Mob3AxUGF5bG9hZEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU1N0cmluZzo6c19pbmZvKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAg
bV9qaXQubW92ZShvcDFUYWdHUFIsIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKG9wMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
bm90UHJpbWl0aXZlLCB0aGlzLCBvcGVyYXRpb25Ub1ByaW1pdGl2ZSwKKyAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgb3AxVGFn
R1BSLCBvcDFQYXlsb2FkR1BSKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTMwOTYsMTggKzMxMzIsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OwotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpc0lubGluZWQsIHJlc3VsdEdQUiwg
cHJvdG9HUFIsIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRl
VGhpcywgcmVzdWx0R1BSLCBwcm90b0dQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
ICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpc0lubGlu
ZWQsIHJlc3VsdEdQUiwgcHJvdG9HUFIsCisgICAgICAgICAgICAgICAgICAgIG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIHBy
b3RvR1BSKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAg
ICAgYnJlYWs7CkBAIC0zMTI0LDE1ICszMTU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgZW1pdEFsbG9jYXRlSlNGaW5hbE9i
amVjdChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Io
bm9kZS5jb2RlT3JpZ2luKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHNsb3dQYXRoLmxpbmso
Jm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRH
UFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAg
IAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3Vs
dEdQUikpOwogICAgICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzQyLDE0ICszNzY3LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0UGF5bG9hZEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJ
VENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwg
SklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCB3YXNGYXN0ID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIHN0cnVj
dHVyZXNOb3RNYXRjaC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUmVzb2x2ZUdsb2JhbCwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
LCByZXNvbHZlSW5mb0dQUiwgJm1faml0LmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGRhdGEuaWRl
bnRpZmllck51bWJlcikpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0KLSAgICAgICAgd2FzRmFzdC5saW5rKCZtX2ppdCk7
CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZXNOb3RNYXRjaCwgdGhpcywgb3BlcmF0aW9uUmVz
b2x2ZUdsb2JhbCwKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpLCByZXNvbHZlSW5mb0dQUiwKKyAgICAgICAgICAgICAgICAmbV9qaXQu
Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSkpOwogCiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc2NSwxMyArMzc4NywxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBtX2pp
dC5tb3ZlKHZhbHVlUGF5bG9hZEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGFscmVhZHlDcmVhdGVkID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbiwg
cmVzdWx0R1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoMzIoSklU
Q29tcGlsZXI6OkVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKTsKICAgICAgICAgCi0gICAgICAgIGFscmVhZHlDcmVhdGVkLmxpbmsoJm1faml0
KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENh
bGwobm90Q3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbiwgcmVzdWx0R1BS
KSk7CiAgICAgICAgIAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3ODMsMTMgKzM4MDIsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIg
PSB2YWx1ZS50YWdHUFIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVl
LnBheWxvYWRHUFIoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENy
ZWF0ZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgICAgICAKLSAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24sIHZhbHVlUGF5bG9hZEdQUik7Ci0gICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1
YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwog
ICAgICAgICAKLSAgICAgICAgbm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAg
ICAgIGNyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvblRlYXJPZmZBY3RpdmF0aW9uLCBJbnZhbGlkR1BS
UmVnLCB2YWx1ZVBheWxvYWRHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zODA5LDE0ICszODI2LDEyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1f
aml0Lm1vdmUodmFsdWVQYXlsb2FkR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgYWxyZWFkeUNyZWF0ZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgIG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCByZXN1bHRHUFIsIG1faml0LmNvZGVCbG9jaygpLT5mdW5jdGlvbkRlY2wobm9k
ZS5mdW5jdGlvbkRlY2xJbmRleCgpKSk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0
LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAgICAgICAgIAotICAgICAgICBhbHJlYWR5Q3JlYXRl
ZC5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJh
dGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsCisgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmZ1bmN0aW9uRGVjbChub2RlLmZ1bmN0aW9uRGVjbEluZGV4KCkpKSk7CiAgICAgICAg
IAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAg
KzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVK
SVQuaCIKIAotI2luY2x1ZGUgIkpTQnl0ZUFycmF5LmgiCi0KICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNCeXRlQXJy
YXkuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKQEAgLTM1OCw2ICszNTksMzEgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNW
YWx1ZShOb2RlSQogICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCitjbGFzcyBWYWx1ZVRv
TnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0
b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXAsIERfREZHT3BlcmF0aW9uX0VKLCBHUFJSZWc+IHsKK3B1
YmxpYzoKKyAgICBWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIsIEdQUlJlZyBqc1ZhbHVlR1BSKQorICAgICAgICA6IENhbGxTbG93UGF0aEdl
bmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgRF9ERkdPcGVyYXRpb25fRUosIEdQUlJlZz4o
CisgICAgICAgICAgICBmcm9tLCBqaXQsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIsIE5lZWRU
b1NwaWxsLCByZXN1bHRHUFIpCisgICAgICAgICwgbV9qc1ZhbHVlR1BSKGpzVmFsdWVHUFIpCisg
ICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUludGVy
bmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICBzZXRVcChqaXQpOworICAg
ICAgICByZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvTnVt
YmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgbV9qc1ZhbHVlR1BSKSk7CisgICAgICAgIGpp
dC0+Ym94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBtX3Jlc3VsdCk7CisgICAgICAg
IHRlYXJEb3duKGppdCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdQUlJlZyBtX2pzVmFsdWVH
UFI7Cit9OworCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1i
ZXIoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKS5p
bmRleCgpKSkgewpAQCAtMzg1LDE5ICs0MTEsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVWYWx1ZQogICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgZ3ByKTsKICAgICBK
SVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCi0gICAg
Ly8gTmV4dCBoYW5kbGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKLSAgICBub25OdW1l
cmljLmxpbmsoJm1faml0KTsKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAg
IGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb051bWJlciwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIGpzVmFsdWVHcHIpOwotICAgIGJveERvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwgZ3ByKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgSklUQ29t
cGlsZXI6Okp1bXAgaGFzQ2FsbGVkVG9OdW1iZXIgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCiAgICAg
Ly8gRmluYWxseSwgaGFuZGxlIGludGVnZXJzLgogICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7
CiAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBqc1ZhbHVl
R3ByLCBncHIpOwogICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwotICAgIGhhc0Nh
bGxlZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihhZG9wdFB0cihuZXcgVmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKG5vbk51bWVyaWMs
IHRoaXMsIGdwciwganNWYWx1ZUdwcikpKTsKICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9
CkBAIC00MjEsMTMgKzQ0MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVZhbHVlCiAgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7CiAgICAgICAgIEdQUlJlZyBn
cHIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIG9wMS51c2UoKTsKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVU
b0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwp
OwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCBncHIsIGZwcik7Ci0gICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoZ3ByKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVk
VG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBK
SVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CiAgICAgICAgIAotICAgICAgICB0
cnVuY2F0ZWRUb0ludGVnZXIubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRo
aXMsIHRvSW50MzIsIGdwciwgZnByKSk7CisKICAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtNDM4LDE4ICs0NTUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVWYWx1ZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAg
ICAgb3AxLnVzZSgpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBGaXJzdCBoYW5kbGUgbm9uLWlu
dGVnZXJzCi0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBjYWxs
T3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BSLCBqc1ZhbHVlR3By
KTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGls
ZXI6Okp1bXAgaGFzQ2FsbGVkVG9JbnQzMiA9IG1faml0Lmp1bXAoKTsKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBpc05vdEludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCi0gICAg
Ly8gVGhlbiBoYW5kbGUgaW50ZWdlcnMuCi0gICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKICAg
ICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihqc1ZhbHVlR3ByLCByZXN1bHRHUFIpOwotICAgIGhh
c0NhbGxlZFRvSW50MzIubGluaygmbV9qaXQpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICBzbG93UGF0aENhbGwoaXNOb3RJbnRlZ2VyLCB0aGlzLCBkZmdDb252ZXJ0
SlNWYWx1ZVRvSW50MzIsIHJlc3VsdEdQUiwganNWYWx1ZUdwcikpOworCiAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogfQogCkBAIC00NzcsNyArNDg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVVSW50MwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiB9CiAKLUpJVENvbXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRC
eUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQogewogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVj
dHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CkBAIC00ODUsMzEgKzQ5NywzMSBAQCBKSVRDb21waWxl
cjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkCiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2Uo
KSksIHJlc3VsdEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9hZFdp
dGhQYXRjaCA9IG1faml0LmxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRD
b21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIDApLCByZXN1bHRHUFIpOwogICAgIAotICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICBzdHJ1Y3R1cmVDaGVj
ay5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0g
ICAgICAgIHNsb3dQYXRoVGFyZ2V0LmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxl
cjo6TGFiZWwgc2xvd0Nhc2UgPSBtX2ppdC5sYWJlbCgpOwotCi0gICAgaWYgKHNwaWxsTW9kZSA9
PSBOZWVkVG9TcGlsbCkKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0R1BSLCBiYXNlR1BSLCBpZGVudGlmaWVyKGlk
ZW50aWZpZXJOdW1iZXIpKTsKLSAgICBpZiAoc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQotICAg
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgCi0gICAgZG9uZS5s
aW5rKCZtX2ppdCk7Ci0gICAgCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1f
aml0LmxhYmVsKCk7Ci0KLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vz
c1JlY29yZChjb2RlT3JpZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3Ry
dWN0dXJlQ2hlY2ssIGxvYWRXaXRoUGF0Y2gsIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0
PGludDhfdD4oYmFzZUdQUiksIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0R1BSKSwgc2FmZUNhc3Q8
aW50OF90PihzY3JhdGNoR1BSKSwgc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsID8gUHJvcGVydHlB
Y2Nlc3NSZWNvcmQ6OlJlZ2lzdGVyc0luVXNlIDogUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lz
dGVyc0ZsdXNoZWQpKTsKICAgICAKKyAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQ
YXRoOworICAgIGlmICghc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkgeworICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNrLCB0aGlzLCBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdEdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAgIGlk
ZW50aWZpZXIoaWRlbnRpZmllck51bWJlciksIHNwaWxsTW9kZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChzdHJ1Y3R1cmVDaGVjayk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1Bh
dGhUYXJnZXQpOworICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRHUFIsIGJh
c2VHUFIsCisgICAgICAgICAgICBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpLCBzcGlsbE1v
ZGUpOworICAgIH0KKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygKKyAgICAgICAgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQoCisgICAgICAgICAgICBjb2RlT3JpZ2luLCBzdHJ1Y3R1cmVUb0NvbXBh
cmUsIHN0cnVjdHVyZUNoZWNrLCBsb2FkV2l0aFBhdGNoLCBzbG93UGF0aC5nZXQoKSwKKyAgICAg
ICAgICAgIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50
OF90PihyZXN1bHRHUFIpLAorICAgICAgICAgICAgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BS
KSwKKyAgICAgICAgICAgIHNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCA/IFByb3BlcnR5QWNjZXNz
UmVjb3JkOjpSZWdpc3RlcnNJblVzZSA6IFByb3BlcnR5QWNjZXNzUmVjb3JkOjpSZWdpc3RlcnNG
bHVzaGVkKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsK
KwogICAgIGlmIChzY3JhdGNoR1BSICE9IHJlc3VsdEdQUiAmJiBzY3JhdGNoR1BSICE9IEludmFs
aWRHUFJSZWcgJiYgc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQogICAgICAgICB1bmxvY2soc2Ny
YXRjaEdQUik7Ci0gICAgCi0gICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBi
YXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BS
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQpAQCAtNTIzLDE2ICs1MzUsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSks
IHNjcmF0Y2hHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRj
aCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsK
LQotICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQotICAgICAgICBzbG93UGF0aFRhcmdl
dC5saW5rKCZtX2ppdCk7Ci0KLSAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2UgPSBtX2pp
dC5sYWJlbCgpOwotCi0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7
CisgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CisgICAg
CiAgICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5z
dHJpY3RNb2RlRm9yKGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKSkgewogICAgICAgICBp
ZiAocHV0S2luZCA9PSBEaXJlY3QpCkBAIC01NDUsMTMgKzU0OSwyMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG9w
dGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0aW1p
emVkQ2FsbCwgdmFsdWVHUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikp
OwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0KLSAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQu
bGFiZWwoKTsKLQotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVj
b3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1
cmVDaGVjaywgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3Qoc3RvcmVXaXRoUGF0Y2gubGFi
ZWwoKSksIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZUdQUiksIHNh
ZmVDYXN0PGludDhfdD4odmFsdWVHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7
CisgICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICBpZiAoIXNsb3dQ
YXRoVGFyZ2V0LmlzU2V0KCkpIHsKKyAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICBzdHJ1Y3R1cmVDaGVjaywgdGhpcywgb3B0aW1pemVkQ2FsbCwgSW52YWxpZEdQ
UlJlZywgdmFsdWVHUFIsIGJhc2VHUFIsCisgICAgICAgICAgICBpZGVudGlmaWVyKGlkZW50aWZp
ZXJOdW1iZXIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrKTsKKyAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7CisgICAgICAgIHNsb3dQYXRo
ID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcHRpbWl6ZWRD
YWxsLCBJbnZhbGlkR1BSUmVnLCB2YWx1ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAgIGlkZW50
aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgIH0KKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFj
Y2VzcyhQcm9wZXJ0eUFjY2Vzc1JlY29yZChjb2RlT3JpZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUs
IHN0cnVjdHVyZUNoZWNrLCBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChzdG9yZVdpdGhQ
YXRjaC5sYWJlbCgpKSwgc2xvd1BhdGguZ2V0KCksIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90
PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50OF90Pih2YWx1ZUdQUiksIHNhZmVDYXN0PGludDhfdD4o
c2NyYXRjaEdQUikpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNl
KCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGludmVydCkKQEAgLTcxOCw2ICs3MzAsMzUg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIG1fY29tcGls
ZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlw
ZT4KK2NsYXNzIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1
YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwg
R1BSUmVnPiB7CitwdWJsaWM6CisgICAgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwKKyAgICAg
ICAgU19ERkdPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBl
LCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4oCisgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1
bmN0aW9uLCBOZWVkVG9TcGlsbCwgcmVzdWx0KQorICAgICAgICAsIG1fYXJnMShhcmcxKQorICAg
ICAgICAsIG1fYXJnMihhcmcyKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7
CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoaml0
LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZzEs
IG1fYXJnMikpOworICAgICAgICBqaXQtPm1faml0LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoMSksIHRoaXMtPm1fcmVzdWx0KTsKKyAgICAgICAgaml0LT5tX2ppdC5vcjMyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHRoaXMtPm1fcmVzdWx0KTsKKyAgICAg
ICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisgICAKK3ByaXZhdGU6CisgICAgR1BSUmVn
IG1fYXJnMTsKKyAgICBHUFJSZWcgbV9hcmcyOworfTsKKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1
bmN0aW9uKQogewogICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CkBAIC03NTIsMjMgKzc5MywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZU5vblBlCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CiAgICAgCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BS
LCByZXN1bHRHUFIpOwotICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkp
IHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1w
KCk7Ci0gICAgCi0gICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAot
ICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJn
MkdQUik7Ci0gICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0g
ICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYW5kUHRyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0KTsKLSAg
ICAgICAgfQotICAgICAgICAKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CiAgICAgICAgIAorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkpIHsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFkb3B0UHRyKAor
ICAgICAgICAgICAgICAgIG5ldyBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9y
PEpJVENvbXBpbGVyOjpKdW1wTGlzdD4oCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0
aGlzLCBoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKSkpOworICAg
ICAgICB9CisKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAg
IH0KIH0KQEAgLTg1Niw2ICs4ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZU5vblBlCiAgICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgJiYg
aXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAvLyBzZWUgaWYg
d2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVu
Y2UgdGhlIHNhbWUKICAgICAgICAgLy8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkg
ZXF1YWwuCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBmbHVzaCByZWdpc3RlcnMgaW5z
dGVhZCBvZiBzaWxlbnQgc3BpbGwvZmlsbC4KICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQ
UiwgYXJnMkdQUik7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWludmVydCkpKSwgcmVzdWx0
R1BSKTsKQEAgLTg3NSw0MSArOTA4LDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGUKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5vclB0cihhcmcxR1BSLCBh
cmcyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IHNsb3dQYXRoQ2FzZXM7CisgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0
d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1
bHRHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBsZWZ0T0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3Zl
T3JFcXVhbCwgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklU
Q29tcGlsZXI6Ok5vblplcm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoSklU
Q29tcGlsZXI6Ok5vblplcm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOwogICAgICAgICBsZWZ0T0subGluaygmbV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCByaWdodE9LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWws
IGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHJpZ2h0RG91YmxlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxl
cjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAg
ICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxl
cjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAg
ICAgICAgIHJpZ2h0T0subGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuY29t
cGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1
YWwsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm9yMzIoSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUxID0gbV9qaXQuanVtcCgpOworICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAg
ICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJn
MUdQUiwgYXJnMkdQUik7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTIgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgYWRvcHRQdHIoCisgICAgICAgICAgICAgICAg
bmV3IENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0PigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYXNlcywgdGhpcywgb3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHRHUFIsIGFyZzFHUFIsCisgICAgICAgICAgICAg
ICAgICAgIGFyZzJHUFIpKSk7CiAgICAgICAgIAotICAgICAgICBsZWZ0RG91YmxlLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgcmlnaHREb3VibGUubGluaygmbV9qaXQpOwotICAgICAgICBub3RFcXVh
bENhc2UubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmFuZFB0
cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotCi0gICAgICAgIGRv
bmUxLmxpbmsoJm1faml0KTsKLQotICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25l
Mi5saW5rKCZtX2ppdCk7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0KICAgICAK
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRK
U0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0xNzY2LDEzICsxNzky
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAKICAg
ICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7CiAgICAgbV9qaXQueG9yUHRyKFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Ci0g
ICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdENhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKTsKLSAgICAKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwot
ICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwg
YXJnMUdQUik7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxl
cjo6Tm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSk7CiAgICAgCi0gICAgZmFzdENhc2UubGluaygmbV9qaXQpOworICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIpKTsKICAgICAKICAgICBtX2pp
dC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCBy
ZXN1bHRHUFIpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwg
RGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTI1
NDUsMTUgKzI1NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdpdGhpbkFycmF5Qm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQot
ICAgICAgICAvLyBDb2RlIHRvIGhhbmRsZSBwdXQgYmV5b25kIGFycmF5IGJvdW5kcy4KLSAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaFJlZyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24obV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNOb25TdHJpY3QsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZyk7Ci0gICAgICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaFJlZyk7Ci0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIHdhc0JleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIHdp
dGhpbkFycmF5Qm91bmRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKIAogICAgICAgICAvLyBHZXQgdGhlIGFy
cmF5IHN0b3JhZ2UuCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKQEAg
LTI1NzUsNyArMjU5MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCi0gICAgICAgIHdhc0JleW9uZEFycmF5
Qm91bmRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMs
IHRoaXMsCisgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgSW52YWxp
ZEdQUlJlZywgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAKICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMjc2MiwxNSArMjc4MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAg
ICAgIAotICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2gsIHN0b3JhZ2VMZW5ndGhHUFIsIHZhbHVlR1BSLCBi
YXNlR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhzdG9yYWdlTGVuZ3RoR1BS
KTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBJbnZhbGlkR1BSUmVnLCBzdG9y
YWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CiAgICAg
ICAgIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0yNzkzLDcgKzI4MDcsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3Rv
cmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGVt
cHR5QXJyYXlDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVm
aW5lZENhc2VzOworICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIp
OwogICAgICAgICAKQEAgLTI4MDMsMjggKzI4MTgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKIAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBob2xlQ2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHZhbHVlR1BSKTsKKyAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKSk7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigw
KSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSkpOwogICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIAotICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAKLSAgICAgICAgaG9sZUNhc2Uu
bGluaygmbV9qaXQpOwotICAgICAgICBlbXB0eUFycmF5Q2FzZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpOwotICAgICAgICBkb25lLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwotICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOwotICAg
ICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModmFsdWVHUFIpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUik7Ci0g
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModmFsdWVHUFIpOwotICAgICAgICAKLSAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAorICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICBzZXRVbmRl
ZmluZWRDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAg
ICAgICAKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9w
LCB2YWx1ZUdQUiwgYmFzZUdQUikpOworCiAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIs
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjkyNCwyMSArMjkz
MSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUgJiB+KFByZWRpY3RO
dW1iZXIgfCBQcmVkaWN0Qm9vbGVhbikpKQogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIs
IHJlc3VsdEdQUik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGFscmVhZHlQcmltaXRpdmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFs
cmVhZHlQcmltaXRpdmUuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAg
ICBhbHJlYWR5UHJpbWl0aXZlLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNTdHJpbmc6OnNfaW5m
bykpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9QcmltaXRp
dmUsIHJlc3VsdEdQUiwgb3AxR1BSKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpT
Q2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigm
SlNTdHJpbmc6OnNfaW5mbykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhbHJlYWR5UHJp
bWl0aXZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbChub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLCByZXN1bHRHUFIs
IG9wMUdQUikpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBA
IC0zMDk0LDE4ICszMDk0LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3Qoc2NyYXRj
aEdQUiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAg
ICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0
ZVRoaXNJbmxpbmVkLCByZXN1bHRHUFIsIHByb3RvR1BSLCBub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWUuZ2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZVRoaXMsIHJlc3VsdEdQUiwgcHJvdG9HUFIpOwotICAg
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbkNyZWF0ZVRoaXNJbmxpbmVkLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRH
UFIsIHByb3RvR1BSLCBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUuZ2V0
KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
Q3JlYXRlVGhpcywgcmVzdWx0R1BSLCBwcm90b0dQUikpOworICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzEyMiwxNSArMzExOSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAg
ICAgIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmVtcHR5T2JqZWN0U3Ry
dWN0dXJlKCkpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAg
IAotICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIpKTsKICAgICAgICAgCiAgICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzcw
NSwyMSArMzY5NCwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAg
ICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlc29sdmVJbmZvQWRkcmVz
cyksIHJlc29sdmVJbmZvR1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKEdsb2JhbFJlc29sdmVJbmZv
LCBzdHJ1Y3R1cmUpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3Ry
dWN0dXJlc01hdGNoID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0
R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpKTsKLQotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVHbG9iYWwsIHJlc3Vs
dEdQUiwgcmVzb2x2ZUluZm9HUFIsICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihkYXRh
LmlkZW50aWZpZXJOdW1iZXIpKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHdhc1Nsb3cgPSBtX2ppdC5qdW1w
KCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZXNEb250TWF0Y2ggPSBtX2pp
dC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwog
CiAgICAgICAgIC8vIEZhc3QgY2FzZQotICAgICAgICBzdHJ1Y3R1cmVzTWF0Y2gubGluaygmbV9q
aXQpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIp
OwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9H
UFIsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgb2Zmc2V0KSksIHJlc29sdmVJ
bmZvR1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJl
c3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpTY2FsZVB0ciksIHJlc3VsdEdQ
Uik7CiAKLSAgICAgICAgd2FzU2xvdy5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZXNEb250TWF0Y2gsIHRoaXMsIG9wZXJhdGlvblJlc29sdmVHbG9iYWwsCisgICAgICAg
ICAgICAgICAgcmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwKKyAgICAgICAgICAgICAgICAmbV9q
aXQuY29kZUJsb2NrKCktPmlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSkpOwogCiAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtMzczNCwxMyArMzcyMCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgYWxyZWFkeUNy
ZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRH
UFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbiwgcmVzdWx0R1BSKTsKLSAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgYWxyZWFkeUNy
ZWF0ZWQubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbChub3RDcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVBY3Rp
dmF0aW9uLCByZXN1bHRHUFIpKTsKICAgICAgICAgCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc1MCwxMyArMzczMywx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCB2
YWx1ZUdQUik7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZh
bGlkR1BSUmVnKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UZWFyT2ZmQWN0aXZh
dGlvbiwgdmFsdWVHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRH
UFJSZWcpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjcmVhdGVkID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIpOwogICAgICAgICAKLSAgICAg
ICAgbm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKGNyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvblRlYXJP
ZmZBY3RpdmF0aW9uLCBJbnZhbGlkR1BSUmVnLCB2YWx1ZUdQUikpOwogICAgICAgICAKICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3NzUsMTQg
KzM3NTUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGFscmVhZHlDcmVhdGVkID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAg
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24oCi0gICAgICAgICAgICBvcGVyYXRpb25OZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBtX2pp
dC5jb2RlQmxvY2soKS0+ZnVuY3Rpb25EZWNsKG5vZGUuZnVuY3Rpb25EZWNsSW5kZXgoKSkpOwot
ICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVy
OjpaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgYWxyZWFkeUNyZWF0ZWQubGlu
aygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBub3RDcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25O
ZXdGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIG1faml0LmNvZGVCbG9jaygp
LT5mdW5jdGlvbkRlY2wobm9kZS5mdW5jdGlvbkRlY2xJbmRleCgpKSkpOwogICAgICAgICAKICAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCw0NSBAQAog
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdTbG93UGF0aEdlbmVyYXRvci5o
IgogI2luY2x1ZGUgIkpTQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK1NwZWN1bGF0aXZlSklUOjpTcGVjdWxh
dGl2ZUpJVChKSVRDb21waWxlciYgaml0KQorICAgIDogbV9jb21waWxlT2theSh0cnVlKQorICAg
ICwgbV9qaXQoaml0KQorICAgICwgbV9jb21waWxlSW5kZXgoMCkKKyAgICAsIG1faW5kZXhJbkJs
b2NrKDApCisgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNh
bGxlZVJlZ2lzdGVycykKKyAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5z
aXplKCkpCisgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSkKKyAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQorICAgICwgbV9s
YXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICwgbV9z
dGF0ZShtX2ppdC5ncmFwaCgpKQoreworfQorCitTcGVjdWxhdGl2ZUpJVDo6flNwZWN1bGF0aXZl
SklUKCkKK3sKKyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX3Nsb3dQYXRoR2VuZXJhdG9ycyk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NPd25Q
dHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoR2VuZXJhdG9yKQoreworICAgIG1fc2xvd1Bh
dGhHZW5lcmF0b3JzLmFwcGVuZChzbG93UGF0aEdlbmVyYXRvci5sZWFrUHRyKCkpOworfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0aEdlbmVyYXRvcnMoKQoreworI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBkYXRhTG9nKCJSdW5uaW5nICVsdSBzbG93IHBhdGgg
Z2VuZXJhdG9ycy5cbiIsIG1fc2xvd1BhdGhHZW5lcmF0b3JzLnNpemUoKSk7CisjZW5kaWYKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbG93UGF0aEdlbmVyYXRvcnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzW2ldLT5nZW5lcmF0ZSh0aGlzKTsKK30K
KwogLy8gT24gV2luZG93cyB3ZSBuZWVkIHRvIHdyYXAgZm1vZDsgb24gb3RoZXIgcGxhdGZvcm1z
IHdlIGNhbiBjYWxsIGl0IGRpcmVjdGx5LgogLy8gT24gQVJNdjcgd2UgYXNzZXJ0IHRoYXQgYWxs
IGZ1bmN0aW9uIHBvaW50ZXJzIGhhdmUgdG8gbG93IGJpdCBzZXQgKHBvaW50IHRvIHRodW1iIGNv
ZGUpLgogI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMIHx8IENQVShBUk1fVEhVTUIy
KQpAQCAtMTU4NSwxMyArMTYxOSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVUb0ludDMyCiAgICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7CiAgICAgICAgICAgICBH
UFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
dHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZw
ciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOwotCi0gICAg
ICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbih0b0ludDMyLCBncHIsIGZwcik7Ci0gICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKGdwcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRU
b0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJ
VENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50
ZWdlciwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKIAotICAgICAgICAgICAgdHJ1bmNhdGVk
VG9JbnRlZ2VyLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIwNjQs
MTcgKzIwOTUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmaXhlZCA9IG1faml0Lmp1bXAoKTsKICAgICAg
ICAgbm90TmFOLmxpbmsoJm1faml0KTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7CiAgICAgICAgIGlmIChz
aWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCi0gICAgICAgICAgICBkb25lID0gbV9qaXQu
YnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJh
bmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOworICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJh
bmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNo
SWZUcnVuY2F0ZUZhaWxlZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvbmUgPSBtX2pp
dC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6
QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOwotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKGdwcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgZ3ByLCBmcHIpOwot
ICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGdwcik7CisgICAgICAgICAgICBmYWlsZWQg
PSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2Vt
Ymxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoZmFpbGVkLCB0aGlzLCB0b0ludDMyLCBncHIsIGZw
cikpOwogCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICBmaXhlZC5saW5rKCZt
X2ppdCk7CiAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CiAgICAgICAgIHZhbHVlR1BSID0g
Z3ByOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAKICNpbmNs
dWRlICJERkdKSVRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRl
ICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
IgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3Zlcnku
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKU1ZhbHVlT3Bl
cmFuZDsKK2NsYXNzIFNsb3dQYXRoR2VuZXJhdG9yOwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiBj
bGFzcyBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDsKIGNsYXNzIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZDsKQEAgLTE3NSw2ICsxNzcsNyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAg
IFNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJik7CisgICAgflNwZWN1bGF0aXZlSklUKCk7CiAK
ICAgICBib29sIGNvbXBpbGUoKTsKICAgICB2b2lkIGNyZWF0ZU9TUkVudHJpZXMoKTsKQEAgLTM2
Niw3ICszNjksOSBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVCb29sZWFuKE5v
ZGVJbmRleCk7CiAgICAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBlRm9y
VG9JbnQzMihOb2RlSW5kZXgpOwogCi1wcml2YXRlOgorICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4pOworICAgIHZvaWQgcnVuU2xvd1Bh
dGhHZW5lcmF0b3JzKCk7CisgICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsKICAgICB2b2lk
IGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwpA
QCAtMzgwLDI0MyArMzg1LDM0NiBAQCBwcml2YXRlOgogICAgIC8vIHRoZXkgc3BpbGwgYWxsIGxp
dmUgdmFsdWVzIHRvIHRoZSBhcHByb3ByaWF0ZQogICAgIC8vIHNsb3RzIGluIHRoZSBSZWdpc3Rl
ckZpbGUgd2l0aG91dCBjaGFuZ2luZyBhbnkgc3RhdGUKICAgICAvLyBpbiB0aGUgR2VuZXJhdGlv
bkluZm8uCi0gICAgdm9pZCBzaWxlbnRTcGlsbEdQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwg
R1BSUmVnIHNvdXJjZSkKKyAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIHNpbGVudFNhdmVQbGFu
Rm9yR1BSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcgc291cmNlKQogICAgIHsKICAg
ICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOwot
ICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKTsK
LSAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91Ymxl
KTsKLQotICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotCisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAg
ICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgRGF0YUZvcm1hdCByZWdp
c3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7Ci0gICAgICAgIGlmIChyZWdp
c3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKLSAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoc291cmNlLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgIEFT
U0VSVChyZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIEFTU0VSVChy
ZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAgCisgICAgICAgIFNp
bGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uOworICAgICAgICBTaWxlbnRGaWxsQWN0aW9uIGZp
bGxBY3Rpb247CisgICAgICAgIAorICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKQorICAg
ICAgICAgICAgc3BpbGxBY3Rpb24gPSBEb05vdGhpbmdGb3JTcGlsbDsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMgfHwgcmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdFN0b3JhZ2UpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc291cmNlLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUykgewotICAg
ICAgICAgICAgQVNTRVJUKGluZm8udGFnR1BSKCkgPT0gc291cmNlIHx8IGluZm8ucGF5bG9hZEdQ
UigpID09IHNvdXJjZSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgc291cmNl
ID09IGluZm8udGFnR1BSKCkgPyBKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpIDogSklUQ29t
cGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICB9IGVsc2UgeworI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwotICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihzb3VyY2UsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNw
aWxsTWUpKTsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERh
dGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmUzMlBh
eWxvYWQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0
ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENl
bGwgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICAgICAg
ICAgIHNwaWxsQWN0aW9uID0gU3RvcmVQdHI7CisgICAgICAgICAgICB9CisjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgICAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpT
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGluZm8udGFnR1BSKCkgPT0gc291cmNlIHx8IGlu
Zm8ucGF5bG9hZEdQUigpID09IHNvdXJjZSk7CisgICAgICAgICAgICAgICAgc3BpbGxBY3Rpb24g
PSBzb3VyY2UgPT0gaW5mby50YWdHUFIoKSA/IFN0b3JlMzJUYWcgOiBTdG9yZTMyUGF5bG9hZDsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkg
PT0gc291cmNlKTsKKyAgICAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9IFN0b3JlMzJQYXlsb2Fk
OworICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgfQotICAgIHZvaWQgc2lsZW50U3BpbGxGUFIo
VmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEZQUlJlZyBzb3VyY2UpCi0gICAgewotICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0gICAgICAg
IEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0KLSAg
ICAgICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwoKSkgewotICAgICAgICAgICAgLy8gaXQncyBlaXRo
ZXIgYSBjb25zdGFudCBvciBpdCdzIGFscmVhZHkgYmVlbiBzcGlsbGVkCi0gICAgICAgICAgICBB
U1NFUlQoYXQoaW5mby5ub2RlSW5kZXgoKSkuaGFzQ29uc3RhbnQoKSB8fCBpbmZvLnNwaWxsRm9y
bWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICAvLyBpdCdzIG5laXRoZXIgYSBjb25zdGFudCBub3IgaGFzIGl0
IGJlZW4gc3BpbGxlZC4KLSAgICAgICAgQVNTRVJUKCFhdChpbmZvLm5vZGVJbmRleCgpKS5oYXND
b25zdGFudCgpKTsKLSAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0Tm9uZSk7Ci0gICAgICAgIEFTU0VSVChpbmZvLmZwcigpID09IHNvdXJjZSk7Ci0KLSAgICAg
ICAgbV9qaXQuc3RvcmVEb3VibGUoc291cmNlLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGls
bE1lKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzaWxlbnRGaWxsR1BSKFZpcnR1YWxSZWdpc3RlciBz
cGlsbE1lLCBHUFJSZWcgdGFyZ2V0KQotICAgIHsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOwotCi0gICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
Tm9uZSk7Ci0gICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1h
dERvdWJsZSk7Ci0gICAgICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJlZ2lz
dGVyRm9ybWF0KCk7Ci0KICAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJ
bnRlZ2VyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOworICAg
ICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAgICAgICAgIEFTU0VS
VChpc0pTSW50ZWdlcihpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpKTsKICAgICAgICAgICAgIGlmIChu
b2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZmls
bEFjdGlvbiA9IFNldEludDMyQ29uc3RhbnQ7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRh
cmdldCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Qm9vbGVhbikgeworICAgICAgICAgICAg
ICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOworICAgICAgICB9IGVsc2UgaWYgKHJlZ2lz
dGVyRm9ybWF0ID09IERhdGFGb3JtYXRCb29sZWFuKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAgICAgICAgICBB
U1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwogICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29u
c3RhbnQoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc0Jvb2xlYW5Db25zdGFudChub2Rl
SW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZU9m
Qm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCkpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGZp
bGxBY3Rpb24gPSBTZXRCb29sZWFuQ29uc3RhbnQ7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSks
IHRhcmdldCk7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7CiAj
ZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWdp
c3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCkgewotICAgICAgICAgICAgQVNTRVJUKGluZm8u
Z3ByKCkgPT0gdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBE
YXRhRm9ybWF0Q2VsbCkgeworICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNl
KTsKICAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAg
ICAgICAgICBBU1NFUlQodmFsdWUuaXNDZWxsKCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cih2YWx1ZS5hc0NlbGwoKSksIHRhcmdldCk7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2Fk
Rm9yKHNwaWxsTWUpLCB0YXJnZXQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1h
dCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldENlbGxD
b25zdGFudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCku
aXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFz
SW1tUHRyKG5vZGVJbmRleCkuYXNUcnVzdGVkSW1tUHRyKCksIHRhcmdldCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1t
UHRyKG5vZGVJbmRleCksIHRhcmdldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZv
cm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaXN0
ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAg
ICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHRhcmdldCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
IHsKLSAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3Vi
bGUpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihz
cGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHRhcmdldCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKICNlbHNlCi0gICAgICAgIEFT
U0VSVChpbmZvLnRhZ0dQUigpID09IHRhcmdldCB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSB0YXJn
ZXQpOwotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShpbmZvLnRhZ0dQUigpID09IHRhcmdldCA/IEltbTMyKHYudGFnKCkpIDogSW1tMzIodi5w
YXlsb2FkKCkpLCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGluZm8ucGF5bG9hZEdQUigp
ID09IHRhcmdldCkKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgZWxzZSB7IC8vIEZpbGwgdGhlIFRhZwot
ICAgICAgICAgICAgc3dpdGNoIChpbmZvLnNwaWxsRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGNh
c2UgRGF0YUZvcm1hdEludGVnZXI6CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQz
MlBheWxvYWQ7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChyZWdp
c3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSkgeworICAgICAgICAgICAgQVNTRVJUKGlu
Zm8uZ3ByKCkgPT0gc291cmNlKTsKKyAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkUHRyOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0
YUZvcm1hdEpTKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgQVNTRVJUKGluZm8u
Z3ByKCkgPT0gc291cmNlKTsKKyAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc0NlbGwo
KSkKKyAgICAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldFRydXN0ZWRKU0NvbnN0YW50
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9
IFNldEpTQ29uc3RhbnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhcmdldCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgICAgICAg
ICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNDZWxsKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFy
Z2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1h
dEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFG
b3JtYXRKU0Jvb2xlYW4pOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDMyUGF5bG9hZEJveEludDsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpT
RG91YmxlKTsKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZUJveERvdWJs
ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2Fk
UHRyOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLnRhZ0dQUigpID09IHNvdXJjZSB8
fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOworICAgICAgICAgICAgaWYgKG5vZGUuaGFz
Q29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IGluZm8udGFnR1BS
KCkgPT0gc291cmNlID8gU2V0SlNDb25zdGFudFRhZyA6IFNldEpTQ29uc3RhbnRQYXlsb2FkOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpCisgICAg
ICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7CisgICAgICAgICAgICBlbHNl
IHsgLy8gRmlsbCB0aGUgVGFnCisgICAgICAgICAgICAgICAgc3dpdGNoIChpbmZvLnNwaWxsRm9y
bWF0KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdl
cik7CisgICAgICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRJbnQzMlRhZzsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2Vs
bDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXRKU0NlbGwpOworICAgICAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0Q2VsbFRhZzsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEYXRhRm9y
bWF0Qm9vbGVhbjoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09
IERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0g
U2V0Qm9vbGVhblRhZzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlRhZzsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oc3BpbGxBY3Rpb24sIGZpbGxBY3Rpb24sIG5vZGVJ
bmRleCwgc291cmNlKTsKICAgICB9Ci0KLSAgICB2b2lkIHNpbGVudEZpbGxGUFIoVmlydHVhbFJl
Z2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBjYW5UcmFtcGxlLCBGUFJSZWcgdGFyZ2V0KQorICAgIAor
ICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gc2lsZW50U2F2ZVBsYW5Gb3JGUFIoVmlydHVhbFJl
Z2lzdGVyIHNwaWxsTWUsIEZQUlJlZyBzb3VyY2UpCiAgICAgewogICAgICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0gICAgICAgIEFTU0VSVChp
bmZvLmZwcigpID09IHRhcmdldCk7Ci0KICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGlu
Zm8ubm9kZUluZGV4KCk7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdERvdWJsZSk7CiAKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewot
ICAgICAgICAgICAgQVNTRVJUKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
ICAgICBtX2ppdC5tb3ZlKEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlT2ZOdW1iZXJD
b25zdGFudChub2RlSW5kZXgpKSksIGNhblRyYW1wbGUpOwotICAgICAgICAgICAgbV9qaXQubW92
ZVB0clRvRG91YmxlKGNhblRyYW1wbGUsIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uOworICAgICAgICBTaWxlbnRGaWxs
QWN0aW9uIGZpbGxBY3Rpb247CisgICAgICAgIAorICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGls
bCgpKQorICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBEb05vdGhpbmdGb3JTcGlsbDsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoIWF0KGluZm8ubm9kZUluZGV4KCkpLmhhc0Nv
bnN0YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0Tm9uZSk7CisgICAgICAgICAgICBBU1NFUlQoaW5mby5mcHIoKSA9PSBzb3VyY2UpOwor
ICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBTdG9yZURvdWJsZTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBp
bmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSkgeworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICAgICAgZmlsbEFjdGlvbiA9
IFNldERvdWJsZUNvbnN0YW50OworICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERv
dWJsZSkgewogICAgICAgICAgICAgLy8gaXQgd2FzIGFscmVhZHkgc3BpbGxlZCBwcmV2aW91c2x5
IGFuZCBub3QgYXMgYSBkb3VibGUsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdW5ib3hpbmcuCiAgICAg
ICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKLSAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIGNh
blRyYW1wbGUpOwotICAgICAgICAgICAgdW5ib3hEb3VibGUoY2FuVHJhbXBsZSwgdGFyZ2V0KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1faml0LmxvYWREb3Vi
bGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAg
ICBmaWxsQWN0aW9uID0gTG9hZEpTVW5ib3hEb3VibGU7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZmlsbEFjdGlvbiA9IExvYWREb3VibGU7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBVTlVTRURfUEFSQU0oY2FuVHJhbXBsZSk7CiAgICAgICAgIEFTU0VSVChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSB8fCBpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQo
KSkgewogICAgICAgICAgICAgQVNTRVJUKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0g
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJ
bmRleCksIHRhcmdldCk7CisgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0RG91YmxlQ29uc3Rh
bnQ7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGZpbGxBY3Rp
b24gPSBMb2FkRG91YmxlOwogI2VuZGlmCi0gICAgfQogCi0gICAgdm9pZCBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSwgR1BSUmVnIGV4Y2x1ZGUyID0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgcmV0dXJuIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oc3BpbGxBY3Rpb24sIGZp
bGxBY3Rpb24sIG5vZGVJbmRleCwgc291cmNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaWxl
bnRTcGlsbChjb25zdCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuJiBwbGFuKQogICAgIHsKLSAgICAg
ICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3By
cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgp
OwotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIg
JiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1ZGUyKQotICAgICAgICAgICAgICAgIHNp
bGVudFNwaWxsR1BSKGl0ZXIubmFtZSgpLCBncHIpOworICAgICAgICBzd2l0Y2ggKHBsYW4uc3Bp
bGxBY3Rpb24oKSkgeworICAgICAgICBjYXNlIERvTm90aGluZ0ZvclNwaWxsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmUzMlRhZzoKKyAgICAgICAgICAgIG1faml0LnN0
b3JlMzIocGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihhdChwbGFuLm5vZGVJbmRleCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U3RvcmUzMlBheWxvYWQ6CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCksIEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3Rl
cigpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZVB0cjoKKyAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdG9yZURvdWJsZToKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
RG91YmxlKHBsYW4uZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUlu
ZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0g
ICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBt
X2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIoaXRl
ci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lsZW50Rmls
bChjb25zdCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuJiBwbGFuLCBHUFJSZWcgY2FuVHJhbXBsZSkK
KyAgICB7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNhblRy
YW1wbGUpOworI2VuZGlmCisgICAgICAgIHN3aXRjaCAocGxhbi5maWxsQWN0aW9uKCkpIHsKKyAg
ICAgICAgY2FzZSBEb05vdGhpbmdGb3JGaWxsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU2V0SW50MzJDb25zdGFudDoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFs
dWVPZkludDMyQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkpLCBwbGFuLmdwcigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldEJvb2xlYW5Db25zdGFudDoKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQocGxhbi5u
b2RlSW5kZXgoKSkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNldENlbGxDb25zdGFudDoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKS5hc0NlbGwoKSksIHBsYW4uZ3By
KCkpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgY2Fz
ZSBTZXRUcnVzdGVkSlNDb25zdGFudDoKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpT
Q29uc3RhbnRBc0ltbVB0cihwbGFuLm5vZGVJbmRleCgpKS5hc1RydXN0ZWRJbW1QdHIoKSwgcGxh
bi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRKU0NvbnN0YW50
OgorICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRyKHBsYW4u
bm9kZUluZGV4KCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNldERvdWJsZUNvbnN0YW50OgorICAgICAgICAgICAgbV9qaXQubW92ZShJbW1QdHIoYml0
d2lzZV9jYXN0PHZvaWQqPih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkp
KSwgY2FuVHJhbXBsZSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoY2FuVHJh
bXBsZSwgcGxhbi5mcHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2Fk
MzJQYXlsb2FkQm94SW50OgorICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5n
cHIoKSk7CisgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9h
ZERvdWJsZUJveERvdWJsZToKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFu
LmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TG9hZEpTVW5ib3hEb3VibGU6CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgY2Fu
VHJhbXBsZSk7CisgICAgICAgICAgICB1bmJveERvdWJsZShjYW5UcmFtcGxlLCBwbGFuLmZwcigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgY2FzZSBTZXRKU0NvbnN0YW50
VGFnOgorICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChwbGFu
Lm5vZGVJbmRleCgpKS50YWcoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU2V0SlNDb25zdGFudFBheWxvYWQ6CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KEltbTMyKHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpLnBheWxvYWQoKSksIHBs
YW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0SW50MzJUYWc6
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0Q2VsbFRh
ZzoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldEJvb2xl
YW5UYWc6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
ZXREb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09m
RG91YmxlQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSksIHBsYW4uZnByKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBMb2FkMzJUYWc6CisgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0
dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTG9hZDMyUGF5bG9hZDoKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBs
YW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZFB0cjoKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5u
b2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIExvYWREb3VibGU6CisgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1
YWxSZWdpc3RlcigpKSwgcGxhbi5mcHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAg
ICAgfQotICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUpCisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgdm9pZCBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoYm9vbCBkb1NwaWxsLCBDb2xsZWN0aW9uVHlwZSYgcGxh
bnMsIEdQUlJlZyBleGNsdWRlLCBHUFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnLCBGUFJS
ZWcgZnByRXhjbHVkZSA9IEludmFsaWRGUFJSZWcpCiAgICAgeworICAgICAgICBBU1NFUlQocGxh
bnMuaXNFbXB0eSgpKTsKICAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5i
ZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAo
aXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAgICBz
aWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSwgaXRlci5yZWdJRCgpKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIgPSBpdGVyLnJlZ0lEKCk7CisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0g
SW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBncHIgIT0gZXhjbHVkZSAmJiBncHIgIT0gZXhjbHVk
ZTIpIHsKKyAgICAgICAgICAgICAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIHBsYW4gPSBzaWxl
bnRTYXZlUGxhbkZvckdQUihpdGVyLm5hbWUoKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpZiAo
ZG9TcGlsbCkKKyAgICAgICAgICAgICAgICAgICAgc2lsZW50U3BpbGwocGxhbik7CisgICAgICAg
ICAgICAgICAgcGxhbnMuYXBwZW5kKHBsYW4pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBt
X2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgRlBSUmVnIGZwciA9IGl0ZXIucmVn
SUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyICYmIGZwciAhPSBleGNsdWRlKQotICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsRlBSKGl0
ZXIubmFtZSgpLCBmcHIpOworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIgJiYgaXRlci5yZWdJRCgpICE9IGZwckV4Y2x1ZGUpIHsKKyAgICAgICAg
ICAgICAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIHBsYW4gPSBzaWxlbnRTYXZlUGxhbkZvckZQ
UihpdGVyLm5hbWUoKSwgaXRlci5yZWdJRCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoZG9TcGls
bCkKKyAgICAgICAgICAgICAgICAgICAgc2lsZW50U3BpbGwocGxhbik7CisgICAgICAgICAgICAg
ICAgcGxhbnMuYXBwZW5kKHBsYW4pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIHZvaWQgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnNJbXBsKGJvb2wgZG9TcGlsbCwgQ29sbGVjdGlvblR5cGUmIHBsYW5zLCBG
UFJSZWcgZXhjbHVkZSkKKyAgICB7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1w
bChkb1NwaWxsLCBwbGFucywgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZywgZXhjbHVkZSk7
CisgICAgfQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29s
bGVjdGlvblR5cGU+CisgICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoYm9vbCBk
b1NwaWxsLCBDb2xsZWN0aW9uVHlwZSYgcGxhbnMsIEpTVmFsdWVSZWdzIGV4Y2x1ZGUpCisgICAg
eworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZG9TcGlsbCwgcGxhbnMsIGV4
Y2x1ZGUudGFnR1BSKCksIGV4Y2x1ZGUucGF5bG9hZEdQUigpKTsKKyAgICB9CisjZW5kaWYKKyAg
ICAKKyAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEdQUlJlZyBleGNsdWRlLCBHUFJS
ZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnLCBGUFJSZWcgZnByRXhjbHVkZSA9IEludmFsaWRG
UFJSZWcpCisgICAgeworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwodHJ1ZSwg
bV9wbGFucywgZXhjbHVkZSwgZXhjbHVkZTIsIGZwckV4Y2x1ZGUpOworICAgIH0KKyAgICB2b2lk
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEZQUlJlZyBleGNsdWRlKQorICAgIHsKKyAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZywgZXhj
bHVkZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHUFJSZWcgcGlja0NhblRyYW1wbGUoR1BS
UmVnIGV4Y2x1ZGUpCisgICAgeworICAgICAgICBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgICAgIGlmIChyZXN1bHQgPT0gZXhjbHVkZSkKKyAgICAgICAgICAgIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QxOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzdGF0
aWMgR1BSUmVnIHBpY2tDYW5UcmFtcGxlKEZQUlJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBH
UFJJbmZvOjpyZWdUMDsKKyAgICB9CiAKLSAgICB2b2lkIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
R1BSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBleGNsdWRlMiA9IEludmFsaWRHUFJSZWcpCisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBzdGF0aWMgR1BSUmVnIHBpY2tDYW5UcmFtcGxlKEpTVmFsdWVS
ZWdzIGV4Y2x1ZGUpCiAgICAgewotICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IEdQUkluZm86
OnJlZ1QwOwotICAgICAgICBpZiAoZXhjbHVkZSA9PSBHUFJJbmZvOjpyZWdUMCkKLSAgICAgICAg
ICAgIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
ZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7
ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50RmlsbEZQUihpdGVyLm5hbWUoKSwgY2Fu
VHJhbXBsZSwgaXRlci5yZWdJRCgpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGdwcl9pdGVy
YXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgICAgIEdQUlJlZyBncHIgPSBpdGVyLnJlZ0lEKCk7Ci0gICAgICAgICAgICBp
ZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBncHIgIT0gZXhjbHVk
ZSAmJiBncHIgIT0gZXhjbHVkZTIpCi0gICAgICAgICAgICAgICAgc2lsZW50RmlsbEdQUihpdGVy
Lm5hbWUoKSwgZ3ByKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwor
ICAgICAgICBpZiAocmVzdWx0ID09IGV4Y2x1ZGUudGFnR1BSKCkpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QxOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBleGNsdWRl
LnBheWxvYWRHUFIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMjsK
KyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gZXhjbHVkZS5wYXlsb2FkR1BSKCkpIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QxOworICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBleGNsdWRlLnRhZ0dQUigpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QyOwogICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIHZv
aWQgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhGUFJSZWcgZXhjbHVkZSkKKyNlbmRpZgorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJlZ2lzdGVyVHlwZT4KKyAgICB2b2lkIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoUmVnaXN0ZXJUeXBlIGV4Y2x1ZGUpCiAgICAgewotICAgICAgICBHUFJSZWcg
Y2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9
IHBpY2tDYW5UcmFtcGxlKGV4Y2x1ZGUpOwogICAgICAgICAKLSAgICAgICAgZm9yIChmcHJfaXRl
cmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgICAgICBGUFJSZWcgZnByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAg
aWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZnByICE9IGV4Y2x1
ZGUpCi0gICAgICAgICAgICAgICAgc2lsZW50RmlsbEZQUihpdGVyLm5hbWUoKSwgY2FuVHJhbXBs
ZSwgZnByKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9n
cHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAg
IGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAgICAg
ICAgIHNpbGVudEZpbGxHUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7CisgICAgICAgIHdo
aWxlICghbV9wbGFucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFNpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4mIHBsYW4gPSBtX3BsYW5zLmxhc3QoKTsKKyAgICAgICAgICAgIHNpbGVudEZpbGwocGxh
biwgY2FuVHJhbXBsZSk7CisgICAgICAgICAgICBtX3BsYW5zLnJlbW92ZUxhc3QoKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtODk4LDEyICsxMDA2LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBu
b25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihOb2RlJik7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2
ZVVJbnQzMlRvTnVtYmVyKE5vZGUmKTsKIAotICAgIGVudW0gU3BpbGxSZWdpc3RlcnNNb2RlIHsg
TmVlZFRvU3BpbGwsIERvbnRTcGlsbCB9OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BS
UmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAo
KSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOworICAgIHZvaWQgY2FjaGVkR2V0
QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2Rl
ID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJS
ZWcgYmFzZVRhZ0dQUk9yTm9uZSwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0
VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0g
SklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwor
ICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVRhZ0dQUk9yTm9u
ZSwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAo
KSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkUHV0
QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQ
UiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hH
UFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAjZW5kaWYKIApAQCAtMTIy
NSw2ICsxMzMyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmcx
KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJh
dGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2lu
dGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwpAQCAtMTI1NSw2ICsxMzY3LDEyIEBA
IHByaXZhdGU6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKICAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBl
LCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFt
ZSBBcmd1bWVudFR5cGUzPgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVu
Y3Rpb25UeXBlIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBB
cmd1bWVudFR5cGUyIGFyZzIsIEFyZ3VtZW50VHlwZTMgYXJnMykKKyAgICB7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3Bl
cmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKQEAgLTE0MjMsNiArMTU0MSwxMSBA
QCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQgPT0gSW52YWxpZEdQUlJlZyk7Cisg
ICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSk7CisgICAgfQogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVy
YXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCB2
b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIp
KTsKQEAgLTE0NDgsNiArMTU3MSwxOCBAQCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEFyZ3Vt
ZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTMs
IHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQ+CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihGdW5jdGlvblR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmd1bWVudFR5cGUx
IGFyZzEsIEFyZ3VtZW50VHlwZTIgYXJnMiwgQXJndW1lbnRUeXBlMyBhcmczLCBBcmd1bWVudFR5
cGU0IGFyZzQpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09
IEludmFsaWRHUFJSZWcpOworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlw
ZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTMsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQsIHR5cGVu
YW1lIEFyZ3VtZW50VHlwZTU+CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihG
dW5jdGlvblR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZzEs
IEFyZ3VtZW50VHlwZTIgYXJnMiwgQXJndW1lbnRUeXBlMyBhcmczLCBBcmd1bWVudFR5cGU0IGFy
ZzQsIEFyZ3VtZW50VHlwZTUgYXJnNSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0LCByZXN1bHQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CisgICAgfQogCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9FSiBvcGVy
YXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQp
CiAgICAgewpAQCAtMTQ2NSw2ICsxNjAwLDQ3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMT4KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAgICAgICBGdW5jdGlvblR5cGUgb3BlcmF0aW9uLCBK
U1ZhbHVlUmVncyByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0LnRhZ0dQUigpLCByZXN1bHQucGF5
bG9hZEdQUigpLCBhcmcxKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25U
eXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyPgorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisgICAgICAgIEZ1bmN0aW9uVHlwZSBv
cGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBBcmd1bWVu
dFR5cGUyIGFyZzIpCisgICAgeworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIHJlc3VsdC50YWdHUFIoKSwgcmVzdWx0LnBheWxvYWRHUFIoKSwgYXJnMSwgYXJnMik7Cisg
ICAgfQorICAgIHRlbXBsYXRlPAorICAgICAgICB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVu
YW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTIsCisgICAgICAgIHR5cGVu
YW1lIEFyZ3VtZW50VHlwZTM+CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigK
KyAgICAgICAgRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBBcmd1
bWVudFR5cGUxIGFyZzEsIEFyZ3VtZW50VHlwZTIgYXJnMiwKKyAgICAgICAgQXJndW1lbnRUeXBl
MyBhcmczKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBy
ZXN1bHQudGFnR1BSKCksIHJlc3VsdC5wYXlsb2FkR1BSKCksIGFyZzEsIGFyZzIsIGFyZzMpOwor
ICAgIH0KKyAgICB0ZW1wbGF0ZTwKKyAgICAgICAgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBl
bmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLAorICAgICAgICB0eXBl
bmFtZSBBcmd1bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVudFR5cGU0PgorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisgICAgICAgIEZ1bmN0aW9uVHlwZSBvcGVyYXRpb24s
IEpTVmFsdWVSZWdzIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFy
ZzIsCisgICAgICAgIEFyZ3VtZW50VHlwZTMgYXJnMywgQXJndW1lbnRUeXBlNCBhcmc0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZXN1bHQudGFnR1BS
KCksIHJlc3VsdC5wYXlsb2FkR1BSKCksIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOworICAgIH0K
KyAgICB0ZW1wbGF0ZTwKKyAgICAgICAgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBB
cmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLAorICAgICAgICB0eXBlbmFtZSBB
cmd1bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVudFR5cGU0LCB0eXBlbmFtZSBBcmd1bWVudFR5
cGU1PgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisgICAgICAgIEZ1bmN0
aW9uVHlwZSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcx
LCBBcmd1bWVudFR5cGUyIGFyZzIsCisgICAgICAgIEFyZ3VtZW50VHlwZTMgYXJnMywgQXJndW1l
bnRUeXBlNCBhcmc0LCBBcmd1bWVudFR5cGU1IGFyZzUpCisgICAgeworICAgICAgICByZXR1cm4g
Y2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgIG9wZXJhdGlvbiwgcmVzdWx0LnRhZ0dQUigpLCBy
ZXN1bHQucGF5bG9hZEdQUigpLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKKyAgICB9
CiAjZW5kaWYKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYWRkIGNhbGwgaW5zdHJ1Y3Rpb25zLCB3
aXRoIG9wdGlvbmFsIGV4Y2VwdGlvbiBjaGVja3MgJiBzZXR0aW5nIHJlc3VsdHMuCkBAIC0xOTUx
LDggKzIxMjcsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFu
ZF07CiAgICAgfQogICAgIAotICAgIC8vIFRoZSBKSVQsIHdoaWxlIGFsc28gcHJvdmlkZXMgTWFj
cm9Bc3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KICAgICBKSVRDb21waWxlciYgbV9qaXQ7CisKICAg
ICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1f
YmxvY2s7CiAgICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OwpAQCAtMTk4NCw2ICsyMTYwLDkg
QEAgcHJpdmF0ZToKICAgICAKICAgICBBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAgICAgCisgICAg
VmVjdG9yPFNsb3dQYXRoR2VuZXJhdG9yKiwgOD4gbV9zbG93UGF0aEdlbmVyYXRvcnM7IC8vIGRv
ZXNuJ3QgdXNlIE93blB0cjw+IGJlY2F1c2UgSSBkb24ndCB3YW50IHRvIGluY2x1ZGUgREZHU2xv
d1BhdGhHZW5lcmF0b3IuaAorICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuPiBtX3Bs
YW5zOworCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBW
YWx1ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihpbnQgb3BlcmFuZCkKQEAgLTI2MDMsMjAgKzI3ODIsNiBAQCBwcml2YXRlOgogICAgIEdQUlJl
ZyBtX2dwck9ySW52YWxpZDsKIH07CiAKLWlubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRp
dmVKSVQoSklUQ29tcGlsZXImIGppdCkKLSAgICA6IG1fY29tcGlsZU9rYXkodHJ1ZSkKLSAgICAs
IG1faml0KGppdCkKLSAgICAsIG1fY29tcGlsZUluZGV4KDApCi0gICAgLCBtX2luZGV4SW5CbG9j
aygwKQotICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMpCi0gICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Muc2l6
ZSgpKQotICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkp
Ci0gICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKLSAgICAsIG1fbGFz
dFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAsIG1fc3Rh
dGUobV9qaXQuZ3JhcGgoKSkKLXsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYK
</data>
<flag name="commit-queue"
          id="142256"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137259</attachid>
            <date>2012-04-15 18:11:31 -0700</date>
            <delta_ts>2012-04-16 16:35:46 -0700</delta_ts>
            <desc>fixing style/build errors</desc>
            <filename>slowpaths_patch_5.diff</filename>
            <type>text/plain</type>
            <size>140437</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0MjEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxMi0wNC0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBvdXQtb2YtbGluZSBzbG93IHBhdGhzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlcyB0aGUgbm90
aW9uIG9mIHNsb3cgcGF0aCBjb2RlIGdlbmVyYXRpb24gY2xvc3VyZXMgaW4gdGhlIERGRy4KKyAg
ICAgICAgVGhlc2UgYXJlIGRlZmluZWQgaW4gREZHU2xvd1BhdGhHZW5lcmF0b3IuaCwgdGhvdWdo
IHRoZXkgYXJlIGZhaXJseQorICAgICAgICBleHRlbnNpYmxlIHNvIERGR1NwZWN1bGF0aXZlSklU
NjQuY3BwIGFuZCBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorICAgICAgICBkZWZpbmUgYSBj
b3VwbGUgc3BlY2lhbC1wdXJwb3NlIG9uZXMuIEEgc2xvdyBwYXRoIGdlbmVyYXRpb24gY2xvc3Vy
ZQorICAgICAgICAoREZHOjpTbG93UGF0aEdlbmVyYXRvcikgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhl
IG1haW4gc3BlY3VsYXRpdmUgcGF0aCBpcworICAgICAgICBnZW5lcmF0ZWQuIFRoaXMgbWFrZXMg
dGhlbSBncmVhdCBmb3Igc2NoZWR1bGluZyBzbG93IHBhdGggY29kZSBvdXQgb2YKKyAgICAgICAg
dGhlIHdheSBvZiB0aGUgaG90IHBhdGhzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIGNvbnZlcnRzIG1vc3QgLSBidXQgbm90IGFsbCAtIG9mIHRoZSBERkcgdG8gdXNlIHNsb3cK
KyAgICAgICAgcGF0aCBnZW5lcmF0b3JzIGluc3RlYWQgb2YgaW5saW5lIHNsb3cgcGF0aHMuCisg
ICAgICAgIAorICAgICAgICBUaGUgcmVzdWx0IGlzIGEgc3ViLTElIGltcHJvdmVtZW50IG9uIFN1
blNwaWRlciBhbmQgVjgsIGFuZCBhIG1pbmlzY3VsZQorICAgICAgICByZWdyZXNzaW9uIG9uIEty
YWtlbi4KKyAgICAgICAgCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyOjpU
cnVzdGVkSW1tUHRyKToKKyAgICAgICAgKFRydXN0ZWRJbW1QdHIpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzI6OlRydXN0ZWRJbW0zMik6CisgICAg
ICAgIChUcnVzdGVkSW1tMzIpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
Lmg6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlBY2Nlc3NS
ZWNvcmQ6OlByb3BlcnR5QWNjZXNzUmVjb3JkKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzUmVj
b3JkKToKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuOjpzcGlsbEFjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2lsZW50
UmVnaXN0ZXJTYXZlUGxhbjo6ZmlsbEFjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2lsZW50
UmVnaXN0ZXJTYXZlUGxhbjo6bm9kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNpbGVudFJlZ2lzdGVy
U2F2ZVBsYW46OmZwcik6CisgICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6U2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjp+U2xvd1BhdGhHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6OmxhYmVsKToKKyAgICAgICAgKEpTQzo6REZH
OjpTbG93UGF0aEdlbmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKdW1waW5nU2xvd1BhdGhHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6SnVt
cGluZ1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpKdW1waW5nU2xvd1Bh
dGhHZW5lcmF0b3I6OmxpbmtGcm9tKToKKyAgICAgICAgKEpTQzo6REZHOjpKdW1waW5nU2xvd1Bh
dGhHZW5lcmF0b3I6Omp1bXBUbyk6CisgICAgICAgIChDYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsU2xvd1BhdGhHZW5lcmF0b3I6OmNhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6c2V0VXApOgorICAg
ICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6cmVjb3JkQ2FsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjp0ZWFyRG93bik6CisgICAgICAg
IChDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxS
ZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRl
cm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZE9uZUFyZ3VtZW50U2xvd1BhdGhH
ZW5lcmF0b3I6OkNhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRv
cjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRz
U2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRUd29B
cmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Nsb3dQ
YXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kVHdvQXJndW1l
bnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoQ2FsbFJl
c3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVz
dWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRl
SW50ZXJuYWwpOgorICAgICAgICAoQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNT
bG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93
UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5k
Rml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxs
UmVzdWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kRml2
ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVz
dWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6REZHOjpzbG93UGF0aENhbGwpOgorICAgICAgICAoQXNzaWduaW5nU2xv
d1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2lnbmluZ1Nsb3dQYXRoR2Vu
ZXJhdG9yOjpBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzaWduaW5nU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpERkc6OnNsb3dQYXRoTW92ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6flNw
ZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkU2xv
d1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpydW5T
bG93UGF0aEdlbmVyYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBS
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwaWNrQ2FuVHJhbXBsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChWYWx1ZVRv
TnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlVG9OdW1i
ZXJTbG93UGF0aEdlbmVyYXRvcjo6VmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRl
SW50ZXJuYWwpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChDb21wYXJlQW5kQm94
Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5k
Qm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQ
YXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0
RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5v
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKFZhbHVlVG9OdW1iZXJT
bG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVUb051bWJlclNsb3dQ
YXRoR2VuZXJhdG9yOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpERkc6OlZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5h
bCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKENvbXBhcmVBbmRCb3hCb29sZWFu
U2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29s
ZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5l
cmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDQtMTMg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTQxODUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDYgKzgwLDggQEAKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRo
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYx
NUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1
NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQ
b3NpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0
Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYxRTNBNUMxNTNBMURBOTAwMEY5NDU2
IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjFFM0E2NzE1M0EyMUUyMDAw
Rjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERG
R1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI2ODE0QkU1RjY4MDBBREM2NEIgLyogSklURHJpdmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI2
NjE0QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4
ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0
QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc1MCw2ICs3NTIsOCBAQAogCQkwRjE1RjE1RDE0QjdB
NzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcmd1bWVudFBvc2l0aW9uLmg7IHBhdGgg
PSBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRG91YmxlRm9ybWF0U3RhdGUuaDsgcGF0
aCA9IGRmZy9ERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsg
cGF0aCA9IGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmg7IHBhdGggPSBkZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyogSklU
RHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERyaXZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyog
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvbkhhcm5lc3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwODQsNiArMjA4OCw4IEBACiAJCQkJODZCQjA5QkUxMzhFMzgx
QjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovLAogCQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2
NzAyRiAvKiBERkdSZXBhdGNoLmggKi8sCiAJCQkJODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8q
IERGR1Njb3JlQm9hcmQuaCAqLywKKwkJCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovLAorCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1
NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJC
MkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi8sCiAJCQkJODZFQzlEQzMxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAw
QjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovLApAQCAtMjU3MCw2ICsyNTc2
LDggQEAKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyog
REZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUUzQTVDMTUzQTFE
QTkwMDBGOTQ1NiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkwRjFFM0E2NzE1M0EyMUUy
MDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MSw2ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAgLy8gaW4gYSBjbGFzcyByZXF1aXJpbmcg
ZXhwbGljaXQgY29uc3RydWN0aW9uIGluIG9yZGVyIHRvIGRpZmZlcmVudGlhdGUKICAgICAvLyBm
cm9tIHBvaW50ZXJzIHVzZWQgYXMgYWJzb2x1dGUgYWRkcmVzc2VzIHRvIG1lbW9yeSBvcGVyYXRp
b25zCiAgICAgc3RydWN0IFRydXN0ZWRJbW1QdHIgeworICAgICAgICBUcnVzdGVkSW1tUHRyKCkg
eyB9CisgICAgICAgIAogICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tUHRyKGNvbnN0IHZvaWQq
IHZhbHVlKQogICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CkBAIC0yMTks
NiArMjIxLDggQEAgcHVibGljOgogICAgIC8vICh3aGljaCBhcmUgaW1wbGVtZW50ZWQgYXMgYW4g
ZW51bSkgZnJvbSBhY2NpZGVudGFsbHkgYmVpbmcgcGFzc2VkIGFzCiAgICAgLy8gaW1tZWRpYXRl
IHZhbHVlcy4KICAgICBzdHJ1Y3QgVHJ1c3RlZEltbTMyIHsKKyAgICAgICAgVHJ1c3RlZEltbTMy
KCkgeyB9CisgICAgICAgIAogICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tMzIoaW50MzJfdCB2
YWx1ZSkKICAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICNpZiBDUFUoQVJNKSB8fCBDUFUo
TUlQUykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDE1
ICsyMDAsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBpbnQ4
X3QgdmFsdWVHUFI7CiAgICAgICAgICAgICAgICAgaW50OF90IHNjcmF0Y2hHUFI7Ci0gICAgICAg
ICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7Ci0gICAgICAgICAgICAgICAgaW50MTZf
dCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOwotICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFD
YWxsVG9TbG93Q2FzZTsKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0Nh
bGw7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAgICAgICAg
ICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOworICAgICAgICAgICAgICAgIGlu
dDMyX3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRh
Q2hlY2tJbW1Ub0NhbGw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBpbnQx
Nl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0
YUNhbGxUb0xvYWRPclN0b3JlOwogI2Vsc2UKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRh
Q2FsbFRvVGFnTG9hZE9yU3RvcmU7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRv
VGFnTG9hZE9yU3RvcmU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZTsKICNlbmRpZgogICAgICAgICAgICAgfSBkZmc7CiAgICAgICAgICAgICBz
dHJ1Y3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lv
biAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRU
b1N0cmluZyhVc2VLaQogICAgIH0KIH0KIAorZW51bSBTcGlsbFJlZ2lzdGVyc01vZGUgeyBOZWVk
VG9TcGlsbCwgRG9udFNwaWxsIH07CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgorI2luY2x1ZGUgIkRGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNs
dWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKQEAgLTE0OSwxOSAr
MTUwLDE5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBt
X2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vz
c2VzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nl
c3Nlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1f
Y29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsKLSAgICAgICAgQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxs
UmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSk7CiAgICAgICAgIGluZm8uY29kZU9yaWdp
biA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2NvZGVPcmlnaW47CiAgICAgICAgIGluZm8uY2Fs
bFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBpbmZvLnBhdGNo
LmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNoZWNrSW1tVG9D
YWxsKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9j
YXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0
YUNhbGxUb1N0cnVjdENoZWNrKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJ
bW1Ub0NhbGwgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlv
bik7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc3RydWN0dXJlQ2hlY2spKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3Jl
ID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3Rv
cmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IGRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9sb2FkT3JTdG9yZSkpOwogI2Vsc2UKLSAg
ICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSk7Ci0g
ICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUg
PSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdGFnTG9hZE9yU3RvcmUpKTsKKyAg
ICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fcGF5bG9hZExvYWRPclN0b3JlKSk7CiAjZW5k
aWYKLSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAg
IGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9j
YXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zbG93
UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0RvbmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZG9uZSkpOwogICAg
ICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fYmFz
ZUdQUjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBpbmZvLnBhdGNoLmRmZy52YWx1ZUdQ
UiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3ZhbHVlR1BSOwpAQCAtMjAxLDYgKzIwMiw5IEBA
IGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkKICAgICBTcGVjdWxhdGl2
ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgY29tcGlsZUJvZHkoc3BlY3VsYXRpdmUpOwog
CisgICAgLy8gR2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCisgICAgc3BlY3VsYXRpdmUucnVuU2xv
d1BhdGhHZW5lcmF0b3JzKCk7CisgICAgCiAgICAgLy8gQ3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9s
aW5lcyBpZiBuZWNlc3NhcnkuCiAgICAgc3BlY3VsYXRpdmUuY3JlYXRlT1NSRW50cmllcygpOwog
CkBAIC0yNzAsNiArMjc0LDkgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJ
VENvZAogICAgIG1vdmUoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICBqdW1wKGZyb21Bcml0eUNoZWNrKTsKICAgICAKKyAgICAvLyBHZW5lcmF0ZSBzbG93
IHBhdGggY29kZS4KKyAgICBzcGVjdWxhdGl2ZS5ydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAg
ICAKICAgICAvLyBDcmVhdGUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzIGlmIG5lY2Vzc2FyeS4KICAg
ICBzcGVjdWxhdGl2ZS5jcmVhdGVPU1JFbnRyaWVzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTUgKzI4LDE1IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg+Ci0jaW5jbHVkZSA8YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg+
Ci0jaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR0NDYWxs
SGVscGVycy5oPgotI2luY2x1ZGUgPGRmZy9ERkdGUFJJbmZvLmg+Ci0jaW5jbHVkZSA8ZGZnL0RG
R0dQUkluZm8uaD4KLSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDxkZmcvREZH
UmVnaXN0ZXJCYW5rLmg+Ci0jaW5jbHVkZSA8aml0L0pJVENvZGUuaD4KKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJERkdGUFJJ
bmZvLmgiCisjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisj
aW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNDgsNiArNDgsNyBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklU
Q29kZUdlbmVyYXRvcjsKIGNsYXNzIE5vZGVUb1JlZ2lzdGVyTWFwOworY2xhc3MgU2xvd1BhdGhH
ZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKIGNsYXNzIFNwZWN1bGF0aW9uUmVjb3Zl
cnk7CiAKQEAgLTEzMCwyMiArMTMxLDQzIEBAIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7
CiAgICAgZW51bSBSZWdpc3Rlck1vZGUgeyBSZWdpc3RlcnNGbHVzaGVkLCBSZWdpc3RlcnNJblVz
ZSB9OwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGRlbHRh
Q2hlY2tJbW1Ub0NhbGwsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbENvbXBhY3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkZWx0YUNhbGxU
b0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BS
LCBSZWdpc3Rlck1vZGUgcmVnaXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCisgICAgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQoCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVJbW0sCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBsb2FkT3JTdG9yZSwKKyAgICAgICAgU2xvd1BhdGhHZW5lcmF0b3Iq
IHNsb3dQYXRoR2VuZXJhdG9yLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSwK
KyAgICAgICAgaW50OF90IGJhc2VHUFIsCisgICAgICAgIGludDhfdCB2YWx1ZUdQUiwKKyAgICAg
ICAgaW50OF90IHNjcmF0Y2hHUFIsCisgICAgICAgIFJlZ2lzdGVyTW9kZSByZWdpc3Rlck1vZGUg
PSBSZWdpc3RlcnNJblVzZSkKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgUHJvcGVydHlB
Y2Nlc3NSZWNvcmQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9u
Q2FsbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgTWFjcm9B
c3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSwgTWFj
cm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVl
VGFnR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSLCBSZWdpc3Rlck1vZGUg
cmVnaXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCisgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQo
CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVJbW0sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHN0cnVjdHVyZUNoZWNrLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFj
dCB0YWdMb2FkT3JTdG9yZSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBh
Y3QgcGF5bG9hZExvYWRPclN0b3JlLAorICAgICAgICBTbG93UGF0aEdlbmVyYXRvciogc2xvd1Bh
dGhHZW5lcmF0b3IsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lLAorICAgICAg
ICBpbnQ4X3QgYmFzZUdQUiwKKyAgICAgICAgaW50OF90IHZhbHVlVGFnR1BSLAorICAgICAgICBp
bnQ4X3QgdmFsdWVHUFIsCisgICAgICAgIGludDhfdCBzY3JhdGNoR1BSLAorICAgICAgICBSZWdp
c3Rlck1vZGUgcmVnaXN0ZXJNb2RlID0gUmVnaXN0ZXJzSW5Vc2UpCiAjZW5kaWYKICAgICAgICAg
OiBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICAgICAgLCBtX2RlbHRhQ2hlY2tJbW1Ub0Nh
bGwoZGVsdGFDaGVja0ltbVRvQ2FsbCkKLSAgICAgICAgLCBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlv
bkNhbGwpCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKGRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spCisgICAgICAgICwgbV9zdHJ1Y3R1cmVJbW0oc3RydWN0dXJlSW1tKQorICAgICAg
ICAsIG1fc3RydWN0dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUoZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSkKKyAgICAgICAgLCBtX2xvYWRPclN0b3JlKGxvYWRPclN0b3JlKQogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUoZGVsdGFDYWxs
VG9UYWdMb2FkT3JTdG9yZSkKLSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlKGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKQorICAgICAgICAsIG1fdGFnTG9hZE9y
U3RvcmUodGFnTG9hZE9yU3RvcmUpCisgICAgICAgICwgbV9wYXlsb2FkTG9hZE9yU3RvcmUocGF5
bG9hZExvYWRPclN0b3JlKQogI2VuZGlmCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb1Nsb3dDYXNl
KGRlbHRhQ2FsbFRvU2xvd0Nhc2UpCi0gICAgICAgICwgbV9kZWx0YUNhbGxUb0RvbmUoZGVsdGFD
YWxsVG9Eb25lKQorICAgICAgICAsIG1fc2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhHZW5lcmF0
b3IpCisgICAgICAgICwgbV9kb25lKGRvbmUpCiAgICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIp
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgLCBtX3ZhbHVlVGFnR1BSKHZhbHVlVGFn
R1BSKQpAQCAtMTU3LDE3ICsxNzksMTYgQEAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsK
ICAgICB9CiAKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6RGF0YUxhYmVsUHRyIG1fZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBtX2Z1bmN0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2RlbHRh
Q2FsbFRvU3RydWN0Q2hlY2s7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX3N0
cnVjdHVyZUltbTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3N0cnVjdHVyZUNoZWNrOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3Qg
bV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxD
b21wYWN0IG1fbG9hZE9yU3RvcmU7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBtX2RlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fdGFn
TG9hZE9yU3RvcmU7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9wYXls
b2FkTG9hZE9yU3RvcmU7CiAjZW5kaWYKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kZWx0
YUNhbGxUb1Nsb3dDYXNlOwotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RlbHRhQ2FsbFRv
RG9uZTsKKyAgICBTbG93UGF0aEdlbmVyYXRvciogbV9zbG93UGF0aEdlbmVyYXRvcjsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIGludDhfdCBtX2Jhc2VHUFI7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBpbnQ4X3QgbV92YWx1ZVRhZ0dQUjsKQEAgLTE5Myw3ICsy
MTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4KDApCiAg
ICAgewogICAgIH0KLQorICAgIAogICAgIGJvb2wgY29tcGlsZShKSVRDb2RlJiBlbnRyeSk7CiAg
ICAgYm9vbCBjb21waWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYgZW50cnlXaXRoQXJpdHlDaGVjayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFu
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxh
bl9oCisjZGVmaW5lIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW5faAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorI2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBTaWxlbnRTcGlsbEFjdGlv
biB7CisgICAgRG9Ob3RoaW5nRm9yU3BpbGwsCisgICAgU3RvcmUzMlRhZywKKyAgICBTdG9yZTMy
UGF5bG9hZCwKKyAgICBTdG9yZVB0ciwKKyAgICBTdG9yZURvdWJsZQorfTsKKworZW51bSBTaWxl
bnRGaWxsQWN0aW9uIHsKKyAgICBEb05vdGhpbmdGb3JGaWxsLAorICAgIFNldEludDMyQ29uc3Rh
bnQsCisgICAgU2V0Qm9vbGVhbkNvbnN0YW50LAorICAgIFNldENlbGxDb25zdGFudCwKKyAgICBT
ZXRUcnVzdGVkSlNDb25zdGFudCwKKyAgICBTZXRKU0NvbnN0YW50LAorICAgIFNldEpTQ29uc3Rh
bnRUYWcsCisgICAgU2V0SlNDb25zdGFudFBheWxvYWQsCisgICAgU2V0SW50MzJUYWcsCisgICAg
U2V0Q2VsbFRhZywKKyAgICBTZXRCb29sZWFuVGFnLAorICAgIFNldERvdWJsZUNvbnN0YW50LAor
ICAgIExvYWQzMlRhZywKKyAgICBMb2FkMzJQYXlsb2FkLAorICAgIExvYWQzMlBheWxvYWRCb3hJ
bnQsCisgICAgTG9hZFB0ciwKKyAgICBMb2FkRG91YmxlLAorICAgIExvYWREb3VibGVCb3hEb3Vi
bGUsCisgICAgTG9hZEpTVW5ib3hEb3VibGUKK307CisKK2NsYXNzIFNpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4geworcHVibGljOgorICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oKQorICAgICAgICA6
IG1fc3BpbGxBY3Rpb24oRG9Ob3RoaW5nRm9yU3BpbGwpCisgICAgICAgICwgbV9maWxsQWN0aW9u
KERvTm90aGluZ0ZvckZpbGwpCisgICAgICAgICwgbV9yZWdpc3RlcigtMSkKKyAgICAgICAgLCBt
X25vZGVJbmRleChOb05vZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuKFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdQUlJlZyBncHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlvbikKKyAg
ICAgICAgLCBtX2ZpbGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAgICAgLCBtX3JlZ2lzdGVyKGdw
cikKKyAgICAgICAgLCBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlv
bihzcGlsbEFjdGlvbikKKyAgICAgICAgLCBtX2ZpbGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAg
ICAgLCBtX3JlZ2lzdGVyKGZwcikKKyAgICAgICAgLCBtX25vZGVJbmRleChub2RlSW5kZXgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNpbGVudFNwaWxsQWN0aW9uPihtX3NwaWxsQWN0aW9u
KTsgfQorICAgIFNpbGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFNpbGVudEZpbGxBY3Rpb24+KG1fZmlsbEFjdGlvbik7IH0KKyAgICAKKyAgICBO
b2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlSW5kZXg7IH0KKyAgICAK
KyAgICBHUFJSZWcgZ3ByKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3Jl
Z2lzdGVyKTsgfQorICAgIEZQUlJlZyBmcHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxG
UFJSZWc+KG1fcmVnaXN0ZXIpOyB9CisgICAgCitwcml2YXRlOgorICAgIGludDhfdCBtX3NwaWxs
QWN0aW9uOworICAgIGludDhfdCBtX2ZpbGxBY3Rpb247CisgICAgaW50OF90IG1fcmVnaXN0ZXI7
CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
bG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdTbG93UGF0aEdlbmVyYXRvcl9oCisjZGVmaW5lIERGR1Nsb3dQYXRoR2VuZXJh
dG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3RlclNh
dmVQbGFuLmgiCisjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKKyNpbmNsdWRlIDx3dGYv
RmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3IgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNsb3dQYXRoR2VuZXJhdG9y
KCkgeyB9CisgICAgdmlydHVhbCB+U2xvd1BhdGhHZW5lcmF0b3IoKSB7IH0KKyAgICB2b2lkIGdl
bmVyYXRlKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBzbG93IHBhdGggJXAgYXQgb2Zm
c2V0IDB4JXhcbiIsIHRoaXMsIGppdC0+bV9qaXQuZGVidWdPZmZzZXQoKSk7CisjZW5kaWYKKyAg
ICAgICAgbV9sYWJlbCA9IGppdC0+bV9qaXQubGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdGVJbnRl
cm5hbChqaXQpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgaml0LT5tX2ppdC5icmVh
a3BvaW50KCk7IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBnZW5lcmF0b3IganVtcHMgYmFjayB0byBz
b21ld2hlcmUKKyNlbmRpZgorICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwo
KSBjb25zdCB7IHJldHVybiBtX2xhYmVsOyB9CisgICAgdmlydHVhbCBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBCeSBkZWZhdWx0IHNsb3cgcGF0aCBnZW5lcmF0b3JzIGRvbid0IGhhdmUgYSBjYWxsLgorICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkNhbGwoKTsKKyAgICB9Citwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqKSA9IDA7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fbGFiZWw7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBKdW1wVHlwZT4KK2NsYXNzIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBTbG93
UGF0aEdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yKEp1
bXBUeXBlIGZyb20sIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0bykKKyAgICAgICAgOiBtX2Zyb20o
ZnJvbSkKKyAgICAgICAgLCBtX3RvKHRvKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBsaW5rRnJvbShTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAg
bV9mcm9tLmxpbmsoJmppdC0+bV9qaXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGp1bXBUbyhT
cGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgaml0LT5tX2ppdC5qdW1wKCkubGlu
a1RvKG1fdG8sICZqaXQtPm1faml0KTsKKyAgICB9CisKKyAgICBKdW1wVHlwZSBtX2Zyb207Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fdG87Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBK
dW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlPgorY2xh
c3MgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRv
cjxKdW1wVHlwZT4geworcHVibGljOgorICAgIENhbGxTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0
aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJl
c3VsdCkKKyAgICAgICAgOiBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGU+KGZyb20s
IGppdC0+bV9qaXQubGFiZWwoKSkKKyAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAg
ICAgICAsIG1fc3BpbGxNb2RlKHNwaWxsTW9kZSkKKyAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQp
CisgICAgeworICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCisgICAgICAg
ICAgICBqaXQtPnNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbChmYWxzZSwgbV9wbGFucywgcmVz
dWx0KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NhbGw7CisgICAgfQorICAgIAorcHJv
dGVjdGVkOgorICAgIHZvaWQgc2V0VXAoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAg
ICAgIHRoaXMtPmxpbmtGcm9tKGppdCk7CisgICAgICAgIGlmIChtX3NwaWxsTW9kZSA9PSBOZWVk
VG9TcGlsbCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LT5zaWxlbnRTcGlsbChtX3BsYW5zW2ld
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHJlY29yZENhbGwoTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCkKKyAgICB7CisgICAgICAgIG1fY2FsbCA9IGNhbGw7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdGVhckRvd24oU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAg
ICAgIGlmIChtX3NwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCkgeworICAgICAgICAgICAgR1BSUmVn
IGNhblRyYW1wbGUgPSBTcGVjdWxhdGl2ZUpJVDo6cGlja0NhblRyYW1wbGUobV9yZXN1bHQpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wbGFucy5zaXplKCk7IGktLTspCisgICAg
ICAgICAgICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0sIGNhblRyYW1wbGUpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMtPmp1bXBUbyhqaXQpOworICAgIH0KKworICAgIEZ1bmN0aW9u
VHlwZSBtX2Z1bmN0aW9uOworICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBtX3NwaWxsTW9kZTsKKyAg
ICBSZXN1bHRUeXBlIG1fcmVzdWx0OworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsK
KyAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbiwgMj4gbV9wbGFuczsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1l
IFJlc3VsdFR5cGU+CitjbGFzcyBDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVy
YXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rp
b25UeXBlLCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJlc3VsdEFuZE5vQXJndW1l
bnRzU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZl
SklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNN
b2RlIHNwaWxsTW9kZSwgUmVzdWx0VHlwZSByZXN1bHQpCisgICAgICAgIDogQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAorICAgICAgICAg
ICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpCisgICAgeworICAgIH0K
KyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVK
SVQqIGppdCkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMt
PnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1f
cmVzdWx0KSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlw
ZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxPgorY2xhc3MgQ2Fs
bFJlc3VsdEFuZE9uZUFyZ3VtZW50U2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxs
U2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4gewor
cHVibGljOgorICAgIENhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUg
ZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsIFJlc3VsdFR5
cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZ3VtZW50MSkKKyAgICAgICAgOiBDYWxsU2xvd1Bh
dGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4oCisgICAgICAg
ICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCkKKyAgICAgICAgLCBt
X2FyZ3VtZW50MShhcmd1bWVudDEpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAg
ICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxs
T3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZ3VtZW50MSkp
OworICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KKworICAgIEFyZ3VtZW50VHlw
ZTEgbV9hcmd1bWVudDE7Cit9OworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlwZSwg
dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVuYW1l
IEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTI+CitjbGFzcyBDYWxsUmVzdWx0
QW5kVHdvQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1Bh
dGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4geworcHVibGlj
OgorICAgIENhbGxSZXN1bHRBbmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0
aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJl
c3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsCisgICAgICAgIEFyZ3VtZW50VHlwZTIgYXJn
dW1lbnQyKQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rp
b25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNw
aWxsTW9kZSwgcmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFyZ3VtZW50MSkKKyAgICAg
ICAgLCBtX2FyZ3VtZW50Mihhcmd1bWVudDIpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7
CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoaml0
LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZ3Vt
ZW50MSwgbV9hcmd1bWVudDIpKTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9
CisKKyAgICBBcmd1bWVudFR5cGUxIG1fYXJndW1lbnQxOworICAgIEFyZ3VtZW50VHlwZTIgbV9h
cmd1bWVudDI7Cit9OworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5h
bWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3Vt
ZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTM+
CitjbGFzcyBDYWxsUmVzdWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcgorICAg
IDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBS
ZXN1bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBq
aXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNw
aWxsTW9kZSwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLAorICAg
ICAgICBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MiwgQXJndW1lbnRUeXBlMyBhcmd1bWVudDMpCisg
ICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJl
c3VsdFR5cGU+KAorICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCBy
ZXN1bHQpCisgICAgICAgICwgbV9hcmd1bWVudDEoYXJndW1lbnQxKQorICAgICAgICAsIG1fYXJn
dW1lbnQyKGFyZ3VtZW50MikKKyAgICAgICAgLCBtX2FyZ3VtZW50Myhhcmd1bWVudDMpCisgICAg
eworICAgIH0KKworcHJvdGVjdGVkOiAgICAKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3Bl
Y3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAg
ICAgIHRoaXMtPnJlY29yZENhbGwoCisgICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCisg
ICAgICAgICAgICAgICAgdGhpcy0+bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJndW1l
bnQxLCBtX2FyZ3VtZW50MiwKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50MykpOworICAgICAg
ICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KKworICAgIEFyZ3VtZW50VHlwZTEgbV9hcmd1
bWVudDE7CisgICAgQXJndW1lbnRUeXBlMiBtX2FyZ3VtZW50MjsKKyAgICBBcmd1bWVudFR5cGUz
IG1fYXJndW1lbnQzOworfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBB
cmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5
cGUzLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQ+CitjbGFzcyBDYWxsUmVzdWx0QW5kRm91
ckFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1YmxpYzoKKyAg
ICBDYWxsUmVzdWx0QW5kRm91ckFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBK
dW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24s
CisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0
LCBBcmd1bWVudFR5cGUxIGFyZ3VtZW50MSwKKyAgICAgICAgQXJndW1lbnRUeXBlMiBhcmd1bWVu
dDIsIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQzLCBBcmd1bWVudFR5cGU0IGFyZ3VtZW50NCkKKyAg
ICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVz
dWx0VHlwZT4oCisgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJl
c3VsdCkKKyAgICAgICAgLCBtX2FyZ3VtZW50MShhcmd1bWVudDEpCisgICAgICAgICwgbV9hcmd1
bWVudDIoYXJndW1lbnQyKQorICAgICAgICAsIG1fYXJndW1lbnQzKGFyZ3VtZW50MykKKyAgICAg
ICAgLCBtX2FyZ3VtZW50NChhcmd1bWVudDQpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7
CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoCisg
ICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgdGhpcy0+bV9m
dW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJndW1lbnQxLCBtX2FyZ3VtZW50MiwKKyAgICAg
ICAgICAgICAgICBtX2FyZ3VtZW50MywgbV9hcmd1bWVudDQpKTsKKyAgICAgICAgdGhpcy0+dGVh
ckRvd24oaml0KTsKKyAgICB9CisKKyAgICBBcmd1bWVudFR5cGUxIG1fYXJndW1lbnQxOworICAg
IEFyZ3VtZW50VHlwZTIgbV9hcmd1bWVudDI7CisgICAgQXJndW1lbnRUeXBlMyBtX2FyZ3VtZW50
MzsKKyAgICBBcmd1bWVudFR5cGU0IG1fYXJndW1lbnQ0OworfTsKKwordGVtcGxhdGU8CisgICAg
dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0
VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUy
LCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQsIHR5
cGVuYW1lIEFyZ3VtZW50VHlwZTU+CitjbGFzcyBDYWxsUmVzdWx0QW5kRml2ZUFyZ3VtZW50c1Ns
b3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBU
eXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1YmxpYzoKKyAgICBDYWxsUmVzdWx0
QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9t
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNw
aWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5
cGUxIGFyZ3VtZW50MSwKKyAgICAgICAgQXJndW1lbnRUeXBlMiBhcmd1bWVudDIsIEFyZ3VtZW50
VHlwZTMgYXJndW1lbnQzLCBBcmd1bWVudFR5cGU0IGFyZ3VtZW50NCwKKyAgICAgICAgQXJndW1l
bnRUeXBlNSBhcmd1bWVudDUpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBU
eXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAorICAgICAgICAgICAgZnJvbSwgaml0LCBm
dW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpCisgICAgICAgICwgbV9hcmd1bWVudDEoYXJndW1l
bnQxKQorICAgICAgICAsIG1fYXJndW1lbnQyKGFyZ3VtZW50MikKKyAgICAgICAgLCBtX2FyZ3Vt
ZW50Myhhcmd1bWVudDMpCisgICAgICAgICwgbV9hcmd1bWVudDQoYXJndW1lbnQ0KQorICAgICAg
ICAsIG1fYXJndW1lbnQ1KGFyZ3VtZW50NSkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6ICAg
IAorICAgIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsK
KyAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbCgKKyAg
ICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICB0aGlzLT5tX2Z1
bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEsIG1fYXJndW1lbnQyLAorICAgICAg
ICAgICAgICAgIG1fYXJndW1lbnQzLCBtX2FyZ3VtZW50NCwgbV9hcmd1bWVudDUpKTsKKyAgICAg
ICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisKKyAgICBBcmd1bWVudFR5cGUxIG1fYXJn
dW1lbnQxOworICAgIEFyZ3VtZW50VHlwZTIgbV9hcmd1bWVudDI7CisgICAgQXJndW1lbnRUeXBl
MyBtX2FyZ3VtZW50MzsKKyAgICBBcmd1bWVudFR5cGU0IG1fYXJndW1lbnQ0OworICAgIEFyZ3Vt
ZW50VHlwZTUgbV9hcmd1bWVudDU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwg
dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlPgoraW5saW5lIFBhc3NP
d25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKKyAgICBKdW1wVHlwZSBmcm9t
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgUmVzdWx0
VHlwZSByZXN1bHQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIoCisgICAgICAgIG5ldyBDYWxsUmVzdWx0QW5kTm9Bcmd1
bWVudHNTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBGdW5jdGlvblR5
cGUsIFJlc3VsdFR5cGU+KAorICAgICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNw
aWxsTW9kZSwgcmVzdWx0KSk7Cit9CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBl
LCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5h
bWUgQXJndW1lbnRUeXBlMT4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBz
bG93UGF0aENhbGwoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVu
Y3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUx
IGFyZ3VtZW50MSwKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3Bp
bGwpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZE9u
ZUFyZ3VtZW50U2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rp
b25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5cGUxPigKKyAgICAgICAgICAgICAgICBmcm9t
LCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCwgYXJndW1lbnQxKSk7Cit9CisKK3Rl
bXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5
cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUg
QXJndW1lbnRUeXBlMj4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93
UGF0aENhbGwoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rp
b25UeXBlIGZ1bmN0aW9uLAorICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFy
Z3VtZW50MSwgQXJndW1lbnRUeXBlMiBhcmd1bWVudDIsCisgICAgU3BpbGxSZWdpc3RlcnNNb2Rl
IHNwaWxsTW9kZSA9IE5lZWRUb1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAg
ICAgbmV3IENhbGxSZXN1bHRBbmRUd29Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAg
ICAgICAgIEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGUsIEFyZ3VtZW50VHlwZTEs
IEFyZ3VtZW50VHlwZTI+KAorICAgICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNw
aWxsTW9kZSwgcmVzdWx0LCBhcmd1bWVudDEsIGFyZ3VtZW50MikpOworfQorCit0ZW1wbGF0ZTwK
KyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBS
ZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50
VHlwZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTM+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0
aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZl
SklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwg
QXJndW1lbnRUeXBlMSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAorICAgIEFy
Z3VtZW50VHlwZTMgYXJndW1lbnQzLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVl
ZFRvU3BpbGwpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3Vs
dEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlw
ZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5cGUxLCBBcmd1bWVudFR5cGUy
LAorICAgICAgICAgICAgQXJndW1lbnRUeXBlMz4oCisgICAgICAgICAgICAgICAgZnJvbSwgaml0
LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQsIGFyZ3VtZW50MSwgYXJndW1lbnQyLAorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50MykpOworfQorCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBK
dW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAg
IHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTIsIHR5cGVuYW1l
IEFyZ3VtZW50VHlwZTMsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlND4KK2lubGluZSBQYXNz
T3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aENhbGwoCisgICAgSnVtcFR5cGUgZnJv
bSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgIFJlc3Vs
dFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZ3VtZW50MSwgQXJndW1lbnRUeXBlMiBhcmd1
bWVudDIsCisgICAgQXJndW1lbnRUeXBlMyBhcmd1bWVudDMsIEFyZ3VtZW50VHlwZTQgYXJndW1l
bnQ0LAorICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIoCisgICAgICAgIG5ldyBDYWxsUmVzdWx0QW5kRm91ckFyZ3Vt
ZW50c1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlw
ZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRUeXBlMSwgQXJndW1lbnRUeXBlMiwKKyAgICAgICAgICAg
IEFyZ3VtZW50VHlwZTMsIEFyZ3VtZW50VHlwZTQ+KAorICAgICAgICAgICAgICAgIGZyb20sIGpp
dCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0LCBhcmd1bWVudDEsIGFyZ3VtZW50MiwKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudDMsIGFyZ3VtZW50NCkpOworfQorCit0ZW1wbGF0ZTwKKyAg
ICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1
bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1lIEFyZ3VtZW50VHlw
ZTIsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTMsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlNCwg
dHlwZW5hbWUgQXJndW1lbnRUeXBlNT4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJh
dG9yPiBzbG93UGF0aENhbGwoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGpp
dCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVu
dFR5cGUxIGFyZ3VtZW50MSwgQXJndW1lbnRUeXBlMiBhcmd1bWVudDIsCisgICAgQXJndW1lbnRU
eXBlMyBhcmd1bWVudDMsIEFyZ3VtZW50VHlwZTQgYXJndW1lbnQ0LCBBcmd1bWVudFR5cGU1IGFy
Z3VtZW50NSwKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3BpbGwp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZEZpdmVB
cmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBGdW5jdGlv
blR5cGUsIFJlc3VsdFR5cGUsIEFyZ3VtZW50VHlwZTEsIEFyZ3VtZW50VHlwZTIsCisgICAgICAg
ICAgICBBcmd1bWVudFR5cGUzLCBBcmd1bWVudFR5cGU0LCBBcmd1bWVudFR5cGU1PigKKyAgICAg
ICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCwgYXJndW1l
bnQxLCBhcmd1bWVudDIsCisgICAgICAgICAgICAgICAgYXJndW1lbnQzLCBhcmd1bWVudDQsIGFy
Z3VtZW50NSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRGVz
dGluYXRpb25UeXBlLCB0eXBlbmFtZSBTb3VyY2VUeXBlLCB1bnNpZ25lZCBudW1iZXJPZkFzc2ln
bm1lbnRzPgorY2xhc3MgQXNzaWduaW5nU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgSnVtcGlu
Z1Nsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlPiB7CitwdWJsaWM6CisgICAgQXNzaWduaW5nU2xv
d1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCB0bywgRGVzdGluYXRpb25UeXBlIGRlc3RpbmF0aW9uW251bWJlck9mQXNzaWdubWVudHNd
LCBTb3VyY2VUeXBlIHNvdXJjZVtudW1iZXJPZkFzc2lnbm1lbnRzXSkKKyAgICAgICAgOiBKdW1w
aW5nU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGU+KGZyb20sIHRvKQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBc3NpZ25tZW50czsgaS0tOykgeworICAgICAgICAg
ICAgbV9kZXN0aW5hdGlvbltpXSA9IGRlc3RpbmF0aW9uW2ldOworICAgICAgICAgICAgbV9zb3Vy
Y2VbaV0gPSBzb3VyY2VbaV07CisgICAgICAgIH0KKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsK
KyAgICAgICAgdGhpcy0+bGlua0Zyb20oaml0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtYmVyT2ZBc3NpZ25tZW50czsgaS0tOykKKyAgICAgICAgICAgIGppdC0+bV9qaXQubW92ZSht
X3NvdXJjZVtpXSwgbV9kZXN0aW5hdGlvbltpXSk7CisgICAgICAgIHRoaXMtPmp1bXBUbyhqaXQp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBEZXN0aW5hdGlvblR5cGUgbV9kZXN0aW5hdGlvbltu
dW1iZXJPZkFzc2lnbm1lbnRzXTsKKyAgICBTb3VyY2VUeXBlIG1fc291cmNlW251bWJlck9mQXNz
aWdubWVudHNdOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIERl
c3RpbmF0aW9uVHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZSwgdW5zaWduZWQgbnVtYmVyT2ZBc3Np
Z25tZW50cz4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aE1v
dmUoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgU291cmNlVHlwZSBz
b3VyY2VbbnVtYmVyT2ZBc3NpZ25tZW50c10sIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlvbltu
dW1iZXJPZkFzc2lnbm1lbnRzXSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIoCisgICAgICAgIG5l
dyBBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBEZXN0
aW5hdGlvblR5cGUsIFNvdXJjZVR5cGUsIG51bWJlck9mQXNzaWdubWVudHM+KAorICAgICAgICAg
ICAgICAgIGZyb20sIGppdC0+bV9qaXQubGFiZWwoKSwgZGVzdGluYXRpb24sIHNvdXJjZSkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRGVzdGluYXRpb25UeXBl
LCB0eXBlbmFtZSBTb3VyY2VUeXBlPgoraW5saW5lIFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0
b3I+IHNsb3dQYXRoTW92ZSgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0
LCBTb3VyY2VUeXBlIHNvdXJjZSwgRGVzdGluYXRpb25UeXBlIGRlc3RpbmF0aW9uKQoreworICAg
IFNvdXJjZVR5cGUgc291cmNlQXJyYXlbMV0gPSB7IHNvdXJjZSB9OworICAgIERlc3RpbmF0aW9u
VHlwZSBkZXN0aW5hdGlvbkFycmF5WzFdID0geyBkZXN0aW5hdGlvbiB9OworICAgIHJldHVybiBh
ZG9wdFB0cigKKyAgICAgICAgbmV3IEFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAg
ICAgICAgSnVtcFR5cGUsIERlc3RpbmF0aW9uVHlwZSwgU291cmNlVHlwZSwgMT4oCisgICAgICAg
ICAgICAgICAgZnJvbSwgaml0LT5tX2ppdC5sYWJlbCgpLCBkZXN0aW5hdGlvbkFycmF5LCBzb3Vy
Y2VBcnJheSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRGVz
dGluYXRpb25UeXBlLCB0eXBlbmFtZSBTb3VyY2VUeXBlPgoraW5saW5lIFBhc3NPd25QdHI8U2xv
d1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoTW92ZSgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxh
dGl2ZUpJVCogaml0LCBTb3VyY2VUeXBlIHNvdXJjZTEsIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5h
dGlvbjEsIFNvdXJjZVR5cGUgc291cmNlMiwgRGVzdGluYXRpb25UeXBlIGRlc3RpbmF0aW9uMikK
K3sKKyAgICBTb3VyY2VUeXBlIHNvdXJjZUFycmF5WzJdID0geyBzb3VyY2UxLCBzb3VyY2UyIH07
CisgICAgRGVzdGluYXRpb25UeXBlIGRlc3RpbmF0aW9uQXJyYXlbMl0gPSB7IGRlc3RpbmF0aW9u
MSwgZGVzdGluYXRpb24yIH07CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQXNz
aWduaW5nU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRGVzdGluYXRp
b25UeXBlLCBTb3VyY2VUeXBlLCAyPigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQtPm1faml0
LmxhYmVsKCksIGRlc3RpbmF0aW9uQXJyYXksIHNvdXJjZUFycmF5KSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRChERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHU2xvd1BhdGhHZW5lcmF0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDExNDIx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklU
KQogCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0J5dGVB
cnJheS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0zNTgsNiArMzU5
LDMzIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJbmQKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorY2xhc3MgVmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yCisgICAg
OiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBEX0RG
R09wZXJhdGlvbl9FSiwgSlNWYWx1ZVJlZ3M+IHsKK3B1YmxpYzoKKyAgICBWYWx1ZVRvTnVtYmVy
U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb20sIFNw
ZWN1bGF0aXZlSklUKiBqaXQsCisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcganNWYWx1ZVRhZ0dQUiwgR1BSUmVnIGpzVmFsdWVQYXls
b2FkR1BSKQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6
SnVtcCwgRF9ERkdPcGVyYXRpb25fRUosIEpTVmFsdWVSZWdzPigKKyAgICAgICAgICAgIGZyb20s
IGppdCwgZGZnQ29udmVydEpTVmFsdWVUb051bWJlciwgTmVlZFRvU3BpbGwsIEpTVmFsdWVSZWdz
KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUikpCisgICAgICAgICwgbV9qc1ZhbHVlVGFn
R1BSKGpzVmFsdWVUYWdHUFIpCisgICAgICAgICwgbV9qc1ZhbHVlUGF5bG9hZEdQUihqc1ZhbHVl
UGF5bG9hZEdQUikKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIHNl
dFVwKGppdCk7CisgICAgICAgIHJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKGRmZ0NvbnZl
cnRKU1ZhbHVlVG9OdW1iZXIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBtX2pzVmFsdWVUYWdH
UFIsIG1fanNWYWx1ZVBheWxvYWRHUFIpKTsKKyAgICAgICAgaml0LT5ib3hEb3VibGUoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIG1fcmVzdWx0LnRhZ0dQUigpLCBtX3Jlc3VsdC5wYXlsb2FkR1BS
KCkpOworICAgICAgICB0ZWFyRG93bihqaXQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHUFJS
ZWcgbV9qc1ZhbHVlVGFnR1BSOworICAgIEdQUlJlZyBtX2pzVmFsdWVQYXlsb2FkR1BSOworfTsK
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUm
IG5vZGUpCiB7CiAgICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
IHsKQEAgLTM5MywyMyArNDIxLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlVmFsdWUKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9uTnVtZXJpYyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpOwogCi0gICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhh
dmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICBKSVRDb21waWxlcjo6SnVtcCBo
YXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwotCi0gICAgLy8gTmV4dCBoYW5kbGUgY2Vs
bHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKLSAgICBub25OdW1lcmljLmxpbmsoJm1faml0KTsK
LSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRH
UFIpOwotICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb051bWJlciwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIHRhZ0dQUiwgcGF5bG9hZEdQUik7Ci0gICAgYm94RG91YmxlKEZQ
UkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwot
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb051bWJlciA9IG1faml0Lmp1bXAo
KTsKLSAgICAKLSAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAgaXNJbnRlZ2Vy
LmxpbmsoJm1faml0KTsKLSAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKICAgICBt
X2ppdC5tb3ZlKHRhZ0dQUiwgcmVzdWx0VGFnR1BSKTsKICAgICBtX2ppdC5tb3ZlKHBheWxvYWRH
UFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIGhhc0NhbGxlZFRvTnVtYmVyLmxpbmsoJm1faml0
KTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBWYWx1ZVRvTnVtYmVy
U2xvd1BhdGhHZW5lcmF0b3Iobm9uTnVtZXJpYywgdGhpcywgcmVzdWx0VGFnR1BSLCByZXN1bHRQ
YXlsb2FkR1BSLCB0YWdHUFIsIHBheWxvYWRHUFIpKSk7CisKICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiB9CiAKQEAgLTQzMiwxMyArNDQ5LDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5m
cHIoKTsKICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgb3AxLnVz
ZSgpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2pp
dC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFu
Y2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRy
dW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIs
IGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogCi0gICAgICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQz
MiwgZ3ByLCBmcHIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGdwcik7CisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVn
ZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CiAKLSAgICAgICAgdHJ1bmNhdGVkVG9JbnRl
Z2VyLmxpbmsoJm1faml0KTsKICAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG1fY29tcGlsZUlu
ZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDUwLDE5ICs0NjQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVWYWx1ZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgb3AxLnVz
ZSgpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwotCi0gICAgLy8gRmlyc3QgaGFuZGxlIG5vbi1pbnRlZ2VycwotICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0
SlNWYWx1ZVRvSW50MzIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCB0YWdHUFIsIHBheWxvYWRH
UFIpOwotICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7
Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVy
OjpKdW1wIGhhc0NhbGxlZFRvSW50MzIgPSBtX2ppdC5qdW1wKCk7CisgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNOb3RJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogCi0gICAgLy8g
VGhlbiBoYW5kbGUgaW50ZWdlcnMuCi0gICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKICAgICBt
X2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdQUik7Ci0gICAgaGFzQ2FsbGVkVG9JbnQzMi5s
aW5rKCZtX2ppdCk7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KGlzTm90SW50ZWdlciwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0ludDMyLCByZXN1bHRHUFIs
IHRhZ0dQUiwgcGF5bG9hZEdQUikpOworICAgIAogICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIApAQCAt
NDkzLDcgKzUwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMK
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogfQogCi1KSVRDb21waWxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JO
b25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPcmln
aW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9h
ZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVt
cCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKIHsKICAgICBt
X2ppdC5iZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOwogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwpAQCAtNTA0LDMyICs1MTEsNTAgQEAgSklUQ29t
cGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZAogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxDb21wYWN0IHRhZ0xvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkMzJXaXRoQ29tcGFjdEFk
ZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1
bHRUYWdHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHBheWxvYWRMb2Fk
V2l0aFBhdGNoID0gbV9qaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklU
Q29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOwog
ICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICBz
dHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0
LmlzU2V0KCkpCi0gICAgICAgIHNsb3dQYXRoVGFyZ2V0LmxpbmsoJm1faml0KTsKLSAgICAKLSAg
ICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2UgPSBtX2ppdC5sYWJlbCgpOwotCi0gICAgaWYg
KHNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCkKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBmdW5jdGlvbkNhbGw7Ci0gICAgaWYgKGJhc2VUYWdHUFJPck5vbmUgPT0gSW52YWxpZEdQUlJl
ZykKLSAgICAgICAgZnVuY3Rpb25DYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgSlNWYWx1ZTo6Q2VsbFRh
ZywgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwotICAgIGVs
c2UKLSAgICAgICAgZnVuY3Rpb25DYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZVRhZ0dQUk9yTm9u
ZSwgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwotICAgIGlm
IChzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCi0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAKLSAgICBkb25lLmxpbmso
Jm1faml0KTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQu
bGFiZWwoKTsKIAotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVj
b3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1
cmVDaGVjaywgdGFnTG9hZFdpdGhQYXRjaCwgcGF5bG9hZExvYWRXaXRoUGF0Y2gsIHNsb3dDYXNl
LCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZVBheWxvYWRHUFIpLCBzYWZlQ2FzdDxp
bnQ4X3Q+KHJlc3VsdFRhZ0dQUiksIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0UGF5bG9hZEdQUiks
IHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUiksIHNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCA/
IFByb3BlcnR5QWNjZXNzUmVjb3JkOjpSZWdpc3RlcnNJblVzZSA6IFByb3BlcnR5QWNjZXNzUmVj
b3JkOjpSZWdpc3RlcnNGbHVzaGVkKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsK
KyAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgIGlmIChiYXNlVGFn
R1BST3JOb25lID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgaWYgKCFzbG93UGF0aFRhcmdl
dC5pc1NldCgpKSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVDaGVjaywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9h
ZEdQUiksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNWYWx1ZTo6Q2Vs
bFRhZyksIGJhc2VQYXlsb2FkR1BSLAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRp
Zmllck51bWJlcikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc3RydWN0
dXJlQ2hlY2spOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7
CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLAorICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpLCBiYXNlUGF5bG9h
ZEdQUiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghc2xvd1BhdGhUYXJnZXQuaXNTZXQo
KSkgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlQ2hlY2ssIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBi
YXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQUiwKKyAgICAgICAgICAgICAgICBpZGVudGlm
aWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKHN0cnVjdHVyZUNoZWNrKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1Bh
dGhUYXJnZXQpOworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsCisgICAg
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwg
YmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIsCisgICAgICAgICAgICAgICAgaWRlbnRp
ZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9qaXQuYWRk
UHJvcGVydHlBY2Nlc3MoCisgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKAorICAgICAgICAg
ICAgY29kZU9yaWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywKKyAgICAg
ICAgICAgIHRhZ0xvYWRXaXRoUGF0Y2gsIHBheWxvYWRMb2FkV2l0aFBhdGNoLCBzbG93UGF0aC5n
ZXQoKSwgZG9uZUxhYmVsLAorICAgICAgICAgICAgc2FmZUNhc3Q8aW50OF90PihiYXNlUGF5bG9h
ZEdQUiksIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0VGFnR1BSKSwKKyAgICAgICAgICAgIHNhZmVD
YXN0PGludDhfdD4ocmVzdWx0UGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQ
UiksCisgICAgICAgICAgICBzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwgPyBQcm9wZXJ0eUFjY2Vz
c1JlY29yZDo6UmVnaXN0ZXJzSW5Vc2UgOiBQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJz
Rmx1c2hlZCkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVn
IHZhbHVlUGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGhUYXJnZXQpCkBAIC01NDUsMTYgKzU3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgdGFnU3Rv
cmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVRh
Z0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgSklUQ29tcGlsZXI6OkRh
dGFMYWJlbDMyIHBheWxvYWRTdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlMzJXaXRoQWRkcmVz
c09mZnNldFBhdGNoKHZhbHVlUGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQot
ICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKLQotICAgIGlmIChzbG93UGF0aFRhcmdl
dC5pc1NldCgpKQotICAgICAgICBzbG93UGF0aFRhcmdldC5saW5rKCZtX2ppdCk7Ci0KLSAgICBK
SVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2UgPSBtX2ppdC5sYWJlbCgpOwotCi0gICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgSklUQ29tcGlsZXI6OkxhYmVs
IGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAgICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRp
bWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKGF0KG1fY29tcGlsZUluZGV4
KS5jb2RlT3JpZ2luKSkgewogICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCkBAIC01Njcs
MTMgKzU4MywyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9u
Q2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0aW1pemVkQ2FsbCwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5
bG9hZEdQUiwgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwot
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0KLSAgICBkb25lLmxp
bmsoJm1faml0KTsKLSAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFi
ZWwoKTsKLQotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3Jk
KGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVD
aGVjaywgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QodGFnU3RvcmVXaXRoUGF0Y2gubGFi
ZWwoKSksIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHBheWxvYWRTdG9yZVdpdGhQYXRj
aC5sYWJlbCgpKSwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlUGF5
bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4odmFsdWVUYWdHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+
KHZhbHVlUGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikpKTsKKyAgICBP
d25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgIGlmICghc2xvd1BhdGhUYXJn
ZXQuaXNTZXQoKSkgeworICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAg
ICAgIHN0cnVjdHVyZUNoZWNrLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBJbnZhbGlkR1BSUmVnLCB2
YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLAorICAgICAgICAgICAgYmFzZVBheWxvYWRHUFIs
IGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
c3RydWN0dXJlQ2hlY2spOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFyZ2V0
KTsKKyAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wdGltaXplZENhbGwsIEludmFsaWRHUFJSZWcsIHZhbHVlVGFnR1BSLCB2YWx1
ZVBheWxvYWRHUFIsCisgICAgICAgICAgICBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmllcihpZGVu
dGlmaWVyTnVtYmVyKSk7CisgICAgfQorICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKAorICAg
ICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKKyAgICAgICAgICAgIGNvZGVPcmlnaW4sIHN0cnVj
dHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCisgICAgICAgICAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsQ29tcGFjdCh0YWdTdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHBheWxvYWRTdG9yZVdpdGhQYXRjaC5sYWJl
bCgpKSwKKyAgICAgICAgICAgIHNsb3dQYXRoLmdldCgpLCBkb25lTGFiZWwsIHNhZmVDYXN0PGlu
dDhfdD4oYmFzZVBheWxvYWRHUFIpLAorICAgICAgICAgICAgc2FmZUNhc3Q8aW50OF90Pih2YWx1
ZVRhZ0dQUiksIHNhZmVDYXN0PGludDhfdD4odmFsdWVQYXlsb2FkR1BSKSwKKyAgICAgICAgICAg
IHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGludmVydCkK
QEAgLTc0NCw2ICs3NzUsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaAogICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBKdW1wVHlwZT4KK2NsYXNzIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhH
ZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNf
REZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7CitwdWJsaWM6CisgICAgQ29tcGFyZUFuZEJveEJv
b2xlYW5TbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRp
dmVKSVQqIGppdCwKKyAgICAgICAgU19ERkdPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLAorICAgICAgICBHUFJS
ZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgICAgICA6IENhbGxTbG93UGF0aEdl
bmVyYXRvcjxKdW1wVHlwZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAorICAgICAgICAg
ICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIHJlc3VsdCkKKyAgICAgICAgLCBt
X2FyZzFUYWcoYXJnMVRhZykKKyAgICAgICAgLCBtX2FyZzFQYXlsb2FkKGFyZzFQYXlsb2FkKQor
ICAgICAgICAsIG1fYXJnMlRhZyhhcmcyVGFnKQorICAgICAgICAsIG1fYXJnMlBheWxvYWQoYXJn
MlBheWxvYWQpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAg
dGhpcy0+c2V0VXAoaml0KTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbCgKKyAgICAgICAgICAg
IGppdC0+Y2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0
aGlzLT5tX3Jlc3VsdCwgbV9hcmcxVGFnLCBtX2FyZzFQYXlsb2FkLCBtX2FyZzJUYWcsCisgICAg
ICAgICAgICAgICAgbV9hcmcyUGF5bG9hZCkpOworICAgICAgICBqaXQtPm1faml0LmFuZDMyKEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHRoaXMtPm1fcmVzdWx0KTsKKyAgICAgICAgdGhp
cy0+dGVhckRvd24oaml0KTsKKyAgICB9CisgICAKK3ByaXZhdGU6CisgICAgR1BSUmVnIG1fYXJn
MVRhZzsKKyAgICBHUFJSZWcgbV9hcmcxUGF5bG9hZDsKKyAgICBHUFJSZWcgbV9hcmcyVGFnOwor
ICAgIEdQUlJlZyBtX2FyZzJQYXlsb2FkOworfTsKKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0
aW9uKQogewogICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CkBA
IC03ODEsMTcgKzg0OCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBh
eWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIAogICAgICAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1
bHQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIAotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCBy
ZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwg
YXJnMlBheWxvYWRHUFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3Rl
ZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBoYXZl
UmVzdWx0LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFk
b3B0UHRyKAorICAgICAgICAgICAgICAgIG5ldyBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yPEpJVENvbXBpbGVyOjpKdW1wTGlzdD4oCisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBoZWxwZXJGdW5jdGlvbiwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQ
UiwKKyAgICAgICAgICAgICAgICAgICAgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQ
YXlsb2FkR1BSKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sZWFuUmVzdWx0
KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOwpAQCAtODY3LDYgKzkyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGUKICAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAm
JiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBp
ZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVy
ZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3Rs
eSBlcXVhbC4KKyAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGZsdXNoIHJlZ2lzdGVycyBp
bnN0ZWFkIG9mIHNpbGVudCBzcGlsbC9maWxsLgogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcx
UGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubW92
ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKCFpbnZlcnQpLCByZXN1bHRQYXlsb2FkR1BSKTsK
QEAgLTE2NjQsMTcgKzE3MjUsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2lj
YWxOb3QoTgogICAgICAgICAKICAgICBhcmcxLnVzZSgpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1
bXAgZmFzdENhc2UgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFUYWdH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7Ci0gICAgICAgIAotICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwotICAgIGNhbGxPcGVyYXRp
b24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdH
UFIsIGFyZzFQYXlsb2FkR1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBh
eWxvYWRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvTm90ID0gbV9qaXQuanVtcCgpOwot
ICAgICAgICAKLSAgICBmYXN0Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CisgICAgCiAgICAgbV9q
aXQubW92ZShhcmcxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CiAKLSAgICBkb05vdC5s
aW5rKCZtX2ppdCk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIHNsb3dQYXRo
Q2FsbCgKKyAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9v
bGVhbiwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwKKyAgICAgICAgICAgIGFyZzFQYXls
b2FkR1BSKSk7CisgICAgCiAgICAgbV9qaXQueG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQ
YXlsb2FkR1BSKTsKICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGls
ZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQpAQCAtMjUwOSwxNSArMjU2
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
cHJvcGVydHkudXNlKCk7CiAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgd2l0aGluQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgIC8v
IENvZGUgdG8gaGFuZGxlIHB1dCBiZXlvbmQgYXJyYXkgYm91bmRzLgotICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoUmVnKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihtX2pp
dC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0
cmljdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcp
OwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2hSZWcpOwotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCB3YXNCZXlvbmRBcnJheUJvdW5kcyA9IG1faml0Lmp1bXAoKTsKLQot
ICAgICAgICB3aXRoaW5BcnJheUJvdW5kcy5saW5rKCZtX2ppdCk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAKICAgICAgICAgLy8g
R2V0IHRoZSBhcnJheSBzdG9yYWdlLgogICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0
Y2hSZWc7CkBAIC0yNTM5LDggKzI1OTAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5Lgog
ICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpKTsKLQotICAgICAgICB3YXNCZXlvbmRBcnJheUJvdW5kcy5saW5rKCZtX2ppdCk7
CisgICAgICAgIAorICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywKKyAg
ICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICBJbnZhbGlkR1BSUmVnLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOwogCiAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogICAgICAgICBicmVhazsKQEAgLTI3MzEsMTUgKzI3ODYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBzdG9yYWdlR1BSKTsKICAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0g
ICAgICAgIAotICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2gsIHN0b3JhZ2VHUFIsIHN0
b3JhZ2VMZW5ndGhHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIpOwot
ICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJy
YXlQdXNoLCBKU1ZhbHVlUmVncyhzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwgdmFsdWVU
YWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZUdQUikpOwogICAgICAgICAKICAgICAgICAganNW
YWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2NCw3ICsyODExLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VH
UFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxl
bmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBlbXB0eUFy
cmF5Q2FzZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFn
ZUxlbmd0aEdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRD
YXNlczsKKyAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAg
ICAgICAgCkBAIC0yNzc1LDMwICsyODIzLDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaG9sZUNhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwgdmFsdWVUYWdHUFIpOworICAgICAg
ICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BS
KSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpKTsKIAogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUuYXBwZW5k
KG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgICAgICBob2xlQ2FzZS5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIGVtcHR5QXJyYXlDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkudGFnKCkpLCB2YWx1
ZVRhZ0dQUik7Ci0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mihqc1VuZGVmaW5lZCgpLnBheWxvYWQoKSksIHZhbHVlUGF5bG9hZEdQUik7Ci0gICAgICAgIGRv
bmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgICAgICBzbG93Q2FzZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25BcnJheVBvcCwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZUdQUik7Ci0gICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUik7
Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgCisgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAg
ICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BS
LAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmlu
ZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIpKTsKKyAgICAgICAgCisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAg
ICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOwor
CiAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yOTE0LDIyICsyOTU1LDE3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IG1faml0Lm1vdmUob3AxVGFnR1BSLCByZXN1bHRUYWdHUFIpOwogICAgICAgICAgICAgbV9qaXQu
bW92ZShvcDFQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBhbHJlYWR5UHJpbWl0aXZlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmFwcGVu
ZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTU3RyaW5nOjpzX2luZm8pKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVz
dWx0UGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvUHJp
bWl0aXZlLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG9wMVRhZ0dQUiwgb3AxUGF5
bG9hZEdQUik7Ci0gICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQ
UiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoJkpTU3RyaW5nOjpzX2luZm8pKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKG9wMVRhZ0dQUiwgcmVzdWx0VGFnR1BSKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUo
b3AxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBub3RQ
cmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLAorICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBvcDFUYWdHUFIs
IG9wMVBheWxvYWRHUFIpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAtMzA5NiwxOCArMzEzMiwxNSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBlbWl0
QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwg
c2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
LSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0g
ICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlzSW5saW5lZCwgcmVzdWx0R1BSLCBwcm90
b0dQUiwgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlz
LCByZXN1bHRHUFIsIHByb3RvR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzSW5saW5lZCwg
cmVzdWx0R1BSLCBwcm90b0dQUiwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZVRoaXMsIHJlc3VsdEdQUiwgcHJvdG9H
UFIpKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBi
cmVhazsKQEAgLTMxMjQsMTUgKzMxNTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgc2xvd1BhdGgubGluaygmbV9q
aXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUik7
Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0g
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BS
KSk7CiAgICAgICAgIAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3NDIsMTQgKzM3NjcsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29t
cGlsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRD
b21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOwogCi0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHdhc0Zhc3QgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgc3RydWN0dXJl
c05vdE1hdGNoLmxpbmsoJm1faml0KTsKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25SZXNvbHZlR2xvYmFsLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIHJl
c29sdmVJbmZvR1BSLCAmbV9qaXQuY29kZUJsb2NrKCktPmlkZW50aWZpZXIoZGF0YS5pZGVudGlm
aWVyTnVtYmVyKSk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSKTsKLQotICAgICAgICB3YXNGYXN0LmxpbmsoJm1faml0KTsKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICAgICAgc3RydWN0dXJlc05vdE1hdGNoLCB0aGlzLCBvcGVyYXRpb25SZXNvbHZl
R2xvYmFsLAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiksIHJlc29sdmVJbmZvR1BSLAorICAgICAgICAgICAgICAgICZtX2ppdC5jb2Rl
QmxvY2soKS0+aWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIpKSk7CiAKICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzY1LDEzICszNzg3LDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1v
dmUodmFsdWVQYXlsb2FkR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgYWxyZWFkeUNyZWF0ZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZXN1
bHRHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpOwogICAgICAgICAKLSAgICAgICAgYWxyZWFkeUNyZWF0ZWQubGluaygmbV9qaXQpOwor
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChu
b3RDcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZXN1bHRHUFIpKTsK
ICAgICAgICAgCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMzc4MywxMyArMzgwMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZh
bHVlLnRhZ0dQUigpOwogICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5
bG9hZEdQUigpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRl
ZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgICAgIAotICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbiwgdmFsdWVQYXlsb2FkR1BSKTsKLSAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
dmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAgICAg
ICAgIAotICAgICAgICBub3RDcmVhdGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAg
Y3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24sIEludmFsaWRHUFJSZWcs
IHZhbHVlUGF5bG9hZEdQUikpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM4MDksMTQgKzM4MjYsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgbV9qaXQu
bW92ZSh2YWx1ZVBheWxvYWRHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBhbHJlYWR5Q3JlYXRlZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgb3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJsb2NrKCktPmZ1bmN0aW9uRGVjbChub2RlLmZ1
bmN0aW9uRGVjbEluZGV4KCkpKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJh
bmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKICAgICAgICAgCi0gICAgICAgIGFscmVhZHlDcmVhdGVkLmxp
bmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBz
bG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgbm90Q3JlYXRlZCwgdGhpcywgb3BlcmF0aW9u
TmV3RnVuY3Rpb24sIHJlc3VsdEdQUiwKKyAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KS0+ZnVuY3Rpb25EZWNsKG5vZGUuZnVuY3Rpb25EZWNsSW5kZXgoKSkpKTsKICAgICAgICAgCiAg
ICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYs
MTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5o
IgogCi0jaW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIKLQogI2lmIEVOQUJMRShERkdfSklUKQogCisj
aW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0J5dGVBcnJheS5o
IgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQpAQCAtMzU4LDYgKzM1OSwzMSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVl
KE5vZGVJCiAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiB9CiAKK2NsYXNzIFZhbHVlVG9OdW1i
ZXJTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxN
YWNyb0Fzc2VtYmxlcjo6SnVtcCwgRF9ERkdPcGVyYXRpb25fRUosIEdQUlJlZz4geworcHVibGlj
OgorICAgIFZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiwgR1BSUmVnIGpzVmFsdWVHUFIpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBEX0RGR09wZXJhdGlvbl9FSiwgR1BSUmVnPigKKyAg
ICAgICAgICAgIGZyb20sIGppdCwgZGZnQ29udmVydEpTVmFsdWVUb051bWJlciwgTmVlZFRvU3Bp
bGwsIHJlc3VsdEdQUikKKyAgICAgICAgLCBtX2pzVmFsdWVHUFIoanNWYWx1ZUdQUikKKyAgICB7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwo
U3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIHNldFVwKGppdCk7CisgICAgICAg
IHJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBtX2pzVmFsdWVHUFIpKTsKKyAgICAgICAgaml0LT5i
b3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIG1fcmVzdWx0KTsKKyAgICAgICAgdGVh
ckRvd24oaml0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1BSUmVnIG1fanNWYWx1ZUdQUjsK
K307CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihO
b2RlJiBub2RlKQogewogICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4
KCkpKSB7CkBAIC0zODUsMTkgKzQxMSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVZhbHVlCiAgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBncHIpOwogICAgIEpJVENv
bXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CiAKLSAgICAvLyBO
ZXh0IGhhbmRsZSBjZWxscyAoJiBvdGhlciBKUyBpbW1lZGlhdGVzKQotICAgIG5vbk51bWVyaWMu
bGluaygmbV9qaXQpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwganNWYWx1ZUdwcik7Ci0gICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBS
LCBncHIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBoYXNDYWxsZWRUb051bWJlciA9IG1faml0Lmp1bXAoKTsKLSAgICAKICAgICAvLyBG
aW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKICAg
ICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIs
IGdwcik7CiAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7Ci0gICAgaGFzQ2FsbGVk
VG9OdW1iZXIubGluaygmbV9qaXQpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFk
b3B0UHRyKG5ldyBWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3Iobm9uTnVtZXJpYywgdGhp
cywgZ3ByLCBqc1ZhbHVlR3ByKSkpOwogICAgIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KQEAg
LTQyMSwxMyArNDQwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFs
dWUKICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKICAgICAgICAgR1BSUmVnIGdwciA9
IHJlc3VsdC5ncHIoKTsKICAgICAgICAgb3AxLnVzZSgpOwotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50
MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7Ci0g
ICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKHRvSW50MzIsIGdwciwgZnByKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhncHIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRUb0lu
dGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENv
bXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKICAgICAgICAgCi0gICAgICAgIHRydW5j
YXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywg
dG9JbnQzMiwgZ3ByLCBmcHIpKTsKKwogICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jb21w
aWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC00MzgsMTggKzQ1NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVZhbHVlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBv
cDEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAgIC8vIEZpcnN0IGhhbmRsZSBub24taW50ZWdl
cnMKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIGNhbGxPcGVy
YXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0ludDMyLCByZXN1bHRHUFIsIGpzVmFsdWVHcHIpOwot
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBoYXNDYWxsZWRUb0ludDMyID0gbV9qaXQuanVtcCgpOworICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzTm90SW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKLSAgICAvLyBU
aGVuIGhhbmRsZSBpbnRlZ2Vycy4KLSAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwogICAgIG1f
aml0Lnplcm9FeHRlbmQzMlRvUHRyKGpzVmFsdWVHcHIsIHJlc3VsdEdQUik7Ci0gICAgaGFzQ2Fs
bGVkVG9JbnQzMi5saW5rKCZtX2ppdCk7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgIHNsb3dQYXRoQ2FsbChpc05vdEludGVnZXIsIHRoaXMsIGRmZ0NvbnZlcnRKU1Zh
bHVlVG9JbnQzMiwgcmVzdWx0R1BSLCBqc1ZhbHVlR3ByKSk7CisKICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiB9CiAKQEAgLTQ3Nyw3ICs0ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVVJbnQzCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKIH0KIAotSklUQ29tcGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNw
aWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCiB7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJl
bFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJl
Q2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPigtMSkpKTsKQEAgLTQ4NSwzMSArNDk3LDMxIEBAIEpJVENvbXBpbGVyOjpD
YWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWQKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwg
cmVzdWx0R1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBh
dGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CiAgICAgCi0gICAgSklUQ29t
cGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxp
bmsoJm1faml0KTsKLSAgICAKLSAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKLSAgICAg
ICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpM
YWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBpZiAoc3BpbGxNb2RlID09IE5l
ZWRUb1NwaWxsKQotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRHUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIoaWRlbnRp
Zmllck51bWJlcikpOwotICAgIGlmIChzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCi0gICAgICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAKLSAgICBkb25lLmxpbmso
Jm1faml0KTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQu
bGFiZWwoKTsKLQotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVj
b3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1
cmVDaGVjaywgbG9hZFdpdGhQYXRjaCwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50
OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50OF90PihyZXN1bHRHUFIpLCBzYWZlQ2FzdDxpbnQ4
X3Q+KHNjcmF0Y2hHUFIpLCBzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwgPyBQcm9wZXJ0eUFjY2Vz
c1JlY29yZDo6UmVnaXN0ZXJzSW5Vc2UgOiBQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJz
Rmx1c2hlZCkpOwogICAgIAorICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7
CisgICAgaWYgKCFzbG93UGF0aFRhcmdldC5pc1NldCgpKSB7CisgICAgICAgIHNsb3dQYXRoID0g
c2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc3RydWN0dXJlQ2hlY2ssIHRoaXMsIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0R1BSLCBiYXNlR1BSLAorICAgICAgICAgICAgaWRlbnRp
ZmllcihpZGVudGlmaWVyTnVtYmVyKSwgc3BpbGxNb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKHN0cnVjdHVyZUNoZWNrKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRh
cmdldCk7CisgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdEdQUiwgYmFzZUdQ
UiwKKyAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlciksIHNwaWxsTW9kZSk7
CisgICAgfQorICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKAorICAgICAgICBQcm9wZXJ0eUFj
Y2Vzc1JlY29yZCgKKyAgICAgICAgICAgIGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwg
c3RydWN0dXJlQ2hlY2ssIGxvYWRXaXRoUGF0Y2gsIHNsb3dQYXRoLmdldCgpLAorICAgICAgICAg
ICAgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+
KHJlc3VsdEdQUiksCisgICAgICAgICAgICBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpLAor
ICAgICAgICAgICAgc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsID8gUHJvcGVydHlBY2Nlc3NSZWNv
cmQ6OlJlZ2lzdGVyc0luVXNlIDogUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lzdGVyc0ZsdXNo
ZWQpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOworCiAg
ICAgaWYgKHNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSICYmIHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQ
UlJlZyAmJiBzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCiAgICAgICAgIHVubG9jayhzY3JhdGNo
R1BSKTsKLSAgICAKLSAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VH
UFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd1BhdGhUYXJnZXQpCkBAIC01MjMsMTYgKzUzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2Ny
YXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0g
bV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwotCi0gICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQpOwotCi0g
ICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0gICAgICAgIHNsb3dQYXRoVGFyZ2V0Lmxp
bmsoJm1faml0KTsKLQotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0Lmxh
YmVsKCk7Ci0KLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAg
ICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKKyAgICAKICAg
ICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CiAgICAgaWYgKG1faml0LnN0cmlj
dE1vZGVGb3IoYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChw
dXRLaW5kID09IERpcmVjdCkKQEAgLTU0NSwxMyArNTQ5LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3B0aW1p
emVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRD
YWxsLCB2YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7Ci0g
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLQotICAgIGRvbmUubGlu
aygmbV9qaXQpOwotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJl
bCgpOwotCi0gICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoUHJvcGVydHlBY2Nlc3NSZWNvcmQo
Y29kZU9yaWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwsIHN0cnVjdHVyZUNo
ZWNrLCBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChzdG9yZVdpdGhQYXRjaC5sYWJlbCgp
KSwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNh
c3Q8aW50OF90Pih2YWx1ZUdQUiksIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikpKTsKKyAg
ICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgIGlmICghc2xvd1BhdGhU
YXJnZXQuaXNTZXQoKSkgeworICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgIHN0cnVjdHVyZUNoZWNrLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBJbnZhbGlkR1BSUmVn
LCB2YWx1ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51
bWJlcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc3RydWN0dXJlQ2hlY2spOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgc2xvd1BhdGggPSBz
bG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wdGltaXplZENhbGws
IEludmFsaWRHUFJSZWcsIHZhbHVlR1BSLCBiYXNlR1BSLAorICAgICAgICAgICAgaWRlbnRpZmll
cihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgfQorICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNz
KFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3Ry
dWN0dXJlQ2hlY2ssIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHN0b3JlV2l0aFBhdGNo
LmxhYmVsKCkpLCBzbG93UGF0aC5nZXQoKSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJh
c2VHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVlR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3Jh
dGNoR1BSKSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21w
YXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQpAQCAtNzE4LDYgKzczMCwzNSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgbV9jb21waWxlSW5k
ZXggPSBicmFuY2hOb2RlSW5kZXg7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlPgor
Y2xhc3MgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGlj
IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJS
ZWc+IHsKK3B1YmxpYzoKKyAgICBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LAorICAgICAgICBT
X0RGR09wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNf
REZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rp
b24sIE5lZWRUb1NwaWxsLCByZXN1bHQpCisgICAgICAgICwgbV9hcmcxKGFyZzEpCisgICAgICAg
ICwgbV9hcmcyKGFyZzIpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAg
ICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNh
bGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJnMSwgbV9h
cmcyKSk7CisgICAgICAgIGppdC0+bV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MigxKSwgdGhpcy0+bV9yZXN1bHQpOworICAgICAgICBqaXQtPm1faml0Lm9yMzIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgdGhpcy0+bV9yZXN1bHQpOworICAgICAgICB0
aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KKyAgIAorcHJpdmF0ZToKKyAgICBHUFJSZWcgbV9h
cmcxOworICAgIEdQUlJlZyBtX2FyZzI7Cit9OworCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rp
b24pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKQEAg
LTc1MiwyMyArNzkzLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGUKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
ICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHJl
c3VsdEdQUik7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewot
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2ZVJlc3VsdCA9IG1faml0Lmp1bXAoKTsK
LSAgICAKLSAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAg
ICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BS
KTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAg
ICAgCi0gICAgICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIp
OwotICAgICAgICAKLSAgICAgICAgICAgIGhhdmVSZXN1bHQubGluaygmbV9qaXQpOwotICAgICAg
ICB9Ci0gICAgICAgIAogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRl
eCgpKSkgeworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoYWRvcHRQdHIoCisgICAg
ICAgICAgICAgICAgbmV3IENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I8SklU
Q29tcGlsZXI6Okp1bXBMaXN0PigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMs
IGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpKSk7CisgICAgICAg
IH0KKwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERh
dGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgfQog
fQpAQCAtODU2LDYgKzg4OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGUKICAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tu
b3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBn
ZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0
aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVh
bC4KKyAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGZsdXNoIHJlZ2lzdGVycyBpbnN0ZWFk
IG9mIHNpbGVudCBzcGlsbC9maWxsLgogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVh
bENhc2UgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBh
cmcyR1BSKTsKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIp
OwpAQCAtODc1LDQxICs5MDgsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0Lm9yUHRyKGFyZzFHUFIsIGFyZzJH
UFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
c2xvd1BhdGhDYXNlczsKKyAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHR3b0Nl
bGxzQ2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGxlZnRPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVx
dWFsLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBsZWZ0RG91YmxlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21w
aWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
KyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21w
aWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CiAgICAgICAgIGxlZnRPSy5saW5rKCZtX2ppdCk7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IHJpZ2h0T0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJn
MkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgcmlnaHREb3VibGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpO
b25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAg
ICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpO
b25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAg
ICAgcmlnaHRPSy5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5jb21wYXJl
UHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwg
YXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTEgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICB0
d29DZWxsc0Nhc2UubGluaygmbV9qaXQpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RF
cXVhbENhc2UgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BS
LCBhcmcyR1BSKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUikpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lMiA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICBhZG9wdFB0cigKKyAgICAgICAgICAgICAgICBuZXcg
Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Q+KAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhc2VzLCB0aGlzLCBvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMUdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgYXJnMkdQUikpKTsKICAgICAgICAgCi0gICAgICAgIGxlZnREb3VibGUubGluaygmbV9qaXQp
OwotICAgICAgICByaWdodERvdWJsZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG5vdEVxdWFsQ2Fz
ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Ci0KLSAgICAgICAgZG9uZTEu
bGluaygmbV9qaXQpOwotCi0gICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUyLmxp
bmsoJm1faml0KTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgIAogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9v
bGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTE3NjYsMTMgKzE3OTIsMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIAogICAgIG1f
aml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKLSAgICBK
SVRDb21waWxlcjo6SnVtcCBmYXN0Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGls
ZXI6Olplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpOwotICAgIAotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcx
R1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpO
b25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KTsKICAgICAKLSAgICBmYXN0Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpT
VmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJnMUdQUikpOwogICAgIAogICAgIG1faml0Lnhv
clB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3Vs
dEdQUik7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRh
Rm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAtMjU0NSwx
NSArMjU2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICAKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd2l0aGluQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0gICAg
ICAgIC8vIENvZGUgdG8gaGFuZGxlIHB1dCBiZXlvbmQgYXJyYXkgYm91bmRzLgotICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoUmVnKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJl
eW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c05vblN0cmljdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKTsKLSAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoUmVnKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgd2FzQmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgd2l0aGlu
QXJyYXlCb3VuZHMubGluaygmbV9qaXQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBi
ZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogCiAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkg
c3RvcmFnZS4KICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwpAQCAtMjU3
NSw3ICsyNTkwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgbV9qaXQu
c3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKLSAgICAgICAgd2FzQmV5b25kQXJyYXlCb3Vu
ZHMubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhp
cywKKyAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICBJbnZhbGlkR1BS
UmVnLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKIAogICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAg
YnJlYWs7CkBAIC0yNzYyLDE1ICsyNzgxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAg
Ci0gICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkFycmF5UHVzaCwgc3RvcmFnZUxlbmd0aEdQUiwgdmFsdWVHUFIsIGJhc2VH
UFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHN0b3JhZ2VMZW5ndGhHUFIpOwot
ICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIEludmFsaWRHUFJSZWcsIHN0b3JhZ2VM
ZW5ndGhHUFIsCisgICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAg
CiAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICBicmVhazsKQEAgLTI3OTMsNyArMjgwNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdl
R1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZW1wdHlB
cnJheUNhc2UgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3Jh
Z2VMZW5ndGhHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVk
Q2FzZXM7CisgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKICAgICAgICAgCiAg
ICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgIApAQCAtMjgwMywyOCArMjgxOCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGhvbGVDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgdmFsdWVHUFIpOworICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCiAg
ICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSk7CiAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgCi0gICAgICAgIGRv
bmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgICAgICBob2xlQ2FzZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIGVtcHR5QXJyYXlDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7Ci0gICAgICAgIAotICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh2YWx1ZUdQUik7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKTsKLSAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh2YWx1ZUdQUik7Ci0gICAgICAgIAotICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgIHNldFVuZGVmaW5l
ZENhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAg
IAorICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZh
bHVlR1BSLCBiYXNlR1BSKSk7CisKICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yOTI0LDIxICsyOTMxLDE0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYg
KCEobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH4oUHJlZGljdE51bWJl
ciB8IFByZWRpY3RCb29sZWFuKSkpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVz
dWx0R1BSKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgYWxyZWFkeVByaW1pdGl2ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYWxyZWFk
eVByaW1pdGl2ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGFs
cmVhZHlQcmltaXRpdmUuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZz
ZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU1N0cmluZzo6c19pbmZvKSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub1ByaW1pdGl2ZSwg
cmVzdWx0R1BSLCBvcDFHUFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
YWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxs
OjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU1N0
cmluZzo6c19pbmZvKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFscmVhZHlQcmltaXRp
dmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KG5vdFByaW1pdGl2ZSwgdGhpcywgb3BlcmF0aW9uVG9QcmltaXRpdmUsIHJlc3VsdEdQUiwgb3Ax
R1BSKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTMw
OTQsMTggKzMwOTQsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAKICAgICAgICAgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChzY3JhdGNoR1BS
LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAg
ICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhp
c0lubGluZWQsIHJlc3VsdEdQUiwgcHJvdG9HUFIsIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBwcm90b0dQUik7Ci0gICAgICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRv
bmUubGluaygmbV9qaXQpOworICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkgeworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uQ3JlYXRlVGhpc0lubGluZWQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwg
cHJvdG9HUFIsIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVh
dGVUaGlzLCByZXN1bHRHUFIsIHByb3RvR1BSKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CkBAIC0zMTIyLDE1ICszMTE5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1
cmUoKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0g
ICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUikpOwogICAgICAgICAKICAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzA1LDIx
ICszNjk0LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1f
aml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVzb2x2ZUluZm9BZGRyZXNzKSwg
cmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoR2xvYmFsUmVzb2x2ZUluZm8sIHN0
cnVjdHVyZSkpLCByZXN1bHRHUFIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1
cmVzTWF0Y2ggPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIs
IEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSkpOwotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUdsb2JhbCwgcmVzdWx0R1BS
LCByZXNvbHZlSW5mb0dQUiwgJm1faml0LmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGRhdGEuaWRl
bnRpZmllck51bWJlcikpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgd2FzU2xvdyA9IG1faml0Lmp1bXAoKTsK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlc0RvbnRNYXRjaCA9IG1faml0LmJy
YW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAKICAg
ICAgICAgLy8gRmFzdCBjYXNlCi0gICAgICAgIHN0cnVjdHVyZXNNYXRjaC5saW5rKCZtX2ppdCk7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwg
T0JKRUNUX09GRlNFVE9GKEdsb2JhbFJlc29sdmVJbmZvLCBvZmZzZXQpKSwgcmVzb2x2ZUluZm9H
UFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0
R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyKSwgcmVzdWx0R1BSKTsK
IAotICAgICAgICB3YXNTbG93LmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlc0RvbnRNYXRjaCwgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbCwKKyAgICAgICAgICAg
ICAgICByZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLAorICAgICAgICAgICAgICAgICZtX2ppdC5j
b2RlQmxvY2soKS0+aWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIpKSk7CiAKICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJl
YWs7CkBAIC0zNzM0LDEzICszNzIwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBhbHJlYWR5Q3JlYXRl
ZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUik7
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0
UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZXN1bHRHUFIpOwotICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBhbHJlYWR5Q3JlYXRl
ZC5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRp
b24sIHJlc3VsdEdQUikpOwogICAgICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzUwLDEzICszNzMzLDEwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVl
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRH
UFJSZWcpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRlYXJPZmZBY3RpdmF0aW9u
LCB2YWx1ZUdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0
UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUik7CiAgICAgICAgIAotICAgICAgICBu
b3RDcmVhdGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICBzbG93UGF0aENhbGwoY3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uVGVhck9mZkFj
dGl2YXRpb24sIEludmFsaWRHUFJSZWcsIHZhbHVlR1BSKSk7CiAgICAgICAgIAogICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc3NSwxNCArMzc1
NSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgYWxyZWFkeUNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0
UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bigKLSAgICAgICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsIG1faml0LmNv
ZGVCbG9jaygpLT5mdW5jdGlvbkRlY2wobm9kZS5mdW5jdGlvbkRlY2xJbmRleCgpKSk7Ci0gICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olpl
cm8sIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBhbHJlYWR5Q3JlYXRlZC5saW5rKCZt
X2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgIG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJsb2NrKCktPmZ1
bmN0aW9uRGVjbChub2RlLmZ1bmN0aW9uRGVjbEluZGV4KCkpKSk7CiAgICAgICAgIAogICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDQ1IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZl
SklUKEpJVENvbXBpbGVyJiBqaXQpCisgICAgOiBtX2NvbXBpbGVPa2F5KHRydWUpCisgICAgLCBt
X2ppdChqaXQpCisgICAgLCBtX2NvbXBpbGVJbmRleCgwKQorICAgICwgbV9pbmRleEluQmxvY2so
MCkKKyAgICAsIG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzKQorICAgICwgbV9ibG9ja0hlYWRzKGppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUo
KSkKKyAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKQor
ICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2NhbFZhcnMpCisgICAgLCBtX2xhc3RT
ZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgLCBtX3N0YXRl
KG1faml0LmdyYXBoKCkpCit7Cit9CisKK1NwZWN1bGF0aXZlSklUOjp+U3BlY3VsYXRpdmVKSVQo
KQoreworICAgIFdURjo6ZGVsZXRlQWxsVmFsdWVzKG1fc2xvd1BhdGhHZW5lcmF0b3JzKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxT
bG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhHZW5lcmF0b3IpCit7CisgICAgbV9zbG93UGF0aEdl
bmVyYXRvcnMuYXBwZW5kKHNsb3dQYXRoR2VuZXJhdG9yLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpCit7CisjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQorICAgIGRhdGFMb2coIlJ1bm5pbmcgJWx1IHNsb3cgcGF0aCBnZW5l
cmF0b3JzLlxuIiwgbV9zbG93UGF0aEdlbmVyYXRvcnMuc2l6ZSgpKTsKKyNlbmRpZgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3dQYXRoR2VuZXJhdG9ycy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnNbaV0tPmdlbmVyYXRlKHRoaXMpOworfQorCiAv
LyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBvbiBvdGhlciBwbGF0Zm9ybXMgd2Ug
Y2FuIGNhbGwgaXQgZGlyZWN0bHkuCiAvLyBPbiBBUk12NyB3ZSBhc3NlcnQgdGhhdCBhbGwgZnVu
Y3Rpb24gcG9pbnRlcnMgaGF2ZSB0byBsb3cgYml0IHNldCAocG9pbnQgdG8gdGh1bWIgY29kZSku
CiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwgfHwgQ1BVKEFSTV9USFVNQjIpCkBA
IC0xNTg1LDEzICsxNjE5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRv
SW50MzIKICAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKICAgICAgICAgICAgIEdQUlJl
ZyBncHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0cnVu
Y2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBn
cHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7Ci0KLSAgICAgICAg
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKHRvSW50MzIsIGdwciwgZnByKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMoZ3ByKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50
ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29t
cGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2Vy
LCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwogCi0gICAgICAgICAgICB0cnVuY2F0ZWRUb0lu
dGVnZXIubGluaygmbV9qaXQpOwogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjA2NCwxNyAr
MjA5NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZpeGVkID0gbV9qaXQuanVtcCgpOwogICAgICAgICBu
b3ROYU4ubGluaygmbV9qaXQpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWxlZDsKICAgICAgICAgaWYgKHNpZ25l
ZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKLSAgICAgICAgICAgIGRvbmUgPSBtX2ppdC5icmFu
Y2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJ
ZlRydW5jYXRlU3VjY2Vzc2Z1bCk7CisgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hU
cnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRy
dW5jYXRlRmFpbGVkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9uZSA9IG1faml0LmJy
YW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFu
Y2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7Ci0KLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMoZ3ByKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCBncHIsIGZwcik7Ci0gICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKKyAgICAgICAgICAgIGZhaWxlZCA9IG1f
aml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVy
OjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7
CiAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIGZpeGVkLmxpbmsoJm1faml0
KTsKICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKICAgICAgICAgdmFsdWVHUFIgPSBncHI7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUg
IkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRG
R09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgiCiAj
aW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpTVmFsdWVPcGVyYW5k
OworY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKIGNsYXNz
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOwogY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kOwpAQCAtMTc1LDYgKzE3Nyw3IEBAIHByaXZhdGU6CiAgICAgCiBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRpdmVKSVQoSklUQ29tcGlsZXImKTsKKyAgICB+U3BlY3VsYXRpdmVKSVQoKTsKIAogICAg
IGJvb2wgY29tcGlsZSgpOwogICAgIHZvaWQgY3JlYXRlT1NSRW50cmllcygpOwpAQCAtMzY2LDcg
KzM2OSw5IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZUlu
ZGV4KTsKICAgICBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0lu
dDMyKE5vZGVJbmRleCk7CiAKLXByaXZhdGU6CisgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRv
cihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7CisgICAgdm9pZCBydW5TbG93UGF0aEdl
bmVyYXRvcnMoKTsKKyAgICAKICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOwogICAgIHZvaWQgY29t
cGlsZU1vdkhpbnQoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CkBAIC0z
ODAsMjQzICszODUsMzQ3IEBAIHByaXZhdGU6CiAgICAgLy8gdGhleSBzcGlsbCBhbGwgbGl2ZSB2
YWx1ZXMgdG8gdGhlIGFwcHJvcHJpYXRlCiAgICAgLy8gc2xvdHMgaW4gdGhlIFJlZ2lzdGVyRmls
ZSB3aXRob3V0IGNoYW5naW5nIGFueSBzdGF0ZQogICAgIC8vIGluIHRoZSBHZW5lcmF0aW9uSW5m
by4KLSAgICB2b2lkIHNpbGVudFNwaWxsR1BSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJS
ZWcgc291cmNlKQorICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gc2lsZW50U2F2ZVBsYW5Gb3JH
UFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBzb3VyY2UpCiAgICAgewogICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0gICAg
ICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpOwotICAg
ICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpOwot
Ci0gICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
KyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVy
Rm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKLSAgICAgICAgaWYgKHJlZ2lzdGVy
Rm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihz
b3VyY2UsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgQVNTRVJU
KHJlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAgQVNTRVJUKHJlZ2lz
dGVyRm9ybWF0ICE9IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICAKKyAgICAgICAgU2lsZW50
U3BpbGxBY3Rpb24gc3BpbGxBY3Rpb247CisgICAgICAgIFNpbGVudEZpbGxBY3Rpb24gZmlsbEFj
dGlvbjsKKyAgICAgICAgCisgICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpCisgICAgICAg
ICAgICBzcGlsbEFjdGlvbiA9IERvTm90aGluZ0ZvclNwaWxsOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyB8fCByZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
U3RvcmFnZSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihzb3VyY2UsIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSBzb3VyY2UgfHwgaW5mby5wYXlsb2FkR1BSKCkg
PT0gc291cmNlKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc291cmNlLCBzb3VyY2UgPT0g
aW5mby50YWdHUFIoKSA/IEpJVENvbXBpbGVyOjp0YWdGb3Ioc3BpbGxNZSkgOiBKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7Ci0gICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxN
ZSkpOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdEludGVnZXIpCisgICAgICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBTdG9yZTMyUGF5bG9h
ZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZv
cm1hdCAmIERhdGFGb3JtYXRKUyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8
fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAgICAgICAg
c3BpbGxBY3Rpb24gPSBTdG9yZVB0cjsKKyAgICAgICAgICAgIH0KKyNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSBzb3VyY2UgfHwgaW5mby5w
YXlsb2FkR1BSKCkgPT0gc291cmNlKTsKKyAgICAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9IHNv
dXJjZSA9PSBpbmZvLnRhZ0dQUigpID8gU3RvcmUzMlRhZyA6IFN0b3JlMzJQYXlsb2FkOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBz
b3VyY2UpOworICAgICAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmUzMlBheWxvYWQ7Cisg
ICAgICAgICAgICB9CiAjZW5kaWYKLSAgICB9Ci0gICAgdm9pZCBzaWxlbnRTcGlsbEZQUihWaXJ0
dWFsUmVnaXN0ZXIgc3BpbGxNZSwgRlBSUmVnIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKLSAgICAgICAgQVNT
RVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKLQotICAgICAg
ICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7Ci0gICAgICAgICAgICAvLyBpdCdzIGVpdGhlciBh
IGNvbnN0YW50IG9yIGl0J3MgYWxyZWFkeSBiZWVuIHNwaWxsZWQKLSAgICAgICAgICAgIEFTU0VS
VChhdChpbmZvLm5vZGVJbmRleCgpKS5oYXNDb25zdGFudCgpIHx8IGluZm8uc3BpbGxGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIC8vIGl0J3MgbmVpdGhlciBhIGNvbnN0YW50IG5vciBoYXMgaXQgYmVl
biBzcGlsbGVkLgotICAgICAgICBBU1NFUlQoIWF0KGluZm8ubm9kZUluZGV4KCkpLmhhc0NvbnN0
YW50KCkpOwotICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRO
b25lKTsKLSAgICAgICAgQVNTRVJUKGluZm8uZnByKCkgPT0gc291cmNlKTsKLQotICAgICAgICBt
X2ppdC5zdG9yZURvdWJsZShzb3VyY2UsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNpbGVudEZpbGxHUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxs
TWUsIEdQUlJlZyB0YXJnZXQpCi0gICAgewotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0KLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25l
KTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91
YmxlKTsKLSAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJG
b3JtYXQoKTsKLQogICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVn
ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAgICAg
ICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwogICAgICAgICAgICAgQVNTRVJUKGlz
SlNJbnRlZ2VyKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkpOwogICAgICAgICAgICAgaWYgKG5vZGUu
aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQo
bm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlSW5kZXgpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBmaWxsQWN0
aW9uID0gU2V0SW50MzJDb25zdGFudDsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRCb29sZWFuKSB7CisgICAgICAgICAgICAgICAg
ZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7CisgICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJG
b3JtYXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4pIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBmaWxsQWN0aW9uID0gRG9O
b3RoaW5nRm9yRmlsbDsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBBU1NF
UlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkg
PT0gc291cmNlKTsKICAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIodmFsdWVPZkJvb2xlYW5Db25zdGFudChu
b2RlSW5kZXgpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0Qm9v
bGVhbkNvbnN0YW50OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAg
ICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOwogI2VuZGlmCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0
YUZvcm1hdENlbGwpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CiAgICAgICAgICAgICBp
ZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZh
bHVlLmlzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
dmFsdWUuYXNDZWxsKCkpLCB0YXJnZXQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFy
Z2V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWdp
c3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSkgewotICAgICAgICAgICAgQVNTRVJUKGlu
Zm8uZ3ByKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMp
OworICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRDZWxsQ29uc3RhbnQ7CisgICAgICAg
ICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEFTU0VSVChpbmZvLmdw
cigpID09IHRhcmdldCk7Ci0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgICAgIGlmICh2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzQ2VsbCgpKQotICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihub2RlSW5kZXgp
LmFzVHJ1c3RlZEltbVB0cigpLCB0YXJnZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihub2RlSW5kZXgpLCB0
YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0SW50ZWdlcikgewotICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFG
b3JtYXRKU0ludGVnZXIpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYg
KGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICBB
U1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7
Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICAgICAg
ZmlsbEFjdGlvbiA9IExvYWRQdHI7CiAjZWxzZQotICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIo
KSA9PSB0YXJnZXQgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgaWYg
KG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoaW5mby50YWdHUFIo
KSA9PSB0YXJnZXQgPyBJbW0zMih2LnRhZygpKSA6IEltbTMyKHYucGF5bG9hZCgpKSwgdGFyZ2V0
KTsKLSAgICAgICAgfSBlbHNlIGlmIChpbmZvLnBheWxvYWRHUFIoKSA9PSB0YXJnZXQpCi0gICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRh
cmdldCk7Ci0gICAgICAgIGVsc2UgeyAvLyBGaWxsIHRoZSBUYWcKLSAgICAgICAgICAgIHN3aXRj
aCAoaW5mby5zcGlsbEZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRl
Z2VyOgorICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOworI2VuZGlm
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0
YUZvcm1hdFN0b3JhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJj
ZSk7CisgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7
CisgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNDZWxsKCkpCisgICAgICAgICAgICAg
ICAgICAgIGZpbGxBY3Rpb24gPSBTZXRUcnVzdGVkSlNDb25zdGFudDsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRKU0NvbnN0YW50Owor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdElu
dGVnZXIpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdEpTSW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICAgICAgICAgICAgICBBU1NFUlQocmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTQ2VsbCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhcmdldCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgICAg
ICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFu
VGFnKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3Ioc3Bp
bGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWRCb3hJbnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgICAg
ICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWREb3VibGVCb3hEb3VibGU7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKKyNlbHNlCisgICAg
ICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSBzb3VyY2UgfHwgaW5mby5wYXlsb2FkR1BS
KCkgPT0gc291cmNlKTsKKyAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBpbmZvLnRhZ0dQUigpID09IHNvdXJjZSA/IFNl
dEpTQ29uc3RhbnRUYWcgOiBTZXRKU0NvbnN0YW50UGF5bG9hZDsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaW5mby5wYXlsb2FkR1BSKCkgPT0gc291cmNlKQorICAgICAgICAgICAgICAgIGZpbGxB
Y3Rpb24gPSBMb2FkMzJQYXlsb2FkOworICAgICAgICAgICAgZWxzZSB7IC8vIEZpbGwgdGhlIFRh
ZworICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5mby5zcGlsbEZvcm1hdCgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAg
ICAgICAgICBmaWxsQWN0aW9uID0gU2V0SW50MzJUYWc7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldENlbGxUYWc7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKKyAgICAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldEJvb2xlYW5UYWc7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJUYWc7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQog
I2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuKHNwaWxsQWN0aW9uLCBmaWxsQWN0aW9uLCBub2RlSW5kZXgsIHNvdXJjZSk7CiAg
ICAgfQotCi0gICAgdm9pZCBzaWxlbnRGaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBH
UFJSZWcgY2FuVHJhbXBsZSwgRlBSUmVnIHRhcmdldCkKKyAgICAKKyAgICBTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuIHNpbGVudFNhdmVQbGFuRm9yRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBG
UFJSZWcgc291cmNlKQogICAgIHsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3NwaWxsTWVdOwotICAgICAgICBBU1NFUlQoaW5mby5mcHIoKSA9PSB0YXJn
ZXQpOwotCiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwog
ICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
OwogCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShJ
bW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4
KSkpLCBjYW5UcmFtcGxlKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShjYW5U
cmFtcGxlLCB0YXJnZXQpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTaWxlbnRTcGls
bEFjdGlvbiBzcGlsbEFjdGlvbjsKKyAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9u
OworICAgICAgICAKKyAgICAgICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwoKSkKKyAgICAgICAgICAg
IHNwaWxsQWN0aW9uID0gRG9Ob3RoaW5nRm9yU3BpbGw7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgQVNTRVJUKCFhdChpbmZvLm5vZGVJbmRleCgpKS5oYXNDb25zdGFudCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpOworICAg
ICAgICAgICAgQVNTRVJUKGluZm8uZnByKCkgPT0gc291cmNlKTsKKyAgICAgICAgICAgIHNwaWxs
QWN0aW9uID0gU3RvcmVEb3VibGU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChp
bmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUgJiYgaW5mby5zcGlsbEZvcm1hdCgp
ICE9IERhdGFGb3JtYXREb3VibGUpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAo
bm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNOdW1iZXJDb25zdGFu
dChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXREb3VibGVDb25zdGFu
dDsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5v
bmUgJiYgaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAgICAg
ICAgIC8vIGl0IHdhcyBhbHJlYWR5IHNwaWxsZWQgcHJldmlvdXNseSBhbmQgbm90IGFzIGEgZG91
YmxlLCB3aGljaCBtZWFucyB3ZSBuZWVkIHVuYm94aW5nLgogICAgICAgICAgICAgQVNTRVJUKGlu
Zm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCBjYW5UcmFtcGxlKTsKLSAgICAg
ICAgICAgIHVuYm94RG91YmxlKGNhblRyYW1wbGUsIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExv
YWRKU1VuYm94RG91YmxlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZpbGxBY3Rpb24g
PSBMb2FkRG91YmxlOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgVU5VU0VEX1BB
UkFNKGNhblRyYW1wbGUpOwogICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09
IERhdGFGb3JtYXREb3VibGUgfHwgaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRK
U0RvdWJsZSk7CiAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAg
IEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldERvdWJsZUNvbnN0YW50OwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
c3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZTsK
ICNlbmRpZgotICAgIH0KIAotICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoR1BSUmVn
IGV4Y2x1ZGUsIEdQUlJlZyBleGNsdWRlMiA9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKHNwaWxsQWN0aW9uLCBmaWxsQWN0aW9uLCBub2RlSW5k
ZXgsIHNvdXJjZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lsZW50U3BpbGwoY29uc3QgU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbiYgcGxhbikKICAgICB7Ci0gICAgICAgIGZvciAoZ3ByX2l0ZXJh
dG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICAgICAgR1BSUmVnIGdwciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlm
IChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGdwciAhPSBleGNsdWRl
ICYmIGdwciAhPSBleGNsdWRlMikKLSAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVy
Lm5hbWUoKSwgZ3ByKTsKKyAgICAgICAgc3dpdGNoIChwbGFuLnNwaWxsQWN0aW9uKCkpIHsKKyAg
ICAgICAgY2FzZSBEb05vdGhpbmdGb3JTcGlsbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFN0b3JlMzJUYWc6CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCks
IEpJVENvbXBpbGVyOjp0YWdGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVy
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlMzJQYXlsb2FkOgor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwbGFuLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmVQdHI6CisgICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihwbGFuLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRl
eCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU3RvcmVEb3VibGU6CisgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShwbGFuLmZwcigp
LCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVn
aXN0ZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGZwcl9p
dGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQotICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJl
Z0lEKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNpbGVudEZpbGwoY29uc3QgU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbiYgcGxhbiwgR1BSUmVnIGNhblRyYW1wbGUpCisgICAgeworI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgIFVOVVNFRF9QQVJBTShjYW5UcmFtcGxlKTsKKyNlbmRpZgor
ICAgICAgICBzd2l0Y2ggKHBsYW4uZmlsbEFjdGlvbigpKSB7CisgICAgICAgIGNhc2UgRG9Ob3Ro
aW5nRm9yRmlsbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldEludDMyQ29u
c3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50
KHBsYW4ubm9kZUluZGV4KCkpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTZXRCb29sZWFuQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMih2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSwgcGxh
bi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRDZWxsQ29uc3Rh
bnQ6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVPZkpTQ29uc3Rh
bnQocGxhbi5ub2RlSW5kZXgoKSkuYXNDZWxsKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNhc2UgU2V0VHJ1c3RlZEpTQ29u
c3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIo
cGxhbi5ub2RlSW5kZXgoKSkuYXNUcnVzdGVkSW1tUHRyKCksIHBsYW4uZ3ByKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0SlNDb25zdGFudDoKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihwbGFuLm5vZGVJbmRleCgpKSwgcGxh
bi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXREb3VibGVDb25z
dGFudDoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4o
dmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSksIGNhblRyYW1wbGUpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDMyUGF5bG9hZEJveEludDoK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFu
Lm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWREb3VibGVCb3hEb3VibGU6
CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBs
YW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAg
ICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdw
cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRKU1VuYm94RG91Ymxl
OgorICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChw
bGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIGNhblRyYW1wbGUpOworICAgICAg
ICAgICAgdW5ib3hEb3VibGUoY2FuVHJhbXBsZSwgcGxhbi5mcHIoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyNlbHNlCisgICAgICAgIGNhc2UgU2V0SlNDb25zdGFudFRhZzoKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkudGFn
KCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldEpT
Q29uc3RhbnRQYXlsb2FkOgorICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlND
b25zdGFudChwbGFuLm5vZGVJbmRleCgpKS5wYXlsb2FkKCkpLCBwbGFuLmdwcigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldEludDMyVGFnOgorICAgICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBwbGFuLmdwcigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldENlbGxUYWc6CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcGxhbi5ncHIoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRCb29sZWFuVGFnOgorICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHBsYW4uZ3By
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0RG91YmxlQ29uc3RhbnQ6
CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KHBs
YW4ubm9kZUluZGV4KCkpLCBwbGFuLmZwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlm
CisgICAgICAgIGNhc2UgTG9hZDMyVGFnOgorICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjp0YWdGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBw
bGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWQzMlBheWxv
YWQ6CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXQo
cGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRQdHI6CisgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1
YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBMb2FkRG91YmxlOgorICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBs
YW4uZnByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICB2b2lkIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKEZQUlJlZyBleGNsdWRlKQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnNJbXBsKGJvb2wgZG9TcGlsbCwgQ29sbGVjdGlvblR5cGUmIHBsYW5zLCBHUFJSZWcgZXhjbHVk
ZSwgR1BSUmVnIGV4Y2x1ZGUyID0gSW52YWxpZEdQUlJlZywgRlBSUmVnIGZwckV4Y2x1ZGUgPSBJ
bnZhbGlkRlBSUmVnKQogICAgIHsKKyAgICAgICAgQVNTRVJUKHBsYW5zLmlzRW1wdHkoKSk7CiAg
ICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBt
X2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxHUFIoaXRl
ci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5y
ZWdJRCgpOworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1ZGUyKSB7CisgICAgICAgICAg
ICAgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBwbGFuID0gc2lsZW50U2F2ZVBsYW5Gb3JHUFIo
aXRlci5uYW1lKCksIGdwcik7CisgICAgICAgICAgICAgICAgaWYgKGRvU3BpbGwpCisgICAgICAg
ICAgICAgICAgICAgIHNpbGVudFNwaWxsKHBsYW4pOworICAgICAgICAgICAgICAgIHBsYW5zLmFw
cGVuZChwbGFuKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGZwcl9p
dGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpdGVyLnJlZ0lEKCk7Ci0gICAgICAgICAg
ICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBmcHIgIT0gZXhj
bHVkZSkKLSAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEZQUihpdGVyLm5hbWUoKSwgZnByKTsK
KyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYm
IGl0ZXIucmVnSUQoKSAhPSBmcHJFeGNsdWRlKSB7CisgICAgICAgICAgICAgICAgU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbiBwbGFuID0gc2lsZW50U2F2ZVBsYW5Gb3JGUFIoaXRlci5uYW1lKCksIGl0
ZXIucmVnSUQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGRvU3BpbGwpCisgICAgICAgICAgICAg
ICAgICAgIHNpbGVudFNwaWxsKHBsYW4pOworICAgICAgICAgICAgICAgIHBsYW5zLmFwcGVuZChw
bGFuKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1w
bChib29sIGRvU3BpbGwsIENvbGxlY3Rpb25UeXBlJiBwbGFucywgRlBSUmVnIGV4Y2x1ZGUpCisg
ICAgeworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZG9TcGlsbCwgcGxhbnMs
IEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcsIGV4Y2x1ZGUpOworICAgIH0KKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAg
IHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKGJvb2wgZG9TcGlsbCwgQ29sbGVjdGlv
blR5cGUmIHBsYW5zLCBKU1ZhbHVlUmVncyBleGNsdWRlKQorICAgIHsKKyAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnNJbXBsKGRvU3BpbGwsIHBsYW5zLCBleGNsdWRlLnRhZ0dQUigpLCBl
eGNsdWRlLnBheWxvYWRHUFIoKSk7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgdm9pZCBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSwgR1BSUmVnIGV4Y2x1ZGUyID0gSW52
YWxpZEdQUlJlZywgRlBSUmVnIGZwckV4Y2x1ZGUgPSBJbnZhbGlkRlBSUmVnKQorICAgIHsKKyAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKHRydWUsIG1fcGxhbnMsIGV4Y2x1ZGUs
IGV4Y2x1ZGUyLCBmcHJFeGNsdWRlKTsKKyAgICB9CisgICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhGUFJSZWcgZXhjbHVkZSkKKyAgICB7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcsIGV4Y2x1ZGUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgR1BSUmVnIHBpY2tDYW5UcmFtcGxlKEdQUlJlZyBleGNsdWRlKQorICAg
IHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICBpZiAo
cmVzdWx0ID09IGV4Y2x1ZGUpCisgICAgICAgICAgICByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc3RhdGljIEdQUlJlZyBwaWNrQ2Fu
VHJhbXBsZShGUFJSZWcpCisgICAgeworICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgfQogCi0gICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEdQUlJlZyBleGNsdWRlLCBH
UFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnKQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgc3RhdGljIEdQUlJlZyBwaWNrQ2FuVHJhbXBsZShKU1ZhbHVlUmVncyBleGNsdWRlKQogICAg
IHsKLSAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICAgICAg
aWYgKGV4Y2x1ZGUgPT0gR1BSSW5mbzo6cmVnVDApCi0gICAgICAgICAgICBjYW5UcmFtcGxlID0g
R1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVy
ID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAg
ICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAg
ICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGl0ZXIucmVn
SUQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3By
cy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBH
UFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1
ZGUyKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxHUFIoaXRlci5uYW1lKCksIGdwcik7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAgICAgaWYgKHJlc3Vs
dCA9PSBleGNsdWRlLnRhZ0dQUigpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gZXhjbHVkZS5wYXlsb2FkR1BSKCkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDI7CisgICAgICAgIH0gZWxzZSBp
ZiAocmVzdWx0ID09IGV4Y2x1ZGUucGF5bG9hZEdQUigpKSB7CisgICAgICAgICAgICByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gZXhjbHVkZS50YWdH
UFIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMjsKICAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICB2b2lkIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUpCisjZW5kaWYKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBSZWdpc3RlclR5cGU+CisgICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKFJlZ2lz
dGVyVHlwZSBleGNsdWRlKQogICAgIHsKLSAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBwaWNrQ2FuVHJhbXBsZShl
eGNsdWRlKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2Zw
cnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAg
RlBSUmVnIGZwciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAh
PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGZwciAhPSBleGNsdWRlKQotICAgICAgICAgICAg
ICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGZwcik7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVy
ICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsR1BS
KGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgICAgICB3aGlsZSAoIW1fcGxhbnMuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuJiBwbGFuID0gbV9w
bGFucy5sYXN0KCk7CisgICAgICAgICAgICBzaWxlbnRGaWxsKHBsYW4sIGNhblRyYW1wbGUpOwor
ICAgICAgICAgICAgbV9wbGFucy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTg5OCwxMiArMTAwNywxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1
ZVRvSW50MzIoTm9kZSYpOwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVVSW50MzJUb051bWJlcihO
b2RlJik7CiAKLSAgICBlbnVtIFNwaWxsUmVnaXN0ZXJzTW9kZSB7IE5lZWRUb1NwaWxsLCBEb250
U3BpbGwgfTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhY2hl
ZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQ
UlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJz
TW9kZSA9IE5lZWRUb1NwaWxsKTsKKyAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwg
R1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9
IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsK
ICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2UsIEdQUlJlZyB2
YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklU
Q29tcGlsZXI6Okp1bXAoKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5v
bmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJl
c3VsdFBheWxvYWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1w
KCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKKyAgICB2b2lkIGNhY2hlZEdl
dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5
bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIEdQ
UlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJz
TW9kZSA9IE5lZWRUb1NwaWxsKTsKICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwg
R1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBh
eWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9
IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogI2VuZGlmCiAKQEAgLTEyMjUsNiArMTMzMywxMSBAQCBw
cml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSk7CisgICAgfQogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpKTsKQEAgLTEyNTUsNiArMTM2OCwxMiBAQCBwcml2YXRlOgogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAg
ICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQXJndW1l
bnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMz4K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSwgQXJndW1lbnRUeXBlMiBhcmcy
LCBBcmd1bWVudFR5cGUzIGFyZzMpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0ID09IEludmFsaWRHUFJSZWcpOworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIGFyZzEsIGFyZzIsIGFyZzMpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSk7CkBAIC0xNDIzLDYgKzE1NDIsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0ID09IEludmFsaWRHUFJSZWcpOworICAgICAgICByZXR1cm4gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZzEpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9h
ZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CkBAIC0xNDQ4LDYgKzE1
NzIsMTggQEAgcHJpdmF0ZToKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFt
ZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVu
dFR5cGU0PgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBl
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBBcmd1bWVudFR5
cGUyIGFyZzIsIEFyZ3VtZW50VHlwZTMgYXJnMywgQXJndW1lbnRUeXBlNCBhcmc0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBJbnZhbGlkR1BSUmVnKTsK
KyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmcxLCBhcmcyLCBhcmcz
LCBhcmc0KTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBl
bmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1
bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVudFR5cGU0LCB0eXBlbmFtZSBBcmd1bWVudFR5cGU1
PgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFy
ZzIsIEFyZ3VtZW50VHlwZTMgYXJnMywgQXJndW1lbnRUeXBlNCBhcmc0LCBBcmd1bWVudFR5cGU1
IGFyZzUpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IElu
dmFsaWRHUFJSZWcpOworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFy
ZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOworICAgIH0KIAogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKQEAgLTE0NjUs
NiArMTYwMSw0NyBAQCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcx
LCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUs
IHR5cGVuYW1lIEFyZ3VtZW50VHlwZTE+CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbigKKyAgICAgICAgRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0
LCBBcmd1bWVudFR5cGUxIGFyZzEpCisgICAgeworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIHJlc3VsdC50YWdHUFIoKSwgcmVzdWx0LnBheWxvYWRHUFIoKSwgYXJnMSk7
CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQXJn
dW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMj4KKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKAorICAgICAgICBGdW5jdGlvblR5cGUgb3BlcmF0aW9uLCBKU1ZhbHVl
UmVncyByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSwgQXJndW1lbnRUeXBlMiBhcmcyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZXN1bHQudGFnR1BS
KCksIHJlc3VsdC5wYXlsb2FkR1BSKCksIGFyZzEsIGFyZzIpOworICAgIH0KKyAgICB0ZW1wbGF0
ZTwKKyAgICAgICAgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUx
LCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLAorICAgICAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUz
PgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisgICAgICAgIEZ1bmN0aW9u
VHlwZSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBB
cmd1bWVudFR5cGUyIGFyZzIsCisgICAgICAgIEFyZ3VtZW50VHlwZTMgYXJnMykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0LnRhZ0dQUigpLCBy
ZXN1bHQucGF5bG9hZEdQUigpLCBhcmcxLCBhcmcyLCBhcmczKTsKKyAgICB9CisgICAgdGVtcGxh
dGU8CisgICAgICAgIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBl
MSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwKKyAgICAgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBl
MywgdHlwZW5hbWUgQXJndW1lbnRUeXBlND4KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKAorICAgICAgICBGdW5jdGlvblR5cGUgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1
bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSwgQXJndW1lbnRUeXBlMiBhcmcyLAorICAgICAgICBBcmd1
bWVudFR5cGUzIGFyZzMsIEFyZ3VtZW50VHlwZTQgYXJnNCkKKyAgICB7CisgICAgICAgIHJldHVy
biBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0LnRhZ0dQUigpLCByZXN1bHQucGF5bG9h
ZEdQUigpLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsKKyAgICB9CisgICAgdGVtcGxhdGU8Cisg
ICAgICAgIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlw
ZW5hbWUgQXJndW1lbnRUeXBlMiwKKyAgICAgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywgdHlw
ZW5hbWUgQXJndW1lbnRUeXBlNCwgdHlwZW5hbWUgQXJndW1lbnRUeXBlNT4KKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAgICAgICBGdW5jdGlvblR5cGUgb3BlcmF0aW9u
LCBKU1ZhbHVlUmVncyByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSwgQXJndW1lbnRUeXBlMiBh
cmcyLAorICAgICAgICBBcmd1bWVudFR5cGUzIGFyZzMsIEFyZ3VtZW50VHlwZTQgYXJnNCwgQXJn
dW1lbnRUeXBlNSBhcmc1KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oCisg
ICAgICAgICAgICBvcGVyYXRpb24sIHJlc3VsdC50YWdHUFIoKSwgcmVzdWx0LnBheWxvYWRHUFIo
KSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CisgICAgfQogI2VuZGlmCiAKICAgICAv
LyBUaGVzZSBtZXRob2RzIGFkZCBjYWxsIGluc3RydWN0aW9ucywgd2l0aCBvcHRpb25hbCBleGNl
cHRpb24gY2hlY2tzICYgc2V0dGluZyByZXN1bHRzLgpAQCAtMTk1MSw4ICsyMTI4LDggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW29wZXJhbmRdOwogICAgIH0KICAgICAK
LSAgICAvLyBUaGUgSklULCB3aGlsZSBhbHNvIHByb3ZpZGVzIE1hY3JvQXNzZW1ibGVyIGZ1bmN0
aW9uYWxpdHkuCiAgICAgSklUQ29tcGlsZXImIG1faml0OworCiAgICAgLy8gVGhlIGN1cnJlbnQg
bm9kZSBiZWluZyBnZW5lcmF0ZWQuCiAgICAgQmxvY2tJbmRleCBtX2Jsb2NrOwogICAgIE5vZGVJ
bmRleCBtX2NvbXBpbGVJbmRleDsKQEAgLTE5ODQsNiArMjE2MSw5IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIAorICAgIFZlY3RvcjxTbG93UGF0aEdl
bmVyYXRvciosIDg+IG1fc2xvd1BhdGhHZW5lcmF0b3JzOyAvLyBkb2Vzbid0IHVzZSBPd25QdHI8
PiBiZWNhdXNlIEkgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgK
KyAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbj4gbV9wbGFuczsKKwogICAgIFZhbHVl
UmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmKTsKIAog
ICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQpCkBA
IC0yNjAzLDIwICsyNzgzLDYgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7
CiB9OwogCi1pbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVy
JiBqaXQpCi0gICAgOiBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgLCBtX2ppdChqaXQpCi0gICAg
LCBtX2NvbXBpbGVJbmRleCgwKQotICAgICwgbV9pbmRleEluQmxvY2soMCkKLSAgICAsIG1fZ2Vu
ZXJhdGlvbkluZm8obV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQotICAg
ICwgbV9ibG9ja0hlYWRzKGppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKLSAgICAsIG1fYXJn
dW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKQotICAgICwgbV92YXJpYWJs
ZXMoaml0LmdyYXBoKCkubV9sb2NhbFZhcnMpCi0gICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0gICAgLCBtX3N0YXRlKG1faml0LmdyYXBoKCkp
Ci17Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137428</attachid>
            <date>2012-04-16 16:35:46 -0700</date>
            <delta_ts>2012-04-16 16:58:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>slowpaths_patch_6.diff</filename>
            <type>text/plain</type>
            <size>142042</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0MzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxMi0wNC0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBvdXQtb2YtbGluZSBzbG93IHBhdGhzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlcyB0aGUgbm90
aW9uIG9mIHNsb3cgcGF0aCBjb2RlIGdlbmVyYXRpb24gY2xvc3VyZXMgaW4gdGhlIERGRy4KKyAg
ICAgICAgVGhlc2UgYXJlIGRlZmluZWQgaW4gREZHU2xvd1BhdGhHZW5lcmF0b3IuaCwgdGhvdWdo
IHRoZXkgYXJlIGZhaXJseQorICAgICAgICBleHRlbnNpYmxlIHNvIERGR1NwZWN1bGF0aXZlSklU
NjQuY3BwIGFuZCBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorICAgICAgICBkZWZpbmUgYSBj
b3VwbGUgc3BlY2lhbC1wdXJwb3NlIG9uZXMuIEEgc2xvdyBwYXRoIGdlbmVyYXRpb24gY2xvc3Vy
ZQorICAgICAgICAoREZHOjpTbG93UGF0aEdlbmVyYXRvcikgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhl
IG1haW4gc3BlY3VsYXRpdmUgcGF0aCBpcworICAgICAgICBnZW5lcmF0ZWQuIFRoaXMgbWFrZXMg
dGhlbSBncmVhdCBmb3Igc2NoZWR1bGluZyBzbG93IHBhdGggY29kZSBvdXQgb2YKKyAgICAgICAg
dGhlIHdheSBvZiB0aGUgaG90IHBhdGhzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIGNvbnZlcnRzIG1vc3QgLSBidXQgbm90IGFsbCAtIG9mIHRoZSBERkcgdG8gdXNlIHNsb3cK
KyAgICAgICAgcGF0aCBnZW5lcmF0b3JzIGluc3RlYWQgb2YgaW5saW5lIHNsb3cgcGF0aHMuCisg
ICAgICAgIAorICAgICAgICBUaGUgcmVzdWx0IGlzIGEgc3ViLTElIGltcHJvdmVtZW50IG9uIFN1
blNwaWRlciBhbmQgVjgsIGFuZCBhIG1pbmlzY3VsZQorICAgICAgICByZWdyZXNzaW9uIG9uIEty
YWtlbi4KKyAgICAgICAgCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyOjpU
cnVzdGVkSW1tUHRyKToKKyAgICAgICAgKFRydXN0ZWRJbW1QdHIpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzI6OlRydXN0ZWRJbW0zMik6CisgICAg
ICAgIChUcnVzdGVkSW1tMzIpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
Lmg6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlBY2Nlc3NS
ZWNvcmQ6OlByb3BlcnR5QWNjZXNzUmVjb3JkKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzUmVj
b3JkKToKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuOjpTaWxlbnRSZWdpc3RlclNhdmVQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuOjpzcGlsbEFjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2lsZW50
UmVnaXN0ZXJTYXZlUGxhbjo6ZmlsbEFjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2lsZW50
UmVnaXN0ZXJTYXZlUGxhbjo6bm9kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNpbGVudFJlZ2lzdGVy
U2F2ZVBsYW46OmZwcik6CisgICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6U2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjp+U2xvd1BhdGhHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6OmxhYmVsKToKKyAgICAgICAgKEpTQzo6REZH
OjpTbG93UGF0aEdlbmVyYXRvcjo6Y2FsbCk6CisgICAgICAgIChKdW1waW5nU2xvd1BhdGhHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6Okp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjo6SnVt
cGluZ1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpKdW1waW5nU2xvd1Bh
dGhHZW5lcmF0b3I6OmxpbmtGcm9tKToKKyAgICAgICAgKEpTQzo6REZHOjpKdW1waW5nU2xvd1Bh
dGhHZW5lcmF0b3I6Omp1bXBUbyk6CisgICAgICAgIChDYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsU2xvd1BhdGhHZW5lcmF0b3I6OmNhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6c2V0VXApOgorICAg
ICAgICAoSlNDOjpERkc6OkNhbGxTbG93UGF0aEdlbmVyYXRvcjo6cmVjb3JkQ2FsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJhdG9yOjp0ZWFyRG93bik6CisgICAgICAg
IChDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxS
ZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpDYWxsUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRl
cm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZE9uZUFyZ3VtZW50U2xvd1BhdGhH
ZW5lcmF0b3I6OkNhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRv
cjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRz
U2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZXN1bHRBbmRUd29B
cmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZFR3b0FyZ3VtZW50c1Nsb3dQ
YXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kVHdvQXJndW1l
bnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoQ2FsbFJl
c3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVz
dWx0QW5kVGhyZWVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRl
SW50ZXJuYWwpOgorICAgICAgICAoQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNT
bG93UGF0aEdlbmVyYXRvcjo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93
UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAgICAgIChDYWxsUmVzdWx0QW5k
Rml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxs
UmVzdWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsUmVzdWx0QW5kRml2
ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVz
dWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6REZHOjpzbG93UGF0aENhbGwpOgorICAgICAgICAoQXNzaWduaW5nU2xv
d1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2lnbmluZ1Nsb3dQYXRoR2Vu
ZXJhdG9yOjpBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzaWduaW5nU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpERkc6OnNsb3dQYXRoTW92ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6flNw
ZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkU2xv
d1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpydW5T
bG93UGF0aEdlbmVyYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBS
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwaWNrQ2FuVHJhbXBsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGxBbGxSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChWYWx1ZVRv
TnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlVG9OdW1i
ZXJTbG93UGF0aEdlbmVyYXRvcjo6VmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRl
SW50ZXJuYWwpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChDb21wYXJlQW5kQm94
Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5k
Qm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQ
YXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0
RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5v
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKFZhbHVlVG9OdW1iZXJT
bG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVUb051bWJlclNsb3dQ
YXRoR2VuZXJhdG9yOjpWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpERkc6OlZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5h
bCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKENvbXBhcmVBbmRCb3hCb29sZWFu
U2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29s
ZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5l
cmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDQtMTYg
IE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBFeGNlcHRpb24gc3Rh
Y2sgdHJhY2VzIGFyZW4ndCBjb21wbGV0ZSB3aGVuIHRoZSBleGNlcHRpb24gc3RhcnRzIGluIG5h
dGl2ZSBjb2RlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTE0
MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDggQEAKIAkJMEYxNUYx
NUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8q
IENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFF
M0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUUzQTQ3MTUzNENCQjkw
MDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0Rv
dWJsZUZvcm1hdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYxRTNBNUMxNTNBMURBOTAwMEY5NDU2IC8qIChudWxsKSBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBs
YW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjIxQzI2ODE0QkU1RjY4MDBBREM2NEIgLyogSklURHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyog
SklURHJpdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjdBMTRCRTcy
NzMwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTc1MCw2ICs3NTIsOCBAQAogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9u
U2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQ
YXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E0MzE1MzRDQkFEMDAw
Rjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdBcmd1bWVudFBvc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHQXJndW1lbnRQb3Np
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E0NDE1MzRDQkFEMDAw
Rjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHRG91YmxlRm9ybWF0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdEb3VibGVGb3Jt
YXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjFFM0E1MDE1MzdDMkNC
MDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTbG93UGF0
aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjFFM0E2NTE1M0Ey
MURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHBhdGggPSBk
ZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjFDMjdBMTRCRTcyNzMwMEFE
QzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4ZWN1dGlvbkhhcm5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIw
ODQsNiArMjA4OCw4IEBACiAJCQkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0
Y2guY3BwICovLAogCQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmgg
Ki8sCiAJCQkJODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAqLywK
KwkJCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxh
bi5oICovLAorCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVy
YXRvci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2
ZUpJVC5jcHAgKi8sCiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwICovLApAQCAtMjU3MCw2ICsyNTc2LDggQEAKIAkJCQk4NjEyRTRDRDE1
MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUz
QTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUUzQTVDMTUzQTFEQTkwMDBGOTQ1NiAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50
UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOCBAQCBw
dWJsaWM6CiAgICAgLy8gaW4gYSBjbGFzcyByZXF1aXJpbmcgZXhwbGljaXQgY29uc3RydWN0aW9u
IGluIG9yZGVyIHRvIGRpZmZlcmVudGlhdGUKICAgICAvLyBmcm9tIHBvaW50ZXJzIHVzZWQgYXMg
YWJzb2x1dGUgYWRkcmVzc2VzIHRvIG1lbW9yeSBvcGVyYXRpb25zCiAgICAgc3RydWN0IFRydXN0
ZWRJbW1QdHIgeworICAgICAgICBUcnVzdGVkSW1tUHRyKCkgeyB9CisgICAgICAgIAogICAgICAg
ICBleHBsaWNpdCBUcnVzdGVkSW1tUHRyKGNvbnN0IHZvaWQqIHZhbHVlKQogICAgICAgICAgICAg
OiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CkBAIC0yMTksNiArMjIxLDggQEAgcHVibGljOgog
ICAgIC8vICh3aGljaCBhcmUgaW1wbGVtZW50ZWQgYXMgYW4gZW51bSkgZnJvbSBhY2NpZGVudGFs
bHkgYmVpbmcgcGFzc2VkIGFzCiAgICAgLy8gaW1tZWRpYXRlIHZhbHVlcy4KICAgICBzdHJ1Y3Qg
VHJ1c3RlZEltbTMyIHsKKyAgICAgICAgVHJ1c3RlZEltbTMyKCkgeyB9CisgICAgICAgIAogICAg
ICAgICBleHBsaWNpdCBUcnVzdGVkSW1tMzIoaW50MzJfdCB2YWx1ZSkKICAgICAgICAgICAgIDog
bV92YWx1ZSh2YWx1ZSkKICNpZiBDUFUoQVJNKSB8fCBDUFUoTUlQUykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAxMTQyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDE1ICsyMDAsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7CiAgICAgICAg
ICAgICAgICAgaW50OF90IHNjcmF0Y2hHUFI7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0
YUNhbGxUb0RvbmU7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1N0cnVjdENo
ZWNrOwotICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKLSAgICAg
ICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CisgICAgICAgICAgICAgICAg
aW50MzJfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNh
bGxUb1N0cnVjdENoZWNrOworICAgICAgICAgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TbG93
Q2FzZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOwog
I2Vsc2UKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmU7
Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZTsK
KyAgICAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmU7CisgICAg
ICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZTsKICNlbmRp
ZgogICAgICAgICAgICAgfSBkZmc7CiAgICAgICAgICAgICBzdHJ1Y3QgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiAr
MTE0LDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaQogICAgIH0K
IH0KIAorZW51bSBTcGlsbFJlZ2lzdGVyc01vZGUgeyBOZWVkVG9TcGlsbCwgRG9udFNwaWxsIH07
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZH
T1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkRGR1JlZ2lzdGVyQmFuay5oIgorI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKICNp
bmNsdWRlICJKU0dsb2JhbERhdGEuaCIKQEAgLTc5LDkgKzgwLDEwIEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVCb2R5KFNwZWN1bGF0aXYKIAogICAgIGJvb2wgY29tcGlsZWRTcGVjdWxhdGl2
ZSA9IHNwZWN1bGF0aXZlLmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGVkU3Bl
Y3VsYXRpdmUsIGNvbXBpbGVkU3BlY3VsYXRpdmUpOworfQogCi0gICAgbGlua09TUkV4aXRzKCk7
Ci0KK3ZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCit7CiAgICAg
Ly8gSXRlcmF0ZSBvdmVyIHRoZSBtX2NhbGxzIHZlY3RvciwgY2hlY2tpbmcgZm9yIGp1bXBzIHRv
IGxpbmsuCiAgICAgYm9vbCBkaWRMaW5rRXhjZXB0aW9uQ2hlY2sgPSBmYWxzZTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpOyArK2kpIHsKQEAg
LTE0OSwxOSArMTUxLDE5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9w
ZXJ0eUFjY2Vzc2VzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJv
cGVydHlBY2Nlc3Nlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
aW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsKLSAgICAgICAgQ29kZUxv
Y2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9w
cm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0
eUFjY2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSk7CiAgICAgICAgIGluZm8u
Y29kZU9yaWdpbiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2NvZGVPcmlnaW47CiAgICAgICAg
IGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBp
bmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsID0gZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNo
ZWNrSW1tVG9DYWxsKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICAgICAgaW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNb
aV0ubV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRl
bHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1
cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hl
Y2sgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc3RydWN0dXJlQ2hlY2spKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xv
YWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRv
TG9hZE9yU3RvcmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JT
dG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9sb2FkT3JTdG9yZSkpOwog
I2Vsc2UKLSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9h
ZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdGFnTG9hZE9yU3Rv
cmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fcGF5bG9hZExvYWRPclN0b3Jl
KSk7CiAjZW5kaWYKLSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7
Ci0gICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3By
b3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICAgICAgaW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNb
aV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOworICAgICAgICBpbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0RvbmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxv
Y2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZG9u
ZSkpOwogICAgICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fYmFzZUdQUjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBpbmZvLnBhdGNoLmRm
Zy52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3ZhbHVlR1BSOwpAQCAtMjAxLDYg
KzIwMywxMiBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUmIGVudHJ5CiAgICAg
U3BlY3VsYXRpdmVKSVQgc3BlY3VsYXRpdmUoKnRoaXMpOwogICAgIGNvbXBpbGVCb2R5KHNwZWN1
bGF0aXZlKTsKIAorICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgorICAgIHNwZWN1bGF0
aXZlLnJ1blNsb3dQYXRoR2VuZXJhdG9ycygpOworICAgIAorICAgIGNvbXBpbGVFeGNlcHRpb25I
YW5kbGVycygpOworICAgIGxpbmtPU1JFeGl0cygpOworICAgIAogICAgIC8vIENyZWF0ZSBPU1Ig
ZW50cnkgdHJhbXBvbGluZXMgaWYgbmVjZXNzYXJ5LgogICAgIHNwZWN1bGF0aXZlLmNyZWF0ZU9T
UkVudHJpZXMoKTsKIApAQCAtMjcwLDYgKzI3OCwxMiBAQCBib29sIEpJVENvbXBpbGVyOjpjb21w
aWxlRnVuY3Rpb24oSklUQ29kCiAgICAgbW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgIGp1bXAoZnJvbUFyaXR5Q2hlY2spOwogICAgIAorICAgIC8v
IEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgorICAgIHNwZWN1bGF0aXZlLnJ1blNsb3dQYXRoR2Vu
ZXJhdG9ycygpOworICAgIAorICAgIGNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOworICAgIGxp
bmtPU1JFeGl0cygpOworICAgIAogICAgIC8vIENyZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMg
aWYgbmVjZXNzYXJ5LgogICAgIHNwZWN1bGF0aXZlLmNyZWF0ZU9TUkVudHJpZXMoKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24g
MTE0MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQog
Ci0jaW5jbHVkZSA8YXNzZW1ibGVyL0xpbmtCdWZmZXIuaD4KLSNpbmNsdWRlIDxhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KLSNpbmNs
dWRlIDxkZmcvREZHQ0NhbGxIZWxwZXJzLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR0ZQUkluZm8uaD4K
LSNpbmNsdWRlIDxkZmcvREZHR1BSSW5mby5oPgotI2luY2x1ZGUgPGRmZy9ERkdHcmFwaC5oPgot
I2luY2x1ZGUgPGRmZy9ERkdSZWdpc3RlckJhbmsuaD4KLSNpbmNsdWRlIDxqaXQvSklUQ29kZS5o
PgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgor
I2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKKyNpbmNsdWRlICJK
SVRDb2RlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBE
RkcgewogCiBjbGFzcyBKSVRDb2RlR2VuZXJhdG9yOwogY2xhc3MgTm9kZVRvUmVnaXN0ZXJNYXA7
CitjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwogY2xhc3Mg
U3BlY3VsYXRpb25SZWNvdmVyeTsKIApAQCAtMTMwLDIyICsxMzEsNDMgQEAgc3RydWN0IFByb3Bl
cnR5QWNjZXNzUmVjb3JkIHsKICAgICBlbnVtIFJlZ2lzdGVyTW9kZSB7IFJlZ2lzdGVyc0ZsdXNo
ZWQsIFJlZ2lzdGVyc0luVXNlIH07CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBQcm9w
ZXJ0eUFjY2Vzc1JlY29yZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3JvQXNzZW1ibGVyOjpE
YXRhTGFiZWxQdHIgZGVsdGFDaGVja0ltbVRvQ2FsbCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVu
Y3Rpb25DYWxsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgZGVsdGFDYWxsVG9TbG93Q2FzZSwgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIsIGludDhfdCB2YWx1ZUdQUiwg
aW50OF90IHNjcmF0Y2hHUFIsIFJlZ2lzdGVyTW9kZSByZWdpc3Rlck1vZGUgPSBSZWdpc3RlcnNJ
blVzZSkKKyAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKKyAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZUlt
bSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2ssCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRPclN0b3JlLAorICAgICAgICBT
bG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGhHZW5lcmF0b3IsCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBkb25lLAorICAgICAgICBpbnQ4X3QgYmFzZUdQUiwKKyAgICAgICAgaW50OF90
IHZhbHVlR1BSLAorICAgICAgICBpbnQ4X3Qgc2NyYXRjaEdQUiwKKyAgICAgICAgUmVnaXN0ZXJN
b2RlIHJlZ2lzdGVyTW9kZSA9IFJlZ2lzdGVyc0luVXNlKQogI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgZGVsdGFDaGVja0ltbVRvQ2FsbCwgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkZWx0YUNhbGxUb1N0
cnVjdENoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRlbHRhQ2FsbFRvU2xv
d0Nhc2UsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkZWx0YUNhbGxUb0RvbmUsIGludDhfdCBiYXNl
R1BSLCBpbnQ4X3QgdmFsdWVUYWdHUFIsIGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hH
UFIsIFJlZ2lzdGVyTW9kZSByZWdpc3Rlck1vZGUgPSBSZWdpc3RlcnNJblVzZSkKKyAgICBQcm9w
ZXJ0eUFjY2Vzc1JlY29yZCgKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZUltbSwKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2ssCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxDb21wYWN0IHRhZ0xvYWRPclN0b3JlLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RGF0YUxhYmVsQ29tcGFjdCBwYXlsb2FkTG9hZE9yU3RvcmUsCisgICAgICAgIFNsb3dQYXRo
R2VuZXJhdG9yKiBzbG93UGF0aEdlbmVyYXRvciwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGRvbmUsCisgICAgICAgIGludDhfdCBiYXNlR1BSLAorICAgICAgICBpbnQ4X3QgdmFsdWVU
YWdHUFIsCisgICAgICAgIGludDhfdCB2YWx1ZUdQUiwKKyAgICAgICAgaW50OF90IHNjcmF0Y2hH
UFIsCisgICAgICAgIFJlZ2lzdGVyTW9kZSByZWdpc3Rlck1vZGUgPSBSZWdpc3RlcnNJblVzZSkK
ICNlbmRpZgogICAgICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAgICAgICAsIG1f
ZGVsdGFDaGVja0ltbVRvQ2FsbChkZWx0YUNoZWNrSW1tVG9DYWxsKQotICAgICAgICAsIG1fZnVu
Y3Rpb25DYWxsKGZ1bmN0aW9uQ2FsbCkKLSAgICAgICAgLCBtX2RlbHRhQ2FsbFRvU3RydWN0Q2hl
Y2soZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaykKKyAgICAgICAgLCBtX3N0cnVjdHVyZUltbShzdHJ1
Y3R1cmVJbW0pCisgICAgICAgICwgbV9zdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVDaGVjaykKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAsIG1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZShkZWx0
YUNhbGxUb0xvYWRPclN0b3JlKQorICAgICAgICAsIG1fbG9hZE9yU3RvcmUobG9hZE9yU3RvcmUp
CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAsIG1fZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZShkZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKQotICAgICAgICAsIG1fZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUoZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpCisgICAg
ICAgICwgbV90YWdMb2FkT3JTdG9yZSh0YWdMb2FkT3JTdG9yZSkKKyAgICAgICAgLCBtX3BheWxv
YWRMb2FkT3JTdG9yZShwYXlsb2FkTG9hZE9yU3RvcmUpCiAjZW5kaWYKLSAgICAgICAgLCBtX2Rl
bHRhQ2FsbFRvU2xvd0Nhc2UoZGVsdGFDYWxsVG9TbG93Q2FzZSkKLSAgICAgICAgLCBtX2RlbHRh
Q2FsbFRvRG9uZShkZWx0YUNhbGxUb0RvbmUpCisgICAgICAgICwgbV9zbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aEdlbmVyYXRvcikKKyAgICAgICAgLCBtX2RvbmUoZG9uZSkKICAgICAgICAgLCBt
X2Jhc2VHUFIoYmFzZUdQUikKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAsIG1fdmFs
dWVUYWdHUFIodmFsdWVUYWdHUFIpCkBAIC0xNTcsMTcgKzE3OSwxNiBAQCBzdHJ1Y3QgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQgewogICAgIH0KIAogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbV9kZWx0YUNoZWNrSW1tVG9DYWxsOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fZnVuY3Rpb25DYWxsOwotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG1fZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyIG1fc3RydWN0dXJlSW1tOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1f
c3RydWN0dXJlQ2hlY2s7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBtX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9sb2FkT3JTdG9yZTsKICNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9kZWx0YUNhbGxU
b1RhZ0xvYWRPclN0b3JlOwotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1f
ZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmU7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbENvbXBhY3QgbV90YWdMb2FkT3JTdG9yZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsQ29tcGFjdCBtX3BheWxvYWRMb2FkT3JTdG9yZTsKICNlbmRpZgotICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX2RlbHRhQ2FsbFRvU2xvd0Nhc2U7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fZGVsdGFDYWxsVG9Eb25lOworICAgIFNsb3dQYXRoR2VuZXJhdG9yKiBtX3Nsb3dQYXRo
R2VuZXJhdG9yOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgaW50OF90
IG1fYmFzZUdQUjsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGludDhfdCBtX3ZhbHVlVGFn
R1BSOwpAQCAtMTkzLDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2N1cnJlbnRDb2Rl
T3JpZ2luSW5kZXgoMCkKICAgICB7CiAgICAgfQotCisgICAgCiAgICAgYm9vbCBjb21waWxlKEpJ
VENvZGUmIGVudHJ5KTsKICAgICBib29sIGNvbXBpbGVGdW5jdGlvbihKSVRDb2RlJiBlbnRyeSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKTsKIApAQCAtMzIyLDYg
KzM0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5rKExpbmtCdWZmZXImKTsKIAogICAgIHZv
aWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNv
dmVyeSopOworICAgIHZvaWQgY29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CiAgICAgdm9pZCBs
aW5rT1NSRXhpdHMoKTsKICAgICAKICAgICAvLyBUaGUgZGF0YWZsb3cgZ3JhcGggY3VycmVudGx5
IGJlaW5nIGdlbmVyYXRlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbl9oCisjZGVmaW5l
IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW5faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1
ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBTaWxlbnRTcGlsbEFjdGlvbiB7CisgICAgRG9O
b3RoaW5nRm9yU3BpbGwsCisgICAgU3RvcmUzMlRhZywKKyAgICBTdG9yZTMyUGF5bG9hZCwKKyAg
ICBTdG9yZVB0ciwKKyAgICBTdG9yZURvdWJsZQorfTsKKworZW51bSBTaWxlbnRGaWxsQWN0aW9u
IHsKKyAgICBEb05vdGhpbmdGb3JGaWxsLAorICAgIFNldEludDMyQ29uc3RhbnQsCisgICAgU2V0
Qm9vbGVhbkNvbnN0YW50LAorICAgIFNldENlbGxDb25zdGFudCwKKyAgICBTZXRUcnVzdGVkSlND
b25zdGFudCwKKyAgICBTZXRKU0NvbnN0YW50LAorICAgIFNldEpTQ29uc3RhbnRUYWcsCisgICAg
U2V0SlNDb25zdGFudFBheWxvYWQsCisgICAgU2V0SW50MzJUYWcsCisgICAgU2V0Q2VsbFRhZywK
KyAgICBTZXRCb29sZWFuVGFnLAorICAgIFNldERvdWJsZUNvbnN0YW50LAorICAgIExvYWQzMlRh
ZywKKyAgICBMb2FkMzJQYXlsb2FkLAorICAgIExvYWQzMlBheWxvYWRCb3hJbnQsCisgICAgTG9h
ZFB0ciwKKyAgICBMb2FkRG91YmxlLAorICAgIExvYWREb3VibGVCb3hEb3VibGUsCisgICAgTG9h
ZEpTVW5ib3hEb3VibGUKK307CisKK2NsYXNzIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4geworcHVi
bGljOgorICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oKQorICAgICAgICA6IG1fc3BpbGxBY3Rp
b24oRG9Ob3RoaW5nRm9yU3BpbGwpCisgICAgICAgICwgbV9maWxsQWN0aW9uKERvTm90aGluZ0Zv
ckZpbGwpCisgICAgICAgICwgbV9yZWdpc3RlcigtMSkKKyAgICAgICAgLCBtX25vZGVJbmRleChO
b05vZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKFNp
bGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBn
cHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlvbikKKyAgICAgICAgLCBtX2Zp
bGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAgICAgLCBtX3JlZ2lzdGVyKGdwcikKKyAgICAgICAg
LCBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuKFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIpCisgICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlv
bikKKyAgICAgICAgLCBtX2ZpbGxBY3Rpb24oZmlsbEFjdGlvbikKKyAgICAgICAgLCBtX3JlZ2lz
dGVyKGZwcikKKyAgICAgICAgLCBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFNpbGVudFNwaWxsQWN0aW9uPihtX3NwaWxsQWN0aW9uKTsgfQorICAgIFNp
bGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNp
bGVudEZpbGxBY3Rpb24+KG1fZmlsbEFjdGlvbik7IH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9k
ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlSW5kZXg7IH0KKyAgICAKKyAgICBHUFJSZWcg
Z3ByKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3JlZ2lzdGVyKTsgfQor
ICAgIEZQUlJlZyBmcHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KG1fcmVn
aXN0ZXIpOyB9CisgICAgCitwcml2YXRlOgorICAgIGludDhfdCBtX3NwaWxsQWN0aW9uOworICAg
IGludDhfdCBtX2ZpbGxBY3Rpb247CisgICAgaW50OF90IG1fcmVnaXN0ZXI7CisgICAgTm9kZUlu
ZGV4IG1fbm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1Bh
dGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdT
bG93UGF0aEdlbmVyYXRvcl9oCisjZGVmaW5lIERGR1Nsb3dQYXRoR2VuZXJhdG9yX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgiCisj
aW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFz
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3IgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNsb3dQYXRoR2VuZXJhdG9yKFNwZWN1bGF0aXZl
SklUKiBqaXQpCisgICAgICAgIDogbV9jb21waWxlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkK
KyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflNsb3dQYXRoR2VuZXJhdG9yKCkgeyB9CisgICAg
dm9pZCBnZW5lcmF0ZShTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIkdlbmVyYXRpbmcgc2xvdyBwYXRoICVw
IGF0IG9mZnNldCAweCV4XG4iLCB0aGlzLCBqaXQtPm1faml0LmRlYnVnT2Zmc2V0KCkpOworI2Vu
ZGlmCisgICAgICAgIG1fbGFiZWwgPSBqaXQtPm1faml0LmxhYmVsKCk7CisgICAgICAgIGppdC0+
bV9jb21waWxlSW5kZXggPSBtX2NvbXBpbGVJbmRleDsKKyAgICAgICAgZ2VuZXJhdGVJbnRlcm5h
bChqaXQpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgaml0LT5tX2ppdC5icmVha3Bv
aW50KCk7IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBnZW5lcmF0b3IganVtcHMgYmFjayB0byBzb21l
d2hlcmUKKyNlbmRpZgorICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwoKSBj
b25zdCB7IHJldHVybiBtX2xhYmVsOyB9CisgICAgdmlydHVhbCBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBC
eSBkZWZhdWx0IHNsb3cgcGF0aCBnZW5lcmF0b3JzIGRvbid0IGhhdmUgYSBjYWxsLgorICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkNhbGwoKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqKSA9IDA7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fbGFiZWw7CisgICAgTm9kZUluZGV4IG1fY29tcGlsZUlu
ZGV4OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CitjbGFzcyBKdW1waW5nU2xv
d1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgU2xvd1BhdGhHZW5lcmF0b3IgeworcHVibGljOgorICAg
IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcihKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCog
aml0KQorICAgICAgICA6IFNsb3dQYXRoR2VuZXJhdG9yKGppdCkKKyAgICAgICAgLCBtX2Zyb20o
ZnJvbSkKKyAgICAgICAgLCBtX3RvKGppdC0+bV9qaXQubGFiZWwoKSkKKyAgICB7CisgICAgfQor
ICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgbGlua0Zyb20oU3BlY3VsYXRpdmVKSVQqIGppdCkK
KyAgICB7CisgICAgICAgIG1fZnJvbS5saW5rKCZqaXQtPm1faml0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBqdW1wVG8oU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7CisgICAgICAgIGppdC0+
bV9qaXQuanVtcCgpLmxpbmtUbyhtX3RvLCAmaml0LT5tX2ppdCk7CisgICAgfQorCisgICAgSnVt
cFR5cGUgbV9mcm9tOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RvOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUg
UmVzdWx0VHlwZT4KK2NsYXNzIENhbGxTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5n
U2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGU+IHsKK3B1YmxpYzoKKyAgICBDYWxsU2xvd1BhdGhH
ZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1
bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9k
ZSwgUmVzdWx0VHlwZSByZXN1bHQpCisgICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9y
PEp1bXBUeXBlPihmcm9tLCBqaXQpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAg
ICAgICAgLCBtX3NwaWxsTW9kZShzcGlsbE1vZGUpCisgICAgICAgICwgbV9yZXN1bHQocmVzdWx0
KQorICAgIHsKKyAgICAgICAgaWYgKG1fc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAgICAg
ICAgICAgaml0LT5zaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZmFsc2UsIG1fcGxhbnMsIHJl
c3VsdCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jYWxsOworICAgIH0KKyAgICAKK3By
b3RlY3RlZDoKKyAgICB2b2lkIHNldFVwKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAg
ICAgICB0aGlzLT5saW5rRnJvbShqaXQpOworICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVl
ZFRvU3BpbGwpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsYW5z
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGppdC0+c2lsZW50U3BpbGwobV9wbGFuc1tp
XSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCByZWNvcmRDYWxsKE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwpCisgICAgeworICAgICAgICBtX2NhbGwgPSBjYWxsOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHRlYXJEb3duKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAg
ICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKKyAgICAgICAgICAgIEdQUlJl
ZyBjYW5UcmFtcGxlID0gU3BlY3VsYXRpdmVKSVQ6OnBpY2tDYW5UcmFtcGxlKG1fcmVzdWx0KTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQorICAg
ICAgICAgICAgICAgIGppdC0+c2lsZW50RmlsbChtX3BsYW5zW2ldLCBjYW5UcmFtcGxlKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLT5qdW1wVG8oaml0KTsKKyAgICB9CisKKyAgICBGdW5jdGlv
blR5cGUgbV9mdW5jdGlvbjsKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgbV9zcGlsbE1vZGU7Cisg
ICAgUmVzdWx0VHlwZSBtX3Jlc3VsdDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7
CisgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4sIDI+IG1fcGxhbnM7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFt
ZSBSZXN1bHRUeXBlPgorY2xhc3MgQ2FsbFJlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5l
cmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0
aW9uVHlwZSwgUmVzdWx0VHlwZT4geworcHVibGljOgorICAgIENhbGxSZXN1bHRBbmROb0FyZ3Vt
ZW50c1Nsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2
ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJz
TW9kZSBzcGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0KQorICAgICAgICA6IENhbGxTbG93UGF0
aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAg
ICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgIHsKKyAgICB9
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZl
SklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlz
LT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5t
X3Jlc3VsdCkpOworICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5
cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMT4KK2NsYXNzIENh
bGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsK
K3B1YmxpYzoKKyAgICBDYWxsUmVzdWx0QW5kT25lQXJndW1lbnRTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBl
IGZ1bmN0aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRU
eXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEpCisgICAgICAgIDogQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAorICAgICAg
ICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQpCisgICAgICAgICwg
bV9hcmd1bWVudDEoYXJndW1lbnQxKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAg
ICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2Fs
bE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEp
KTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisKKyAgICBBcmd1bWVudFR5
cGUxIG1fYXJndW1lbnQxOworfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUs
IHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFt
ZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyPgorY2xhc3MgQ2FsbFJlc3Vs
dEFuZFR3b0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKK3B1Ymxp
YzoKKyAgICBDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IoCisgICAg
ICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5j
dGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgUmVzdWx0VHlwZSBy
ZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLAorICAgICAgICBBcmd1bWVudFR5cGUyIGFy
Z3VtZW50MikKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0
aW9uVHlwZSwgUmVzdWx0VHlwZT4oCisgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBz
cGlsbE1vZGUsIHJlc3VsdCkKKyAgICAgICAgLCBtX2FyZ3VtZW50MShhcmd1bWVudDEpCisgICAg
ICAgICwgbV9hcmd1bWVudDIoYXJndW1lbnQyKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAg
eworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGpp
dC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1
bWVudDEsIG1fYXJndW1lbnQyKSk7CisgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAg
fQorCisgICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUyIG1f
YXJndW1lbnQyOworfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1
bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUz
PgorY2xhc3MgQ2FsbFJlc3VsdEFuZFRocmVlQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKKyAg
ICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwg
UmVzdWx0VHlwZT4geworcHVibGljOgorICAgIENhbGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Ns
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCog
aml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBz
cGlsbE1vZGUsIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZ3VtZW50MSwKKyAg
ICAgICAgQXJndW1lbnRUeXBlMiBhcmd1bWVudDIsIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQzKQor
ICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBS
ZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwg
cmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFyZ3VtZW50MSkKKyAgICAgICAgLCBtX2Fy
Z3VtZW50Mihhcmd1bWVudDIpCisgICAgICAgICwgbV9hcmd1bWVudDMoYXJndW1lbnQzKQorICAg
IHsKKyAgICB9CisKK3Byb3RlY3RlZDogICAgCisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNw
ZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAg
ICAgICB0aGlzLT5yZWNvcmRDYWxsKAorICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKAor
ICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZ3Vt
ZW50MSwgbV9hcmd1bWVudDIsCisgICAgICAgICAgICAgICAgbV9hcmd1bWVudDMpKTsKKyAgICAg
ICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisKKyAgICBBcmd1bWVudFR5cGUxIG1fYXJn
dW1lbnQxOworICAgIEFyZ3VtZW50VHlwZTIgbV9hcmd1bWVudDI7CisgICAgQXJndW1lbnRUeXBl
MyBtX2FyZ3VtZW50MzsKK307CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIEp1bXBUeXBlLCB0
eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsCisgICAgdHlwZW5hbWUg
QXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwgdHlwZW5hbWUgQXJndW1lbnRU
eXBlMywKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGU0PgorY2xhc3MgQ2FsbFJlc3VsdEFuZEZv
dXJBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdl
bmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6Cisg
ICAgQ2FsbFJlc3VsdEFuZEZvdXJBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
SnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9u
LAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3Vs
dCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsCisgICAgICAgIEFyZ3VtZW50VHlwZTIgYXJndW1l
bnQyLCBBcmd1bWVudFR5cGUzIGFyZ3VtZW50MywgQXJndW1lbnRUeXBlNCBhcmd1bWVudDQpCisg
ICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJl
c3VsdFR5cGU+KAorICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCBy
ZXN1bHQpCisgICAgICAgICwgbV9hcmd1bWVudDEoYXJndW1lbnQxKQorICAgICAgICAsIG1fYXJn
dW1lbnQyKGFyZ3VtZW50MikKKyAgICAgICAgLCBtX2FyZ3VtZW50Myhhcmd1bWVudDMpCisgICAg
ICAgICwgbV9hcmd1bWVudDQoYXJndW1lbnQ0KQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAg
eworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKAor
ICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgIHRoaXMtPm1f
ZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCisgICAg
ICAgICAgICAgICAgbV9hcmd1bWVudDMsIG1fYXJndW1lbnQ0KSk7CisgICAgICAgIHRoaXMtPnRl
YXJEb3duKGppdCk7CisgICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBtX2FyZ3VtZW50MTsKKyAg
ICBBcmd1bWVudFR5cGUyIG1fYXJndW1lbnQyOworICAgIEFyZ3VtZW50VHlwZTMgbV9hcmd1bWVu
dDM7CisgICAgQXJndW1lbnRUeXBlNCBtX2FyZ3VtZW50NDsKK307CisKK3RlbXBsYXRlPAorICAg
IHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3Vs
dFR5cGUsCisgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBl
MiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGU0LCB0
eXBlbmFtZSBBcmd1bWVudFR5cGU1PgorY2xhc3MgQ2FsbFJlc3VsdEFuZEZpdmVBcmd1bWVudHNT
bG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1w
VHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPiB7CitwdWJsaWM6CisgICAgQ2FsbFJlc3Vs
dEFuZEZpdmVBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgSnVtcFR5cGUgZnJv
bSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgICAgICBT
cGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRU
eXBlMSBhcmd1bWVudDEsCisgICAgICAgIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLCBBcmd1bWVu
dFR5cGUzIGFyZ3VtZW50MywgQXJndW1lbnRUeXBlNCBhcmd1bWVudDQsCisgICAgICAgIEFyZ3Vt
ZW50VHlwZTUgYXJndW1lbnQ1KQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1w
VHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgIGZyb20sIGppdCwg
ZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnQxKGFyZ3Vt
ZW50MSkKKyAgICAgICAgLCBtX2FyZ3VtZW50Mihhcmd1bWVudDIpCisgICAgICAgICwgbV9hcmd1
bWVudDMoYXJndW1lbnQzKQorICAgICAgICAsIG1fYXJndW1lbnQ0KGFyZ3VtZW50NCkKKyAgICAg
ICAgLCBtX2FyZ3VtZW50NShhcmd1bWVudDUpCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOiAg
ICAKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7
CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoCisg
ICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgdGhpcy0+bV9m
dW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJndW1lbnQxLCBtX2FyZ3VtZW50MiwKKyAgICAg
ICAgICAgICAgICBtX2FyZ3VtZW50MywgbV9hcmd1bWVudDQsIG1fYXJndW1lbnQ1KSk7CisgICAg
ICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CisgICAgfQorCisgICAgQXJndW1lbnRUeXBlMSBtX2Fy
Z3VtZW50MTsKKyAgICBBcmd1bWVudFR5cGUyIG1fYXJndW1lbnQyOworICAgIEFyZ3VtZW50VHlw
ZTMgbV9hcmd1bWVudDM7CisgICAgQXJndW1lbnRUeXBlNCBtX2FyZ3VtZW50NDsKKyAgICBBcmd1
bWVudFR5cGU1IG1fYXJndW1lbnQ1OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUs
IHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZT4KK2lubGluZSBQYXNz
T3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aENhbGwoCisgICAgSnVtcFR5cGUgZnJv
bSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLAorICAgIFJlc3Vs
dFR5cGUgcmVzdWx0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3BpbGwp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZE5vQXJn
dW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rpb25U
eXBlLCBSZXN1bHRUeXBlPigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBz
cGlsbE1vZGUsIHJlc3VsdCkpOworfQorCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlw
ZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVu
YW1lIEFyZ3VtZW50VHlwZTE+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4g
c2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1
bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBl
MSBhcmd1bWVudDEsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRUb1Nw
aWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxSZXN1bHRBbmRP
bmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5cGUsIEZ1bmN0
aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRUeXBlMT4oCisgICAgICAgICAgICAgICAgZnJv
bSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQsIGFyZ3VtZW50MSkpOworfQorCit0
ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0
eXBlbmFtZSBSZXN1bHRUeXBlLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTEsIHR5cGVuYW1l
IEFyZ3VtZW50VHlwZTI+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xv
d1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0
aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBh
cmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAorICAgIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIoCisgICAg
ICAgIG5ldyBDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAg
ICAgICAgICBKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5cGUx
LCBBcmd1bWVudFR5cGUyPigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBz
cGlsbE1vZGUsIHJlc3VsdCwgYXJndW1lbnQxLCBhcmd1bWVudDIpKTsKK30KKwordGVtcGxhdGU8
CisgICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUg
UmVzdWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVu
dFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzPgoraW5saW5lIFBhc3NPd25QdHI8U2xvd1Bh
dGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2
ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgUmVzdWx0VHlwZSByZXN1bHQs
IEFyZ3VtZW50VHlwZTEgYXJndW1lbnQxLCBBcmd1bWVudFR5cGUyIGFyZ3VtZW50MiwKKyAgICBB
cmd1bWVudFR5cGUzIGFyZ3VtZW50MywgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5l
ZWRUb1NwaWxsKQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxSZXN1
bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5
cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRUeXBlMSwgQXJndW1lbnRUeXBl
MiwKKyAgICAgICAgICAgIEFyZ3VtZW50VHlwZTM+KAorICAgICAgICAgICAgICAgIGZyb20sIGpp
dCwgZnVuY3Rpb24sIHNwaWxsTW9kZSwgcmVzdWx0LCBhcmd1bWVudDEsIGFyZ3VtZW50MiwKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudDMpKTsKK30KKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUg
SnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwKKyAg
ICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFt
ZSBBcmd1bWVudFR5cGUzLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQ+CitpbmxpbmUgUGFz
c093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1
bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlMSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJn
dW1lbnQyLAorICAgIEFyZ3VtZW50VHlwZTMgYXJndW1lbnQzLCBBcmd1bWVudFR5cGU0IGFyZ3Vt
ZW50NCwKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3BpbGwpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbFJlc3VsdEFuZEZvdXJBcmd1
bWVudHNTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBGdW5jdGlvblR5
cGUsIFJlc3VsdFR5cGUsIEFyZ3VtZW50VHlwZTEsIEFyZ3VtZW50VHlwZTIsCisgICAgICAgICAg
ICBBcmd1bWVudFR5cGUzLCBBcmd1bWVudFR5cGU0PigKKyAgICAgICAgICAgICAgICBmcm9tLCBq
aXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUsIHJlc3VsdCwgYXJndW1lbnQxLCBhcmd1bWVudDIsCisg
ICAgICAgICAgICAgICAgYXJndW1lbnQzLCBhcmd1bWVudDQpKTsKK30KKwordGVtcGxhdGU8Cisg
ICAgdHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVz
dWx0VHlwZSwKKyAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5
cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLAorICAgIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTQs
IHR5cGVuYW1lIEFyZ3VtZW50VHlwZTU+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVy
YXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBq
aXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1l
bnRUeXBlMSBhcmd1bWVudDEsIEFyZ3VtZW50VHlwZTIgYXJndW1lbnQyLAorICAgIEFyZ3VtZW50
VHlwZTMgYXJndW1lbnQzLCBBcmd1bWVudFR5cGU0IGFyZ3VtZW50NCwgQXJndW1lbnRUeXBlNSBh
cmd1bWVudDUsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRUb1NwaWxs
KQoreworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxSZXN1bHRBbmRGaXZl
QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rp
b25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudFR5cGUxLCBBcmd1bWVudFR5cGUyLAorICAgICAg
ICAgICAgQXJndW1lbnRUeXBlMywgQXJndW1lbnRUeXBlNCwgQXJndW1lbnRUeXBlNT4oCisgICAg
ICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXN1bHQsIGFyZ3Vt
ZW50MSwgYXJndW1lbnQyLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50MywgYXJndW1lbnQ0LCBh
cmd1bWVudDUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIERl
c3RpbmF0aW9uVHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZSwgdW5zaWduZWQgbnVtYmVyT2ZBc3Np
Z25tZW50cz4KK2NsYXNzIEFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBp
bmdTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZT4geworcHVibGljOgorICAgIEFzc2lnbmluZ1Ns
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCog
aml0LAorICAgICAgICBEZXN0aW5hdGlvblR5cGUgZGVzdGluYXRpb25bbnVtYmVyT2ZBc3NpZ25t
ZW50c10sCisgICAgICAgIFNvdXJjZVR5cGUgc291cmNlW251bWJlck9mQXNzaWdubWVudHNdKQor
ICAgICAgICA6IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZT4oZnJvbSwgaml0KQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBc3NpZ25tZW50czsgaS0t
OykgeworICAgICAgICAgICAgbV9kZXN0aW5hdGlvbltpXSA9IGRlc3RpbmF0aW9uW2ldOworICAg
ICAgICAgICAgbV9zb3VyY2VbaV0gPSBzb3VyY2VbaV07CisgICAgICAgIH0KKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJ
VCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+bGlua0Zyb20oaml0KTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBc3NpZ25tZW50czsgaS0tOykKKyAgICAgICAgICAgIGpp
dC0+bV9qaXQubW92ZShtX3NvdXJjZVtpXSwgbV9kZXN0aW5hdGlvbltpXSk7CisgICAgICAgIHRo
aXMtPmp1bXBUbyhqaXQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEZXN0aW5hdGlvblR5cGUg
bV9kZXN0aW5hdGlvbltudW1iZXJPZkFzc2lnbm1lbnRzXTsKKyAgICBTb3VyY2VUeXBlIG1fc291
cmNlW251bWJlck9mQXNzaWdubWVudHNdOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5
cGUsIHR5cGVuYW1lIERlc3RpbmF0aW9uVHlwZSwgdHlwZW5hbWUgU291cmNlVHlwZSwgdW5zaWdu
ZWQgbnVtYmVyT2ZBc3NpZ25tZW50cz4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJh
dG9yPiBzbG93UGF0aE1vdmUoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGpp
dCwgU291cmNlVHlwZSBzb3VyY2VbbnVtYmVyT2ZBc3NpZ25tZW50c10sIERlc3RpbmF0aW9uVHlw
ZSBkZXN0aW5hdGlvbltudW1iZXJPZkFzc2lnbm1lbnRzXSkKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIoCisgICAgICAgIG5ldyBBc3NpZ25pbmdTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAg
IEp1bXBUeXBlLCBEZXN0aW5hdGlvblR5cGUsIFNvdXJjZVR5cGUsIG51bWJlck9mQXNzaWdubWVu
dHM+KAorICAgICAgICAgICAgICAgIGZyb20sIGppdCwgZGVzdGluYXRpb24sIHNvdXJjZSkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRGVzdGluYXRpb25UeXBl
LCB0eXBlbmFtZSBTb3VyY2VUeXBlPgoraW5saW5lIFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0
b3I+IHNsb3dQYXRoTW92ZSgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0
LCBTb3VyY2VUeXBlIHNvdXJjZSwgRGVzdGluYXRpb25UeXBlIGRlc3RpbmF0aW9uKQoreworICAg
IFNvdXJjZVR5cGUgc291cmNlQXJyYXlbMV0gPSB7IHNvdXJjZSB9OworICAgIERlc3RpbmF0aW9u
VHlwZSBkZXN0aW5hdGlvbkFycmF5WzFdID0geyBkZXN0aW5hdGlvbiB9OworICAgIHJldHVybiBh
ZG9wdFB0cigKKyAgICAgICAgbmV3IEFzc2lnbmluZ1Nsb3dQYXRoR2VuZXJhdG9yPAorICAgICAg
ICAgICAgSnVtcFR5cGUsIERlc3RpbmF0aW9uVHlwZSwgU291cmNlVHlwZSwgMT4oCisgICAgICAg
ICAgICAgICAgZnJvbSwgaml0LCBkZXN0aW5hdGlvbkFycmF5LCBzb3VyY2VBcnJheSkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRGVzdGluYXRpb25UeXBlLCB0
eXBlbmFtZSBTb3VyY2VUeXBlPgoraW5saW5lIFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+
IHNsb3dQYXRoTW92ZSgKKyAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBT
b3VyY2VUeXBlIHNvdXJjZTEsIERlc3RpbmF0aW9uVHlwZSBkZXN0aW5hdGlvbjEsIFNvdXJjZVR5
cGUgc291cmNlMiwgRGVzdGluYXRpb25UeXBlIGRlc3RpbmF0aW9uMikKK3sKKyAgICBTb3VyY2VU
eXBlIHNvdXJjZUFycmF5WzJdID0geyBzb3VyY2UxLCBzb3VyY2UyIH07CisgICAgRGVzdGluYXRp
b25UeXBlIGRlc3RpbmF0aW9uQXJyYXlbMl0gPSB7IGRlc3RpbmF0aW9uMSwgZGVzdGluYXRpb24y
IH07CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQXNzaWduaW5nU2xvd1BhdGhH
ZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRGVzdGluYXRpb25UeXBlLCBTb3VyY2VU
eXBlLCAyPigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGRlc3RpbmF0aW9uQXJyYXksIHNv
dXJjZUFycmF5KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRChERkdfSklUKQorCisjZW5kaWYgLy8gREZHU2xvd1BhdGhHZW5lcmF0b3JfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDExNDIxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJKU0J5dGVBcnJheS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CkBAIC0zNTgsNiArMzU5LDMzIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxKU1ZhbHVlKE5vZGVJbmQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorY2xhc3MgVmFsdWVUb051
bWJlclNsb3dQYXRoR2VuZXJhdG9yCisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
PE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBEX0RGR09wZXJhdGlvbl9FSiwgSlNWYWx1ZVJlZ3M+IHsK
K3B1YmxpYzoKKyAgICBWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCisgICAgICAgIEdQ
UlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcganNWYWx1
ZVRhZ0dQUiwgR1BSUmVnIGpzVmFsdWVQYXlsb2FkR1BSKQorICAgICAgICA6IENhbGxTbG93UGF0
aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgRF9ERkdPcGVyYXRpb25fRUosIEpTVmFs
dWVSZWdzPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZGZnQ29udmVydEpTVmFsdWVUb051bWJl
ciwgTmVlZFRvU3BpbGwsIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQ
UikpCisgICAgICAgICwgbV9qc1ZhbHVlVGFnR1BSKGpzVmFsdWVUYWdHUFIpCisgICAgICAgICwg
bV9qc1ZhbHVlUGF5bG9hZEdQUihqc1ZhbHVlUGF5bG9hZEdQUikKKyAgICB7CisgICAgfQorCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVK
SVQqIGppdCkKKyAgICB7CisgICAgICAgIHNldFVwKGppdCk7CisgICAgICAgIHJlY29yZENhbGwo
aml0LT5jYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIsIEZQUkluZm86OnJl
dHVyblZhbHVlRlBSLCBtX2pzVmFsdWVUYWdHUFIsIG1fanNWYWx1ZVBheWxvYWRHUFIpKTsKKyAg
ICAgICAgaml0LT5ib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIG1fcmVzdWx0LnRh
Z0dQUigpLCBtX3Jlc3VsdC5wYXlsb2FkR1BSKCkpOworICAgICAgICB0ZWFyRG93bihqaXQpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBHUFJSZWcgbV9qc1ZhbHVlVGFnR1BSOworICAgIEdQUlJl
ZyBtX2pzVmFsdWVQYXlsb2FkR1BSOworfTsKKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKGlzS25vd25OdW1l
cmljKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKQEAgLTM5MywyMyArNDIxLDEyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm9uTnVtZXJpYyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwogCi0gICAgLy8g
Rmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFs
dWUKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgp
OwotCi0gICAgLy8gTmV4dCBoYW5kbGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKLSAg
ICBub25OdW1lcmljLmxpbmsoJm1faml0KTsKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIGNhbGxPcGVyYXRpb24oZGZnQ29u
dmVydEpTVmFsdWVUb051bWJlciwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIHRhZ0dQUiwgcGF5
bG9hZEdQUik7Ci0gICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXND
YWxsZWRUb051bWJlciA9IG1faml0Lmp1bXAoKTsKLSAgICAKLSAgICAvLyBGaW5hbGx5LCBoYW5k
bGUgaW50ZWdlcnMuCiAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICBoYXNVbmJveGVk
RG91YmxlLmxpbmsoJm1faml0KTsKICAgICBtX2ppdC5tb3ZlKHRhZ0dQUiwgcmVzdWx0VGFnR1BS
KTsKICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIGhh
c0NhbGxlZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KGFkb3B0UHRyKG5ldyBWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3Iobm9uTnVtZXJpYywg
dGhpcywgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCB0YWdHUFIsIHBheWxvYWRHUFIp
KSk7CisKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwg
bV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKQEAgLTQz
MiwxMyArNDQ5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUK
ICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKICAgICAgICAgR1BSUmVnIGdwciA9IHJl
c3VsdC5ncHIoKTsKICAgICAgICAgb3AxLnVzZSgpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIo
ZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5j
aFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1
bmNhdGVGYWlsZWQpOwogCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgZ3ByLCBmcHIpOwotICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKGdwcik7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7
CiAKLSAgICAgICAgdHJ1bmNhdGVkVG9JbnRlZ2VyLmxpbmsoJm1faml0KTsKICAgICAgICAgaW50
ZWdlclJlc3VsdChncHIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDUwLDE5ICs0NjQsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgb3AxLnVzZSgpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotCi0gICAgLy8gRmlyc3QgaGFuZGxl
IG5vbi1pbnRlZ2VycwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCB0YWdHUFIsIHBheWxvYWRHUFIpOwotICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvSW50MzIgPSBtX2pp
dC5qdW1wKCk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RJbnRlZ2VyID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpOwogCi0gICAgLy8gVGhlbiBoYW5kbGUgaW50ZWdlcnMuCi0gICAgaXNJ
bnRlZ2VyLmxpbmsoJm1faml0KTsKICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgaGFzQ2FsbGVkVG9JbnQzMi5saW5rKCZtX2ppdCk7CisgICAgCisgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzTm90SW50ZWdlciwgdGhpcywgZGZnQ29udmVy
dEpTVmFsdWVUb0ludDMyLCByZXN1bHRHUFIsIHRhZ0dQUiwgcGF5bG9hZEdQUikpOworICAgIAog
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKIH0KIApAQCAtNDkzLDcgKzUwMCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5n
cHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogfQogCi1KSVRDb21w
aWxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQ
UlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRj
aEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1Bh
dGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdH
UFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BS
UmVnIHJlc3VsdFBheWxvYWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3Rl
cnNNb2RlIHNwaWxsTW9kZSkKIHsKICAgICBtX2ppdC5iZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5j
ZSgpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwpA
QCAtNTA0LDMyICs1MTEsNTAgQEAgSklUQ29tcGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNh
Y2hlZAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHRhZ0xvYWRXaXRoUGF0Y2gg
PSBtX2ppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6
QWRkcmVzcyhyZXN1bHRQYXlsb2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAgIEpJVENvbXBpbGVyOjpE
YXRhTGFiZWxDb21wYWN0IHBheWxvYWRMb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZDMyV2l0aENv
bXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9h
ZEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7Ci0g
ICAgCi0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0gICAgICAgIHNsb3dQYXRoVGFy
Z2V0LmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2Ug
PSBtX2ppdC5sYWJlbCgpOwotCi0gICAgaWYgKHNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCkKLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSKTsKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGw7Ci0gICAgaWYgKGJhc2VU
YWdHUFJPck5vbmUgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgZnVuY3Rpb25DYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiwgSlNWYWx1ZTo6Q2VsbFRhZywgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXIo
aWRlbnRpZmllck51bWJlcikpOwotICAgIGVsc2UKLSAgICAgICAgZnVuY3Rpb25DYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiwgYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXIo
aWRlbnRpZmllck51bWJlcikpOwotICAgIGlmIChzcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCi0g
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSKTsKLSAgICAKLSAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAKICAgICBKSVRDb21waWxl
cjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKIAotICAgIG1faml0LmFkZFByb3Bl
cnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29t
cGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgdGFnTG9hZFdpdGhQYXRjaCwgcGF5
bG9hZExvYWRXaXRoUGF0Y2gsIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4o
YmFzZVBheWxvYWRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHJlc3VsdFRhZ0dQUiksIHNhZmVDYXN0
PGludDhfdD4ocmVzdWx0UGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUiks
IHNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCA/IFByb3BlcnR5QWNjZXNzUmVjb3JkOjpSZWdpc3Rl
cnNJblVzZSA6IFByb3BlcnR5QWNjZXNzUmVjb3JkOjpSZWdpc3RlcnNGbHVzaGVkKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKKyAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+
IHNsb3dQYXRoOworICAgIGlmIChiYXNlVGFnR1BST3JOb25lID09IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgaWYgKCFzbG93UGF0aFRhcmdldC5pc1NldCgpKSB7CisgICAgICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVDaGVjaywgdGhp
cywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksCisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZyksIGJhc2VQYXlsb2FkR1BSLAorICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoc3RydWN0dXJlQ2hlY2spOworICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KEpT
VmFsdWU6OkNlbGxUYWcpLCBiYXNlUGF5bG9hZEdQUiwKKyAgICAgICAgICAgICAgICBpZGVudGlm
aWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmICghc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkgeworICAgICAgICAgICAgc2xvd1BhdGggPSBz
bG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc3RydWN0dXJlQ2hlY2ssIHRoaXMsIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQ
UiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOworICAgICAgICAgICAgc2xvd1Bh
dGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0
VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRH
UFIsCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoCisgICAgICAgIFByb3Bl
cnR5QWNjZXNzUmVjb3JkKAorICAgICAgICAgICAgY29kZU9yaWdpbiwgc3RydWN0dXJlVG9Db21w
YXJlLCBzdHJ1Y3R1cmVDaGVjaywKKyAgICAgICAgICAgIHRhZ0xvYWRXaXRoUGF0Y2gsIHBheWxv
YWRMb2FkV2l0aFBhdGNoLCBzbG93UGF0aC5nZXQoKSwgZG9uZUxhYmVsLAorICAgICAgICAgICAg
c2FmZUNhc3Q8aW50OF90PihiYXNlUGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0
VGFnR1BSKSwKKyAgICAgICAgICAgIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0UGF5bG9hZEdQUiks
IHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUiksCisgICAgICAgICAgICBzcGlsbE1vZGUgPT0g
TmVlZFRvU3BpbGwgPyBQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJzSW5Vc2UgOiBQcm9w
ZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJzRmx1c2hlZCkpOworICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNh
Y2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIs
IEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVz
ZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQg
cHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCkBAIC01NDUsMTYgKzU3
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBKSVRD
b21waWxlcjo6RGF0YUxhYmVsMzIgdGFnU3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0
aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSk7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHBheWxvYWRTdG9yZVdpdGhQYXRj
aCA9IG1faml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlUGF5bG9hZEdQUiwg
SklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0
KTsKLQotICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQotICAgICAgICBzbG93UGF0aFRh
cmdldC5saW5rKCZtX2ppdCk7Ci0KLSAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2UgPSBt
X2ppdC5sYWJlbCgpOwotCi0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7CisgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAg
ICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJp
Y3RNb2RlRm9yKGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKSkgewogICAgICAgICBpZiAo
cHV0S2luZCA9PSBEaXJlY3QpCkBAIC01NjcsMTMgKzU4MywyOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG9wdGlt
aXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0aW1pemVk
Q2FsbCwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZVBheWxvYWRHUFIsIGlkZW50
aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52
YWxpZEdQUlJlZyk7Ci0KLSAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICBKSVRDb21waWxlcjo6
TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLQotICAgIG1faml0LmFkZFByb3BlcnR5
QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFy
ZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENv
bXBhY3QodGFnU3RvcmVXaXRoUGF0Y2gubGFiZWwoKSksIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxD
b21wYWN0KHBheWxvYWRTdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwgc2xvd0Nhc2UsIGRvbmVMYWJl
bCwgc2FmZUNhc3Q8aW50OF90PihiYXNlUGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4odmFs
dWVUYWdHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVlUGF5bG9hZEdQUiksIHNhZmVDYXN0PGlu
dDhfdD4oc2NyYXRjaEdQUikpKTsKKyAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQ
YXRoOworICAgIGlmICghc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkgeworICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNrLCB0aGlzLCBvcHRp
bWl6ZWRDYWxsLCBJbnZhbGlkR1BSUmVnLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLAor
ICAgICAgICAgICAgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc3RydWN0dXJlQ2hlY2spOworICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wdGltaXplZENhbGwsIEludmFs
aWRHUFJSZWcsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsCisgICAgICAgICAgICBiYXNl
UGF5bG9hZEdQUiwgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgfQorICAgIG1f
aml0LmFkZFByb3BlcnR5QWNjZXNzKAorICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKKyAg
ICAgICAgICAgIGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ss
CisgICAgICAgICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCh0YWdTdG9yZVdpdGhQ
YXRjaC5sYWJlbCgpKSwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0
KHBheWxvYWRTdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwKKyAgICAgICAgICAgIHNsb3dQYXRoLmdl
dCgpLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZVBheWxvYWRHUFIpLAorICAgICAg
ICAgICAgc2FmZUNhc3Q8aW50OF90Pih2YWx1ZVRhZ0dQUiksIHNhZmVDYXN0PGludDhfdD4odmFs
dWVQYXlsb2FkR1BSKSwKKyAgICAgICAgICAgIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikp
KTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwo
RWRnZSBvcGVyYW5kLCBib29sIGludmVydCkKQEAgLTc0NCw2ICs3NzUsNDIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIG1fY29tcGlsZUluZGV4ID0gYnJh
bmNoTm9kZUluZGV4OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZT4KK2NsYXNzIENv
bXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBDYWxsU2xv
d1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7Citw
dWJsaWM6CisgICAgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwKKyAgICAgICAgU19ERkdPcGVy
YXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVn
IGFyZzFQYXlsb2FkLAorICAgICAgICBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2Fk
KQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19ERkdPcGVyYXRp
b25fRUpKLCBHUFJSZWc+KAorICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRv
U3BpbGwsIHJlc3VsdCkKKyAgICAgICAgLCBtX2FyZzFUYWcoYXJnMVRhZykKKyAgICAgICAgLCBt
X2FyZzFQYXlsb2FkKGFyZzFQYXlsb2FkKQorICAgICAgICAsIG1fYXJnMlRhZyhhcmcyVGFnKQor
ICAgICAgICAsIG1fYXJnMlBheWxvYWQoYXJnMlBheWxvYWQpCisgICAgeworICAgIH0KKyAgICAK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2
ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAgICAgdGhp
cy0+cmVjb3JkQ2FsbCgKKyAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigKKyAgICAgICAg
ICAgICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmcxVGFnLCBtX2Fy
ZzFQYXlsb2FkLCBtX2FyZzJUYWcsCisgICAgICAgICAgICAgICAgbV9hcmcyUGF5bG9hZCkpOwor
ICAgICAgICBqaXQtPm1faml0LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHRo
aXMtPm1fcmVzdWx0KTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKKyAgICB9CisgICAK
K3ByaXZhdGU6CisgICAgR1BSUmVnIG1fYXJnMVRhZzsKKyAgICBHUFJSZWcgbV9hcmcxUGF5bG9h
ZDsKKyAgICBHUFJSZWcgbV9hcmcyVGFnOworICAgIEdQUlJlZyBtX2FyZzJQYXlsb2FkOworfTsK
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUo
Tm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19E
RkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CkBAIC03ODEsMTcgKzg0OCwxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihj
b25kLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwog
ICAgIAogICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkg
fHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAg
ICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBh
cmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpOwotICAgICAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0gICAg
ICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsK
LSAgICAgICAgCi0gICAgICAgICAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFkb3B0UHRyKAorICAgICAgICAgICAgICAgIG5ldyBD
b21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yPEpJVENvbXBpbGVyOjpKdW1wTGlz
dD4oCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBoZWxwZXJGdW5jdGlvbiwg
cmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwKKyAgICAgICAgICAgICAgICAgICAgYXJnMVBh
eWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKSkpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUlu
ZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAtODY3LDYgKzkyNyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICBpZiAoaXNLbm93bkNl
bGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmlu
ZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVu
dHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxs
LCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KKyAgICAgICAgLy8gRklYTUU6IHRo
aXMgc2hvdWxkIGZsdXNoIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHNpbGVudCBzcGlsbC9maWxsLgog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2hQdHIo
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpOwog
ICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKCFp
bnZlcnQpLCByZXN1bHRQYXlsb2FkR1BSKTsKQEAgLTE2NjQsMTcgKzE3MjUsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICAKICAgICBhcmcxLnVz
ZSgpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdENhc2UgPSBtX2ppdC5icmFuY2gzMihK
SVRDb21waWxlcjo6RXF1YWwsIGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSk7Ci0gICAgICAgIAotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBh
eWxvYWRHUFIpOwotICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4s
IHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSKTsKLSAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvTm90ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICBmYXN0Q2FzZS5saW5rKCZt
X2ppdCk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
b29sZWFuVGFnKSk7CisgICAgCiAgICAgbV9qaXQubW92ZShhcmcxUGF5bG9hZEdQUiwgcmVzdWx0
UGF5bG9hZEdQUik7CiAKLSAgICBkb05vdC5saW5rKCZtX2ppdCk7CisgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCisgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHNsb3dDYXNlLCB0
aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRh
Z0dQUiwKKyAgICAgICAgICAgIGFyZzFQYXlsb2FkR1BSKSk7CisgICAgCiAgICAgbV9qaXQueG9y
MzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBib29sZWFuUmVzdWx0
KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOwogfQpAQCAtMjUwOSwxNSArMjU2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgIHZhbHVl
LnVzZSgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd2l0aGluQXJy
YXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIENvZGUgdG8gaGFuZGxlIHB1dCBiZXlvbmQgYXJy
YXkgYm91bmRzLgotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoUmVnKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkg
PyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZh
bHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKHNjcmF0Y2hSZWcpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB3YXNCZXlvbmRBcnJh
eUJvdW5kcyA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICB3aXRoaW5BcnJheUJvdW5kcy5saW5r
KCZtX2ppdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRz
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSk7CiAKICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9yYWdlLgogICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0Y2hSZWc7CkBAIC0yNTM5LDggKzI1OTAsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBTdG9y
ZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFn
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
ICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLQotICAgICAgICB3YXNCZXlv
bmRBcnJheUJvdW5kcy5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBi
ZXlvbmRBcnJheUJvdW5kcywgdGhpcywKKyAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAg
ICAgICAgICAgICBJbnZhbGlkR1BSUmVnLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVUYWdS
ZWcsIHZhbHVlUGF5bG9hZFJlZykpOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKQEAgLTI3MzEs
MTUgKzI3ODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJ
blZlY3RvcikpKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBzbG93UGF0aC5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzdG9y
YWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25BcnJheVB1c2gsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIHZhbHVlVGFnR1BSLCB2
YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBKU1ZhbHVlUmVncyhzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSKSwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZUdQ
UikpOwogICAgICAgICAKICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdl
TGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2NCw3ICsy
ODExLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6
OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBlbXB0eUFycmF5Q2FzZSA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKKyAgICAgICAgc2V0VW5kZWZpbmVkQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFn
ZUxlbmd0aEdQUikpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC0yNzc1LDMwICsyODIzLDIzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAg
ICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7
CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZUNhc2UgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSwgdmFsdWVUYWdHUFIpOworICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BSKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5z
dG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKIAogICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3Ip
KSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAg
ICAgICAgCi0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAg
ICAgICBob2xlQ2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGVtcHR5QXJyYXlDYXNlLmxpbmso
Jm1faml0KTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KGpzVW5kZWZpbmVkKCkudGFnKCkpLCB2YWx1ZVRhZ0dQUik7Ci0gICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnBheWxvYWQoKSksIHZh
bHVlUGF5bG9hZEdQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAg
ICAgIAotICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVUYWdHUFIsIHZhbHVl
UGF5bG9hZEdQUiwgYmFzZUdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModmFs
dWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKLSAgICAgICAgCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0
aGlzLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRl
ZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRH
UFIpKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRp
b25BcnJheVBvcCwKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOworCiAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVU
YWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0yOTE0LDIyICsyOTU1LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxVGFnR1BSLCByZXN1bHRU
YWdHUFIpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFQYXlsb2FkR1BSLCByZXN1bHRQYXls
b2FkR1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBhbHJlYWR5UHJpbWl0aXZlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhbHJl
YWR5UHJpbWl0aXZlLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgICAg
ICAgICBhbHJlYWR5UHJpbWl0aXZlLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6
OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTU3Ry
aW5nOjpzX2luZm8pKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvUHJpbWl0aXZlLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIsIG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFUYWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OmNsYXNz
SW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTU3RyaW5nOjpz
X2luZm8pKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5r
KCZtX2ppdCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVRhZ0dQUiwgcmVzdWx0VGFnR1BS
KTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQ
Uik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICBub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJp
bWl0aXZlLAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxv
YWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAt
MzA5NiwxOCArMzEzMiwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIAogICAgICAgICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAg
ICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVU
aGlzSW5saW5lZCwgcmVzdWx0R1BSLCBwcm90b0dQUiwgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+Y2FsbGVlLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIHByb3RvR1BSKTsKLSAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSB7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBv
cGVyYXRpb25DcmVhdGVUaGlzSW5saW5lZCwgcmVzdWx0R1BSLCBwcm90b0dQUiwKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgp
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNy
ZWF0ZVRoaXMsIHJlc3VsdEdQUiwgcHJvdG9HUFIpKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKQEAgLTMxMjQsMTUgKzMxNTcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAg
ICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5lbXB0eU9iamVjdFN0cnVj
dHVyZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAK
LSAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9w
ZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BSKSk7CiAgICAgICAgIAogICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3NDIs
MTQgKzM3NjcsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2Fk
R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7
CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxv
YWRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBh
eWxvYWRHUFIpOwogCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHdhc0Zhc3QgPSBtX2ppdC5q
dW1wKCk7Ci0KLSAgICAgICAgc3RydWN0dXJlc05vdE1hdGNoLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlR2xvYmFsLCByZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIHJlc29sdmVJbmZvR1BSLCAmbV9qaXQuY29kZUJsb2Nr
KCktPmlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLQotICAgICAg
ICB3YXNGYXN0LmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc3RydWN0dXJlc05vdE1h
dGNoLCB0aGlzLCBvcGVyYXRpb25SZXNvbHZlR2xvYmFsLAorICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIHJlc29sdmVJbmZvR1BSLAor
ICAgICAgICAgICAgICAgICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihkYXRhLmlkZW50
aWZpZXJOdW1iZXIpKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzY1
LDEzICszNzg3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVQYXlsb2FkR1BSLCByZXN1bHRHUFIp
OwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgYWxyZWFkeUNyZWF0ZWQgPSBt
X2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZXN1bHRHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0
ZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogICAgICAgICAKLSAgICAgICAgYWxy
ZWFkeUNyZWF0ZWQubGluaygmbV9qaXQpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RDcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25DcmVh
dGVBY3RpdmF0aW9uLCByZXN1bHRHUFIpKTsKICAgICAgICAgCiAgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc4MywxMyAr
MzgwMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgICAgICBHUFJSZWcg
dmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgICAgICAKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVy
OjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbiwg
dmFsdWVQYXlsb2FkR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAgICAgICAgIAotICAgICAgICBub3RDcmVhdGVkLmxpbmso
Jm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICAgICAgY3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uVGVhck9m
ZkFjdGl2YXRpb24sIEludmFsaWRHUFJSZWcsIHZhbHVlUGF5bG9hZEdQUikpOwogICAgICAgICAK
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM4
MDksMTQgKzM4MjYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZVBheWxvYWRHUFIsIHJlc3VsdEdQ
Uik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBhbHJlYWR5Q3JlYXRlZCA9
IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgICAgIAotICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKAot
ICAgICAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb24sIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJs
b2NrKCktPmZ1bmN0aW9uRGVjbChub2RlLmZ1bmN0aW9uRGVjbEluZGV4KCkpKTsKLSAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB2YWx1
ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICAgICAgICAg
Ci0gICAgICAgIGFscmVhZHlDcmVhdGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAg
bm90Q3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uTmV3RnVuY3Rpb24sIHJlc3VsdEdQUiwKKyAgICAg
ICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+ZnVuY3Rpb25EZWNsKG5vZGUuZnVuY3Rpb25E
ZWNsSW5kZXgoKSkpKTsKICAgICAgICAgCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTQyMTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogCi0jaW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIK
LQogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0J5dGVBcnJheS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzU4LDYgKzM1OSwzMSBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgcmV0dXJuIEludmFsaWRHUFJS
ZWc7CiB9CiAKK2NsYXNzIFZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVi
bGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgRF9ERkdPcGVy
YXRpb25fRUosIEdQUlJlZz4geworcHVibGljOgorICAgIFZhbHVlVG9OdW1iZXJTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbSwgU3BlY3VsYXRpdmVK
SVQqIGppdCwKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIGpzVmFsdWVHUFIpCisg
ICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBEX0RG
R09wZXJhdGlvbl9FSiwgR1BSUmVnPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZGZnQ29udmVy
dEpTVmFsdWVUb051bWJlciwgTmVlZFRvU3BpbGwsIHJlc3VsdEdQUikKKyAgICAgICAgLCBtX2pz
VmFsdWVHUFIoanNWYWx1ZUdQUikKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICB7Cisg
ICAgICAgIHNldFVwKGppdCk7CisgICAgICAgIHJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9u
KGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBtX2pz
VmFsdWVHUFIpKTsKKyAgICAgICAgaml0LT5ib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIsIG1fcmVzdWx0KTsKKyAgICAgICAgdGVhckRvd24oaml0KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgR1BSUmVnIG1fanNWYWx1ZUdQUjsKK307CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2RlJiBub2RlKQogewogICAgIGlmIChpc0tub3du
TnVtZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CkBAIC0zODUsMTkgKzQxMSwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgbV9qaXQubW92ZShq
c1ZhbHVlR3ByLCBncHIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUg
PSBtX2ppdC5qdW1wKCk7CiAKLSAgICAvLyBOZXh0IGhhbmRsZSBjZWxscyAoJiBvdGhlciBKUyBp
bW1lZGlhdGVzKQotICAgIG5vbk51bWVyaWMubGluaygmbV9qaXQpOwotICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRv
TnVtYmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwganNWYWx1ZUdwcik7Ci0gICAgYm94RG91
YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBncHIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMoZ3ByKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb051bWJlciA9IG1f
aml0Lmp1bXAoKTsKLSAgICAKICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAg
aXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7CiAgICAgaGFzVW5ib3hlZERvdWJsZS5s
aW5rKCZtX2ppdCk7Ci0gICAgaGFzQ2FsbGVkVG9OdW1iZXIubGluaygmbV9qaXQpOworICAgIAor
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBWYWx1ZVRvTnVtYmVyU2xvd1Bh
dGhHZW5lcmF0b3Iobm9uTnVtZXJpYywgdGhpcywgZ3ByLCBqc1ZhbHVlR3ByKSkpOwogICAgIAog
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KQEAgLTQyMSwxMyArNDQwLDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5m
cHIoKTsKICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgb3AxLnVz
ZSgpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2pp
dC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFu
Y2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhncHIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIGdwciwgZnBy
KTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURv
dWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVk
KTsKICAgICAgICAgCi0gICAgICAgIHRydW5jYXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5v
dFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKKwogICAgICAg
ICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MzgsMTggKzQ1NSwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBvcDEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAg
IC8vIEZpcnN0IGhhbmRsZSBub24taW50ZWdlcnMKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwotICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0ludDMy
LCByZXN1bHRHUFIsIGpzVmFsdWVHcHIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb0ludDMyID0gbV9qaXQu
anVtcCgpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90SW50ZWdlciA9IG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7CiAKLSAgICAvLyBUaGVuIGhhbmRsZSBpbnRlZ2Vycy4KLSAgICBpc0lu
dGVnZXIubGluaygmbV9qaXQpOwogICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGpzVmFsdWVH
cHIsIHJlc3VsdEdQUik7Ci0gICAgaGFzQ2FsbGVkVG9JbnQzMi5saW5rKCZtX2ppdCk7CisgICAg
CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIHNsb3dQYXRoQ2FsbChpc05vdElu
dGVnZXIsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BSLCBqc1ZhbHVl
R3ByKSk7CisKICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKQEAgLTQ3Nyw3ICs0ODksNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJbnQzCiAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotSklUQ29tcGlsZXI6OkNhbGwgU3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcg
YmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJl
Z2lzdGVyc01vZGUgc3BpbGxNb2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJ
ZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCiB7
CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAg
SklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0
Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKQEAgLTQ4NSwz
MSArNDk3LDMxIEBAIEpJVENvbXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWQKICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0
QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJl
c3VsdEdQUik7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBpZiAoc2xv
d1BhdGhUYXJnZXQuaXNTZXQoKSkKLSAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQp
OwotICAgIAotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7
Ci0KLSAgICBpZiAoc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQotICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9u
Q2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRHUFIs
IGJhc2VHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwotICAgIGlmIChzcGlsbE1v
ZGUgPT0gTmVlZFRvU3BpbGwpCi0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0
R1BSKTsKLSAgICAKLSAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAKICAgICBKSVRDb21waWxl
cjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLQotICAgIG1faml0LmFkZFByb3Bl
cnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29t
cGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgbG9hZFdpdGhQYXRjaCwgc2xvd0Nh
c2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50OF90
PihyZXN1bHRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpLCBzcGlsbE1vZGUgPT0g
TmVlZFRvU3BpbGwgPyBQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJzSW5Vc2UgOiBQcm9w
ZXJ0eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJzRmx1c2hlZCkpOwogICAgIAorICAgIE93blB0cjxT
bG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CisgICAgaWYgKCFzbG93UGF0aFRhcmdldC5pc1Nl
dCgpKSB7CisgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc3Ry
dWN0dXJlQ2hlY2ssIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0R1BSLCBi
YXNlR1BSLAorICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSwgc3BpbGxN
b2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrKTsKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7CisgICAgICAgIHNsb3dQYXRoID0gc2xv
d1BhdGhDYWxsKAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdEdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAgIGlkZW50aWZpZXIoaWRl
bnRpZmllck51bWJlciksIHNwaWxsTW9kZSk7CisgICAgfQorICAgIG1faml0LmFkZFByb3BlcnR5
QWNjZXNzKAorICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKKyAgICAgICAgICAgIGNvZGVP
cmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssIGxvYWRXaXRoUGF0Y2gs
IHNsb3dQYXRoLmdldCgpLAorICAgICAgICAgICAgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+
KGJhc2VHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHJlc3VsdEdQUiksCisgICAgICAgICAgICBzYWZl
Q2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpLAorICAgICAgICAgICAgc3BpbGxNb2RlID09IE5lZWRU
b1NwaWxsID8gUHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlJlZ2lzdGVyc0luVXNlIDogUHJvcGVydHlB
Y2Nlc3NSZWNvcmQ6OlJlZ2lzdGVyc0ZsdXNoZWQpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aC5yZWxlYXNlKCkpOworCiAgICAgaWYgKHNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BS
ICYmIHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyAmJiBzcGlsbE1vZGUgPT0gTmVlZFRvU3Bp
bGwpCiAgICAgICAgIHVubG9jayhzY3JhdGNoR1BSKTsKLSAgICAKLSAgICByZXR1cm4gZnVuY3Rp
b25DYWxsOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmln
aW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1
ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtp
bmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCkBAIC01MjMsMTYg
KzUzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRh
dGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgc3RydWN0
dXJlQ2hlY2subGluaygmbV9qaXQpOwotCi0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkp
Ci0gICAgICAgIHNsb3dQYXRoVGFyZ2V0LmxpbmsoJm1faml0KTsKLQotICAgIEpJVENvbXBpbGVy
OjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVs
ID0gbV9qaXQubGFiZWwoKTsKKyAgICAKICAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXpl
ZENhbGw7CiAgICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3IoYXQobV9jb21waWxlSW5kZXgpLmNv
ZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKQEAgLTU0NSwxMyAr
NTQ5LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RPcHRpbWl6ZTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxs
ID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRDYWxsLCB2YWx1ZUdQUiwgYmFzZUdQUiwgaWRlbnRp
ZmllcihpZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZh
bGlkR1BSUmVnKTsKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIEpJVENvbXBpbGVyOjpM
YWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotCi0gICAgbV9qaXQuYWRkUHJvcGVydHlB
Y2Nlc3MoUHJvcGVydHlBY2Nlc3NSZWNvcmQoY29kZU9yaWdpbiwgc3RydWN0dXJlVG9Db21wYXJl
LCBmdW5jdGlvbkNhbGwsIHN0cnVjdHVyZUNoZWNrLCBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29t
cGFjdChzdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNh
c3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50OF90Pih2YWx1ZUdQUiksIHNhZmVDYXN0
PGludDhfdD4oc2NyYXRjaEdQUikpKTsKKyAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNs
b3dQYXRoOworICAgIGlmICghc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkgeworICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNrLCB0aGlzLCBv
cHRpbWl6ZWRDYWxsLCBJbnZhbGlkR1BSUmVnLCB2YWx1ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAg
ICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgIH0gZWxzZSB7CisgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoc3RydWN0dXJlQ2hlY2spOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFy
Z2V0KTsKKyAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wdGltaXplZENhbGwsIEludmFsaWRHUFJSZWcsIHZhbHVlR1BSLCBiYXNl
R1BSLAorICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgfQor
ICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmln
aW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxDb21wYWN0KHN0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLCBzbG93UGF0aC5nZXQoKSwgZG9u
ZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVl
R1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSkpOworICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52
ZXJ0KQpAQCAtNzE4LDYgKzczMCwzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBoCiAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlPgorY2xhc3MgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93
UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlw
ZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKK3B1YmxpYzoKKyAgICBDb21wYXJlQW5k
Qm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVj
dWxhdGl2ZUpJVCogaml0LAorICAgICAgICBTX0RGR09wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICAgICAgOiBDYWxsU2xv
d1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPigKKyAg
ICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRUb1NwaWxsLCByZXN1bHQpCisgICAg
ICAgICwgbV9hcmcxKGFyZzEpCisgICAgICAgICwgbV9hcmcyKGFyZzIpCisgICAgeworICAgIH0K
KyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVj
dWxhdGl2ZUpJVCogaml0KQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAg
ICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwg
dGhpcy0+bV9yZXN1bHQsIG1fYXJnMSwgbV9hcmcyKSk7CisgICAgICAgIGppdC0+bV9qaXQuYW5k
MzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgdGhpcy0+bV9yZXN1bHQpOworICAgICAg
ICBqaXQtPm1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwg
dGhpcy0+bV9yZXN1bHQpOworICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOworICAgIH0KKyAg
IAorcHJpdmF0ZToKKyAgICBHUFJSZWcgbV9hcmcxOworICAgIEdQUlJlZyBtX2FyZzI7Cit9Owor
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShO
b2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RG
R09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKQEAgLTc1MiwyMyArNzkzLDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTMy
KGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Ci0gICAgCi0gICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCAhaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aGF2ZVJlc3VsdCA9IG1faml0Lmp1bXAoKTsKLSAgICAKLSAgICAgICAgICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwg
cmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5hbmRQdHIo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgICAgIGhhdmVS
ZXN1bHQubGluaygmbV9qaXQpOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCisgICAg
ICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCAhaXNLbm93
bkludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgeworICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoYWRvcHRQdHIoCisgICAgICAgICAgICAgICAgbmV3IENvbXBhcmVBbmRCb3hC
b29sZWFuU2xvd1BhdGhHZW5lcmF0b3I8SklUQ29tcGlsZXI6Okp1bXBMaXN0PigKKyAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFy
ZzFHUFIsIGFyZzJHUFIpKSk7CisgICAgICAgIH0KKwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiAgICAgfQogfQpAQCAtODU2LDYgKzg4OCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICBpZiAoaXNLbm93bkNlbGwobm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkp
KSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJl
IGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVu
IHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KKyAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hv
dWxkIGZsdXNoIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHNpbGVudCBzcGlsbC9maWxsLgogICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgCiAgICAgICAgIG1f
aml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOwpAQCAtODc1LDQxICs5MDgsMzQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1faml0Lm9yUHRyKGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKKyAgICAgICAgCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIo
SklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
ICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnRPSyA9IG1faml0LmJyYW5j
aFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBsZWZ0RG91YmxlID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGxlZnRPSy5saW5rKCZtX2ppdCk7
CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHJpZ2h0T0sgPSBtX2ppdC5icmFuY2hQdHIoSklU
Q29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHREb3VibGUgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgcmlnaHRPSy5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIAogICAgICAgICBtX2ppdC5jb21wYXJlUHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RF
cXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgbV9qaXQub3IzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTEg
PSBtX2ppdC5qdW1wKCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CiAgICAgICAgIAogICAgICAgICB0d29DZWxsc0Nhc2UubGluaygmbV9qaXQpOwotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2hQdHIoSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgc2xvd1BhdGhD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQ
UiwgYXJnMkdQUikpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lMiA9IG1faml0
Lmp1bXAoKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBhZG9w
dFB0cigKKyAgICAgICAgICAgICAgICBuZXcgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdl
bmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+KAorICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aENhc2VzLCB0aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwg
YXJnMUdQUiwKKyAgICAgICAgICAgICAgICAgICAgYXJnMkdQUikpKTsKICAgICAgICAgCi0gICAg
ICAgIGxlZnREb3VibGUubGluaygmbV9qaXQpOwotICAgICAgICByaWdodERvdWJsZS5saW5rKCZt
X2ppdCk7Ci0gICAgICAgIG5vdEVxdWFsQ2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcy
R1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAg
ICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJl
c3VsdEdQUik7Ci0KLSAgICAgICAgZG9uZTEubGluaygmbV9qaXQpOwotCi0gICAgICAgIG1faml0
Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
LSAgICAgICAgCi0gICAgICAgIGRvbmUyLmxpbmsoJm1faml0KTsKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CiAgICAgfQogICAgIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKQEAgLTE3NjYsMTMgKzE3OTIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvZ2ljYWxOb3QoTgogICAgIAogICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsK
ICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVl
RmFsc2UpKSwgcmVzdWx0R1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBmYXN0Q2FzZSA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwotICAgIAotICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1
ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcxR1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKICAgICAKLSAgICBmYXN0Q2FzZS5saW5rKCZt
X2ppdCk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIHNsb3dQYXRoQ2FsbChz
bG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJn
MUdQUikpOwogICAgIAogICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwpAQCAtMjU0NSwxNSArMjU2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAg
IHZhbHVlLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd2l0
aGluQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIENvZGUgdG8gaGFuZGxlIHB1dCBiZXlv
bmQgYXJyYXkgYm91bmRzLgotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNo
UmVnKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RN
b2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwgYmFzZVJlZywgcHJvcGVydHlS
ZWcsIHZhbHVlUmVnKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoUmVn
KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgd2FzQmV5b25kQXJyYXlCb3VuZHMgPSBtX2pp
dC5qdW1wKCk7Ci0KLSAgICAgICAgd2l0aGluQXJyYXlCb3VuZHMubGluaygmbV9qaXQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwog
CiAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzY3JhdGNoUmVnOwpAQCAtMjU3NSw3ICsyNTkwLDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRv
IHRoZSBhcnJheS4KICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAK
LSAgICAgICAgd2FzQmV5b25kQXJyYXlCb3VuZHMubGluaygmbV9qaXQpOworICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
ICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywKKyAgICAgICAgICAgICAgICBtX2ppdC5jb2Rl
QmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwK
KyAgICAgICAgICAgICAgICBJbnZhbGlkR1BSUmVnLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFs
dWVSZWcpKTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CkBAIC0yNzYyLDE1ICsyNzgxLDEwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwog
ICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0
KTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHN0b3JhZ2VMZW5n
dGhHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5UHVzaCwgc3RvcmFn
ZUxlbmd0aEdQUiwgdmFsdWVHUFIsIGJhc2VHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1
c2gsIEludmFsaWRHUFJSZWcsIHN0b3JhZ2VMZW5ndGhHUFIsCisgICAgICAgICAgICAgICAgdmFs
dWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFn
ZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTI3OTMsNyAr
MjgwNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5
OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZW1wdHlBcnJheUNhc2UgPSBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CisgICAgICAgIHNldFVuZGVmaW5lZENh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3Jh
Z2VMZW5ndGhHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtMjgwMywyOCArMjgxOCwyMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAg
ICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
OwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGVDYXNlID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworICAgICAgICBzZXRVbmRl
ZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgdmFsdWVHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIG1faml0LnN1
YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVz
SW5WZWN0b3IpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZG9uZTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAg
ICAgIAotICAgICAgICBob2xlQ2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGVtcHR5QXJyYXlD
YXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUik7Ci0g
ICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgICAgICBzbG93
Q2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyh2YWx1ZUdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQb3As
IHZhbHVlR1BSLCBiYXNlR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh2YWx1
ZUdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgCisg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAor
ICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZSwg
dGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisKICAgICAgICAg
anNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0yOTI0LDIxICsyOTMxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3RCb29sZWFuKSkpCiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgYWxyZWFkeVByaW1pdGl2ZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUuYXBwZW5kKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKCZKU1N0cmluZzo6c19pbmZvKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Ub1ByaW1pdGl2ZSwgcmVzdWx0R1BSLCBvcDFHUFIpOwotICAgICAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2
ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU1N0cmluZzo6c19pbmZvKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAg
bV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdFByaW1pdGl2ZSwgdGhpcywgb3BlcmF0aW9u
VG9QcmltaXRpdmUsIHJlc3VsdEdQUiwgb3AxR1BSKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTMwOTQsMTggKzMwOTQsMTUgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgZW1pdEFsbG9j
YXRlSlNGaW5hbE9iamVjdChzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQ
YXRoKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAg
ICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpc0lubGluZWQsIHJlc3VsdEdQUiwgcHJvdG9HUFIs
IG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVz
dWx0R1BSLCBwcm90b0dQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBpZiAo
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpc0lubGluZWQsCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgcHJvdG9HUFIsIG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIHByb3RvR1BSKSk7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7
CkBAIC0zMTIyLDE1ICszMTE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAKICAgICAgICAgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2Rl
T3JpZ2luKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwg
c2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
LSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIpOwotICAg
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1Bh
dGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUikpOwog
ICAgICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgYnJlYWs7CkBAIC0zNzA1LDIxICszNjk0LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSksIGds
b2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIocmVzb2x2ZUluZm9BZGRyZXNzKSwgcmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoR2xvYmFsUmVzb2x2ZUluZm8sIHN0cnVjdHVyZSkpLCByZXN1bHRHUFIpOwotICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVzTWF0Y2ggPSBtX2ppdC5icmFuY2hQdHIoSklU
Q29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwotCi0gICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUmVzb2x2ZUdsb2JhbCwgcmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgJm1faml0LmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKGRhdGEuaWRlbnRpZmllck51bWJlcikpOwotICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgd2FzU2xvdyA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3Ry
dWN0dXJlc0RvbnRNYXRjaCA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAKICAgICAgICAgLy8gRmFzdCBjYXNlCi0gICAgICAgIHN0
cnVjdHVyZXNNYXRjaC5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0
eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKEdsb2JhbFJlc29sdmVJ
bmZvLCBvZmZzZXQpKSwgcmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGls
ZXI6OlNjYWxlUHRyKSwgcmVzdWx0R1BSKTsKIAotICAgICAgICB3YXNTbG93LmxpbmsoJm1faml0
KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgc3RydWN0dXJlc0RvbnRNYXRjaCwgdGhpcywgb3BlcmF0aW9u
UmVzb2x2ZUdsb2JhbCwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BS
LAorICAgICAgICAgICAgICAgICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihkYXRhLmlk
ZW50aWZpZXJOdW1iZXIpKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzM0LDEzICszNzIwLDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAg
IG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBhbHJlYWR5Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29t
cGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRH
UFIpOwogICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZXN1
bHRHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAg
ICAgIAotICAgICAgICBhbHJlYWR5Q3JlYXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdENyZWF0ZWQsIHRo
aXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24sIHJlc3VsdEdQUikpOwogICAgICAgICAKICAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJl
YWs7CkBAIC0zNzUwLDEzICszNzMzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICAK
LSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQ
dHIoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRlYXJPZmZBY3RpdmF0aW9uLCB2YWx1ZUdQUik7Ci0gICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1
ZUdQUik7CiAgICAgICAgIAotICAgICAgICBub3RDcmVhdGVkLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoY3JlYXRl
ZCwgdGhpcywgb3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24sIEludmFsaWRHUFJSZWcsIHZhbHVl
R1BSKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMzc3NSwxNCArMzc1NSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgYWxyZWFk
eUNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1
bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0
R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCByZXN1bHRHUFIsIG1faml0LmNvZGVCbG9jaygpLT5mdW5jdGlvbkRlY2wobm9kZS5m
dW5jdGlvbkRlY2xJbmRleCgpKSk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJy
YW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAg
ICAgICBhbHJlYWR5Q3JlYXRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIG5vdENy
ZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLAorICAgICAgICAgICAgICAgIHJlc3Vs
dEdQUiwgbV9qaXQuY29kZUJsb2NrKCktPmZ1bmN0aW9uRGVjbChub2RlLmZ1bmN0aW9uRGVjbElu
ZGV4KCkpKSk7CiAgICAgICAgIAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTEgKzI4LDQ1IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUg
IkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAor
U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCisgICAgOiBt
X2NvbXBpbGVPa2F5KHRydWUpCisgICAgLCBtX2ppdChqaXQpCisgICAgLCBtX2NvbXBpbGVJbmRl
eCgwKQorICAgICwgbV9pbmRleEluQmxvY2soMCkKKyAgICAsIG1fZ2VuZXJhdGlvbkluZm8obV9q
aXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQorICAgICwgbV9ibG9ja0hlYWRz
KGppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKKyAgICAsIG1fYXJndW1lbnRzKGppdC5jb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpKQorICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCku
bV9sb2NhbFZhcnMpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpCisgICAgLCBtX3N0YXRlKG1faml0LmdyYXBoKCkpCit7Cit9CisKK1NwZWN1
bGF0aXZlSklUOjp+U3BlY3VsYXRpdmVKSVQoKQoreworICAgIFdURjo6ZGVsZXRlQWxsVmFsdWVz
KG1fc2xvd1BhdGhHZW5lcmF0b3JzKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkU2xv
d1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhHZW5l
cmF0b3IpCit7CisgICAgbV9zbG93UGF0aEdlbmVyYXRvcnMuYXBwZW5kKHNsb3dQYXRoR2VuZXJh
dG9yLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnJ1blNsb3dQYXRoR2Vu
ZXJhdG9ycygpCit7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGRhdGFMb2co
IlJ1bm5pbmcgJWx1IHNsb3cgcGF0aCBnZW5lcmF0b3JzLlxuIiwgbV9zbG93UGF0aEdlbmVyYXRv
cnMuc2l6ZSgpKTsKKyNlbmRpZgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3dQ
YXRoR2VuZXJhdG9ycy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnNb
aV0tPmdlbmVyYXRlKHRoaXMpOworfQorCiAvLyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBm
bW9kOyBvbiBvdGhlciBwbGF0Zm9ybXMgd2UgY2FuIGNhbGwgaXQgZGlyZWN0bHkuCiAvLyBPbiBB
Uk12NyB3ZSBhc3NlcnQgdGhhdCBhbGwgZnVuY3Rpb24gcG9pbnRlcnMgaGF2ZSB0byBsb3cgYml0
IHNldCAocG9pbnQgdG8gdGh1bWIgY29kZSkuCiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NU
RENBTEwgfHwgQ1BVKEFSTV9USFVNQjIpCkBAIC0xNTg1LDEzICsxNjE5LDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgRlBSUmVnIGZwciA9IG9w
MS5mcHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hU
cnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5j
YXRlU3VjY2Vzc2Z1bCk7Ci0KLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdw
cik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIGdwciwgZnByKTsKLSAgICAg
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91
YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwog
Ci0gICAgICAgICAgICB0cnVuY2F0ZWRUb0ludGVnZXIubGluaygmbV9qaXQpOwogICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChncHIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQpAQCAtMjA2NCwxNyArMjA5NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZpeGVk
ID0gbV9qaXQuanVtcCgpOwogICAgICAgICBub3ROYU4ubGluaygmbV9qaXQpOwogCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGZhaWxlZDsKICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKLSAg
ICAgICAgICAgIGRvbmUgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBn
cHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7CisgICAgICAg
ICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIs
IE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZG9uZSA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnBy
LCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7Ci0KLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bih0b0ludDMyLCBncHIsIGZwcik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3By
KTsKKyAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50
MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKKyAg
ICAgICAgCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQs
IHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CiAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CiAgICAgICAgIGZpeGVkLmxpbmsoJm1faml0KTsKICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0
KTsKICAgICAgICAgdmFsdWVHUFIgPSBncHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMTQyMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdT
aWxlbnRSZWdpc3RlclNhdmVQbGFuLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAj
aW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKIGNsYXNzIEpTVmFsdWVPcGVyYW5kOworY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBj
bGFzcyBTcGVjdWxhdGl2ZUpJVDsKIGNsYXNzIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOwogY2xh
c3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOwpAQCAtMTc1LDYgKzE3Nyw3IEBAIHByaXZh
dGU6CiAgICAgCiBwdWJsaWM6CiAgICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImKTsKKyAg
ICB+U3BlY3VsYXRpdmVKSVQoKTsKIAogICAgIGJvb2wgY29tcGlsZSgpOwogICAgIHZvaWQgY3Jl
YXRlT1NSRW50cmllcygpOwpAQCAtMzY2LDcgKzM2OSw5IEBAIHB1YmxpYzoKICAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4KTsKICAgICBHZW5lcmF0ZWRPcGVyYW5kVHlw
ZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKE5vZGVJbmRleCk7CiAKLXByaXZhdGU6Cisg
ICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9y
Pik7CisgICAgdm9pZCBydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKKyAgICAKICAgICB2b2lkIGNv
bXBpbGUoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOwogICAgIHZvaWQg
Y29tcGlsZShCYXNpY0Jsb2NrJik7CkBAIC0zODAsMjQzICszODUsMzQ3IEBAIHByaXZhdGU6CiAg
ICAgLy8gdGhleSBzcGlsbCBhbGwgbGl2ZSB2YWx1ZXMgdG8gdGhlIGFwcHJvcHJpYXRlCiAgICAg
Ly8gc2xvdHMgaW4gdGhlIFJlZ2lzdGVyRmlsZSB3aXRob3V0IGNoYW5naW5nIGFueSBzdGF0ZQog
ICAgIC8vIGluIHRoZSBHZW5lcmF0aW9uSW5mby4KLSAgICB2b2lkIHNpbGVudFNwaWxsR1BSKFZp
cnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcgc291cmNlKQorICAgIFNpbGVudFJlZ2lzdGVy
U2F2ZVBsYW4gc2lsZW50U2F2ZVBsYW5Gb3JHUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQ
UlJlZyBzb3VyY2UpCiAgICAgewogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2Vu
ZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0gICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1h
dCgpICE9IERhdGFGb3JtYXREb3VibGUpOwotCi0gICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxs
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwog
ICAgICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgp
OwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291
cmNlKTsKLSAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQot
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzb3VyY2UsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHNwaWxsTWUpKTsKKyAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3JtYXRO
b25lKTsKKyAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3JtYXREb3VibGUp
OworICAgICAgICAKKyAgICAgICAgU2lsZW50U3BpbGxBY3Rpb24gc3BpbGxBY3Rpb247CisgICAg
ICAgIFNpbGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbjsKKyAgICAgICAgCisgICAgICAgIGlmICgh
aW5mby5uZWVkc1NwaWxsKCkpCisgICAgICAgICAgICBzcGlsbEFjdGlvbiA9IERvTm90aGluZ0Zv
clNwaWxsOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1h
dCAmIERhdGFGb3JtYXRKUyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCBy
ZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7Ci0gICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihzb3VyY2UsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAg
ICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0
ICYgRGF0YUZvcm1hdEpTKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSBz
b3VyY2UgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0gc291cmNlKTsKLSAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoc291cmNlLCBzb3VyY2UgPT0gaW5mby50YWdHUFIoKSA/IEpJVENvbXBpbGVyOjp0
YWdGb3Ioc3BpbGxNZSkgOiBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAg
ICAgIH0gZWxzZSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIEFTU0VSVChpbmZv
LmdwcigpID09IHNvdXJjZSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgSklU
Q29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICB9CisgICAgICAgICAgICBp
ZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAgICAgICAg
c3BpbGxBY3Rpb24gPSBTdG9yZTMyUGF5bG9hZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyB8fCByZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
U3RvcmFnZSk7CisgICAgICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBTdG9yZVB0cjsKKyAgICAg
ICAgICAgIH0KKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBpZiAocmVnaXN0
ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby50
YWdHUFIoKSA9PSBzb3VyY2UgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0gc291cmNlKTsKKyAgICAg
ICAgICAgICAgICBzcGlsbEFjdGlvbiA9IHNvdXJjZSA9PSBpbmZvLnRhZ0dQUigpID8gU3RvcmUz
MlRhZyA6IFN0b3JlMzJQYXlsb2FkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOworICAgICAgICAgICAgICAgIHNwaWxs
QWN0aW9uID0gU3RvcmUzMlBheWxvYWQ7CisgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICB9Ci0g
ICAgdm9pZCBzaWxlbnRTcGlsbEZQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgRlBSUmVnIHNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1tzcGlsbE1lXTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0RG91YmxlKTsKLQotICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7Ci0g
ICAgICAgICAgICAvLyBpdCdzIGVpdGhlciBhIGNvbnN0YW50IG9yIGl0J3MgYWxyZWFkeSBiZWVu
IHNwaWxsZWQKLSAgICAgICAgICAgIEFTU0VSVChhdChpbmZvLm5vZGVJbmRleCgpKS5oYXNDb25z
dGFudCgpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIGl0J3MgbmVpdGhl
ciBhIGNvbnN0YW50IG5vciBoYXMgaXQgYmVlbiBzcGlsbGVkLgotICAgICAgICBBU1NFUlQoIWF0
KGluZm8ubm9kZUluZGV4KCkpLmhhc0NvbnN0YW50KCkpOwotICAgICAgICBBU1NFUlQoaW5mby5z
cGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKTsKLSAgICAgICAgQVNTRVJUKGluZm8uZnBy
KCkgPT0gc291cmNlKTsKLQotICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShzb3VyY2UsIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNpbGVudEZp
bGxHUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyB0YXJnZXQpCi0gICAgewotICAg
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0K
LSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91YmxlKTsKLSAgICAgICAgRGF0YUZvcm1hdCByZWdp
c3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKLQogICAgICAgICBpZiAocmVnaXN0
ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZv
LmdwcigpID09IHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3Vy
Y2UpOwogICAgICAgICAgICAgQVNTRVJUKGlzSlNJbnRlZ2VyKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSkpOwogICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0SW50MzJDb25zdGFudDsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRC
b29sZWFuKSB7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7Cisg
ICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4pIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBmaWxsQWN0aW9uID0gRG9Ob3RoaW5nRm9yRmlsbDsKICNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOworICAg
ICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAgICAgICAgIGlmIChu
b2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29u
c3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIodmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5kZXgpKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgICAgICBmaWxsQWN0aW9uID0gU2V0Qm9vbGVhbkNvbnN0YW50OwogICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQ
YXlsb2FkOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKLSAgICAgICAgICAgIEFT
U0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJG
b3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigp
ID09IHNvdXJjZSk7CiAgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2VsbCgpKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWUuYXNDZWxsKCkpLCB0YXJnZXQpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFn
ZSkgewotICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdl
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQocmVn
aXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24g
PSBTZXRDZWxsQ29uc3RhbnQ7CisgICAgICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7Ci0gICAgICAgIGlmIChu
b2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZU9mSlNDb25zdGFudChu
b2RlSW5kZXgpLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpT
Q29uc3RhbnRBc0ltbVB0cihub2RlSW5kZXgpLmFzVHJ1c3RlZEltbVB0cigpLCB0YXJnZXQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29u
c3RhbnRBc0ltbVB0cihub2RlSW5kZXgpLCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGlu
Zm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAgICAgICAgICAgQVNT
RVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwot
ICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0
YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0RG91YmxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSks
IHRhcmdldCk7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWRQdHI7CiAjZWxzZQot
ICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgfHwgaW5mby5wYXlsb2FkR1BS
KCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAg
ICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgPyBJbW0zMih2LnRhZygpKSA6
IEltbTMyKHYucGF5bG9hZCgpKSwgdGFyZ2V0KTsKLSAgICAgICAgfSBlbHNlIGlmIChpbmZvLnBh
eWxvYWRHUFIoKSA9PSB0YXJnZXQpCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgIGVsc2UgeyAvLyBGaWxs
IHRoZSBUYWcKLSAgICAgICAgICAgIHN3aXRjaCAoaW5mby5zcGlsbEZvcm1hdCgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICAgICAgICAgIGZpbGxBY3Rp
b24gPSBMb2FkMzJQYXlsb2FkOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2UpIHsKKyAgICAgICAgICAg
IEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAgICAgICAgICBmaWxsQWN0aW9uID0g
TG9hZFB0cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZv
cm1hdCAmIERhdGFGb3JtYXRKUyk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIEFT
U0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25z
dGFudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCkuaXNDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRUcnVzdGVk
SlNDb25zdGFudDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZp
bGxBY3Rpb24gPSBTZXRKU0NvbnN0YW50OworICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNw
aWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YXJnZXQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoK
LSAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTQ2Vs
bCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IERhdGFGb3JtYXRCb29sZWFuOgotICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1h
dCA9PSBEYXRhRm9ybWF0SlNCb29sZWFuKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjp0YWdGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWRCb3hJ
bnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERh
dGFGb3JtYXRKU0RvdWJsZSk7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWREb3Vi
bGVCb3hEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmaWxsQWN0
aW9uID0gTG9hZFB0cjsKKyNlbHNlCisgICAgICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9
PSBzb3VyY2UgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0gc291cmNlKTsKKyAgICAgICAgICAgIGlm
IChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1
ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBp
bmZvLnRhZ0dQUigpID09IHNvdXJjZSA/IFNldEpTQ29uc3RhbnRUYWcgOiBTZXRKU0NvbnN0YW50
UGF5bG9hZDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5wYXlsb2FkR1BSKCkgPT0gc291
cmNlKQorICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOworICAgICAg
ICAgICAgZWxzZSB7IC8vIEZpbGwgdGhlIFRhZworICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5m
by5zcGlsbEZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdl
cjoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXRKU0ludGVnZXIpOworICAgICAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0SW50MzJU
YWc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRGF0
YUZvcm1hdENlbGw6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9
PSBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNl
dENlbGxUYWc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICAgICAgZmls
bEFjdGlvbiA9IFNldEJvb2xlYW5UYWc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBM
b2FkMzJUYWc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQogI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKHNwaWxsQWN0aW9uLCBmaWxsQWN0
aW9uLCBub2RlSW5kZXgsIHNvdXJjZSk7CiAgICAgfQotCi0gICAgdm9pZCBzaWxlbnRGaWxsRlBS
KFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcgY2FuVHJhbXBsZSwgRlBSUmVnIHRhcmdl
dCkKKyAgICAKKyAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIHNpbGVudFNhdmVQbGFuRm9yRlBS
KFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBGUFJSZWcgc291cmNlKQogICAgIHsKICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOwotICAgICAg
ICBBU1NFUlQoaW5mby5mcHIoKSA9PSB0YXJnZXQpOwotCiAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUlu
ZGV4KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZv
cm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOwogCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
OwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkpLCBjYW5UcmFtcGxlKTsKLSAgICAgICAgICAg
IG1faml0Lm1vdmVQdHJUb0RvdWJsZShjYW5UcmFtcGxlLCB0YXJnZXQpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlvbjsKKyAgICAgICAg
U2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uOworICAgICAgICAKKyAgICAgICAgaWYgKCFpbmZv
Lm5lZWRzU3BpbGwoKSkKKyAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gRG9Ob3RoaW5nRm9yU3Bp
bGw7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKCFhdChpbmZvLm5vZGVJbmRl
eCgpKS5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICAgICAgQVNTRVJUKGluZm8uZnByKCkgPT0g
c291cmNlKTsKKyAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmVEb3VibGU7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1h
dE5vbmUgJiYgaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpIHsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgIGZp
bGxBY3Rpb24gPSBTZXREb3VibGVDb25zdGFudDsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNw
aWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUgJiYgaW5mby5zcGlsbEZvcm1hdCgpICE9IERh
dGFGb3JtYXREb3VibGUpIHsKICAgICAgICAgICAgIC8vIGl0IHdhcyBhbHJlYWR5IHNwaWxsZWQg
cHJldmlvdXNseSBhbmQgbm90IGFzIGEgZG91YmxlLCB3aGljaCBtZWFucyB3ZSBuZWVkIHVuYm94
aW5nLgogICAgICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRK
Uyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNw
aWxsTWUpLCBjYW5UcmFtcGxlKTsKLSAgICAgICAgICAgIHVuYm94RG91YmxlKGNhblRyYW1wbGUs
IHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWRKU1VuYm94RG91YmxlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkRG91YmxlOwogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNhblRyYW1wbGUpOwogICAgICAgICBBU1NF
UlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUgfHwgaW5mby5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgIGlmIChub2RlLmhh
c0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGVJ
bmRleCkpOwotICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25z
dGFudChub2RlSW5kZXgpLCB0YXJnZXQpOworICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldERv
dWJsZUNvbnN0YW50OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAg
ICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZTsKICNlbmRpZgotICAgIH0KIAotICAgIHZvaWQgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMoR1BSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBleGNsdWRlMiA9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKHNwaWxs
QWN0aW9uLCBmaWxsQWN0aW9uLCBub2RlSW5kZXgsIHNvdXJjZSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2lsZW50U3BpbGwoY29uc3QgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiYgcGxhbikKICAg
ICB7Ci0gICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRl
ciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgR1BSUmVnIGdwciA9IGl0
ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyICYmIGdwciAhPSBleGNsdWRlICYmIGdwciAhPSBleGNsdWRlMikKLSAgICAgICAg
ICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSwgZ3ByKTsKKyAgICAgICAgc3dpdGNo
IChwbGFuLnNwaWxsQWN0aW9uKCkpIHsKKyAgICAgICAgY2FzZSBEb05vdGhpbmdGb3JTcGlsbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlMzJUYWc6CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjp0YWdGb3IoYXQocGxhbi5u
b2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN0b3JlMzJQYXlsb2FkOgorICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwbGFu
LmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0
dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmVQ
dHI6CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihwbGFuLmdwcigpLCBKSVRDb21waWxlcjo6
YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmVEb3VibGU6CisgICAgICAgICAgICBt
X2ppdC5zdG9yZURvdWJsZShwbGFuLmZwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChw
bGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgfQotICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5h
bWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgIHNpbGVudFNw
aWxsRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNpbGVudEZpbGwoY29uc3QgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiYgcGxhbiwgR1BSUmVnIGNh
blRyYW1wbGUpCisgICAgeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIFVOVVNFRF9Q
QVJBTShjYW5UcmFtcGxlKTsKKyNlbmRpZgorICAgICAgICBzd2l0Y2ggKHBsYW4uZmlsbEFjdGlv
bigpKSB7CisgICAgICAgIGNhc2UgRG9Ob3RoaW5nRm9yRmlsbDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNldEludDMyQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSwgcGxhbi5ncHIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRCb29sZWFuQ29uc3RhbnQ6
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZU9mQm9vbGVhbkNvbnN0
YW50KHBsYW4ubm9kZUluZGV4KCkpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTZXRDZWxsQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkuYXNDZWxsKCkp
LCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIGNhc2UgU2V0VHJ1c3RlZEpTQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIocGxhbi5ub2RlSW5kZXgoKSkuYXNUcnVzdGVkSW1t
UHRyKCksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0
SlNDb25zdGFudDoKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0lt
bVB0cihwbGFuLm5vZGVJbmRleCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTZXREb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
SW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4ubm9k
ZUluZGV4KCkpKSksIGNhblRyYW1wbGUpOworICAgICAgICAgICAgbV9qaXQubW92ZVB0clRvRG91
YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTG9hZDMyUGF5bG9hZEJveEludDoKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIExvYWREb3VibGVCb3hEb3VibGU6CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3Rl
cigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExvYWRKU1VuYm94RG91YmxlOgorICAgICAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0
ZXIoKSksIGNhblRyYW1wbGUpOworICAgICAgICAgICAgdW5ib3hEb3VibGUoY2FuVHJhbXBsZSwg
cGxhbi5mcHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGNhc2UgU2V0
SlNDb25zdGFudFRhZzoKKyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29u
c3RhbnQocGxhbi5ub2RlSW5kZXgoKSkudGFnKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNldEpTQ29uc3RhbnRQYXlsb2FkOgorICAgICAgICAgICAg
bV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKS5wYXls
b2FkKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNl
dEludDMyVGFnOgorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFNldENlbGxUYWc6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTZXRCb29sZWFuVGFnOgorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZyksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU2V0RG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91Ymxl
KGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpLCBwbGFuLmZwcigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGNhc2UgTG9hZDMyVGFnOgorICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IoYXQocGxhbi5ub2RlSW5k
ZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExvYWQzMlBheWxvYWQ6CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lz
dGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExv
YWRQdHI6CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRG91YmxlOgorICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRl
eCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZnByKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEZQUlJlZyBl
eGNsdWRlKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAg
IHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKGJvb2wgZG9TcGlsbCwgQ29sbGVjdGlv
blR5cGUmIHBsYW5zLCBHUFJSZWcgZXhjbHVkZSwgR1BSUmVnIGV4Y2x1ZGUyID0gSW52YWxpZEdQ
UlJlZywgRlBSUmVnIGZwckV4Y2x1ZGUgPSBJbnZhbGlkRlBSUmVnKQogICAgIHsKKyAgICAgICAg
QVNTRVJUKHBsYW5zLmlzRW1wdHkoKSk7CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIg
PSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAg
ICAgICAgICAgc2lsZW50U3BpbGxHUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7CisgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOworICAgICAgICAgICAgaWYgKGl0ZXIu
bmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3By
ICE9IGV4Y2x1ZGUyKSB7CisgICAgICAgICAgICAgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBw
bGFuID0gc2lsZW50U2F2ZVBsYW5Gb3JHUFIoaXRlci5uYW1lKCksIGdwcik7CisgICAgICAgICAg
ICAgICAgaWYgKGRvU3BpbGwpCisgICAgICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsKHBsYW4p
OworICAgICAgICAgICAgICAgIHBsYW5zLmFwcGVuZChwbGFuKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSBpdGVyLnJlZ0lEKCk7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZp
cnR1YWxSZWdpc3RlciAmJiBmcHIgIT0gZXhjbHVkZSkKLSAgICAgICAgICAgICAgICBzaWxlbnRT
cGlsbEZQUihpdGVyLm5hbWUoKSwgZnByKTsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAh
PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGl0ZXIucmVnSUQoKSAhPSBmcHJFeGNsdWRlKSB7
CisgICAgICAgICAgICAgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBwbGFuID0gc2lsZW50U2F2
ZVBsYW5Gb3JGUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7CisgICAgICAgICAgICAgICAg
aWYgKGRvU3BpbGwpCisgICAgICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsKHBsYW4pOworICAg
ICAgICAgICAgICAgIHBsYW5zLmFwcGVuZChwbGFuKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICB2b2lk
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbChib29sIGRvU3BpbGwsIENvbGxlY3Rpb25UeXBl
JiBwbGFucywgRlBSUmVnIGV4Y2x1ZGUpCisgICAgeworICAgICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVyc0ltcGwoZG9TcGlsbCwgcGxhbnMsIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcs
IGV4Y2x1ZGUpOworICAgIH0KKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJ
bXBsKGJvb2wgZG9TcGlsbCwgQ29sbGVjdGlvblR5cGUmIHBsYW5zLCBKU1ZhbHVlUmVncyBleGNs
dWRlKQorICAgIHsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKGRvU3BpbGws
IHBsYW5zLCBleGNsdWRlLnRhZ0dQUigpLCBleGNsdWRlLnBheWxvYWRHUFIoKSk7CisgICAgfQor
I2VuZGlmCisgICAgCisgICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhj
bHVkZSwgR1BSUmVnIGV4Y2x1ZGUyID0gSW52YWxpZEdQUlJlZywgRlBSUmVnIGZwckV4Y2x1ZGUg
PSBJbnZhbGlkRlBSUmVnKQorICAgIHsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJ
bXBsKHRydWUsIG1fcGxhbnMsIGV4Y2x1ZGUsIGV4Y2x1ZGUyLCBmcHJFeGNsdWRlKTsKKyAgICB9
CisgICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhGUFJSZWcgZXhjbHVkZSkKKyAgICB7
CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcsIEludmFsaWRH
UFJSZWcsIGV4Y2x1ZGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR1BSUmVnIHBpY2tDYW5U
cmFtcGxlKEdQUlJlZyBleGNsdWRlKQorICAgIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgICAgICBpZiAocmVzdWx0ID09IGV4Y2x1ZGUpCisgICAgICAgICAg
ICByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgc3RhdGljIEdQUlJlZyBwaWNrQ2FuVHJhbXBsZShGUFJSZWcpCisgICAgeworICAgICAg
ICByZXR1cm4gR1BSSW5mbzo6cmVnVDA7CisgICAgfQogCi0gICAgdm9pZCBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKEdQUlJlZyBleGNsdWRlLCBHUFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVn
KQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RhdGljIEdQUlJlZyBwaWNrQ2FuVHJhbXBs
ZShKU1ZhbHVlUmVncyBleGNsdWRlKQogICAgIHsKLSAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUg
PSBHUFJJbmZvOjpyZWdUMDsKLSAgICAgICAgaWYgKGV4Y2x1ZGUgPT0gR1BSSW5mbzo6cmVnVDAp
Ci0gICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9m
cHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5u
YW1lKCksIGNhblRyYW1wbGUsIGl0ZXIucmVnSUQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9y
IChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOwotICAg
ICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3By
ICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1ZGUyKQotICAgICAgICAgICAgICAgIHNpbGVudEZp
bGxHUFIoaXRlci5uYW1lKCksIGdwcik7CisgICAgICAgIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBleGNsdWRlLnRhZ0dQUigpKSB7CisgICAg
ICAgICAgICByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gZXhjbHVkZS5wYXlsb2FkR1BSKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IGV4Y2x1ZGUucGF5bG9hZEdQ
UigpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gZXhjbHVkZS50YWdHUFIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMjsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KLSAgICB2b2lkIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUpCisjZW5k
aWYKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWdpc3RlclR5cGU+CisgICAgdm9pZCBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKFJlZ2lzdGVyVHlwZSBleGNsdWRlKQogICAgIHsKLSAgICAg
ICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAgICAgR1BSUmVnIGNh
blRyYW1wbGUgPSBwaWNrQ2FuVHJhbXBsZShleGNsdWRlKTsKICAgICAgICAgCi0gICAgICAgIGZv
ciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5k
KCk7ICsraXRlcikgewotICAgICAgICAgICAgRlBSUmVnIGZwciA9IGl0ZXIucmVnSUQoKTsKLSAg
ICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGZw
ciAhPSBleGNsdWRlKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCks
IGNhblRyYW1wbGUsIGZwcik7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3Ig
aXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAg
ICAgICAgICAgICAgICBzaWxlbnRGaWxsR1BSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOwor
ICAgICAgICB3aGlsZSAoIW1fcGxhbnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuJiBwbGFuID0gbV9wbGFucy5sYXN0KCk7CisgICAgICAgICAgICBzaWxl
bnRGaWxsKHBsYW4sIGNhblRyYW1wbGUpOworICAgICAgICAgICAgbV9wbGFucy5yZW1vdmVMYXN0
KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg5OCwxMiArMTAwNywxMSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9kZSYpOwogICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVVSW50MzJUb051bWJlcihOb2RlJik7CiAKLSAgICBlbnVtIFNwaWxsUmVnaXN0
ZXJzTW9kZSB7IE5lZWRUb1NwaWxsLCBEb250U3BpbGwgfTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJh
c2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKKyAgICB2b2lk
IGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVn
aXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9y
aWdpbiwgR1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNj
cmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhY2hlZEdldEJ5SWQoQ29kZU9y
aWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BS
UmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIEdQUlJlZyBzY3JhdGNo
R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRU
b1NwaWxsKTsKKyAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VU
YWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwg
R1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKICAgICB2b2lk
IGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcg
dmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJl
ZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogI2VuZGlm
CiAKQEAgLTEyMjUsNiArMTMzMywxMSBAQCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgYXJnMSk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
dm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKQEAgLTEyNTUsNiAr
MTM2OCwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBl
MiwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMz4KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEZ1bmN0aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlw
ZTEgYXJnMSwgQXJndW1lbnRUeXBlMiBhcmcyLCBBcmd1bWVudFR5cGUzIGFyZzMpCisgICAgewor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEludmFsaWRHUFJSZWcpOwor
ICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZzEsIGFyZzIsIGFyZzMp
OworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfREZHT3BlcmF0
aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CkBAIC0xNDIzLDYg
KzE1NDIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEludmFsaWRH
UFJSZWcpOworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZzEpOwor
ICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJS
ZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0
cihwb2ludGVyKSk7CkBAIC0xNDQ4LDYgKzE1NzIsMTggQEAgcHJpdmF0ZToKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzNQYXlsb2FkLCBh
cmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKICAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBl
bmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1
bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVudFR5cGU0PgorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJn
dW1lbnRUeXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFyZzIsIEFyZ3VtZW50VHlwZTMgYXJnMywg
QXJndW1lbnRUeXBlNCBhcmc0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsKKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBB
cmd1bWVudFR5cGUyLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUzLCB0eXBlbmFtZSBBcmd1bWVudFR5
cGU0LCB0eXBlbmFtZSBBcmd1bWVudFR5cGU1PgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRU
eXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFyZzIsIEFyZ3VtZW50VHlwZTMgYXJnMywgQXJndW1l
bnRUeXBlNCBhcmc0LCBBcmd1bWVudFR5cGU1IGFyZzUpCisgICAgeworICAgICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEludmFsaWRHUFJSZWcpOworICAgICAgICByZXR1cm4g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwor
ICAgIH0KIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRp
b25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFy
ZzFQYXlsb2FkKQogICAgIHsKQEAgLTE0NjUsNiArMTYwMSw0NyBAQCBwcml2YXRlOgogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTE+CisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgRnVuY3Rpb25UeXBlIG9w
ZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBBcmd1bWVudFR5cGUxIGFyZzEpCisgICAgewor
ICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlc3VsdC50YWdHUFIoKSwg
cmVzdWx0LnBheWxvYWRHUFIoKSwgYXJnMSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRU
eXBlMj4KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAgICAgICBGdW5j
dGlvblR5cGUgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJn
MSwgQXJndW1lbnRUeXBlMiBhcmcyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCByZXN1bHQudGFnR1BSKCksIHJlc3VsdC5wYXlsb2FkR1BSKCksIGFyZzEs
IGFyZzIpOworICAgIH0KKyAgICB0ZW1wbGF0ZTwKKyAgICAgICAgdHlwZW5hbWUgRnVuY3Rpb25U
eXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUyLAorICAg
ICAgICB0eXBlbmFtZSBBcmd1bWVudFR5cGUzPgorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oCisgICAgICAgIEZ1bmN0aW9uVHlwZSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJl
c3VsdCwgQXJndW1lbnRUeXBlMSBhcmcxLCBBcmd1bWVudFR5cGUyIGFyZzIsCisgICAgICAgIEFy
Z3VtZW50VHlwZTMgYXJnMykKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgcmVzdWx0LnRhZ0dQUigpLCByZXN1bHQucGF5bG9hZEdQUigpLCBhcmcxLCBhcmcy
LCBhcmczKTsKKyAgICB9CisgICAgdGVtcGxhdGU8CisgICAgICAgIHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwKKyAg
ICAgICAgdHlwZW5hbWUgQXJndW1lbnRUeXBlMywgdHlwZW5hbWUgQXJndW1lbnRUeXBlND4KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAgICAgICBGdW5jdGlvblR5cGUg
b3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEFyZ3VtZW50VHlwZTEgYXJnMSwgQXJndW1l
bnRUeXBlMiBhcmcyLAorICAgICAgICBBcmd1bWVudFR5cGUzIGFyZzMsIEFyZ3VtZW50VHlwZTQg
YXJnNCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVz
dWx0LnRhZ0dQUigpLCByZXN1bHQucGF5bG9hZEdQUigpLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0
KTsKKyAgICB9CisgICAgdGVtcGxhdGU8CisgICAgICAgIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwg
dHlwZW5hbWUgQXJndW1lbnRUeXBlMSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMiwKKyAgICAgICAg
dHlwZW5hbWUgQXJndW1lbnRUeXBlMywgdHlwZW5hbWUgQXJndW1lbnRUeXBlNCwgdHlwZW5hbWUg
QXJndW1lbnRUeXBlNT4KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAg
ICAgICBGdW5jdGlvblR5cGUgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEFyZ3VtZW50
VHlwZTEgYXJnMSwgQXJndW1lbnRUeXBlMiBhcmcyLAorICAgICAgICBBcmd1bWVudFR5cGUzIGFy
ZzMsIEFyZ3VtZW50VHlwZTQgYXJnNCwgQXJndW1lbnRUeXBlNSBhcmc1KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICBvcGVyYXRpb24sIHJlc3VsdC50
YWdHUFIoKSwgcmVzdWx0LnBheWxvYWRHUFIoKSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJn
NSk7CisgICAgfQogI2VuZGlmCiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFkZCBjYWxsIGluc3Ry
dWN0aW9ucywgd2l0aCBvcHRpb25hbCBleGNlcHRpb24gY2hlY2tzICYgc2V0dGluZyByZXN1bHRz
LgpAQCAtMTk1MSw4ICsyMTI4LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fdmFyaWFi
bGVzW29wZXJhbmRdOwogICAgIH0KICAgICAKLSAgICAvLyBUaGUgSklULCB3aGlsZSBhbHNvIHBy
b3ZpZGVzIE1hY3JvQXNzZW1ibGVyIGZ1bmN0aW9uYWxpdHkuCiAgICAgSklUQ29tcGlsZXImIG1f
aml0OworCiAgICAgLy8gVGhlIGN1cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0ZWQuCiAgICAgQmxv
Y2tJbmRleCBtX2Jsb2NrOwogICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKQEAgLTE5ODQs
NiArMjE2MSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwog
ICAgIAorICAgIFZlY3RvcjxTbG93UGF0aEdlbmVyYXRvciosIDg+IG1fc2xvd1BhdGhHZW5lcmF0
b3JzOyAvLyBkb2Vzbid0IHVzZSBPd25QdHI8PiBiZWNhdXNlIEkgZG9uJ3Qgd2FudCB0byBpbmNs
dWRlIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgKKyAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZl
UGxhbj4gbV9wbGFuczsKKwogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3IoY29uc3QgVmFsdWVTb3VyY2UmKTsKIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVl
UmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQpCkBAIC0yNjAzLDIwICsyNzgzLDYgQEAgcHJpdmF0ZToK
ICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCi1pbmxpbmUgU3BlY3VsYXRpdmVKSVQ6
OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCi0gICAgOiBtX2NvbXBpbGVPa2F5KHRy
dWUpCi0gICAgLCBtX2ppdChqaXQpCi0gICAgLCBtX2NvbXBpbGVJbmRleCgwKQotICAgICwgbV9p
bmRleEluQmxvY2soMCkKLSAgICAsIG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuY29kZUJsb2NrKCkt
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQotICAgICwgbV9ibG9ja0hlYWRzKGppdC5ncmFwaCgpLm1f
YmxvY2tzLnNpemUoKSkKLSAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpKQotICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2NhbFZhcnMpCi0g
ICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0g
ICAgLCBtX3N0YXRlKG1faml0LmdyYXBoKCkpCi17Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2
aXNpb24gMTE0MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgY29uc3QK
ICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG9mZnNldCA8IHNpemUoKSk7CisgICAgICAg
ICAgICBBU1NFUlQob2Zmc2V0IDw9IHNpemUoKSk7IC8vIHVzZSA8PSBpbnN0ZWFkIG9mIDwgYmVj
YXVzZSBpdCBpcyB2YWxpZCB0byBhc2sgZm9yIGFuIGFkZHJlc3MgYXQgdGhlIGV4Y2x1c2l2ZSBl
bmQgb2YgdGhlIGNvZGUuCiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obV9yZWYuY29kZSgpLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldDsKICAgICAgICAgfQogCg==
</data>
<flag name="review"
          id="142471"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>