<?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>159612</bug_id>
          
          <creation_ts>2016-07-10 18:54:29 -0700</creation_ts>
          <short_desc>Inline store loop for CopyRest in DFG and FTL for certain array modes</short_desc>
          <delta_ts>2016-08-12 19:16:19 -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>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159081</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1209567</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-10 18:54:29 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209571</commentid>
    <comment_count>1</comment_count>
      <attachid>283294</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-10 19:13:39 -0700</bug_when>
    <thetext>Created attachment 283294
WIP

This makes trivial test programs like 50% faster.
It makes Fil&apos;s air.js benchmark ~7% faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209572</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-10 19:15:51 -0700</bug_when>
    <thetext>Attachment 283294 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:3804:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 1 in 3 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>1219206</commentid>
    <comment_count>3</comment_count>
      <attachid>285788</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-10 17:24:17 -0700</bug_when>
    <thetext>Created attachment 285788
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219207</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-10 17:25:54 -0700</bug_when>
    <thetext>Attachment 285788 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:3889:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 8 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>1219208</commentid>
    <comment_count>5</comment_count>
      <attachid>285788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-10 17:27:07 -0700</bug_when>
    <thetext>Comment on attachment 285788
patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:2871
&gt; +        IndexingType indexingType = node-&gt;child1()-&gt;indexingType();

This is really bad.  You&apos;re requiring that the child of CopyRest is NewArray.

A property of any good IR is that this:

a: Foo()
b: Bar(@a)

Must always behave the same as:

a: Foo()
x: Identity(@a)
b: Bar(@x)

Or even:

a: Foo()
Upsilon(@a, ^p)
...
p: Phi()
b: Bar(@p)

Clearly, any of these transformations would break your patch here and in other places.  Therefore, I believe your change is not sound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219215</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-10 17:43:46 -0700</bug_when>
    <thetext>After speaking with Filip in person, I&apos;m going to change
CopyRest and copy_rest to produce the array itself
instead of consuming it as an argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219257</commentid>
    <comment_count>7</comment_count>
      <attachid>285811</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-10 20:26:04 -0700</bug_when>
    <thetext>Created attachment 285811
WIP

Might be the patch. I just need to see if it&apos;s possible to end up with an array larger
than MIN_ARRAY_STORAGE_LENGTH and what to do in such a situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219512</commentid>
    <comment_count>8</comment_count>
      <attachid>285882</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-11 19:43:39 -0700</bug_when>
    <thetext>Created attachment 285882
WIP

Just about done. Just going to write a changelog and do a once over of the code, and write 32-bit DFG support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219617</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 11:01:06 -0700</bug_when>
    <thetext>Attachment 285882 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:856:  Extra space between Structure* and structure  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/BytecodeUseDef.h:94:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:87:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:6510:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:6514:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:764:  The parameter name &quot;indexingType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5507:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 7 in 35 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>1219649</commentid>
    <comment_count>10</comment_count>
      <attachid>285930</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-12 12:26:59 -0700</bug_when>
    <thetext>Created attachment 285930
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219651</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 12:29:16 -0700</bug_when>
    <thetext>Attachment 285930 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:5442:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/BytecodeUseDef.h:94:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:87:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:764:  The parameter name &quot;indexingType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:5507:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 5 in 37 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>1219739</commentid>
    <comment_count>12</comment_count>
      <attachid>285962</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-12 15:13:47 -0700</bug_when>
    <thetext>Created attachment 285962
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219741</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 15:16:23 -0700</bug_when>
    <thetext>Attachment 285962 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h:87:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 1 in 41 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>1219837</commentid>
    <comment_count>14</comment_count>
      <attachid>285962</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 19:16:14 -0700</bug_when>
    <thetext>Comment on attachment 285962
patch for landing

Clearing flags on attachment: 285962

Committed r204439: &lt;http://trac.webkit.org/changeset/204439&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219838</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 19:16:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283294</attachid>
            <date>2016-07-10 19:13:39 -0700</date>
            <delta_ts>2016-08-10 17:24:17 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>7493</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAyMDMwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5OCw2ICszNjk4LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2Nv
cHlfcmVzdDogewogICAgICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNlKCk7CiAgICAgICAgICAg
ICBOb2RlKiBhcnJheSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXktPm9wKCkgPT0g
TmV3QXJyYXlXaXRoU2l6ZSk7CiAgICAgICAgICAgICBOb2RlKiBhcnJheUxlbmd0aCA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAg
ICAgICAgYWRkVG9HcmFwaChDb3B5UmVzdCwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
LnVuc2lnbmVkVmFsdWUpLAogICAgICAgICAgICAgICAgIGFycmF5LCBhcnJheUxlbmd0aCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMjAzMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MjcsNiArNjQyNyw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb3B5UmVzdChOb2QKIHsKICAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBDb3B5UmVzdCk7CiAKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbm9k
ZS0+Y2hpbGQxKCktPmluZGV4aW5nVHlwZSgpOworCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YXJyYXkodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBhcmd1bWVudHNT
dGFydCh0aGlzKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJyYXlMZW5ndGgo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtNjQzNSwxNiArNjQzNyw1MyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ29weVJlc3QoTm9kCiAgICAgR1BSUmVnIGFyZ3VtZW50c1N0YXJ0
R1BSID0gYXJndW1lbnRzU3RhcnQuZ3ByKCk7CiAgICAgR1BSUmVnIGFycmF5TGVuZ3RoR1BSID0g
YXJyYXlMZW5ndGguZ3ByKCk7CiAKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYXJyYXlMZW5ndGhHUFIsIFRydXN0ZWRJ
bW0zMigwKSk7Ci0KICAgICBlbWl0R2V0QXJndW1lbnRTdGFydChub2RlLT5vcmlnaW4uc2VtYW50
aWMsIGFyZ3VtZW50c1N0YXJ0R1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b1Nsb3dQYXRoOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wc1RvRG9uZTsKKyAg
ICBpZiAodHJ1ZSAmJiAoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aENvbnRpZ3VvdXMgfHwgaW5k
ZXhpbmdUeXBlID09IEFycmF5V2l0aEludDMyKSkgeworICAgICAgICBHUFJUZW1wb3JhcnkgYnV0
dGVyZmx5KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgY3VycmVudExlbmd0aCh0aGlzKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBjdXJy
ZW50TGVuZ3RoR1BSID0gY3VycmVudExlbmd0aC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJ1dHRl
cmZseUdQUiA9IGJ1dHRlcmZseS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhhcnJheUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihhcnJheUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYnV0dGVyZmx5R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
KworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2tpcExvb3AgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGFycmF5TGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwor
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihhcnJheUxlbmd0aEdQUiwgY3VycmVudExl
bmd0aEdQUik7CisgICAgICAgIG1faml0LmFkZFB0cihJbW0zMihzaXplb2YoUmVnaXN0ZXIpICog
bm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSksIGFyZ3VtZW50c1N0YXJ0R1BSKTsKKwor
ICAgICAgICBhdXRvIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIGN1cnJlbnRMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQo
SklUQ29tcGlsZXI6OkJhc2VJbmRleChhcmd1bWVudHNTdGFydEdQUiwgY3VycmVudExlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB2YWx1ZUdQUik7CisgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoSW50MzIpIHsKKyAgICAgICAgICAgIGp1bXBUb1Nsb3dQ
YXRoID0gbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAg
fQorICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KGJ1dHRlcmZseUdQUiwgY3VycmVudExlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBjdXJyZW50TGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMCkpLmxpbmtUbyhsb29wLCAmbV9qaXQp
OworCisgICAgICAgIHNraXBMb29wLmxpbmsoJm1faml0KTsKKyAgICAgICAganVtcHNUb0RvbmUu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgfQorCisgICAganVtcHNUb0RvbmUuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYXJyYXlMZW5ndGhHUFIsIFRydXN0
ZWRJbW0zMigwKSkpOworCisgICAgaWYgKGp1bXBUb1Nsb3dQYXRoLmlzU2V0KCkpIHsKKyAgICAg
ICAganVtcFRvU2xvd1BhdGgubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zdWJQdHIoSW1t
MzIoc2l6ZW9mKFJlZ2lzdGVyKSAqIG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpLCBh
cmd1bWVudHNTdGFydEdQUik7IC8vIFJlc2V0IHN0YXRlLgorICAgIH0KICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhhcmd1bWVudHNTdGFydEdQUik7CiAgICAgLy8gQXJndW1lbnRzOiAwOmV4
ZWMsIDE6SlNDZWxsKiBhcnJheSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3Vt
ZW50cyB0byBza2lwLCA0OmFycmF5IGxlbmd0aAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29weVJlc3QsIGFycmF5R1BSLCBhcmd1bWVudHNTdGFydEdQUiwgSW1tMzIobm9kZS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKSksIGFycmF5TGVuZ3RoR1BSKTsKICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKGFyZ3VtZW50c1N0YXJ0R1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAganVtcHNUb0RvbmUubGluaygmbV9qaXQp
OwogCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDMwMzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3NjEsMTYgKzM3NjEsNDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKIAogICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGgg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGFycmF5ID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICBtX291dC5lcXVhbChhcnJheUxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigwKSksCi0gICAg
ICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGRvQ29weVJlc3QpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGRv
Q29weVJlc3QsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bnVsbHB0cjsKKworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbV9ub2RlLT5j
aGlsZDEoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmICh0cnVlICYmIChpbmRleGluZ1R5
cGUgPT0gQXJyYXlXaXRoQ29udGlndW91cyB8fCBpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoSW50
MzIpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNJbnQzMkJsb2NrID0gaW5kZXhpbmdUeXBl
ID09IEFycmF5V2l0aEludDMyID8gbV9vdXQubmV3QmxvY2soKSA6IG51bGxwdHI7CisKKyAgICAg
ICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5sb2FkUHRyKGFycmF5LCBtX2hlYXBzLkpT
T2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgICAgICBtX291dC5zdG9yZTMyKGFycmF5TGVuZ3Ro
LCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzdGFydExlbmd0aCA9IG1fb3V0LmFuY2hvcihhcnJheUxlbmd0aCk7
CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRSZWdpb24gPSBtX291dC5hZGQoZ2V0QXJndW1l
bnRzU3RhcnQoKSwgbV9vdXQuY29uc3RJbnQzMihzaXplb2YoUmVnaXN0ZXIpICogbV9ub2RlLT5u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9v
dXQuZXF1YWwoYXJyYXlMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAorICAgICAgICAgICAg
ICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0YXJ0KSk7CisKKyAgICAgICAg
ICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcFN0YXJ0LCBpc0ludDMyQmxvY2sgPyBp
c0ludDMyQmxvY2sgOiBkb0NvcHlSZXN0KTsKKyAgICAgICAgICAgIExWYWx1ZSBwaGlPZmZzZXQg
PSBtX291dC5waGkoSW50MzIsIHN0YXJ0TGVuZ3RoKTsKKyAgICAgICAgICAgIExWYWx1ZSBjdXJy
ZW50T2Zmc2V0ID0gbV9vdXQuc3ViKHBoaU9mZnNldCwgbV9vdXQuaW50MzJPbmUpOworICAgICAg
ICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwaGlPZmZzZXQsIG1fb3V0LmFuY2hvcihjdXJy
ZW50T2Zmc2V0KSk7CisgICAgICAgICAgICBMVmFsdWUgbG9hZGVkVmFsdWUgPSBtX291dC5sb2Fk
NjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCBhcmd1bWVudFJlZ2lvbiwgbV9v
dXQuemVyb0V4dFB0cihjdXJyZW50T2Zmc2V0KSkpOworICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBBcnJheVdpdGhJbnQzMikgeworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c05vdEludDMyKGxvYWRlZFZhbHVlKSwgcmFyZWx5KGRvQ29weVJlc3QpLCB1c3VhbGx5KGlzSW50
MzJCbG9jaykpOworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzSW50MzJCbG9jaywg
ZG9Db3B5UmVzdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFj
dEhlYXAmIGhlYXAgPSBpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoSW50MzIgPyBtX2hlYXBzLmlu
ZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGll
czsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlKGxvYWRlZFZhbHVlLCBtX291dC5iYXNlSW5kZXgo
aGVhcCwgYnV0dGVyZmx5LCBtX291dC56ZXJvRXh0UHRyKGN1cnJlbnRPZmZzZXQpKSwgT3V0cHV0
OjpTdG9yZTY0KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChjdXJyZW50
T2Zmc2V0LCBtX291dC5jb25zdEludDMyKDApKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3Vy
ZShsb29wU3RhcnQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5lcXVhbChhcnJheUxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigwKSksCisgICAgICAg
ICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShkb0NvcHlSZXN0KSk7CisgICAg
ICAgIH0KKworICAgICAgICBMQmFzaWNCbG9jayBtYXliZUxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oZG9Db3B5UmVzdCwgY29udGludWF0aW9uKTsKKyAgICAgICAgaWYgKCFsYXN0TmV4dCkKKyAg
ICAgICAgICAgIGxhc3ROZXh0ID0gbWF5YmVMYXN0TmV4dDsKICAgICAgICAgLy8gQXJndW1lbnRz
OiAwOmV4ZWMsIDE6SlNDZWxsKiBhcnJheSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9m
IGFyZ3VtZW50cyB0byBza2lwLCA0OmFycmF5IGxlbmd0aAogICAgICAgICBMVmFsdWUgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAoKSk7CiAgICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgIFZvaWQsbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbkNvcHlSZXN0KSwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksCisgICAgICAgICAgICBWb2lkLG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25D
b3B5UmVzdCksIG1fY2FsbEZyYW1lLCBhcnJheSwKICAgICAgICAgICAgIGdldEFyZ3VtZW50c1N0
YXJ0KCksIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCk7CiAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285788</attachid>
            <date>2016-08-10 17:24:17 -0700</date>
            <delta_ts>2016-08-10 20:26:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>16046</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQzNjQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBzdG9yZSBsb29wIGZvciBDb3B5UmVzdCBpbiBERkcgYW5k
IEZUTCBmb3IgY2VydGFpbiBhcnJheSBtb2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvcmVzdC1wYXJhbWV0ZXItb3NyLWV4aXQuanM6
IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAoYmF6KToKKyAgICAgICAgKHRlc3QxKToKKyAgICAgICAgKG1ha2VUZXN0Mik6
CisgICAgICAgIChmMik6CisgICAgICAgIChmMyk6CisgICAgICAgICh0ZXN0Myk6CisgICAgICAg
IChmMjIpOgorCiAyMDE2LTA4LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgogCiAgICAgICAgIEJhc2VsaW5lIEdldEJ5VmFsIGFuZCBQdXRCeVZhbCBmb3IgY2FjaGUgSUQg
c3R1YnMgbmVlZCB0byBoYW5kbGUgZXhjZXB0aW9ucwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcmVz
dC1wYXJhbWV0ZXItb3NyLWV4aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcmVz
dC1wYXJhbWV0ZXItb3NyLWV4aXQuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9y
ZXN0LXBhcmFtZXRlci1vc3ItZXhpdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBA
CitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJCYWQhIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiBmb28oYSwgYiwg
Li4uYykgeworICAgIHJldHVybiBjOworfQorbm9JbmxpbmUoZm9vKTsKK2Z1bmN0aW9uIGJhcihh
LCBiLCAuLi5jKSB7CisgICAgcmV0dXJuIGM7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlv
biBiYXooYSwgYiwgLi4uYykgeyAvLyBhbGxvdyB0aGlzIHRvIGJlIGlubGluZWQKKyAgICByZXR1
cm4gYzsKK30KKworbm9JbmxpbmUoaXNOYU4pOworCitmdW5jdGlvbiB0ZXN0MShmLCBpdGVycykg
eworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICBsZXQgcmVz
dWx0ID0gZigxMCwgMjAsIDIwLjUsIDIyLjQ1LCAyMy41MCk7CisgICAgICAgIGFzc2VydChyZXN1
bHQubGVuZ3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMjAuNSkKKyAg
ICAgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gMjIuNDUpCisgICAgICAgIGFzc2VydChyZXN1bHRb
Ml0gPT09IDIzLjUwKTsKKyAgICB9CisKKyAgICBsZXQgbyA9IHt9OworICAgIGxldCByZXN1bHQg
PSBmKDEwLCAyMCwgMjAuNCwgbywgMjAuMik7CisgICAgYXNzZXJ0KHJlc3VsdC5sZW5ndGggPT09
IDMpOworICAgIGFzc2VydChyZXN1bHRbMF0gPT09IDIwLjQpCisgICAgYXNzZXJ0KHJlc3VsdFsx
XSA9PT0gbykKKyAgICBhc3NlcnQocmVzdWx0WzJdID09PSAyMC4yKTsKKworICAgIHJlc3VsdCA9
IGYoMTAsIDIwLCAyMC40LCAyMC40NSwgTmFOKTsKKyAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9
PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMjAuNCkKKyAgICBhc3NlcnQocmVzdWx0
WzFdID09PSAyMC40NSkKKyAgICBhc3NlcnQoaXNOYU4ocmVzdWx0WzJdKSk7Cit9Cit0ZXN0MShm
b28sIDEwMDApOwordGVzdDEoYmFyLCAxMDAwMCk7Cit0ZXN0MShiYXosIDEwMDAwKTsKKworZnVu
Y3Rpb24gbWFrZVRlc3QyKCkgeworICAgIHJldHVybiBldmFsKGAke01hdGgucmFuZG9tKCl9Owor
ICAgICAgICA7KGZ1bmN0aW9uIHRlc3QyKGYsIGl0ZXJzKSB7CisgICAgICAgICAgICBsZXQgYSA9
IDEwOworICAgICAgICAgICAgbGV0IGIgPSAyMDsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID09PSBpdGVycyAtIDIp
IHsKKyAgICAgICAgICAgICAgICAgICAgYiA9IHt9OworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaSA9PT0gaXRlcnMgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGIgPSBOYU47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGV0IHIgPSBmKGEsIGIpOworICAgICAg
ICAgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0
KHJbMF0gPT09IGEgfHwgKGlzTmFOKGEpICYmIGlzTmFOKHJbMF0pKSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0KHJbMV0gPT09IGIgfHwgKGlzTmFOKGIpICYmIGlzTmFOKHJbMV0pKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pYCk7Cit9CitmdW5jdGlvbiBmMSguLi5yZXN0KSB7IHJldHVy
biByZXN0OyB9CitmdW5jdGlvbiBmMiguLi5yZXN0KSB7IHJldHVybiByZXN0OyB9CitmdW5jdGlv
biBmMyguLi5yZXN0KSB7IHJldHVybiByZXN0OyB9CittYWtlVGVzdDIoKShmMSwgMTAwMCk7Citt
YWtlVGVzdDIoKShmMiwgMTAwMDApOworbWFrZVRlc3QyKCkoZjMsIDUwMDAwMCk7CisKK2Z1bmN0
aW9uIHRlc3QzKGYsIGl0ZXJzKSB7CisgICAgbGV0IG8gPSB7fTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBmKGksIG8sIDI1KTsKKyAgICAg
ICAgYXNzZXJ0KHIubGVuZ3RoID09PSAyIHx8IHIubGVuZ3RoID09PSAxMDAwMCk7CisgICAgICAg
IGFzc2VydChyWzBdID09PSBvKTsKKyAgICAgICAgYXNzZXJ0KHJbMV0gPT09IDI1KTsKKyAgICAg
ICAgaWYgKHIubGVuZ3RoID09PSAxMDAwMCkKKyAgICAgICAgICAgIGFzc2VydChyWzk5OTldID09
PSAzMCk7CisgICAgfQorfQorCitmdW5jdGlvbiBmMTEoaSwgLi4ucmVzdCkgeworICAgIGlmIChp
ID09PSA5OTkpCisgICAgICAgIHJlc3RbOTk5OV0gPSAzMDsKKyAgICByZXR1cm4gcmVzdDsKK30K
K2Z1bmN0aW9uIGYyMihpLCAuLi5yZXN0KSB7CisgICAgaWYgKGkgPT09IDQ5OTk5KQorICAgICAg
ICByZXN0Wzk5OTldID0gMzA7CisgICAgcmV0dXJuIHJlc3Q7Cit9Cit0ZXN0MyhmMTEsIDEwMDAp
OwordGVzdDMoZjIyLCA1MDAwMCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMjA0MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTA4LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIElubGluZSBzdG9yZSBsb29wIGZvciBDb3B5UmVzdCBp
biBERkcgYW5kIEZUTCBmb3IgY2VydGFpbiBhcnJheSBtb2RlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjEyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29weVJlc3QgdXNlZCB0byBhbHdheXMgY2Fs
bCBvdXQgdG8gQyBjb2RlIHRvIHdyaXRlIHRvIHRoZSByZXN0IGFycmF5LgorICAgICAgICBUaGlz
IHBhdGNoIGNoYW5nZXMgdGhpcyB0byBpbmxpbmUgdGhlIHdyaXRlcyB3aGVuIHdlJ3JlIHdyaXRp
bmcgdG8gYW4KKyAgICAgICAgYXJyYXkgd2l0aCBBcnJheVdpdGhDb250aWd1b3VzIG9yIEFycmF5
V2l0aEludDMyIG9yIEFycmF5V2l0aERvdWJsZQorICAgICAgICBJbmRleGluZ1R5cGUuIFdlIGtu
b3cgdGhlIEluZGV4aW5nVHlwZSBiZWNhdXNlIHRoZSBDb3B5UmVzdCBub2RlJ3MKKyAgICAgICAg
Zmlyc3QgY2hpbGQgaXMgYWx3YXlzIE5ld0FycmF5V2l0aFNpemUuIFRoaXMgbWF5IGJlIGFyb3Vu
ZCBhIDEtMiUKKyAgICAgICAgc3BlZWR1cCBvbiBFUzYgU2FtcGxlQmVuY2guIEl0J3MgYXJvdW5k
IGEgMTAtNDAlIHNwZWVkdXAgZm9yIG1pY3JvCisgICAgICAgIGJlbmNobWFya3MgdGhhdCBhcmUg
dGVzdGluZyByZXN0IHBhcmFtZXRlciBjcmVhdGlvbiBzcGVlZHMuCisKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNvcHlSZXN0KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb3B5UmVz
dCk6CisKIDIwMTYtMDgtMDkgIEdlb3JnZSBSdWFuICA8Z3J1YW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEltcGxlbWVudCBmdW5jdGlvbmFsaXR5IG9mIG1lZGlhIGNhcHR1cmUgb24gaU9TCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4NjcsOCArMjg2NywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgY2FzZSBDaGVja1R5cGVJbmZvRmxhZ3M6CiAgICAgICAgIGJyZWFrOwogCi0g
ICAgY2FzZSBDb3B5UmVzdDoKKyAgICBjYXNlIENvcHlSZXN0OiB7CisgICAgICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUgPSBub2RlLT5jaGlsZDEoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAg
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQ29udGlndW91cyB8fCBpbmRleGluZ1R5
cGUgPT0gQXJyYXlXaXRoSW50MzIgfHwgaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aERvdWJsZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIENoZWNrOiB7CiAgICAgICAgIC8vIFNpbXBsaWZ5IG91dCBjaGVja3MgdGhh
dCBkb24ndCBhY3R1YWxseSBkbyBjaGVja2luZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDQzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcwMiw2ICszNzAyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2NvcHlfcmVzdDogewogICAgICAgICAgICAgbm90
aWNlQXJndW1lbnRzVXNlKCk7CiAgICAgICAgICAgICBOb2RlKiBhcnJheSA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAg
QVNTRVJUKGFycmF5LT5vcCgpID09IE5ld0FycmF5V2l0aFNpemUpOwogICAgICAgICAgICAgTm9k
ZSogYXJyYXlMZW5ndGggPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ29weVJlc3QsIE9wSW5mbyhj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS51bnNpZ25lZFZhbHVlKSwKICAgICAgICAgICAgICAgICBh
cnJheSwgYXJyYXlMZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk4LDYgKzEwOTgsMjAgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIH0KIAogICAgIGNh
c2UgQ29weVJlc3Q6IHsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUt
PmNoaWxkMSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBB
cnJheVdpdGhDb250aWd1b3VzIHx8IGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhJbnQzMiB8fCBp
bmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoRG91YmxlKSB7CisgICAgICAgICAgICByZWFkKFN0YWNr
KTsKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQ29udGlndW91cykK
KyAgICAgICAgICAgICAgICB3cml0ZShJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aEludDMyKQorICAgICAg
ICAgICAgICAgIHdyaXRlKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aERvdWJsZSkKKyAgICAgICAgICAgICAgICB3
cml0ZShJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisKKyAgICAgICAgICAgIHdyaXRlKEJ1dHRl
cmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKICAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAgIHdyaXRlKEhlYXApOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA0MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0OTQsMTYg
KzY0OTQsODkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvcHlSZXN0KE5vZAogICAg
IEdQUlJlZyBhcmd1bWVudHNTdGFydEdQUiA9IGFyZ3VtZW50c1N0YXJ0LmdwcigpOwogICAgIEdQ
UlJlZyBhcnJheUxlbmd0aEdQUiA9IGFycmF5TGVuZ3RoLmdwcigpOwogCi0gICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGFy
cmF5TGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwotCiAgICAgZW1pdEdldEFyZ3VtZW50U3Rh
cnQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBhcmd1bWVudHNTdGFydEdQUik7CisKKyNpZiAhQ1BV
KFg4NikKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbm9kZS0+Y2hpbGQxKCktPmlu
ZGV4aW5nVHlwZSgpOworICAgIE9wdGlvbmFsPEZQUlRlbXBvcmFyeT4gdmFsdWVBc0RvdWJsZTsK
KyAgICBGUFJSZWcgdmFsdWVBc0RvdWJsZUZQUlJlZyA9IEludmFsaWRGUFJSZWc7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBPcHRpb25hbDxGUFJUZW1wb3Jhcnk+IHNjcmF0Y2hGUFI7Cisg
ICAgRlBSUmVnIHNjcmF0Y2hGUFJSZWcgPSBJbnZhbGlkRlBSUmVnOworI2VuZGlmCisgICAgaWYg
KGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhEb3VibGUpIHsKKyAgICAgICAgdmFsdWVBc0RvdWJs
ZSA9IEZQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgdmFsdWVBc0RvdWJsZUZQUlJlZyA9IHZh
bHVlQXNEb3VibGUtPmZwcigpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHNjcmF0
Y2hGUFIgPSBGUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgIHNjcmF0Y2hGUFJSZWcgPSBzY3Jh
dGNoRlBSLT5mcHIoKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChpbmRleGluZ1R5cGUgPT0g
QXJyYXlXaXRoQ29udGlndW91cyB8fCBpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoSW50MzIgfHwg
aW5kZXhpbmdUeXBlID09IEFycmF5V2l0aERvdWJsZSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QganVtcHNUb0V4aXQ7CisgICAgICAgIEdQUlRlbXBvcmFyeSBidXR0ZXJmbHko
dGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBjdXJyZW50TGVuZ3RoKHRoaXMpOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMgPj0gNiwgIldlIHVzZSA2IHJlZ2lzdGVycyBmb3IgdGhpcyBjb2RlIHRoYXQgd2UgZW1p
dC4iKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlKHRoaXMpOworICAgICAgICBKU1ZhbHVl
UmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSk7CisjZWxzZQorICAgICAg
ICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDcsICJXZSB1c2Ug
NyByZWdpc3RlcnMgZm9yIHRoaXMgY29kZSB0aGF0IHdlIGVtaXQuIik7CisgICAgICAgIEdQUlRl
bXBvcmFyeSB2YWx1ZVRhZyh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlUGF5bG9h
ZCh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3ModmFs
dWVUYWcuZ3ByKCksIHZhbHVlUGF5bG9hZC5ncHIoKSk7CisjZW5kaWYKKworICAgICAgICBHUFJS
ZWcgY3VycmVudExlbmd0aEdQUiA9IGN1cnJlbnRMZW5ndGguZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHkuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcnJheUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihhcnJheUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnV0dGVyZmx5R1BSLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2tp
cExvb3AgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGFycmF5TGVuZ3Ro
R1BSLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihh
cnJheUxlbmd0aEdQUiwgY3VycmVudExlbmd0aEdQUik7CisgICAgICAgIG1faml0LmFkZFB0cihJ
bW0zMihzaXplb2YoUmVnaXN0ZXIpICogbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSks
IGFyZ3VtZW50c1N0YXJ0R1BSKTsKKworICAgICAgICBhdXRvIGxvb3AgPSBtX2ppdC5sYWJlbCgp
OworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIGN1cnJlbnRMZW5ndGhHUFIp
OworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoSklUQ29tcGlsZXI6OkJhc2VJbmRleChhcmd1bWVu
dHNTdGFydEdQUiwgY3VycmVudExlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCB2YWx1ZVJlZ3MpOworICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aEludDMy
KQorICAgICAgICAgICAganVtcHNUb0V4aXQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90SW50MzIo
dmFsdWVSZWdzKSk7CisgICAgICAgIGVsc2UgaWYgKGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhE
b3VibGUpIHsKKyAgICAgICAgICAgIGp1bXBzVG9FeGl0LmFwcGVuZChtX2ppdC5icmFuY2hJZklu
dDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAganVtcHNUb0V4aXQuYXBwZW5kKG1faml0LmJy
YW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVSZWdzLmdwcigpLCB2YWx1
ZVJlZ3MuZ3ByKCksIHZhbHVlQXNEb3VibGVGUFJSZWcpOworI2Vsc2UKKyAgICAgICAgICAgIG1f
aml0LnVuYm94RG91YmxlKHZhbHVlUmVncywgdmFsdWVBc0RvdWJsZUZQUlJlZywgc2NyYXRjaEZQ
UlJlZyk7CisjZW5kaWYKKyAgICAgICAgICAgIGp1bXBzVG9FeGl0LmFwcGVuZChtX2ppdC5icmFu
Y2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVl
QXNEb3VibGVGUFJSZWcsIHZhbHVlQXNEb3VibGVGUFJSZWcpKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWp1bXBzVG9FeGl0LmVtcHR5KCkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoKSwgbnVsbHB0ciwganVtcHNUb0V4aXQpOworCisgICAg
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQorICAgICAgICAgICAgbV9q
aXQuc3RvcmVEb3VibGUodmFsdWVBc0RvdWJsZUZQUlJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChidXR0ZXJmbHlHUFIsIGN1cnJlbnRMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faml0LnN0b3JlVmFsdWUodmFs
dWVSZWdzLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgY3VycmVudExl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjdXJyZW50TGVuZ3RoR1BSLCBUcnVzdGVk
SW1tMzIoMCkpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworCisgICAgICAgIHNraXBMb29wLmxpbmso
Jm1faml0KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gIUNQVShYODYpCisKKyAgICBhdXRvIGp1bXBUb0RvbmUgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGFycmF5TGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIo
MCkpOworCiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoYXJndW1lbnRzU3RhcnRHUFIpOwog
ICAgIC8vIEFyZ3VtZW50czogMDpleGVjLCAxOkpTQ2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0
YXJ0LCAzOm51bWJlciBvZiBhcmd1bWVudHMgdG8gc2tpcCwgNDphcnJheSBsZW5ndGgKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvcHlSZXN0LCBhcnJheUdQUiwgYXJndW1lbnRzU3RhcnRH
UFIsIEltbTMyKG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpLCBhcnJheUxlbmd0aEdQ
Uik7CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhhcmd1bWVudHNTdGFydEdQUik7CiAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAotICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIGp1
bXBUb0RvbmUubGluaygmbV9qaXQpOwogCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lv
biAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NjQsMjEgKzM4NjQsNjEgQEAgcHJpdmF0ZToKICAgICB9
CiAKICAgICB2b2lkIGNvbXBpbGVDb3B5UmVzdCgpCi0gICAgeyAgICAgICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBkb0NvcHlSZXN0ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICB7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAgICAg
ICAgTFZhbHVlIGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgIExWYWx1ZSBhcnJheSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAKLSAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoYXJyYXlMZW5ndGgsIG1fb3V0
LmNvbnN0SW50MzIoMCkpLAorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbV9u
b2RlLT5jaGlsZDEoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChpbmRleGluZ1R5cGUg
PT0gQXJyYXlXaXRoQ29udGlndW91cyB8fCBpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoSW50MzIg
fHwgaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aERvdWJsZSkgeworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgTFZhbHVl
IGJ1dHRlcmZseSA9IG1fb3V0LmxvYWRQdHIoYXJyYXksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVy
Zmx5KTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIoYXJyYXlMZW5ndGgsIGJ1dHRlcmZseSwg
bV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHN0YXJ0TGVuZ3RoID0gbV9vdXQuYW5jaG9yKGFycmF5TGVuZ3RoKTsKKyAgICAgICAgICAg
IExWYWx1ZSBhcmd1bWVudFJlZ2lvbiA9IG1fb3V0LmFkZChnZXRBcmd1bWVudHNTdGFydCgpLCBt
X291dC5jb25zdEludDY0KHNpemVvZihSZWdpc3RlcikgKiBtX25vZGUtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChhcnJh
eUxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigwKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGNv
bnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3RhcnQpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsb29wU3RhcnQsIGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgICAgICBMVmFsdWUgcGhpT2Zmc2V0ID0gbV9vdXQucGhpKEludDMyLCBzdGFydExlbmd0
aCk7CisgICAgICAgICAgICBMVmFsdWUgY3VycmVudE9mZnNldCA9IG1fb3V0LnN1YihwaGlPZmZz
ZXQsIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGko
cGhpT2Zmc2V0LCBtX291dC5hbmNob3IoY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgTFZh
bHVlIGxvYWRlZFZhbHVlID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZh
cmlhYmxlcywgYXJndW1lbnRSZWdpb24sIG1fb3V0Lnplcm9FeHRQdHIoY3VycmVudE9mZnNldCkp
KTsKKyAgICAgICAgICAgIGF1dG8gYXBwZW5kRXhpdCA9IFsmXSAoTFZhbHVlIGNvbmRpdGlvbikg
eworICAgICAgICAgICAgICAgIGFwcGVuZE9TUkV4aXQoQmFkVHlwZSwgbm9WYWx1ZSgpLCBudWxs
cHRyLCBjb25kaXRpb24sIG1fb3JpZ2luKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IE91dHB1dDo6U3RvcmVUeXBlIHN0b3JlVHlwZSA9IE91dHB1dDo6U3RvcmU2NDsKKyAgICAgICAg
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoSW50MzIpCisgICAgICAgICAgICAgICAg
YXBwZW5kRXhpdChpc05vdEludDMyKGxvYWRlZFZhbHVlKSk7CisgICAgICAgICAgICBlbHNlIGlm
IChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoRG91YmxlKSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kRXhpdChpc05vdE51bWJlcihsb2FkZWRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGFwcGVu
ZEV4aXQoaXNJbnQzMihsb2FkZWRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVl
ID0gdW5ib3hEb3VibGUobG9hZGVkVmFsdWUpOworICAgICAgICAgICAgICAgIGFwcGVuZEV4aXQo
bV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChsb2FkZWRWYWx1ZSwgbG9hZGVkVmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlRG91YmxlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gaW5k
ZXhpbmdUeXBlID09IEFycmF5V2l0aEludDMyID8gbV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0
aWVzIDoKKyAgICAgICAgICAgICAgICBpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQ29udGlndW91
cyA/IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRleGVk
RG91YmxlUHJvcGVydGllczsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlKGxvYWRlZFZhbHVlLCBt
X291dC5iYXNlSW5kZXgoaGVhcCwgYnV0dGVyZmx5LCBtX291dC56ZXJvRXh0UHRyKGN1cnJlbnRP
ZmZzZXQpKSwgc3RvcmVUeXBlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVh
bChjdXJyZW50T2Zmc2V0LCBtX291dC5jb25zdEludDMyKDApKSwgdW5zdXJlKGNvbnRpbnVhdGlv
biksIHVuc3VyZShsb29wU3RhcnQpKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgTEJhc2ljQmxvY2sgZG9Db3B5UmVzdCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGFycmF5TGVuZ3RoLCBtX291dC5jb25zdEludDMy
KDApKSwKICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoZG9Db3B5UmVz
dCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhkb0NvcHlSZXN0LCBjb250aW51YXRpb24pOwogICAgICAgICAvLyBBcmd1bWVu
dHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIg
b2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkgbGVuZ3RoCiAgICAgICAgIExWYWx1ZSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpKTsKICAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgVm9pZCxtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29weVJlc3QpLCBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIFZvaWQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25Db3B5UmVzdCksIG1fY2FsbEZyYW1lLCBhcnJheSwKICAgICAgICAgICAgIGdldEFyZ3VtZW50
c1N0YXJ0KCksIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCk7CiAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAo=
</data>
<flag name="review"
          id="309389"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285811</attachid>
            <date>2016-08-10 20:26:04 -0700</date>
            <delta_ts>2016-08-11 19:43:39 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>42003</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQzNjQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBzdG9yZSBsb29wIGZvciBDb3B5UmVzdCBpbiBERkcgYW5k
IEZUTCBmb3IgY2VydGFpbiBhcnJheSBtb2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvcmVzdC1wYXJhbWV0ZXItb3NyLWV4aXQuanM6
IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAoYmF6KToKKyAgICAgICAgKHRlc3QxKToKKyAgICAgICAgKG1ha2VUZXN0Mik6
CisgICAgICAgIChmMik6CisgICAgICAgIChmMyk6CisgICAgICAgICh0ZXN0Myk6CisgICAgICAg
IChmMjIpOgorCiAyMDE2LTA4LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgogCiAgICAgICAgIEJhc2VsaW5lIEdldEJ5VmFsIGFuZCBQdXRCeVZhbCBmb3IgY2FjaGUgSUQg
c3R1YnMgbmVlZCB0byBoYW5kbGUgZXhjZXB0aW9ucwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcmVz
dC1wYXJhbWV0ZXItb3NyLWV4aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcmVz
dC1wYXJhbWV0ZXItb3NyLWV4aXQuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9y
ZXN0LXBhcmFtZXRlci1vc3ItZXhpdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBA
CitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJCYWQhIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiBmb28oYSwgYiwg
Li4uYykgeworICAgIHJldHVybiBjOworfQorbm9JbmxpbmUoZm9vKTsKK2Z1bmN0aW9uIGJhcihh
LCBiLCAuLi5jKSB7CisgICAgcmV0dXJuIGM7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlv
biBiYXooYSwgYiwgLi4uYykgeyAvLyBhbGxvdyB0aGlzIHRvIGJlIGlubGluZWQKKyAgICByZXR1
cm4gYzsKK30KKworbm9JbmxpbmUoaXNOYU4pOworCitmdW5jdGlvbiB0ZXN0MShmLCBpdGVycykg
eworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICBsZXQgcmVz
dWx0ID0gZigxMCwgMjAsIDIwLjUsIDIyLjQ1LCAyMy41MCk7CisgICAgICAgIGFzc2VydChyZXN1
bHQubGVuZ3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMjAuNSkKKyAg
ICAgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gMjIuNDUpCisgICAgICAgIGFzc2VydChyZXN1bHRb
Ml0gPT09IDIzLjUwKTsKKyAgICB9CisKKyAgICBsZXQgbyA9IHt9OworICAgIGxldCByZXN1bHQg
PSBmKDEwLCAyMCwgMjAuNCwgbywgMjAuMik7CisgICAgYXNzZXJ0KHJlc3VsdC5sZW5ndGggPT09
IDMpOworICAgIGFzc2VydChyZXN1bHRbMF0gPT09IDIwLjQpCisgICAgYXNzZXJ0KHJlc3VsdFsx
XSA9PT0gbykKKyAgICBhc3NlcnQocmVzdWx0WzJdID09PSAyMC4yKTsKKworICAgIHJlc3VsdCA9
IGYoMTAsIDIwLCAyMC40LCAyMC40NSwgTmFOKTsKKyAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9
PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMjAuNCkKKyAgICBhc3NlcnQocmVzdWx0
WzFdID09PSAyMC40NSkKKyAgICBhc3NlcnQoaXNOYU4ocmVzdWx0WzJdKSk7Cit9Cit0ZXN0MShm
b28sIDEwMDApOwordGVzdDEoYmFyLCAxMDAwMCk7Cit0ZXN0MShiYXosIDEwMDAwKTsKKworZnVu
Y3Rpb24gbWFrZVRlc3QyKCkgeworICAgIHJldHVybiBldmFsKGAke01hdGgucmFuZG9tKCl9Owor
ICAgICAgICA7KGZ1bmN0aW9uIHRlc3QyKGYsIGl0ZXJzKSB7CisgICAgICAgICAgICBsZXQgYSA9
IDEwOworICAgICAgICAgICAgbGV0IGIgPSAyMDsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID09PSBpdGVycyAtIDIp
IHsKKyAgICAgICAgICAgICAgICAgICAgYiA9IHt9OworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaSA9PT0gaXRlcnMgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGIgPSBOYU47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGV0IHIgPSBmKGEsIGIpOworICAgICAg
ICAgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0
KHJbMF0gPT09IGEgfHwgKGlzTmFOKGEpICYmIGlzTmFOKHJbMF0pKSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0KHJbMV0gPT09IGIgfHwgKGlzTmFOKGIpICYmIGlzTmFOKHJbMV0pKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pYCk7Cit9CitmdW5jdGlvbiBmMSguLi5yZXN0KSB7IHJldHVy
biByZXN0OyB9CitmdW5jdGlvbiBmMiguLi5yZXN0KSB7IHJldHVybiByZXN0OyB9CitmdW5jdGlv
biBmMyguLi5yZXN0KSB7IHJldHVybiByZXN0OyB9CittYWtlVGVzdDIoKShmMSwgMTAwMCk7Citt
YWtlVGVzdDIoKShmMiwgMTAwMDApOworbWFrZVRlc3QyKCkoZjMsIDUwMDAwMCk7CisKK2Z1bmN0
aW9uIHRlc3QzKGYsIGl0ZXJzKSB7CisgICAgbGV0IG8gPSB7fTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBmKGksIG8sIDI1KTsKKyAgICAg
ICAgYXNzZXJ0KHIubGVuZ3RoID09PSAyIHx8IHIubGVuZ3RoID09PSAxMDAwMCk7CisgICAgICAg
IGFzc2VydChyWzBdID09PSBvKTsKKyAgICAgICAgYXNzZXJ0KHJbMV0gPT09IDI1KTsKKyAgICAg
ICAgaWYgKHIubGVuZ3RoID09PSAxMDAwMCkKKyAgICAgICAgICAgIGFzc2VydChyWzk5OTldID09
PSAzMCk7CisgICAgfQorfQorCitmdW5jdGlvbiBmMTEoaSwgLi4ucmVzdCkgeworICAgIGlmIChp
ID09PSA5OTkpCisgICAgICAgIHJlc3RbOTk5OV0gPSAzMDsKKyAgICByZXR1cm4gcmVzdDsKK30K
K2Z1bmN0aW9uIGYyMihpLCAuLi5yZXN0KSB7CisgICAgaWYgKGkgPT09IDQ5OTk5KQorICAgICAg
ICByZXN0Wzk5OTldID0gMzA7CisgICAgcmV0dXJuIHJlc3Q7Cit9Cit0ZXN0MyhmMTEsIDEwMDAp
OwordGVzdDMoZjIyLCA1MDAwMCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMjA0MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTA4LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIElubGluZSBzdG9yZSBsb29wIGZvciBDb3B5UmVzdCBp
biBERkcgYW5kIEZUTCBmb3IgY2VydGFpbiBhcnJheSBtb2RlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjEyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29weVJlc3QgdXNlZCB0byBhbHdheXMgY2Fs
bCBvdXQgdG8gQyBjb2RlIHRvIHdyaXRlIHRvIHRoZSByZXN0IGFycmF5LgorICAgICAgICBUaGlz
IHBhdGNoIGNoYW5nZXMgdGhpcyB0byBpbmxpbmUgdGhlIHdyaXRlcyB3aGVuIHdlJ3JlIHdyaXRp
bmcgdG8gYW4KKyAgICAgICAgYXJyYXkgd2l0aCBBcnJheVdpdGhDb250aWd1b3VzIG9yIEFycmF5
V2l0aEludDMyIG9yIEFycmF5V2l0aERvdWJsZQorICAgICAgICBJbmRleGluZ1R5cGUuIFdlIGtu
b3cgdGhlIEluZGV4aW5nVHlwZSBiZWNhdXNlIHRoZSBDb3B5UmVzdCBub2RlJ3MKKyAgICAgICAg
Zmlyc3QgY2hpbGQgaXMgYWx3YXlzIE5ld0FycmF5V2l0aFNpemUuIFRoaXMgbWF5IGJlIGFyb3Vu
ZCBhIDEtMiUKKyAgICAgICAgc3BlZWR1cCBvbiBFUzYgU2FtcGxlQmVuY2guIEl0J3MgYXJvdW5k
IGEgMTAtNDAlIHNwZWVkdXAgZm9yIG1pY3JvCisgICAgICAgIGJlbmNobWFya3MgdGhhdCBhcmUg
dGVzdGluZyByZXN0IHBhcmFtZXRlciBjcmVhdGlvbiBzcGVlZHMuCisKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNvcHlSZXN0KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb3B5UmVz
dCk6CisKIDIwMTYtMDgtMDkgIEdlb3JnZSBSdWFuICA8Z3J1YW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEltcGxlbWVudCBmdW5jdGlvbmFsaXR5IG9mIG1lZGlhIGNhcHR1cmUgb24gaU9TCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29u
CShyZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lIiwgImxlbmd0aCIg
OiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19pbmRleF9zdHJpbmciLCAibGVu
Z3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2Fzc2VydCIsICJsZW5ndGgi
IDogMyB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY29weV9yZXN0IiwgImxlbmd0aCI6
IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9yZXN0IiwgImxlbmd0aCI6
IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9yZXN0X2xlbmd0aCIsICJsZW5n
dGgiOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9zYXZlIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXN1bWUiLCAibGVuZ3RoIiA6IDMgfSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCShyZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIGNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9qbGVzczoKICAgICBjYXNl
IG9wX3NldF9mdW5jdGlvbl9uYW1lOgogICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWw6Ci0gICAgY2FzZSBvcF9jb3B5X3Jlc3Q6IHsKKyAgICAgewogICAgICAgICBBU1NFUlQob3Bj
b2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAyKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKQEAgLTE5MCw2ICsxOTAsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CiAgICAgY2FzZSBvcF9n
ZXRfcGFyZW50X3Njb3BlOgogICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6Cisg
ICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKICAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czog
ewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAyKTsKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKQEAgLTMxOCw3ICszMTksNiBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNv
ZGVPZmZzZXQoQ29kZUJsCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
CiAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5nLgotICAgIGNhc2Ugb3BfY29weV9y
ZXN0OgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgogICAgIGNhc2Ugb3BfZW5kOgogICAgIGNh
c2Ugb3BfdGhyb3c6CkBAIC00NjQsNiArNDY0LDcgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKICAgICBjYXNlIG9wX3Vu
c2lnbmVkOgogICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiAKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9yZXN0OgogICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOiB7CiAgICAgICAgIEFTU0VS
VChvcGNvZGVMZW5ndGhzW29wY29kZUlEXSA+IDEpOwogICAgICAgICBmdW5jdG9yKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDIwNDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzIsMTEgKzgzMiwxMSBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVy
YW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYXJndW1lbnRfY291bnQiLCByMCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NvcHlfcmVzdDogewor
ICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwog
ICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRPZmZzZXQgPSAoKytpdCktPnUudW5zaWduZWRW
YWx1ZTsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImNvcHlfcmVzdCIpOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3Jlc3QiKTsKICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpKTsKICAgICAgICAgICAgIG91dC5wcmludGYoIkFyZ3VtZW50c09mZnNldDogJXUiLCBh
cmd1bWVudE9mZnNldCk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzNSw5ICs0NDM1LDcg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXN0UAogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChyZXN0QXJyYXlMZW5ndGgtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKIAotICAgIGVtaXROZXdBcnJheVdpdGhT
aXplKHJlc3VsdCwgcmVzdEFycmF5TGVuZ3RoLmdldCgpKTsKLQotICAgIGVtaXRPcGNvZGUob3Bf
Y29weV9yZXN0KTsKKyAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9yZXN0KTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQocmVzdWx0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocmVzdEFycmF5TGVuZ3RoLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
bnVtUGFyYW1ldGVyc1RvU2tpcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAy
MDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NjcsNyArMjg2Nyw4IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENoZWNrVHlwZUluZm9G
bGFnczoKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIENvcHlSZXN0OgorICAgIGNhc2UgQ3Jl
YXRlUmVzdDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNBcnJh
eSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVjazogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDIwNDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjk5LDEzICszNjk5LDEyIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9yZXN0X2xlbmd0aCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX2Nv
cHlfcmVzdDogeworICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7CiAgICAgICAgICAgICBu
b3RpY2VBcmd1bWVudHNVc2UoKTsKLSAgICAgICAgICAgIE5vZGUqIGFycmF5ID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAg
ICBOb2RlKiBhcnJheUxlbmd0aCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChDb3B5UmVzdCwgT3BJ
bmZvKGN1cnJlbnRJbnN0cnVjdGlvblszXS51LnVuc2lnbmVkVmFsdWUpLAotICAgICAgICAgICAg
ICAgIGFycmF5LCBhcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb3B5
X3Jlc3QpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENyZWF0ZVJlc3Qs
IE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS51bnNpZ25lZFZhbHVlKSwgYXJyYXlMZW5n
dGgpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9yZXN0KTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIC8vID09PSBCaXR3aXNlIG9wZXJhdGlvbnMgPT09Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKICAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CiAgICAgY2FzZSBvcF9j
YXRjaDoKLSAgICBjYXNlIG9wX2NvcHlfcmVzdDoKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0Ogog
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgogICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlOgogICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA0
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOTcsOSArMTA5NywxMSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYXNlIENvcHlS
ZXN0OiB7CisgICAgY2FzZSBDcmVhdGVSZXN0OiB7CisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBoYXZpbmcgYSBiYWQgdGltZS4KICAgICAgICAgcmVhZChTdGFjayk7Ci0gICAgICAgIHdyaXRl
KEhlYXApOworICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhl
YXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwNDMxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1
LDcgKzI0NSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIEdldFN0YWNrOgogICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKICAgICBjYXNlIFB1dFRv
QXJndW1lbnRzOgotICAgIGNhc2UgQ29weVJlc3Q6CiAgICAgY2FzZSBMb2dTaGFkb3dDaGlja2Vu
UHJvbG9ndWU6CiAgICAgY2FzZSBMb2dTaGFkb3dDaGlja2VuVGFpbDoKICAgICBjYXNlIEdldER5
bmFtaWNWYXI6CkBAIC0yODUsNiArMjg0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgU3RyQ2F0OgogICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKICAg
ICBjYXNlIFN0cmluZ1JlcGxhY2VSZWdFeHA6CisgICAgY2FzZSBDcmVhdGVSZXN0OgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAwLDkgKzE1MDAsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIENvcHlSZXN0OiB7Ci0gICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGNhc2UgQ3Jl
YXRlUmVzdDogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA0MzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMjEsNyArMjMyMSw3IEBA
IHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChvcCgpID09IENvcHlSZXN0IHx8IG9wKCkgPT0gR2V0UmVzdExlbmd0
aCk7CisgICAgICAgIEFTU0VSVChvcCgpID09IENyZWF0ZVJlc3QgfHwgb3AoKSA9PSBHZXRSZXN0
TGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29wSW5mbyk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShy
ZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICAv
KiBSZXN0IFBhcmFtZXRlciAqL1wKICAgICBtYWNybyhHZXRSZXN0TGVuZ3RoLCBOb2RlUmVzdWx0
SW50MzIpIFwKLSAgICBtYWNybyhDb3B5UmVzdCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1h
Y3JvKENyZWF0ZVJlc3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBc
CiAgICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKICAgICBtYWNybyhQ
aGFudG9tTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA0MzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzNiw2ICs4MzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgTmV3QXJyYXk6CiAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAg
Y2FzZSBDcmVhdGVSZXN0OgogICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOiB7CiAgICAgICAg
ICAgICBzZXRQcmVkaWN0aW9uKFNwZWNBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEw
NjMsNyArMTA2NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgotICAgICAgICBj
YXNlIENvcHlSZXN0OgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIwNDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNyArMzQ2
LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3Vu
ZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKLSAgICBjYXNlIENvcHlSZXN0OgorICAgIGNh
c2UgQ3JlYXRlUmVzdDoKICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAgICAgY2FzZSBTdHJpbmdS
ZXBsYWNlUmVnRXhwOgogICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTA4LDggKzQ5MDgs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIGNhc2UgQ29weVJlc3Q6IHsKLSAgICAgICAgY29tcGlsZUNvcHlS
ZXN0KG5vZGUpOworICAgIGNhc2UgQ3JlYXRlUmVzdDogeworICAgICAgICBjb21waWxlQ3JlYXRl
UmVzdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIw
NDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTIsNDkgKzM4NTIsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hh
dmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gyKHRoaXMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNp
emUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNp
emVHUFIsIFRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RI
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoKDEgPDwgMykgPT0gc2l6ZW9m
KEpTVmFsdWUpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BS
LCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3Rv
cmFnZUdQUik7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+
KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNo
MkdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaDJHUFIpOwotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFy
cmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBy
ZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwK
LSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSwKLSAgICAgICAg
ICAgICAgICAgICAgc2l6ZUdQUikpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBjb21waWxl
QWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKGdsb2JhbE9iamVjdCwgcmVzdWx0R1BSLCBzaXplR1BS
LCBub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDg1Miw4ICs0ODEy
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBj
b21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgY2FzZSBDb3B5UmVzdDogewotICAgICAgICBjb21waWxlQ29weVJlc3Qobm9kZSk7Cisg
ICAgY2FzZSBDcmVhdGVSZXN0OiB7CisgICAgICAgIGNvbXBpbGVDcmVhdGVSZXN0KG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTU1MDIsNiArNTQ2Miw1MCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20oCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5l
d0FycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR1BSUmVnIHJlc3Vs
dEdQUiwgR1BSUmVnIHNpemVHUFIsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAg
R1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIAorICAgIEdQUlJlZyBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAg
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVH
UFIsIFRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSkp
OworICAgIAorICAgIEFTU0VSVCgoMSA8PCAzKSA9PSBzaXplb2YoSlNWYWx1ZSkpOworICAgIG1f
aml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3Rl
ZEltbTMyKDMpLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgc2xvd0Nh
c2VzLmFwcGVuZCgKKyAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHJlc3VsdEdQUiwg
c3RvcmFnZUdQUikpOworICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSk7CisgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAg
IAorICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgbV9qaXQu
c3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKKyAgICAKKyAgICBpZiAoaGFzRG91Ymxl
KGluZGV4aW5nVHlwZSkpIHsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0Lm1vdmUo
c2l6ZUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoMkdQUik7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKKyAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
IG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQ
UikubGlua1RvKGxvb3AsICZtX2ppdCk7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
IH0KKyAgICAKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCisgICAgICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQ
UiwKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSksCisgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdp
dGhBcnJheVN0b3JhZ2UpLAorICAgICAgICAgICAgc2l6ZUdQUikpOworfQorCiAjZW5kaWYKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNDMxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NDgyLDMwICs2NDgyLDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVh
dGVDbG9uZWQKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDb3B5UmVzdChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUNyZWF0ZVJlc3QoTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBDb3B5UmVzdCk7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ3JlYXRlUmVzdCk7
CiAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcnJheSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
Ci0gICAgR1BSVGVtcG9yYXJ5IGFyZ3VtZW50c1N0YXJ0KHRoaXMpOwotICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBhcnJheUxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAg
Ly8gRklYTUU6IHg4NiBhcmNoaXRlY3R1cmUuCisKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgYXJyYXlMZW5ndGgodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFy
eSBhcnJheVJlc3VsdCh0aGlzKTsKIAotICAgIEdQUlJlZyBhcnJheUdQUiA9IGFycmF5Lmdwcigp
OwotICAgIEdQUlJlZyBhcmd1bWVudHNTdGFydEdQUiA9IGFyZ3VtZW50c1N0YXJ0LmdwcigpOwog
ICAgIEdQUlJlZyBhcnJheUxlbmd0aEdQUiA9IGFycmF5TGVuZ3RoLmdwcigpOworICAgIEdQUlJl
ZyBhcnJheVJlc3VsdEdQUiA9IGFycmF5UmVzdWx0LmdwcigpOworCisgICAgLy8gRklYTUU6IGRl
YWwgd2l0aCBjcmF6eSBsYXJnZSBzaXplcyBoZXJlIHRoYXQgd291bGQgY2F1c2UgQXJyYXlTdG9y
YWdlIQorICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUobV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJyYXlSZXN1bHRHUFIsIGFy
cmF5TGVuZ3RoR1BSLCBBcnJheVdpdGhDb250aWd1b3VzKTsKIAotICAgIENDYWxsSGVscGVyczo6
SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhcnJheUxl
bmd0aEdQUiwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBHUFJUZW1wb3JhcnkgYXJndW1lbnRzU3Rh
cnQodGhpcyk7CisgICAgR1BSUmVnIGFyZ3VtZW50c1N0YXJ0R1BSID0gYXJndW1lbnRzU3RhcnQu
Z3ByKCk7CiAKICAgICBlbWl0R2V0QXJndW1lbnRTdGFydChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGFyZ3VtZW50c1N0YXJ0R1BSKTsKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhhcmd1bWVu
dHNTdGFydEdQUik7Ci0gICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMsIDE6SlNDZWxsKiBhcnJheSwg
Mjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLCA0OmFycmF5
IGxlbmd0aAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29weVJlc3QsIGFycmF5R1BSLCBh
cmd1bWVudHNTdGFydEdQUiwgSW1tMzIobm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSks
IGFycmF5TGVuZ3RoR1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGFyZ3VtZW50c1N0
YXJ0R1BSKTsKLSAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCi0gICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgR1BSVGVtcG9yYXJ5IGJ1dHRlcmZseSh0aGlzKTsKKyAgICBHUFJUZW1wb3Jh
cnkgY3VycmVudExlbmd0aCh0aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIC8vc3RhdGlj
X2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2LCAiV2UgdXNlIDYgcmVnaXN0
ZXJzIGZvciB0aGlzIGNvZGUgdGhhdCB3ZSBlbWl0LiIpOworICAgIEdQUlRlbXBvcmFyeSB2YWx1
ZSh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncyh2YWx1ZS5n
cHIoKSk7CisjZWxzZQorICAgIC8vc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyA+PSA3LCAiV2UgdXNlIDcgcmVnaXN0ZXJzIGZvciB0aGlzIGNvZGUgdGhhdCB3ZSBlbWl0
LiIpOworICAgIEdQUlRlbXBvcmFyeSB2YWx1ZVRhZyh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkg
dmFsdWVQYXlsb2FkKHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpTVmFsdWVS
ZWdzKHZhbHVlVGFnLmdwcigpLCB2YWx1ZVBheWxvYWQuZ3ByKCkpOworI2VuZGlmCiAKLSAgICBu
b1Jlc3VsdChub2RlKTsKKyAgICBHUFJSZWcgY3VycmVudExlbmd0aEdQUiA9IGN1cnJlbnRMZW5n
dGguZ3ByKCk7CisgICAgR1BSUmVnIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseS5ncHIoKTsKKwor
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJyYXlSZXN1bHRHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgc2tpcExvb3AgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIGFycmF5TGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMCkpOworICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKGFycmF5TGVuZ3RoR1BSLCBjdXJyZW50TGVuZ3RoR1BSKTsKKyAgICBtX2pp
dC5hZGRQdHIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSAqIG5vZGUtPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCkpLCBhcmd1bWVudHNTdGFydEdQUik7CisKKyAgICBhdXRvIGxvb3AgPSBtX2ppdC5s
YWJlbCgpOworICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgY3VycmVudExlbmd0aEdQ
Uik7CisgICAgbV9qaXQubG9hZFZhbHVlKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoYXJndW1lbnRz
U3RhcnRHUFIsIGN1cnJlbnRMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwg
dmFsdWVSZWdzKTsKKyAgICBtX2ppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChidXR0ZXJmbHlHUFIsIGN1cnJlbnRMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0KSk7CisgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBjdXJyZW50TGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMCkpLmxpbmtUbyhsb29wLCAm
bV9qaXQpOworCisgICAgc2tpcExvb3AubGluaygmbV9qaXQpOworICAgIGNlbGxSZXN1bHQoYXJy
YXlSZXN1bHRHUFIsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
UmVzdExlbmd0aChOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjA0MzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NjAs
NiArNzYwLDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUlzVHlwZWRBcnJheVZpZXcoTm9k
ZSopOwogCiAgICAgdm9pZCBlbWl0Q2FsbChOb2RlKik7CisKKyAgICB2b2lkIGNvbXBpbGVBbGxv
Y2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqLCBHUFJSZWcgcmVzdWx0R1BSLCBH
UFJSZWcgc2l6ZUdQUiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSk7CiAgICAgCiAgICAgLy8g
Q2FsbGVkIG9uY2UgYSBub2RlIGhhcyBjb21wbGV0ZWQgY29kZSBnZW5lcmF0aW9uIGJ1dCBwcmlv
ciB0byBzZXR0aW5nCiAgICAgLy8gaXRzIHJlc3VsdCwgdG8gZnJlZSB1cCBpdHMgY2hpbGRyZW4u
IChUaGlzIG11c3QgaGFwcGVuIHByaW9yIHRvIHNldHRpbmcKQEAgLTI0ODcsNyArMjQ4OSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVD
cmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUNvcHlSZXN0KE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVSZXN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVHZXRSZXN0TGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOb3RpZnlXcml0ZShOb2Rl
Kik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDQzMTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNv
bXBpbGUoTm9kZSogCiAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJCeUlkOgogICAgIGNhc2UgUHV0
R2V0dGVyQnlWYWw6CiAgICAgY2FzZSBQdXRTZXR0ZXJCeVZhbDoKLSAgICBjYXNlIENvcHlSZXN0
OgorICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CiAgICAgY2Fz
ZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNDMxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTcyLDggKzk3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRj
aGRvZ1RpbWVyOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrV2F0Y2hkb2dUaW1lcigpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weVJlc3Q6Ci0gICAgICAgICAgICBjb21w
aWxlQ29weVJlc3QoKTsKKyAgICAgICAgY2FzZSBDcmVhdGVSZXN0OgorICAgICAgICAgICAgY29t
cGlsZUNyZWF0ZVJlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldFJl
c3RMZW5ndGg6CiAgICAgICAgICAgICBjb21waWxlR2V0UmVzdExlbmd0aCgpOwpAQCAtMzg2Mywy
NiArMzg2MywzMSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAg
fQogCi0gICAgdm9pZCBjb21waWxlQ29weVJlc3QoKQotICAgIHsgICAgICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgZG9Db3B5UmVzdCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgdm9pZCBj
b21waWxlQ3JlYXRlUmVzdCgpCisgICAgewogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFN0YXJ0ID0g
bV9vdXQubmV3QmxvY2soKTsKIAotICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGggPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGFycmF5ID0gY29tcGlsZUFsbG9j
YXRlQXJyYXlXaXRoU2l6ZShhcnJheUxlbmd0aCwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAKLSAg
ICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoYXJyYXlMZW5ndGgs
IG1fb3V0LmNvbnN0SW50MzIoMCkpLAotICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShkb0NvcHlSZXN0KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkb0NvcHlSZXN0LCBjb250aW51YXRpb24pOwotICAg
ICAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50cyBz
dGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkgbGVuZ3RoCi0gICAg
ICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9u
b2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgdm1DYWxsKAotICAgICAg
ICAgICAgVm9pZCxtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29weVJlc3QpLCBtX2NhbGxGcmFt
ZSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIGdldEFyZ3VtZW50c1N0
YXJ0KCksIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0
LmxvYWRQdHIoYXJyYXksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc3RhcnRMZW5ndGggPSBtX291dC5hbmNob3IoYXJyYXlMZW5ndGgpOworICAg
ICAgICBMVmFsdWUgYXJndW1lbnRSZWdpb24gPSBtX291dC5hZGQoZ2V0QXJndW1lbnRzU3RhcnQo
KSwgbV9vdXQuY29uc3RJbnQ2NChzaXplb2YoUmVnaXN0ZXIpICogbV9ub2RlLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChhcnJh
eUxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigwKSksCisgICAgICAgICAgICB1bnN1cmUoY29udGlu
dWF0aW9uKSwgdW5zdXJlKGxvb3BTdGFydCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcFN0YXJ0LCBjb250aW51YXRpb24pOworICAgICAgICBM
VmFsdWUgcGhpT2Zmc2V0ID0gbV9vdXQucGhpKEludDMyLCBzdGFydExlbmd0aCk7CisgICAgICAg
IExWYWx1ZSBjdXJyZW50T2Zmc2V0ID0gbV9vdXQuc3ViKHBoaU9mZnNldCwgbV9vdXQuaW50MzJP
bmUpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHBoaU9mZnNldCwgbV9vdXQuYW5j
aG9yKGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgTFZhbHVlIGxvYWRlZFZhbHVlID0gbV9vdXQu
bG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgYXJndW1lbnRSZWdpb24s
IG1fb3V0Lnplcm9FeHRQdHIoY3VycmVudE9mZnNldCkpKTsKKyAgICAgICAgSW5kZXhlZEFic3Ry
YWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOworICAg
ICAgICBtX291dC5zdG9yZShsb2FkZWRWYWx1ZSwgbV9vdXQuYmFzZUluZGV4KGhlYXAsIGJ1dHRl
cmZseSwgbV9vdXQuemVyb0V4dFB0cihjdXJyZW50T2Zmc2V0KSksIE91dHB1dDo6U3RvcmU2NCk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChjdXJyZW50T2Zmc2V0LCBtX291dC5j
b25zdEludDMyKDApKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3RhcnQpKTsK
IAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShhcnJheSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlR2V0UmVzdExl
bmd0aCgpCkBAIC00MDI4LDYgKzQwMzMsNzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKHN0cnVjdHVyZSksIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+c3RhcnRD
b25zdGFudCgpKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+bnVtQ29u
c3RhbnRzKCkpKSk7CiAgICAgfQorCisgICAgTFZhbHVlIGNvbXBpbGVBbGxvY2F0ZUFycmF5V2l0
aFNpemUoTFZhbHVlIHB1YmxpY0xlbmd0aCwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKKyAg
ICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgQVNTRVJUKAorICAgICAgICAg
ICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8
fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgfHwgaGFz
RG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBoYXNDb250
aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKworICAgICAgICBMQmFzaWNCbG9j
ayBmYXN0Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhcmdl
Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9v
dXQuYWJvdmVPckVxdWFsKHB1YmxpY0xlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihNSU5fQVJSQVlf
U1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSksCisgICAgICAgICAgICByYXJlbHkobGFyZ2VD
YXNlKSwgdXN1YWxseShmYXN0Q2FzZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oZmFzdENhc2UsIGxhcmdlQ2FzZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSBkb24ndCByb3VuZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4gZm9yIG5ldyBBcnJheShi
bGFoKS4KKyAgICAgICAgTFZhbHVlIHZlY3Rvckxlbmd0aCA9IHB1YmxpY0xlbmd0aDsKKyAgICAg
ICAgCisgICAgICAgIExWYWx1ZSBwYXlsb2FkU2l6ZSA9CisgICAgICAgICAgICBtX291dC5zaGwo
bV9vdXQuemVyb0V4dCh2ZWN0b3JMZW5ndGgsIHBvaW50ZXJUeXBlKCkpLCBtX291dC5jb25zdElu
dFB0cigzKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0
LmFkZCgKKyAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdl
ID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2Up
OworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YihlbmRPZlN0
b3JhZ2UsIHBheWxvYWRTaXplKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBvYmplY3QgPSBh
bGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENhc2UpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihwdWJsaWNMZW5ndGgsIGJ1dHRlcmZseSwg
bV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMih2
ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
KworICAgICAgICBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhpbmRleGluZ1R5cGUsIHZlY3Rvckxl
bmd0aCwgYnV0dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RS
ZXN1bHQgPSBtX291dC5hbmNob3Iob2JqZWN0KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VDYXNlLCBmYWls
Q2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlU3RydWN0dXJlID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmNvbnN0SW50UHRyKAorICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSkpOworICAgICAgICBtX291dC5qdW1wKHNsb3dDYXNlKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBzbG93Q2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhaWxTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoc3RydWN0
dXJlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoc2xvd0Nhc2UpOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBz
dHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIHBvaW50ZXJUeXBlKCksIGxh
cmdlU3RydWN0dXJlLCBmYWlsU3RydWN0dXJlKTsKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRW
YWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0
aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbMl0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0cnVj
dHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCks
IGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVO
ZXdBcnJheVdpdGhTaXplKCkKICAgICB7CkBAIC00MDM4LDcxICs0MTE0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9y
YWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoCi0gICAg
ICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAg
ICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAg
ICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAg
ICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsK
LQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBtX291dC5uZXdCbG9jaygpOwot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5h
Ym92ZU9yRXF1YWwocHVibGljTGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJBWV9TVE9S
QUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSwKLSAgICAgICAgICAgICAgICByYXJlbHkobGFyZ2VD
YXNlKSwgdXN1YWxseShmYXN0Q2FzZSkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBsYXJnZUNhc2UpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBXZSBkb24ndCByb3VuZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4gZm9y
IG5ldyBBcnJheShibGFoKS4KLSAgICAgICAgICAgIExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBwdWJs
aWNMZW5ndGg7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBwYXlsb2FkU2l6ZSA9
Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHQodmVjdG9yTGVuZ3RoLCBw
b2ludGVyVHlwZSgpKSwgbV9vdXQuY29uc3RJbnRQdHIoMykpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKLSAgICAgICAgICAgICAg
ICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2Nh
dGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3ViKGVuZE9mU3Rv
cmFnZSwgcGF5bG9hZFNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgb2Jq
ZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZhaWxD
YXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihwdWJsaWNMZW5n
dGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAg
ICAgIG1fb3V0LnN0b3JlMzIodmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVy
Zmx5X3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRz
KG1fbm9kZS0+aW5kZXhpbmdUeXBlKCksIHZlY3Rvckxlbmd0aCwgYnV0dGVyZmx5KTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihvYmplY3QpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhsYXJnZUNhc2UsIGZhaWxDYXNl
KTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlU3RydWN0dXJlID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmNvbnN0SW50UHRyKAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5
U3RvcmFnZSkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoc2xvd0Nhc2UpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgc2xvd0Nhc2UpOwotICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFpbFN0cnVjdHVyZSA9IG1fb3V0LmFuY2hvcihtX291
dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoc2xvd0Nh
c2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0
LnBoaSgKLSAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgpLCBsYXJnZVN0cnVjdHVyZSwgZmFp
bFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAotICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBs
b2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICAgICAgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7Ci0gICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkocG9pbnRlclR5cGUoKSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShjb21waWxlQWxsb2NhdGVBcnJheVdpdGhTaXpl
KHB1YmxpY0xlbmd0aCwgbV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMjA0MzE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTEsNiArMjExLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBhcmd1bWVudHMoMCkg
d2lsbCBub3QgZmV0Y2ggdGhlICd0aGlzJyB2YWx1ZS4gVG8gZ2V0L3NldCAndGhpcycsCiAgICAg
ICAgIC8vIHVzZSB0aGlzVmFsdWUoKSBhbmQgc2V0VGhpc1ZhbHVlKCkgYmVsb3cuCiAKKyAgICAg
ICAgSlNWYWx1ZSogYWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSBjb25zdCB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSo+KHRoaXMgKyBhcmd1bWVudE9mZnNldCgwKSk7IH0KICAgICAgICAg
SlNWYWx1ZSBhcmd1bWVudChzaXplX3QgYXJndW1lbnQpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChhcmd1bWVudCA+PSBhcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCShyZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfc2NvcGVk
X2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRz
KQogICAgICAgICBERUZJTkVfT1Aob3BfYXJndW1lbnRfY291bnQpCi0gICAgICAgIERFRklORV9P
UChvcF9jb3B5X3Jlc3QpCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfcmVzdCkKICAgICAg
ICAgREVGSU5FX09QKG9wX2dldF9yZXN0X2xlbmd0aCkKICAgICAgICAgREVGSU5FX09QKG9wX2No
ZWNrX3RkeikKICAgICAgICAgREVGSU5FX09QKG9wX2Fzc2VydCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMjA0MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDkzLDcgKzQ5Myw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9hcmd1bWVudF9jb3VudChJbnN0cnVjdGlv
biopOwotICAgICAgICB2b2lkIGVtaXRfb3BfY29weV9yZXN0KEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfcmVzdChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9jaGVja190ZHooSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2Vy
dChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU4LDkgKzE0NTgsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChJbnN0cnVjCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2NvcHlfcmVzdChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Jl
c3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2NvcHlf
cmVzdCk7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9jcmVhdGVfcmVzdCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjA0MzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzYyLDkgKzE3NjIsOSBAQCBfbGxpbnRfb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhbGxPcGNv
ZGVTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKICAgICBkaXNwYXRjaCgzKQog
Ci1fbGxpbnRfb3BfY29weV9yZXN0OgorX2xsaW50X29wX2NyZWF0ZV9yZXN0OgogICAgIHRyYWNl
RXhlY3V0aW9uKCkKLSAgICBjYWxsT3Bjb2RlU2xvd1BhdGgoX3Nsb3dfcGF0aF9jb3B5X3Jlc3Qp
CisgICAgY2FsbE9wY29kZVNsb3dQYXRoKF9zbG93X3BhdGhfY3JlYXRlX3Jlc3QpCiAgICAgZGlz
cGF0Y2goNCkKIAogX2xsaW50X29wX2luc3RhbmNlb2Y6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNDMx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0OCwxOSArODQ4LDEzIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIFJFVFVSTihyZXNvbHZlZFNjb3BlKTsKIH0KIAotU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2NvcHlfcmVzdCkKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9jcmVhdGVfcmVzdCkKIHsKICAgICBCRUdJTigpOwogICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9
IE9QX0MoMikuanNWYWx1ZSgpLmFzVUludDMyKCk7Ci0gICAgaWYgKCFhcnJheVNpemUpIHsKLSAg
ICAgICAgQVNTRVJUKCFqc0Nhc3Q8SlNBcnJheSo+KE9QKDEpLmpzVmFsdWUoKSktPmxlbmd0aCgp
KTsKLSAgICAgICAgRU5EKCk7Ci0gICAgfQotICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpT
QXJyYXkqPihPUCgxKS5qc1ZhbHVlKCkpOwotICAgIEFTU0VSVChhcnJheVNpemUgPT0gYXJyYXkt
Pmxlbmd0aCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IHBj
WzNdLnUudW5zaWduZWRWYWx1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlT
aXplOyBpKyspCi0gICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudChpICsgbnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgUkVUVVJOKGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgZXhlYy0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQo
KSArIG51bVBhcmFtc1RvU2tpcCwgYXJyYXlTaXplKSk7CiAgICAgRU5EKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShy
ZXZpc2lvbiAyMDQzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBAIFNMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfcmVzdW1lKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwogU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9yZXNvbHZlX3Njb3BlKTsKLVNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29w
eV9yZXN0KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3Jlc3QpOwog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWRfd2l0aF90aGlzKTsKIFNM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpOwogU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWRfd2l0aF90aGlzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285882</attachid>
            <date>2016-08-11 19:43:39 -0700</date>
            <delta_ts>2016-08-12 12:26:59 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>53691</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWhhdmluZy1hLWJhZC10aW1lLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWhhdmluZy1hLWJh
ZC10aW1lLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVy
LWhhdmluZy1hLWJhZC10aW1lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKK2Z1
bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkJhZCEiKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAg
ZnVuY3Rpb24gZm9vKC4uLmMpIHsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorICAgIG5vSW5s
aW5lKGZvbyk7CisKKyAgICBsZXQgYXJyID0gWzEsMiwzXTsKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGZvbyguLi5hcnIpOworICAg
ICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChyZXN1bHQu
bGVuZ3RoID09PSBhcnIubGVuZ3RoKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gYXJy
WzBdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gYXJyWzFdKTsKKyAgICAgICAgYXNz
ZXJ0KHJlc3VsdFsyXSA9PT0gYXJyWzJdKTsKKyAgICB9CisKKyAgICBsZXQgY2FsbGVkID0gZmFs
c2U7CisgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICIxMCIsIHsK
KyAgICAgICAgZ2V0KCkgeyByZXR1cm4gMzU7IH0sCisgICAgICAgIHNldCh4KSB7IGNhbGxlZCA9
IHRydWU7IH0KKyAgICB9KTsKKyAgICBsZXQgY2FsbGVkMiA9IGZhbHNlOworICAgIFJlZmxlY3Qu
ZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAiMCIsIHsKKyAgICAgICAgZ2V0OiBmdW5j
dGlvbigpIHsgcHJpbnQoIkluIGdldCEiKTsgcmV0dXJuIDM1OyB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uKHgpIHsgY2FsbGVkMiA9IHRydWU7IH0KKyAgICB9KTsKKworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gZm9vKC4uLmFycik7
CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHJl
c3VsdFswXSA9PT0gYXJyWzBdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMzUpOwor
ICAgICAgICBhc3NlcnQocmVzdWx0WzFdID09PSBhcnJbMV0pOworICAgICAgICBhc3NlcnQocmVz
dWx0WzJdID09PSBhcnJbMl0pOworICAgICAgICByZXN1bHRbMTBdID0gMjU7CisgICAgICAgIGFz
c2VydChyZXN1bHRbMTBdID09PSAzNSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAg
ICBjYWxsZWQgPSBmYWxzZTsKKworICAgICAgICByZXN1bHRbMF0gPSAiZm9vIjsKKyAgICAgICAg
YXNzZXJ0KCFjYWxsZWQyKTsgLy8gQ3JlYXRpbmcgYSByZXN0IHNob3VsZCBkZWZpbmVQcm9wZXJ0
eSwgZW5zdXJpbmcgd2UgZG9uJ3QgY2FsbCB0aGUgc2V0dGVyLgorICAgIH0KKworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gZm9vKC4u
LmFycik7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICAgICAgYXNz
ZXJ0KHJlc3VsdFswXSA9PT0gYXJyWzBdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0g
MzUpOworICAgICAgICBhc3NlcnQocmVzdWx0WzFdID09PSBhcnJbMV0pOworICAgICAgICBhc3Nl
cnQocmVzdWx0WzJdID09PSBhcnJbMl0pOworICAgICAgICByZXN1bHRbMTFdID0gMzU7CisgICAg
ICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAxMik7CisgICAgICAgIHJlc3VsdFsxMF0gPSAy
NTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsxMF0gPT09IDM1KTsKKyAgICAgICAgYXNzZXJ0KGNh
bGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworCisgICAgICAgIHJlc3VsdFswXSA9ICJm
b28iOworICAgICAgICBhc3NlcnQoIWNhbGxlZDIpOyAvLyBDcmVhdGluZyBhIHJlc3Qgc2hvdWxk
IGRlZmluZVByb3BlcnR5LCBlbnN1cmluZyB3ZSBkb24ndCBjYWxsIHRoZSBzZXR0ZXIuCisgICAg
fQorfQordGVzdDEoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLW1hbnkt
YXJndW1lbnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVy
LW1hbnktYXJndW1lbnRzLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3Jlc3Qt
cGFyYW1ldGVyLW1hbnktYXJndW1lbnRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkg
QEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkJhZCEiKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IGNhbGxlZEdldCA9IGZh
bHNlOworbGV0IGRlZmluZWRBY2Nlc3NvciA9IGZhbHNlOworZnVuY3Rpb24gdGVzdCgpIHsKKyAg
ICBmdW5jdGlvbiBmb28oLi4ucmVzdCkgeworICAgICAgICByZXR1cm4gcmVzdDsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykg
eworICAgICAgICBjb25zdCBzaXplID0gODAwOworICAgICAgICBsZXQgYXJyID0gbmV3IEFycmF5
KHNpemUpOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAg
ICAgIGFycltpXSA9IGk7CisgICAgICAgIGxldCByZXN1bHQgPSBmb28oLi4uYXJyKTsKKworICAg
ICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gYXJyLmxlbmd0aCk7CisgICAgICAgIGFzc2Vy
dChyZXN1bHQubGVuZ3RoID09PSBzaXplKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBh
cnIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGFzc2VydChhcnJbaV0gPT09IHJlc3VsdFtp
XSk7CisgICAgICAgICAgICBhc3NlcnQocmVzdWx0W2ldID09PSBpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoZGVmaW5lZEFjY2Vzc29yKSB7CisgICAgICAgICAgICBjYWxsZWRHZXQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHJlc3VsdFswXTsKKyAgICAgICAgICAgIGFzc2VydCghY2FsbGVkR2V0
KTsKKyAgICAgICAgICAgIGFyclswXTsKKyAgICAgICAgICAgIGFzc2VydChjYWxsZWRHZXQpOwor
CisgICAgICAgICAgICBsZXQgdGVzdEFyciA9IFsuLi5hcnJdOworICAgICAgICAgICAgY2FsbGVk
R2V0ID0gZmFsc2U7CisgICAgICAgICAgICB0ZXN0QXJyWzBdOworICAgICAgICAgICAgYXNzZXJ0
KCFjYWxsZWRHZXQpOworICAgICAgICB9CisgICAgfQorfQordGVzdCgpOworCitkZWZpbmVkQWNj
ZXNzb3IgPSB0cnVlOworUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICIw
IiwgeworICAgIGdldCgpIHsgY2FsbGVkR2V0ID0gdHJ1ZTsgcmV0dXJuIDA7IH0sCisgICAgc2V0
KHgpIHsgIH0KK30pOwordGVzdCgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0
ZXItb3NyLWV4aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0
ZXItb3NyLWV4aXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcmVzdC1wYXJh
bWV0ZXItb3NyLWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorZnVuY3Rp
b24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFk
ISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gZm9vKGEsIGIsIC4uLmMpIHsK
KyAgICByZXR1cm4gYzsKK30KK25vSW5saW5lKGZvbyk7CitmdW5jdGlvbiBiYXIoYSwgYiwgLi4u
YykgeworICAgIHJldHVybiBjOworfQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gYmF6KGEs
IGIsIC4uLmMpIHsgLy8gYWxsb3cgdGhpcyB0byBiZSBpbmxpbmVkCisgICAgcmV0dXJuIGM7Cit9
CisKK25vSW5saW5lKGlzTmFOKTsKKworZnVuY3Rpb24gdGVzdDEoZiwgaXRlcnMpIHsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGYo
MTAsIDIwLCAyMC41LCAyMi40NSwgMjMuNTApOworICAgICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0
aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChyZXN1bHRbMF0gPT09IDIwLjUpCisgICAgICAgIGFz
c2VydChyZXN1bHRbMV0gPT09IDIyLjQ1KQorICAgICAgICBhc3NlcnQocmVzdWx0WzJdID09PSAy
My41MCk7CisgICAgfQorCisgICAgbGV0IG8gPSB7fTsKKyAgICBsZXQgcmVzdWx0ID0gZigxMCwg
MjAsIDIwLjQsIG8sIDIwLjIpOworICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAg
ICBhc3NlcnQocmVzdWx0WzBdID09PSAyMC40KQorICAgIGFzc2VydChyZXN1bHRbMV0gPT09IG8p
CisgICAgYXNzZXJ0KHJlc3VsdFsyXSA9PT0gMjAuMik7CisKKyAgICByZXN1bHQgPSBmKDEwLCAy
MCwgMjAuNCwgMjAuNDUsIE5hTik7CisgICAgYXNzZXJ0KHJlc3VsdC5sZW5ndGggPT09IDMpOwor
ICAgIGFzc2VydChyZXN1bHRbMF0gPT09IDIwLjQpCisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0g
MjAuNDUpCisgICAgYXNzZXJ0KGlzTmFOKHJlc3VsdFsyXSkpOworfQordGVzdDEoZm9vLCAxMDAw
KTsKK3Rlc3QxKGJhciwgMTAwMDApOwordGVzdDEoYmF6LCAxMDAwMCk7CisKK2Z1bmN0aW9uIG1h
a2VUZXN0MigpIHsKKyAgICByZXR1cm4gZXZhbChgJHtNYXRoLnJhbmRvbSgpfTsKKyAgICAgICAg
OyhmdW5jdGlvbiB0ZXN0MihmLCBpdGVycykgeworICAgICAgICAgICAgbGV0IGEgPSAxMDsKKyAg
ICAgICAgICAgIGxldCBiID0gMjA7CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0
ZXJzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PT0gaXRlcnMgLSAyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGIgPSB7fTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09
IGl0ZXJzIC0gMSkgeworICAgICAgICAgICAgICAgICAgICBiID0gTmFOOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGxldCByID0gZihhLCBiKTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQoci5sZW5ndGggPT09IDIpOworICAgICAgICAgICAgICAgIGFzc2VydChyWzBdID09
PSBhIHx8IChpc05hTihhKSAmJiBpc05hTihyWzBdKSkpOworICAgICAgICAgICAgICAgIGFzc2Vy
dChyWzFdID09PSBiIHx8IChpc05hTihiKSAmJiBpc05hTihyWzFdKSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9KWApOworfQorZnVuY3Rpb24gZjEoLi4ucmVzdCkgeyByZXR1cm4gcmVzdDsg
fQorZnVuY3Rpb24gZjIoLi4ucmVzdCkgeyByZXR1cm4gcmVzdDsgfQorZnVuY3Rpb24gZjMoLi4u
cmVzdCkgeyByZXR1cm4gcmVzdDsgfQorbWFrZVRlc3QyKCkoZjEsIDEwMDApOworbWFrZVRlc3Qy
KCkoZjIsIDEwMDAwKTsKK21ha2VUZXN0MigpKGYzLCA1MDAwMDApOworCitmdW5jdGlvbiB0ZXN0
MyhmLCBpdGVycykgeworICAgIGxldCBvID0ge307CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBp
dGVyczsgaSsrKSB7CisgICAgICAgIGxldCByID0gZihpLCBvLCAyNSk7CisgICAgICAgIGFzc2Vy
dChyLmxlbmd0aCA9PT0gMiB8fCByLmxlbmd0aCA9PT0gMTAwMDApOworICAgICAgICBhc3NlcnQo
clswXSA9PT0gbyk7CisgICAgICAgIGFzc2VydChyWzFdID09PSAyNSk7CisgICAgICAgIGlmIChy
Lmxlbmd0aCA9PT0gMTAwMDApCisgICAgICAgICAgICBhc3NlcnQocls5OTk5XSA9PT0gMzApOwor
ICAgIH0KK30KKworZnVuY3Rpb24gZjExKGksIC4uLnJlc3QpIHsKKyAgICBpZiAoaSA9PT0gOTk5
KQorICAgICAgICByZXN0Wzk5OTldID0gMzA7CisgICAgcmV0dXJuIHJlc3Q7Cit9CitmdW5jdGlv
biBmMjIoaSwgLi4ucmVzdCkgeworICAgIGlmIChpID09PSA0OTk5OSkKKyAgICAgICAgcmVzdFs5
OTk5XSA9IDMwOworICAgIHJldHVybiByZXN0OworfQordGVzdDMoZjExLCAxMDAwKTsKK3Rlc3Qz
KGYyMiwgNTAwMDApOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5qc29uCShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw3ICsxNDEsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90
b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2Fzc2VydCIsICJsZW5ndGgiIDogMyB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Y29weV9yZXN0IiwgImxlbmd0aCI6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2Ny
ZWF0ZV9yZXN0IiwgImxlbmd0aCI6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dl
dF9yZXN0X2xlbmd0aCIsICJsZW5ndGgiOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9zYXZlIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXN1
bWUiLCAibGVuZ3RoIiA6IDMgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAt
OTEsNyArOTEsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2Fz
ZSBvcF9qbGVzczoKICAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgogICAgIGNhc2Ugb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWw6Ci0gICAgY2FzZSBvcF9jb3B5X3Jlc3Q6IHsKKyAgICAg
ewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAyKTsKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKQEAgLTE5MCw2ICsxOTAsNyBAQCB2b2lk
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmM6CiAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgogICAgIGNhc2Ugb3BfY3JlYXRl
X3Njb3BlZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKICAgICBjYXNlIG9w
X2dldF9mcm9tX2FyZ3VtZW50czogewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNv
ZGVJRF0gPiAyKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKQEAgLTMxOCw3ICszMTksNiBAQCB2b2lk
IGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5n
LgotICAgIGNhc2Ugb3BfY29weV9yZXN0OgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgogICAg
IGNhc2Ugb3BfZW5kOgogICAgIGNhc2Ugb3BfdGhyb3c6CkBAIC00NjQsNiArNDY0LDcgQEAgdm9p
ZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfZGVsX2J5
X3ZhbDoKICAgICBjYXNlIG9wX3Vuc2lnbmVkOgogICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1l
bnRzOiAKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgogICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVu
Z3RoOiB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVMZW5ndGhzW29wY29kZUlEXSA+IDEpOwogICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzIsMTEgKzgzMiwx
MSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYXJndW1l
bnRfY291bnQiLCByMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2NvcHlfcmVzdDogeworICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7CiAgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRPZmZzZXQg
PSAoKytpdCktPnUudW5zaWduZWRWYWx1ZTsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvcHlfcmVzdCIpOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3Jlc3QiKTsK
ICAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKICAgICAgICAgICAgIG91dC5wcmludGYoIkFy
Z3VtZW50c09mZnNldDogJXUiLCBhcmd1bWVudE9mZnNldCk7CiAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQzNSw5ICs0NDM1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZXN0UAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXN0QXJyYXlMZW5ndGgtPmluZGV4
KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKIAot
ICAgIGVtaXROZXdBcnJheVdpdGhTaXplKHJlc3VsdCwgcmVzdEFycmF5TGVuZ3RoLmdldCgpKTsK
LQotICAgIGVtaXRPcGNvZGUob3BfY29weV9yZXN0KTsKKyAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0
ZV9yZXN0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzdWx0LT5pbmRleCgpKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzdEFycmF5TGVuZ3RoLT5pbmRleCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobnVtUGFyYW1ldGVyc1RvU2tpcCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NjEs
NyArMjg2MSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgY2FzZSBDaGVja1R5cGVJbmZvRmxhZ3M6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBD
b3B5UmVzdDoKKyAgICBjYXNlIENyZWF0ZVJlc3Q6CisgICAgICAgIGlmICghbV9ncmFwaC5pc1dh
dGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSAvLyBUaGlzIG1lYW5zIHdlJ3Jl
IGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUobV9ncmFwaCwgU3BlY0FycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICBjYXNlIENoZWNrOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA0Mzc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3MzQsMTMgKzM3MzQsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Jlc3RfbGVuZ3RoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGNhc2Ugb3BfY29weV9yZXN0OiB7CisgICAgICAgIGNhc2Ugb3BfY3Jl
YXRlX3Jlc3Q6IHsKICAgICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOwotICAgICAgICAg
ICAgTm9kZSogYXJyYXkgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGUqIGFycmF5TGVuZ3RoID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAg
ICBhZGRUb0dyYXBoKENvcHlSZXN0LCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzNdLnUudW5z
aWduZWRWYWx1ZSksCi0gICAgICAgICAgICAgICAgYXJyYXksIGFycmF5TGVuZ3RoKTsKLSAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvcHlfcmVzdCk7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAorICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ3JlYXRlUmVzdCwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
LnVuc2lnbmVkVmFsdWUpLCBhcnJheUxlbmd0aCkpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY3JlYXRlX3Jlc3QpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgLy8gPT09
IEJpdHdpc2Ugb3BlcmF0aW9ucyA9PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikK
ICAgICAgICAgLCBtX3Jlc3VsdEdQUihyZXN1bHRHUFIpCiAgICAgICAgICwgbV9jb250aWd1b3Vz
U3RydWN0dXJlKGNvbnRpZ3VvdXNTdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9hcnJheVN0b3JhZ2VT
dHJ1Y3R1cmUoYXJyYXlTdG9yYWdlU3RydWN0dXJlKQorICAgICAgICAsIG1fYXJyYXlTdG9yYWdl
U3RydWN0dXJlT3JDb250aWd1b3VzKGFycmF5U3RvcmFnZVN0cnVjdHVyZSkKICAgICAgICAgLCBt
X3NpemVHUFIoc2l6ZUdQUikKICAgICB7CiAgICAgICAgIGppdC0+c2lsZW50U3BpbGxBbGxSZWdp
c3RlcnNJbXBsKGZhbHNlLCBtX3BsYW5zLCByZXN1bHRHUFIpOwpAQCAtOTcsMTIgKzk3LDE1IEBA
IHByb3RlY3RlZDoKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbnMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsKG1fcGxhbnNbaV0pOwogICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihtX3NpemVHUFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBq
aXQtPm1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG1fc2l6ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJV
Q1RJT05fTEVOR1RIKSk7Ci0gICAgICAgIGppdC0+bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmUpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IGppdC0+bV9qaXQuanVtcCgpOwotICAgICAg
ICBiaWdMZW5ndGgubGluaygmaml0LT5tX2ppdCk7Ci0gICAgICAgIGppdC0+bV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2FycmF5U3RvcmFnZVN0cnVjdHVyZSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICBkb25lLmxpbmsoJmppdC0+bV9qaXQpOworICAgICAgICBpZiAo
bV9jb250aWd1b3VzU3RydWN0dXJlICE9IG1fYXJyYXlTdG9yYWdlU3RydWN0dXJlT3JDb250aWd1
b3VzKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBqaXQt
Pm1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG1fc2l6ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJ
T05fTEVOR1RIKSk7CisgICAgICAgICAgICBqaXQtPm1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9jb250aWd1b3VzU3RydWN0dXJlKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gaml0LT5tX2ppdC5qdW1wKCk7Cisg
ICAgICAgICAgICBiaWdMZW5ndGgubGluaygmaml0LT5tX2ppdCk7CisgICAgICAgICAgICBqaXQt
Pm1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9hcnJheVN0b3JhZ2VT
dHJ1Y3R1cmVPckNvbnRpZ3VvdXMpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGRvbmUubGlu
aygmaml0LT5tX2ppdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaml0LT5tX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1fY29udGlndW91c1N0cnVjdHVyZSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24obV9mdW5jdGlvbiwgbV9y
ZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIG1fc2l6ZUdQUik7CiAgICAgICAgIEdQUlJlZyBjYW5UcmFt
cGxlID0gU3BlY3VsYXRpdmVKSVQ6OnBpY2tDYW5UcmFtcGxlKG1fcmVzdWx0R1BSKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9wbGFucy5zaXplKCk7IGktLTspCkBAIC0xMTUsNyArMTE4
LDcgQEAgcHJpdmF0ZToKICAgICBQX0pJVE9wZXJhdGlvbl9FU3RaIG1fZnVuY3Rpb247CiAgICAg
R1BSUmVnIG1fcmVzdWx0R1BSOwogICAgIFN0cnVjdHVyZSogbV9jb250aWd1b3VzU3RydWN0dXJl
OwotICAgIFN0cnVjdHVyZSogbV9hcnJheVN0b3JhZ2VTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJl
KiBtX2FycmF5U3RvcmFnZVN0cnVjdHVyZU9yQ29udGlndW91czsKICAgICBHUFJSZWcgbV9zaXpl
R1BSOwogICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuLCAyPiBtX3BsYW5zOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIENhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2Fs
X2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKICAgICBjYXNlIG9w
X2NhdGNoOgotICAgIGNhc2Ugb3BfY29weV9yZXN0OgorICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6
CiAgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CiAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2No
aWNrZW5fcHJvbG9ndWU6CiAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAy
MDQzNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA5Nyw5ICsxMDk3LDE2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgQ29w
eVJlc3Q6IHsKKyAgICBjYXNlIENyZWF0ZVJlc3Q6IHsKKyAgICAgICAgaWYgKCFncmFwaC5pc1dh
dGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgICAgICAvLyBU
aGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBy
ZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgICAgIHJlYWQoU3RhY2spOwotICAgICAgICB3cml0ZShIZWFwKTsK
KyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2JqZWN0
Q291bnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUs
NiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRT
dGFjazoKICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6CiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50
czoKLSAgICBjYXNlIENvcHlSZXN0OgogICAgIGNhc2UgTG9nU2hhZG93Q2hpY2tlblByb2xvZ3Vl
OgogICAgIGNhc2UgTG9nU2hhZG93Q2hpY2tlblRhaWw6CiAgICAgY2FzZSBHZXREeW5hbWljVmFy
OgpAQCAtMjg1LDYgKzI4NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIFN0ckNhdDoKICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAgICAgY2FzZSBT
dHJpbmdSZXBsYWNlUmVnRXhwOgorICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA0Mzc5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwMCw5ICsxNTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBDb3B5UmVzdDogewotICAgICAgICAgICAgZml4
RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBjYXNlIENyZWF0ZVJlc3Q6
IHsKKyAgICAgICAgICAgIHdhdGNoSGF2aW5nQUJhZFRpbWUobm9kZSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtNjU2LDYgKzY1NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGRvVG9D
aGlsZHJlbihub2RlLCBbJl0gKEVkZ2UgZWRnZSkgeyByZXN1bHQgfD0gZWRnZSA9PSBjaGlsZDsg
fSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgYm9vbCBpc1dhdGNoaW5n
SGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgICAgIHJldHVybiB3YXRjaHBvaW50cygpLmlzV2F0Y2hlZChnbG9iYWxP
YmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsKKyAgICB9CiAgICAgCiAgICAgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxh
dGlvbi5nZXQoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHJldmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzIxLDcgKzIzMjEsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpCiAgICAgewotICAgICAgICBBU1NFUlQob3Ao
KSA9PSBDb3B5UmVzdCB8fCBvcCgpID09IEdldFJlc3RMZW5ndGgpOworICAgICAgICBBU1NFUlQo
b3AoKSA9PSBDcmVhdGVSZXN0IHx8IG9wKCkgPT0gR2V0UmVzdExlbmd0aCk7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcEluZm8pOwogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA0Mzc5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTEsNyArMjkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgLyogUmVzdCBQYXJhbWV0ZXIgKi9c
CiAgICAgbWFjcm8oR2V0UmVzdExlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8o
Q29weVJlc3QsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDcmVhdGVSZXN0LCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIFN1cHBvcnQgZm9y
IGFsbG9jYXRpb24gc2lua2luZy4gKi9cCiAgICAgbWFjcm8oUGhhbnRvbU5ld09iamVjdCwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAyLDE3ICsxMTAyLDE2IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVD
bG8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29weVJlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFycmF5QXNDZWxsLCBSZWdpc3Rlciog
YXJndW1lbnRTdGFydCwgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbXNUb1NraXAsIHVuc2lnbmVkIGFy
cmF5U2l6ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVSZXN0KEV4ZWNT
dGF0ZSogZXhlYywgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mUGFy
YW1zVG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNpemUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKLSAgICBB
U1NFUlQoYXJyYXlTaXplKTsKLSAgICBKU0FycmF5KiBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4o
YXJyYXlBc0NlbGwpOwotICAgIEFTU0VSVChhcnJheVNpemUgPT0gYXJyYXktPmxlbmd0aCgpKTsK
LSAgICBhcnJheS0+c2V0TGVuZ3RoKGV4ZWMsIGFycmF5U2l6ZSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKQotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwgYXJndW1lbnRTdGFydFtpICsgbnVtYmVyT2ZQYXJhbXNUb1NraXBdLmpzVmFs
dWUoKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENv
bnRpZ3VvdXMpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2Yo
SlNWYWx1ZSksICJUaGlzIGlzIGEgc3Ryb25nIGFzc3VtcHRpb24gaGVyZS4iKTsKKyAgICBKU1Zh
bHVlKiBhcmd1bWVudHNUb0NvcHlSZWdpb24gPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KGFyZ3Vt
ZW50U3RhcnQpICsgbnVtYmVyT2ZQYXJhbXNUb1NraXA7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFy
cmF5KGV4ZWMsIHN0cnVjdHVyZSwgYXJndW1lbnRzVG9Db3B5UmVnaW9uLCBhcnJheVNpemUpOwog
fQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZURpcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVNj
b3BlZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRT
dGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgSlNMZXhpY2FsRW52aXJv
bm1lbnQqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSosIEpTRnVuY3Rpb24q
LCBpbnQzMl90IGFyZ3VtZW50Q291bnQpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUNsb25lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3Rlciog
YXJndW1lbnRTdGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSk7Ci12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29weVJlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUmVn
aXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mUGFyYW1zVG9Ta2lwLCB1bnNp
Z25lZCBhcnJheVNpemUpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJl
c3QoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNpemUpOwogZG91YmxlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjA0Mzc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw2ICs4MzYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgICAgIGNh
c2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAgY2FzZSBDcmVhdGVSZXN0OgogICAgICAgICBj
YXNlIE5ld0FycmF5QnVmZmVyOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNBcnJh
eSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNjMsNyArMTA2NCw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIENvcHlSZXN0OgogICAgICAgICBjYXNl
IFB1dER5bmFtaWNWYXI6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9u
IDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNyArMzQ2LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKLSAgICBjYXNlIENvcHlSZXN0OgorICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICBjYXNlIFN0
cmluZ1JlcGxhY2U6CiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhwOgogICAgIGNhc2UgR2V0
UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDQzNzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OTA4LDggKzQ5MDgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgQ29w
eVJlc3Q6IHsKLSAgICAgICAgY29tcGlsZUNvcHlSZXN0KG5vZGUpOworICAgIGNhc2UgQ3JlYXRl
UmVzdDogeworICAgICAgICBjb21waWxlQ3JlYXRlUmVzdChub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTIs
NDkgKzM4NTIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFy
cmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c3RvcmFnZSh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwot
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgICAgICAgICAgCiAg
ICAgICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VH
UFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3By
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihNSU5fQVJS
QVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBBU1NFUlQoKDEgPDwgMykgPT0gc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgICAgIG1f
aml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5sc2hpZnQz
MihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0
QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAg
ICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7Ci0gICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2Vz
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0
aCgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5k
ZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgc2NyYXRjaDJHUFIpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2Ny
YXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUiku
bGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6
ZVNsb3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAg
ICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZUdQUikpOwotICAg
ICAgICAgICAgCisgICAgICAgICAgICBjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKGds
b2JhbE9iamVjdCwgcmVzdWx0R1BSLCBzaXplR1BSLCBub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtNDg1Miw4ICs0ODEyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBDb3B5UmVzdDogewotICAg
ICAgICBjb21waWxlQ29weVJlc3Qobm9kZSk7CisgICAgY2FzZSBDcmVhdGVSZXN0OiB7CisgICAg
ICAgIGNvbXBpbGVDcmVhdGVSZXN0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTU1MDIsNiArNTQ2Miw1MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5k
b20oCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNpemVHUFIsIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUsIGJvb2wgc2hvdWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlT
dG9yYWdlKQoreworICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAg
ICAKKyAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgaWYgKHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSkKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9O
X0xFTkdUSCkpKTsKKyAgICAKKyAgICBBU1NFUlQoKDEgPDwgMykgPT0gc2l6ZW9mKEpTVmFsdWUp
KTsKKyAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOworICAgIG1faml0LmxzaGlm
dDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7CisgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoCisgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShy
ZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKKyAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3Rv
cmFnZUdQUik7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpOwor
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nh
c2VzKTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgCisgICAgaWYg
KGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBt
X2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2Ny
YXRjaDJHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0Lmxh
YmVsKCk7CisgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIp
OworICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSk7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
c2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgICAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+
KAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
LCByZXN1bHRHUFIsCisgICAgICAgICAgICBzdHJ1Y3R1cmUsCisgICAgICAgICAgICBzaG91bGRD
b252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UgPyBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2Up
IDogc3RydWN0dXJlLAorICAgICAgICAgICAgc2l6ZUdQUikpOworfQorCiAjZW5kaWYKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NDgyLDMwICs2NDgyLDc5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVD
bG9uZWQKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDb3B5UmVzdChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNyZWF0ZVJlc3QoTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBDb3B5UmVzdCk7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ3JlYXRlUmVzdCk7CiAK
LSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcnJheSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisj
aWYgIUNQVShYODYpCisgICAgLy8gRklYTUU6IHg4NiBhcmNoaXRlY3R1cmUuCisgICAgaWYgKG1f
aml0LmdyYXBoKCkuaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkgewor
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJyYXlMZW5ndGgodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgYXJyYXlSZXN1bHQodGhpcyk7CisK
KyAgICAgICAgR1BSUmVnIGFycmF5TGVuZ3RoR1BSID0gYXJyYXlMZW5ndGguZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBhcnJheVJlc3VsdEdQUiA9IGFycmF5UmVzdWx0LmdwcigpOworCisgICAgICAg
IC8vIEZJWE1FOiBkZWFsIHdpdGggY3JhenkgbGFyZ2Ugc2l6ZXMgaGVyZSB0aGF0IHdvdWxkIGNh
dXNlIEFycmF5U3RvcmFnZSEKKyAgICAgICAgYm9vbCBzaG91bGRBbGxvd0ZvckFycmF5U3RvcmFn
ZVN0cnVjdHVyZUZvckxhcmdlQXJyYXlzID0gZmFsc2UKKyAgICAgICAgY29tcGlsZUFsbG9jYXRl
TmV3QXJyYXlXaXRoU2l6ZShtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpLCBhcnJheVJlc3VsdEdQUiwgYXJyYXlMZW5ndGhHUFIsIEFycmF5V2l0aENv
bnRpZ3VvdXMsIHNob3VsZEFsbG93Rm9yQXJyYXlTdG9yYWdlU3RydWN0dXJlRm9yTGFyZ2VBcnJh
eXMpOworCisgICAgICAgIEdQUlRlbXBvcmFyeSBhcmd1bWVudHNTdGFydCh0aGlzKTsKKyAgICAg
ICAgR1BSUmVnIGFyZ3VtZW50c1N0YXJ0R1BSID0gYXJndW1lbnRzU3RhcnQuZ3ByKCk7CisKKyAg
ICAgICAgZW1pdEdldEFyZ3VtZW50U3RhcnQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBhcmd1bWVu
dHNTdGFydEdQUik7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1dHRlcmZseSh0aGlzKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IGN1cnJlbnRMZW5ndGgodGhpcyk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgLy9zdGF0aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49
IDYsICJXZSB1c2UgNiByZWdpc3RlcnMgZm9yIHRoaXMgY29kZSB0aGF0IHdlIGVtaXQuIik7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzID0gSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgLy9zdGF0
aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDcsICJXZSB1c2UgNyByZWdp
c3RlcnMgZm9yIHRoaXMgY29kZSB0aGF0IHdlIGVtaXQuIik7CisgICAgICAgIEdQUlRlbXBvcmFy
eSB2YWx1ZVRhZyh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlUGF5bG9hZCh0aGlz
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3ModmFsdWVUYWcu
Z3ByKCksIHZhbHVlUGF5bG9hZC5ncHIoKSk7CisjZW5kaWYKKworICAgICAgICBHUFJSZWcgY3Vy
cmVudExlbmd0aEdQUiA9IGN1cnJlbnRMZW5ndGguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidXR0
ZXJmbHlHUFIgPSBidXR0ZXJmbHkuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhhcnJheVJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2tp
cExvb3AgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGFycmF5TGVuZ3Ro
R1BSLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihh
cnJheUxlbmd0aEdQUiwgY3VycmVudExlbmd0aEdQUik7CisgICAgICAgIG1faml0LmFkZFB0cihJ
bW0zMihzaXplb2YoUmVnaXN0ZXIpICogbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSks
IGFyZ3VtZW50c1N0YXJ0R1BSKTsKKworICAgICAgICBhdXRvIGxvb3AgPSBtX2ppdC5sYWJlbCgp
OworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIGN1cnJlbnRMZW5ndGhHUFIp
OworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoSklUQ29tcGlsZXI6OkJhc2VJbmRleChhcmd1bWVu
dHNTdGFydEdQUiwgY3VycmVudExlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCB2YWx1ZVJlZ3MpOworICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChidXR0ZXJmbHlHUFIsIGN1cnJlbnRMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgY3VycmVudExlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDApKS5saW5r
VG8obG9vcCwgJm1faml0KTsKKworICAgICAgICBza2lwTG9vcC5saW5rKCZtX2ppdCk7CisgICAg
ICAgIGNlbGxSZXN1bHQoYXJyYXlSZXN1bHRHUFIsIG5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmIC8vICFDUFUoWDg2KQorCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIGFycmF5TGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkg
YXJndW1lbnRzU3RhcnQodGhpcyk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFy
cmF5TGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJUZW1wb3JhcnkgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAodGhpcyk7CiAKLSAgICBHUFJSZWcgYXJyYXlHUFIgPSBhcnJheS5n
cHIoKTsKLSAgICBHUFJSZWcgYXJndW1lbnRzU3RhcnRHUFIgPSBhcmd1bWVudHNTdGFydC5ncHIo
KTsKICAgICBHUFJSZWcgYXJyYXlMZW5ndGhHUFIgPSBhcnJheUxlbmd0aC5ncHIoKTsKLQotICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBhcnJheUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBHUFJSZWcgYXJn
dW1lbnRzU3RhcnRHUFIgPSBhcmd1bWVudHNTdGFydC5ncHIoKTsKIAogICAgIGVtaXRHZXRBcmd1
bWVudFN0YXJ0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYXJndW1lbnRzU3RhcnRHUFIpOwotICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGFyZ3VtZW50c1N0YXJ0R1BSKTsKLSAgICAvLyBBcmd1
bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpudW1i
ZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkgbGVuZ3RoCi0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db3B5UmVzdCwgYXJyYXlHUFIsIGFyZ3VtZW50c1N0YXJ0R1BSLCBJbW0zMihu
b2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSwgYXJyYXlMZW5ndGhHUFIpOwotICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoYXJndW1lbnRzU3RhcnRHUFIpOwotICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CiAKLSAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBmbHVzaFJlZ2lzdGVy
cygpOwogCi0gICAgbm9SZXN1bHQobm9kZSk7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVz
dWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVSZXN0LCByZXN1bHRHUFIsIGFyZ3VtZW50c1N0YXJ0
R1BSLCBJbW0zMihub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSwgYXJyYXlMZW5ndGhH
UFIpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRSZXN0TGVu
Z3RoKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTc2MCw2ICs3NjAs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlSXNUeXBlZEFycmF5VmlldyhOb2RlKik7CiAK
ICAgICB2b2lkIGVtaXRDYWxsKE5vZGUqKTsKKworICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlTmV3
QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCosIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBz
aXplR1BSLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBib29sIHNob3VsZENvbnZlcnRMYXJn
ZVNpemVUb0FycmF5U3RvcmFnZSA9IHRydWUpOwogICAgIAogICAgIC8vIENhbGxlZCBvbmNlIGEg
bm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2VuZXJhdGlvbiBidXQgcHJpb3IgdG8gc2V0dGluZwog
ICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUgdXAgaXRzIGNoaWxkcmVuLiAoVGhpcyBtdXN0IGhh
cHBlbiBwcmlvciB0byBzZXR0aW5nCkBAIC0xMjc0LDEwICsxMjc2LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDUlVpVWkgb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0KQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRVJVaVVpIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEltbTMyIGFyZzIsIEdQUlJlZyBh
cmczKQogICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIGFyZzMuYXNUcnVzdGVkSW1tMzIoKSwgYXJnNCk7Ci0gICAgICAgIHJldHVybiBh
cHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLmFzVHJ1c3RlZEltbTMyKCksIGFyZzMpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNjSSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1w
bCkKQEAgLTI0ODcsNyArMjQ4OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRUb0Fy
Z3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOwotICAg
IHZvaWQgY29tcGlsZUNvcHlSZXN0KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVSZXN0
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhO
b2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCBpbmxp
bmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBQdXRHZXR0ZXJT
ZXR0ZXJCeUlkOgogICAgIGNhc2UgUHV0R2V0dGVyQnlWYWw6CiAgICAgY2FzZSBQdXRTZXR0ZXJC
eVZhbDoKLSAgICBjYXNlIENvcHlSZXN0OgorICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICBjYXNl
IEdldFJlc3RMZW5ndGg6CiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVz
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcyLDggKzk3Miw4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICAgICAgY29tcGlsZUNo
ZWNrV2F0Y2hkb2dUaW1lcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29w
eVJlc3Q6Ci0gICAgICAgICAgICBjb21waWxlQ29weVJlc3QoKTsKKyAgICAgICAgY2FzZSBDcmVh
dGVSZXN0OgorICAgICAgICAgICAgY29tcGlsZUNyZWF0ZVJlc3QoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CiAgICAgICAgICAgICBjb21waWxlR2V0
UmVzdExlbmd0aCgpOwpAQCAtMzg2MywyNiArMzg2Myw0MCBAQCBwcml2YXRlOgogICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlQ29weVJlc3QoKQot
ICAgIHsgICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgZG9Db3B5UmVzdCA9IG1fb3V0
Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgdm9pZCBjb21waWxlQ3JlYXRlUmVzdCgpCisgICAgeworICAgICAgICBp
ZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG1fbm9kZSkpIHsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICBib29sIHNob3VsZExhcmdlQXJyYXlTaXplQ3JlYXRlQXJyYXlTdG9y
YWdlID0gZmFsc2U7CisgICAgICAgICAgICBMVmFsdWUgYXJyYXkgPSBjb21waWxlQWxsb2NhdGVB
cnJheVdpdGhTaXplKGFycmF5TGVuZ3RoLCBBcnJheVdpdGhDb250aWd1b3VzLCBzaG91bGRMYXJn
ZUFycmF5U2l6ZUNyZWF0ZUFycmF5U3RvcmFnZSk7CisKKyAgICAgICAgICAgIExWYWx1ZSBidXR0
ZXJmbHkgPSBtX291dC5sb2FkUHRyKGFycmF5LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdGFydExlbmd0aCA9IG1fb3V0LmFuY2hvcihh
cnJheUxlbmd0aCk7CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRSZWdpb24gPSBtX291dC5h
ZGQoZ2V0QXJndW1lbnRzU3RhcnQoKSwgbV9vdXQuY29uc3RJbnQ2NChzaXplb2YoUmVnaXN0ZXIp
ICogbV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSk7CisgICAgICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuZXF1YWwoYXJyYXlMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAor
ICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0YXJ0KSk7
CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9v
cFN0YXJ0LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIHBoaU9mZnNldCA9IG1f
b3V0LnBoaShJbnQzMiwgc3RhcnRMZW5ndGgpOworICAgICAgICAgICAgTFZhbHVlIGN1cnJlbnRP
ZmZzZXQgPSBtX291dC5zdWIocGhpT2Zmc2V0LCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAg
ICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHBoaU9mZnNldCwgbV9vdXQuYW5jaG9yKGN1cnJlbnRP
ZmZzZXQpKTsKKyAgICAgICAgICAgIExWYWx1ZSBsb2FkZWRWYWx1ZSA9IG1fb3V0LmxvYWQ2NCht
X291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIGFyZ3VtZW50UmVnaW9uLCBtX291dC56
ZXJvRXh0UHRyKGN1cnJlbnRPZmZzZXQpKSk7CisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RI
ZWFwJiBoZWFwID0gbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM7CisgICAgICAg
ICAgICBtX291dC5zdG9yZShsb2FkZWRWYWx1ZSwgbV9vdXQuYmFzZUluZGV4KGhlYXAsIGJ1dHRl
cmZseSwgbV9vdXQuemVyb0V4dFB0cihjdXJyZW50T2Zmc2V0KSksIE91dHB1dDo6U3RvcmU2NCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY3VycmVudE9mZnNldCwgbV9v
dXQuY29uc3RJbnQzMigwKSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0YXJ0
KSk7CiAKLSAgICAgICAgTFZhbHVlIGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoYXJyYXkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1
YWwoYXJyYXlMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAotICAgICAgICAgICAgdW5zdXJl
KGNvbnRpbnVhdGlvbiksIHVuc3VyZShkb0NvcHlSZXN0KSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkb0NvcHlSZXN0LCBjb250
aW51YXRpb24pOwotICAgICAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5
LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJy
YXkgbGVuZ3RoCisgICAgICAgIExWYWx1ZSBhcnJheUxlbmd0aCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgYXJndW1lbnRTdGFydCA9IGdldEFyZ3VtZW50c1N0
YXJ0KCk7CiAgICAgICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNv
bnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgdm1D
YWxsKAotICAgICAgICAgICAgVm9pZCxtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29weVJlc3Qp
LCBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIGdl
dEFyZ3VtZW50c1N0YXJ0KCksIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwo
CisgICAgICAgICAgICBJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZVJlc3Qp
LCBtX2NhbGxGcmFtZSwgYXJndW1lbnRTdGFydCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAsIGFy
cmF5TGVuZ3RoKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlR2V0UmVzdExlbmd0aCgpCkBA
IC00MDI4LDgxICs0MDQyLDk5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5jb25zdElu
dFB0cihzdHJ1Y3R1cmUpLCBtX291dC5jb25zdEludFB0cihtX25vZGUtPnN0YXJ0Q29uc3RhbnQo
KSksCiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX25vZGUtPm51bUNvbnN0YW50cygp
KSkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTaXplKCkKKwor
ICAgIExWYWx1ZSBjb21waWxlQWxsb2NhdGVBcnJheVdpdGhTaXplKExWYWx1ZSBwdWJsaWNMZW5n
dGgsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGJvb2wgc2hvdWxkTGFyZ2VBcnJheVNpemVD
cmVhdGVBcnJheVN0b3JhZ2UgPSB0cnVlKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHB1YmxpY0xl
bmd0aCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigK
LSAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9y
YWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoCi0gICAg
ICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAg
ICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAg
ICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAg
ICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpOworICAgICAg
ICBBU1NFUlQoCisgICAgICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
CisgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAg
ICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwog
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBmYXN0Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXJnZUNhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBmYXN0Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGxhcmdlQ2FzZSA9IHNob3VsZExhcmdlQXJyYXlTaXplQ3JlYXRl
QXJyYXlTdG9yYWdlID8gbV9vdXQubmV3QmxvY2soKSA6IG51bGxwdHI7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBudWxscHRyOworICAgICAgICBpZiAoc2hvdWxkTGFyZ2VBcnJheVNpemVDcmVhdGVB
cnJheVN0b3JhZ2UpIHsKICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAgICAg
ICBtX291dC5hYm92ZU9yRXF1YWwocHVibGljTGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9B
UlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSwKICAgICAgICAgICAgICAgICByYXJl
bHkobGFyZ2VDYXNlKSwgdXN1YWxseShmYXN0Q2FzZSkpOworICAgICAgICAgICAgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhmYXN0Q2FzZSwgbGFyZ2VDYXNlKTsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBs
YXJnZUNhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCByb3VuZCB1
cCB0byBCQVNFX1ZFQ1RPUl9MRU4gZm9yIG5ldyBBcnJheShibGFoKS4KLSAgICAgICAgICAgIExW
YWx1ZSB2ZWN0b3JMZW5ndGggPSBwdWJsaWNMZW5ndGg7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBwYXlsb2FkU2l6ZSA9Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2hsKG1fb3V0
Lnplcm9FeHQodmVjdG9yTGVuZ3RoLCBwb2ludGVyVHlwZSgpKSwgbV9vdXQuY29uc3RJbnRQdHIo
MykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1f
b3V0LmFkZCgKLSAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIo
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFs
dWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5
U2l6ZSwgZmFpbENhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5ID0gbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3Ry
dWN0dXJlLCBidXR0ZXJmbHksIGZhaWxDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9vdXQuc3RvcmUzMihwdWJsaWNMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlf
cHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmVjdG9yTGVuZ3RoLCBi
dXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgIAorICAg
ICAgICAvLyBXZSBkb24ndCByb3VuZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4gZm9yIG5ldyBBcnJh
eShibGFoKS4KKyAgICAgICAgTFZhbHVlIHZlY3Rvckxlbmd0aCA9IHB1YmxpY0xlbmd0aDsKKyAg
ICAgICAgCisgICAgICAgIExWYWx1ZSBwYXlsb2FkU2l6ZSA9CisgICAgICAgICAgICBtX291dC5z
aGwobV9vdXQuemVyb0V4dCh2ZWN0b3JMZW5ndGgsIHBvaW50ZXJUeXBlKCkpLCBtX291dC5jb25z
dEludFB0cigzKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1f
b3V0LmFkZCgKKyAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5jb25zdEludFB0cihzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9y
YWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENh
c2UpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YihlbmRP
ZlN0b3JhZ2UsIHBheWxvYWRTaXplKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBvYmplY3Qg
PSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENhc2Up
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihwdWJsaWNMZW5ndGgsIGJ1dHRlcmZs
eSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgbV9vdXQuc3RvcmUz
Mih2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KTsKKworICAgICAgICBpbml0aWFsaXplQXJyYXlFbGVtZW50cyhpbmRleGluZ1R5cGUsIHZlY3Rv
ckxlbmd0aCwgYnV0dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
c3RSZXN1bHQgPSBtX291dC5hbmNob3Iob2JqZWN0KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZVZhbHVlOworICAg
ICAgICBpZiAoc2hvdWxkTGFyZ2VBcnJheVNpemVDcmVhdGVBcnJheVN0b3JhZ2UpIHsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKIAotICAgICAg
ICAgICAgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMobV9ub2RlLT5pbmRleGluZ1R5cGUoKSwgdmVj
dG9yTGVuZ3RoLCBidXR0ZXJmbHkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG9iamVjdCk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGxhcmdlQ2FzZSwgZmFpbENhc2UpOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgbGFyZ2VTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoCiAgICAg
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAgICAgbV9v
dXQuanVtcChzbG93Q2FzZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oZmFpbENhc2UsIHNsb3dDYXNlKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
aWxTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSk7
CiAgICAgICAgICAgICBtX291dC5qdW1wKHNsb3dDYXNlKTsKLSAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIHN0cnVj
dHVyZVZhbHVlID0gbV9vdXQucGhpKAogICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKCksIGxh
cmdlU3RydWN0dXJlLCBmYWlsU3RydWN0dXJlKTsKLSAgICAgICAgICAgIExWYWx1ZSBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4gewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBsb2Nh
dGlvbnNbMF0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVWYWx1ZSwgcHVibGljTGVuZ3RoKTsKLSAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jl
c3VsdFZhbHVlKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQoIWxhc3ROZXh0KTsKKyAgICAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFp
bENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0
LmNvbnN0SW50UHRyKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBMVmFsdWUgc2xv
d1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRl
clR5cGUoKSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZU5ld0FycmF5V2l0aFNpemUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHB1YmxpY0xl
bmd0aCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigK
KyAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9y
YWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGNv
bXBpbGVBbGxvY2F0ZUFycmF5V2l0aFNpemUocHVibGljTGVuZ3RoLCBtX25vZGUtPmluZGV4aW5n
VHlwZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZp
c2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsNyBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIC8vIGFyZ3VtZW50cygwKSB3aWxsIG5vdCBmZXRjaCB0aGUgJ3RoaXMnIHZhbHVl
LiBUbyBnZXQvc2V0ICd0aGlzJywKICAgICAgICAgLy8gdXNlIHRoaXNWYWx1ZSgpIGFuZCBzZXRU
aGlzVmFsdWUoKSBiZWxvdy4KIAorICAgICAgICBKU1ZhbHVlKiBhZGRyZXNzT2ZBcmd1bWVudHNT
dGFydCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4odGhpcyArIGFyZ3Vt
ZW50T2Zmc2V0KDApKTsgfQogICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50KHNpemVfdCBhcmd1bWVu
dCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGFyZ3VtZW50ID49IGFyZ3VtZW50Q291bnQo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIwNDM3OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMx
LDcgKzIzMSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
REVGSU5FX09QKG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Ao
b3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCiAgICAgICAgIERFRklORV9PUChvcF9hcmd1bWVu
dF9jb3VudCkKLSAgICAgICAgREVGSU5FX09QKG9wX2NvcHlfcmVzdCkKKyAgICAgICAgREVGSU5F
X09QKG9wX2NyZWF0ZV9yZXN0KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3Jlc3RfbGVuZ3Ro
KQogICAgICAgICBERUZJTkVfT1Aob3BfY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfT1Aob3Bf
YXNzZXJ0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMDQzNzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTMs
NyArNDkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVf
c2NvcGVkX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY3Jl
YXRlX2Nsb25lZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2FyZ3VtZW50X2NvdW50KEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9jb3B5
X3Jlc3QoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9yZXN0KElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfYXNzZXJ0KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIwNDM3OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NTgsOSArMTQ1OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KEluc3Ry
dWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfY29weV9yZXN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfcmVzdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfY29weV9yZXN0KTsKKyAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2NyZWF0ZV9yZXN0
KTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA0Mzc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3
ICsyNjIsNyBAQCB0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0CiB0eXBl
ZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRlKiwg
Vk0qKTsKIHR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fSikoRW5j
b2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlv
bl9aKShpbnQzMl90KTsKLXR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRp
b25fRUNSVWlVaSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUmVnaXN0ZXIqLCB1aW50MzJfdCwgdWlu
dDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9F
UlVpVWkpKEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIHR5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9KSVVpKShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCosIHVpbnQzMl90
KTsKIHR5cGVkZWYgY2hhciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNT
dGF0ZSopOwogdHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRpb25fRUMp
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjA0Mzc5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYyLDkgKzE3NjIsOSBAQCBfbGxpbnRfb3BfdG9faW5kZXhfc3RyaW5n
OgogICAgIGNhbGxPcGNvZGVTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKICAg
ICBkaXNwYXRjaCgzKQogCi1fbGxpbnRfb3BfY29weV9yZXN0OgorX2xsaW50X29wX2NyZWF0ZV9y
ZXN0OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsT3Bjb2RlU2xvd1BhdGgoX3Nsb3df
cGF0aF9jb3B5X3Jlc3QpCisgICAgY2FsbE9wY29kZVNsb3dQYXRoKF9zbG93X3BhdGhfY3JlYXRl
X3Jlc3QpCiAgICAgZGlzcGF0Y2goNCkKIAogX2xsaW50X29wX2luc3RhbmNlb2Y6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDIwNDM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OCwyMCArODQ4LDE1IEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIFJFVFVSTihyZXNvbHZlZFNj
b3BlKTsKIH0KIAotU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvcHlfcmVzdCkKK1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfcmVzdCkKIHsKICAgICBCRUdJTigpOwogICAgIHVuc2ln
bmVkIGFycmF5U2l6ZSA9IE9QX0MoMikuanNWYWx1ZSgpLmFzVUludDMyKCk7Ci0gICAgaWYgKCFh
cnJheVNpemUpIHsKLSAgICAgICAgQVNTRVJUKCFqc0Nhc3Q8SlNBcnJheSo+KE9QKDEpLmpzVmFs
dWUoKSktPmxlbmd0aCgpKTsKLSAgICAgICAgRU5EKCk7Ci0gICAgfQotICAgIEpTQXJyYXkqIGFy
cmF5ID0ganNDYXN0PEpTQXJyYXkqPihPUCgxKS5qc1ZhbHVlKCkpOwotICAgIEFTU0VSVChhcnJh
eVNpemUgPT0gYXJyYXktPmxlbmd0aCgpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIFN0cnVjdHVyZSogIHN0cnVj
dHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1Rv
U2tpcCA9IHBjWzNdLnUudW5zaWduZWRWYWx1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXJyYXlTaXplOyBpKyspCi0gICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpICsgbnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgRU5E
KCk7CisgICAgSlNWYWx1ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0gZXhlYy0+YWRkcmVzc09m
QXJndW1lbnRzU3RhcnQoKSArIG51bVBhcmFtc1RvU2tpcDsKKyAgICBSRVRVUk4oY29uc3RydWN0
QXJyYXkoZXhlYywgc3RydWN0dXJlLCBhcmd1bWVudHNUb0NvcHlSZWdpb24sIGFycmF5U2l6ZSkp
OwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkX3dpdGhfdGhpcykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
CShyZXZpc2lvbiAyMDQzNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBAIFNMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfcmVzdW1lKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwogU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9yZXNvbHZlX3Njb3BlKTsKLVNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Y29weV9yZXN0KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3Jlc3Qp
OwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWRfd2l0aF90aGlzKTsK
IFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpOwog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWRfd2l0aF90aGlzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285930</attachid>
            <date>2016-08-12 12:26:59 -0700</date>
            <delta_ts>2016-08-12 15:13:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>64841</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQ0MTYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE2LTA4LTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBzdG9yZSBsb29wIGZvciBDb3B5UmVzdCBpbiBERkcgYW5k
IEZUTCBmb3IgY2VydGFpbiBhcnJheSBtb2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvcmVzdC1wYXJhbWV0ZXItaGF2aW5nLWEtYmFk
LXRpbWUuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9yZXN0LXBhcmFtZXRlci1tYW55LWFy
Z3VtZW50cy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLXZhcmlv
dXMtdHlwZXMuanM6IEFkZGVkLgorCiAyMDE2LTA4LTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KIAogICAgICAgICBPdmVycmlkZXNIYXNJbnN0YW5jZSBzaG91bGQgbm90IGJyYW5j
aCBhY3Jvc3MgcmVnaXN0ZXIgYWxsb2NhdGlvbnMuCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yZXN0
LXBhcmFtZXRlci1oYXZpbmctYS1iYWQtdGltZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9yZXN0LXBhcmFtZXRlci1oYXZpbmctYS1iYWQtdGltZS5qcwkocmV2aXNpb24gMCkKKysr
IEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWhhdmluZy1hLWJhZC10aW1lLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYg
KCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCEiKQorfQorbm9JbmxpbmUoYXNzZXJ0
KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24gZm9vKC4uLmMpIHsKKyAgICAg
ICAgcmV0dXJuIGM7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBsZXQgYXJyID0g
WzEsMiwzXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAg
bGV0IHJlc3VsdCA9IGZvbyguLi5hcnIpOworICAgICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9
PT0gMyk7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSBhcnIubGVuZ3RoKTsKKyAg
ICAgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gYXJyWzBdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3Vs
dFsxXSA9PT0gYXJyWzFdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsyXSA9PT0gYXJyWzJdKTsK
KyAgICB9CisKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgUmVmbGVjdC5kZWZpbmVQcm9w
ZXJ0eShBcnJheS5wcm90b3R5cGUsICIxMCIsIHsKKyAgICAgICAgZ2V0KCkgeyByZXR1cm4gMzU7
IH0sCisgICAgICAgIHNldCh4KSB7IGNhbGxlZCA9IHRydWU7IH0KKyAgICB9KTsKKyAgICBsZXQg
Y2FsbGVkMiA9IGZhbHNlOworICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90
eXBlLCAiMCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcHJpbnQoIkluIGdldCEiKTsg
cmV0dXJuIDM1OyB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKHgpIHsgY2FsbGVkMiA9IHRydWU7
IH0KKyAgICB9KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAg
ICAgICBsZXQgcmVzdWx0ID0gZm9vKC4uLmFycik7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVu
Z3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gYXJyWzBdKTsKKyAgICAg
ICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMSk7CisgICAgICAgIGFzc2VydChyZXN1bHRbMV0gPT09
IGFyclsxXSk7CisgICAgICAgIGFzc2VydChyZXN1bHRbMl0gPT09IGFyclsyXSk7CisgICAgICAg
IHJlc3VsdFsxMF0gPSAyNTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsxMF0gPT09IDM1KTsKKyAg
ICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworCisgICAgICAg
IHJlc3VsdFswXSA9ICJmb28iOworICAgICAgICBhc3NlcnQoIWNhbGxlZDIpOyAvLyBDcmVhdGlu
ZyBhIHJlc3Qgc2hvdWxkIGRlZmluZVByb3BlcnR5LCBlbnN1cmluZyB3ZSBkb24ndCBjYWxsIHRo
ZSBzZXR0ZXIuCisgICAgfQorCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7
CisgICAgICAgIGxldCByZXN1bHQgPSBmb28oLi4uYXJyKTsKKyAgICAgICAgYXNzZXJ0KHJlc3Vs
dC5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQocmVzdWx0WzBdID09PSBhcnJbMF0pOwor
ICAgICAgICBhc3NlcnQocmVzdWx0WzBdID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsx
XSA9PT0gYXJyWzFdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsyXSA9PT0gYXJyWzJdKTsKKyAg
ICAgICAgcmVzdWx0WzExXSA9IDM1OworICAgICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0g
MTIpOworICAgICAgICByZXN1bHRbMTBdID0gMjU7CisgICAgICAgIGFzc2VydChyZXN1bHRbMTBd
ID09PSAzNSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxz
ZTsKKworICAgICAgICByZXN1bHRbMF0gPSAiZm9vIjsKKyAgICAgICAgYXNzZXJ0KCFjYWxsZWQy
KTsgLy8gQ3JlYXRpbmcgYSByZXN0IHNob3VsZCBkZWZpbmVQcm9wZXJ0eSwgZW5zdXJpbmcgd2Ug
ZG9uJ3QgY2FsbCB0aGUgc2V0dGVyLgorICAgIH0KK30KK3Rlc3QxKCk7CkluZGV4OiBKU1Rlc3Rz
L3N0cmVzcy9yZXN0LXBhcmFtZXRlci1tYW55LWFyZ3VtZW50cy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1tYW55LWFyZ3VtZW50cy5qcwkocmV2aXNpb24g
MCkKKysrIEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLW1hbnktYXJndW1lbnRzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAg
aWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCEiKQorfQorbm9JbmxpbmUoYXNz
ZXJ0KTsKKworbGV0IGNhbGxlZEdldCA9IGZhbHNlOworbGV0IGRlZmluZWRBY2Nlc3NvciA9IGZh
bHNlOworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBmdW5jdGlvbiBmb28oLi4ucmVzdCkgeworICAg
ICAgICByZXR1cm4gcmVzdDsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBjb25zdCBzaXplID0gODAwOwor
ICAgICAgICBsZXQgYXJyID0gbmV3IEFycmF5KHNpemUpOworICAgICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgIGFycltpXSA9IGk7CisgICAgICAgIGxldCBy
ZXN1bHQgPSBmb28oLi4uYXJyKTsKKworICAgICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0g
YXJyLmxlbmd0aCk7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSBzaXplKTsKKyAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IGFzc2VydChhcnJbaV0gPT09IHJlc3VsdFtpXSk7CisgICAgICAgICAgICBhc3NlcnQocmVzdWx0
W2ldID09PSBpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lZEFjY2Vzc29yKSB7Cisg
ICAgICAgICAgICBjYWxsZWRHZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdFswXTsKKyAg
ICAgICAgICAgIGFzc2VydCghY2FsbGVkR2V0KTsKKyAgICAgICAgICAgIGFyclswXTsKKyAgICAg
ICAgICAgIGFzc2VydChjYWxsZWRHZXQpOworCisgICAgICAgICAgICBsZXQgdGVzdEFyciA9IFsu
Li5hcnJdOworICAgICAgICAgICAgY2FsbGVkR2V0ID0gZmFsc2U7CisgICAgICAgICAgICB0ZXN0
QXJyWzBdOworICAgICAgICAgICAgYXNzZXJ0KCFjYWxsZWRHZXQpOworICAgICAgICB9CisgICAg
fQorfQordGVzdCgpOworCitkZWZpbmVkQWNjZXNzb3IgPSB0cnVlOworUmVmbGVjdC5kZWZpbmVQ
cm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICIwIiwgeworICAgIGdldCgpIHsgY2FsbGVkR2V0ID0g
dHJ1ZTsgcmV0dXJuIDA7IH0sCisgICAgc2V0KHgpIHsgIH0KK30pOwordGVzdCgpOwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItdmFyaW91cy10eXBlcy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci12YXJpb3VzLXR5cGVzLmpzCShyZXZp
c2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItdmFyaW91cy10eXBlcy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACitmdW5jdGlvbiBhc3NlcnQoYikgewor
ICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQhIik7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiBmb28oYSwgYiwgLi4uYykgeworICAgIHJldHVybiBjOwor
fQorbm9JbmxpbmUoZm9vKTsKK2Z1bmN0aW9uIGJhcihhLCBiLCAuLi5jKSB7CisgICAgcmV0dXJu
IGM7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBiYXooYSwgYiwgLi4uYykgeyAvLyBh
bGxvdyB0aGlzIHRvIGJlIGlubGluZWQKKyAgICByZXR1cm4gYzsKK30KKworbm9JbmxpbmUoaXNO
YU4pOworCitmdW5jdGlvbiB0ZXN0MShmLCBpdGVycykgeworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgaXRlcnM7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gZigxMCwgMjAsIDIwLjUsIDIy
LjQ1LCAyMy41MCk7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICAg
ICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMjAuNSkKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsxXSA9
PT0gMjIuNDUpCisgICAgICAgIGFzc2VydChyZXN1bHRbMl0gPT09IDIzLjUwKTsKKyAgICB9CisK
KyAgICBsZXQgbyA9IHt9OworICAgIGxldCByZXN1bHQgPSBmKDEwLCAyMCwgMjAuNCwgbywgMjAu
Mik7CisgICAgYXNzZXJ0KHJlc3VsdC5sZW5ndGggPT09IDMpOworICAgIGFzc2VydChyZXN1bHRb
MF0gPT09IDIwLjQpCisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gbykKKyAgICBhc3NlcnQocmVz
dWx0WzJdID09PSAyMC4yKTsKKworICAgIHJlc3VsdCA9IGYoMTAsIDIwLCAyMC40LCAyMC40NSwg
TmFOKTsKKyAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3Vs
dFswXSA9PT0gMjAuNCkKKyAgICBhc3NlcnQocmVzdWx0WzFdID09PSAyMC40NSkKKyAgICBhc3Nl
cnQoaXNOYU4ocmVzdWx0WzJdKSk7Cit9Cit0ZXN0MShmb28sIDEwMDApOwordGVzdDEoYmFyLCAx
MDAwMCk7Cit0ZXN0MShiYXosIDEwMDAwKTsKKworZnVuY3Rpb24gbWFrZVRlc3QyKCkgeworICAg
IHJldHVybiBldmFsKGAke01hdGgucmFuZG9tKCl9OworICAgICAgICA7KGZ1bmN0aW9uIHRlc3Qy
KGYsIGl0ZXJzKSB7CisgICAgICAgICAgICBsZXQgYSA9IDEwOworICAgICAgICAgICAgbGV0IGIg
PSAyMDsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAg
ICAgICAgICAgICAgIGlmIChpID09PSBpdGVycyAtIDIpIHsKKyAgICAgICAgICAgICAgICAgICAg
YiA9IHt9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gaXRlcnMgLSAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGIgPSBOYU47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgbGV0IHIgPSBmKGEsIGIpOworICAgICAgICAgICAgICAgIGFzc2VydChyLmxlbmd0
aCA9PT0gMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHJbMF0gPT09IGEgfHwgKGlzTmFOKGEp
ICYmIGlzTmFOKHJbMF0pKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHJbMV0gPT09IGIgfHwg
KGlzTmFOKGIpICYmIGlzTmFOKHJbMV0pKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pYCk7
Cit9CitmdW5jdGlvbiBmMSguLi5yZXN0KSB7IHJldHVybiByZXN0OyB9CitmdW5jdGlvbiBmMigu
Li5yZXN0KSB7IHJldHVybiByZXN0OyB9CitmdW5jdGlvbiBmMyguLi5yZXN0KSB7IHJldHVybiBy
ZXN0OyB9CittYWtlVGVzdDIoKShmMSwgMTAwMCk7CittYWtlVGVzdDIoKShmMiwgMTAwMDApOwor
bWFrZVRlc3QyKCkoZjMsIDUwMDAwMCk7CisKK2Z1bmN0aW9uIHRlc3QzKGYsIGl0ZXJzKSB7Cisg
ICAgbGV0IG8gPSB7fTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAg
ICAgICAgbGV0IHIgPSBmKGksIG8sIDI1KTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAy
IHx8IHIubGVuZ3RoID09PSAxMDAwMCk7CisgICAgICAgIGFzc2VydChyWzBdID09PSBvKTsKKyAg
ICAgICAgYXNzZXJ0KHJbMV0gPT09IDI1KTsKKyAgICAgICAgaWYgKHIubGVuZ3RoID09PSAxMDAw
MCkKKyAgICAgICAgICAgIGFzc2VydChyWzk5OTldID09PSAzMCk7CisgICAgfQorfQorCitmdW5j
dGlvbiBmMTEoaSwgLi4ucmVzdCkgeworICAgIGlmIChpID09PSA5OTkpCisgICAgICAgIHJlc3Rb
OTk5OV0gPSAzMDsKKyAgICByZXR1cm4gcmVzdDsKK30KK2Z1bmN0aW9uIGYyMihpLCAuLi5yZXN0
KSB7CisgICAgaWYgKGkgPT09IDQ5OTk5KQorICAgICAgICByZXN0Wzk5OTldID0gMzA7CisgICAg
cmV0dXJuIHJlc3Q7Cit9Cit0ZXN0MyhmMTEsIDEwMDApOwordGVzdDMoZjIyLCA1MDAwMCk7CisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBA
CisyMDE2LTA4LTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IElubGluZSBzdG9yZSBsb29wIGZvciBDb3B5UmVzdCBpbiBERkcgYW5kIEZUTCBmb3IgY2VydGFp
biBhcnJheSBtb2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU5NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBvbGQgY29weV9yZXN0IGJ5dGVjb2RlIHRvIGFj
dHVhbGx5IGFsbG9jYXRlIHRoZSByZXN0IGFycmF5IGl0c2VsZi4KKyAgICAgICAgVGhlIGJ5dGVj
b2RlIGlzIG5vdyBjYWxsZWQgY3JlYXRlX3Jlc3Qgd2l0aCBhbiBhbmFsb2dvdXMgQ3JlYXRlUmVz
dCBub2RlIGluIHRoZSBERkcvRlRMLgorICAgICAgICBUaGlzIGFsbG93cyB0aGUgYnl0ZWNvZGUg
dG8gYmUgaW4gY29udHJvbCBvZiB3aGF0IHR5cGUgb2YgaW5kZXhpbmdUeXBlIHRoZSBhcnJheSBp
cyBhbGxvY2F0ZWQKKyAgICAgICAgd2l0aC4gV2UgYWx3YXlzIGFsbG9jYXRlIHVzaW5nIEFycmF5
V2l0aENvbnRpZ3VvdXMgc3RvcmFnZSB1bmxlc3Mgd2UncmUgaGF2aW5nQUJhZFRpbWUoKS4KKyAg
ICAgICAgVGhpcyBhbHNvIG1ha2VzIGFsbG9jYXRpbmcgYW5kIHdyaXRpbmcgaW50byB0aGUgYXJy
YXkgZmFzdC4gT24gdGhlIGZhc3QgcGF0aCwgdGhlIERGRy9GVEwKKyAgICAgICAgSklUIHdpbGwg
ZmFzdCBhbGxvY2F0ZSB0aGUgYXJyYXkgYW5kIGl0cyBzdG9yYWdlLCBhbmQgd2Ugd2lsbCBkbyBh
IG1lbW1vdmUgZnJvbSB0aGUgcmVzdAorICAgICAgICByZWdpb24gb2YgYXJndW1lbnRzIGludG8g
dGhlIGFycmF5J3Mgc3RvcmFnZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5q
c29uOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6CisgICAgICAgIChKU0M6
OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVyKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdl
bmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJp
YWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxl
U2l6ZVNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9E
RkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAg
ICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAg
ICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFz
ZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6dXNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzV2F0Y2hpbmdI
YXZpbmdBQmFkVGltZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb21w
aWxhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBl
Lmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdP
cGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWRB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Jl
YXRlUmVzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRS
ZXN0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
cHlSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoUmFuZG9tKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRo
UmFuZG9tKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9j
YXRlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNy
ZWF0ZUNsb25lZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDcmVhdGVSZXN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUdldFJlc3RMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQWxsb2NhdGVBcnJheVdpdGhTaXplKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5ld0FycmF5V2l0aFNpemUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29weVJlc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlND
OjpFeGVjU3RhdGU6OmFkZHJlc3NPZkFyZ3VtZW50c1N0YXJ0KToKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjphcmd1bWVudCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Fy
Z3VtZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9yZXN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NvcHlfcmVzdCk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5oOgorCiAyMDE2LTA4LTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBPdmVycmlkZXNIYXNJbnN0YW5jZSBzaG91bGQgbm90IGJyYW5jaCBhY3Jvc3MgcmVnaXN0
ZXIgYWxsb2NhdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5qc29uCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw3ICsxNDEsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90
b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2Fzc2VydCIsICJsZW5ndGgiIDogMyB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Y29weV9yZXN0IiwgImxlbmd0aCI6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2Ny
ZWF0ZV9yZXN0IiwgImxlbmd0aCI6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dl
dF9yZXN0X2xlbmd0aCIsICJsZW5ndGgiOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9zYXZlIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXN1
bWUiLCAibGVuZ3RoIiA6IDMgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAt
OTEsNyArOTEsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2Fz
ZSBvcF9qbGVzczoKICAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgogICAgIGNhc2Ugb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWw6Ci0gICAgY2FzZSBvcF9jb3B5X3Jlc3Q6IHsKKyAgICAg
ewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAyKTsKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKQEAgLTE5MCw2ICsxOTAsNyBAQCB2b2lk
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmM6CiAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgogICAgIGNhc2Ugb3BfY3JlYXRl
X3Njb3BlZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKICAgICBjYXNlIG9w
X2dldF9mcm9tX2FyZ3VtZW50czogewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNv
ZGVJRF0gPiAyKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKQEAgLTMxOCw3ICszMTksNiBAQCB2b2lk
IGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5n
LgotICAgIGNhc2Ugb3BfY29weV9yZXN0OgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgogICAg
IGNhc2Ugb3BfZW5kOgogICAgIGNhc2Ugb3BfdGhyb3c6CkBAIC00NjQsNiArNDY0LDcgQEAgdm9p
ZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfZGVsX2J5
X3ZhbDoKICAgICBjYXNlIG9wX3Vuc2lnbmVkOgogICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1l
bnRzOiAKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgogICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVu
Z3RoOiB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVMZW5ndGhzW29wY29kZUlEXSA+IDEpOwogICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzIsMTEgKzgzMiwx
MSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYXJndW1l
bnRfY291bnQiLCByMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2NvcHlfcmVzdDogeworICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7CiAgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRPZmZzZXQg
PSAoKytpdCktPnUudW5zaWduZWRWYWx1ZTsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvcHlfcmVzdCIpOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3Jlc3QiKTsK
ICAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKICAgICAgICAgICAgIG91dC5wcmludGYoIkFy
Z3VtZW50c09mZnNldDogJXUiLCBhcmd1bWVudE9mZnNldCk7CiAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQzNSw5ICs0NDM1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZXN0UAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXN0QXJyYXlMZW5ndGgtPmluZGV4
KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKIAot
ICAgIGVtaXROZXdBcnJheVdpdGhTaXplKHJlc3VsdCwgcmVzdEFycmF5TGVuZ3RoLmdldCgpKTsK
LQotICAgIGVtaXRPcGNvZGUob3BfY29weV9yZXN0KTsKKyAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0
ZV9yZXN0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzdWx0LT5pbmRleCgpKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzdEFycmF5TGVuZ3RoLT5pbmRleCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobnVtUGFyYW1ldGVyc1RvU2tpcCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NjEs
NyArMjg2MSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgY2FzZSBDaGVja1R5cGVJbmZvRmxhZ3M6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBD
b3B5UmVzdDoKKyAgICBjYXNlIENyZWF0ZVJlc3Q6CisgICAgICAgIGlmICghbV9ncmFwaC5pc1dh
dGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSAvLyBUaGlzIG1lYW5zIHdlJ3Jl
IGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUobV9ncmFwaCwgU3BlY0FycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICBjYXNlIENoZWNrOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3MzQsMTMgKzM3MzQsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Jlc3RfbGVuZ3RoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGNhc2Ugb3BfY29weV9yZXN0OiB7CisgICAgICAgIGNhc2Ugb3BfY3Jl
YXRlX3Jlc3Q6IHsKICAgICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOwotICAgICAgICAg
ICAgTm9kZSogYXJyYXkgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGUqIGFycmF5TGVuZ3RoID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAg
ICBhZGRUb0dyYXBoKENvcHlSZXN0LCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzNdLnUudW5z
aWduZWRWYWx1ZSksCi0gICAgICAgICAgICAgICAgYXJyYXksIGFycmF5TGVuZ3RoKTsKLSAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvcHlfcmVzdCk7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAorICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ3JlYXRlUmVzdCwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
LnVuc2lnbmVkVmFsdWUpLCBhcnJheUxlbmd0aCkpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY3JlYXRlX3Jlc3QpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgLy8gPT09
IEJpdHdpc2Ugb3BlcmF0aW9ucyA9PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikK
ICAgICAgICAgLCBtX3Jlc3VsdEdQUihyZXN1bHRHUFIpCiAgICAgICAgICwgbV9jb250aWd1b3Vz
U3RydWN0dXJlKGNvbnRpZ3VvdXNTdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9hcnJheVN0b3JhZ2VT
dHJ1Y3R1cmUoYXJyYXlTdG9yYWdlU3RydWN0dXJlKQorICAgICAgICAsIG1fYXJyYXlTdG9yYWdl
T3JDb250aWd1b3VzU3RydWN0dXJlKGFycmF5U3RvcmFnZVN0cnVjdHVyZSkKICAgICAgICAgLCBt
X3NpemVHUFIoc2l6ZUdQUikKICAgICB7CiAgICAgICAgIGppdC0+c2lsZW50U3BpbGxBbGxSZWdp
c3RlcnNJbXBsKGZhbHNlLCBtX3BsYW5zLCByZXN1bHRHUFIpOwpAQCAtOTcsMTIgKzk3LDE1IEBA
IHByb3RlY3RlZDoKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbnMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsKG1fcGxhbnNbaV0pOwogICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihtX3NpemVHUFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBq
aXQtPm1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG1fc2l6ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJV
Q1RJT05fTEVOR1RIKSk7Ci0gICAgICAgIGppdC0+bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmUpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IGppdC0+bV9qaXQuanVtcCgpOwotICAgICAg
ICBiaWdMZW5ndGgubGluaygmaml0LT5tX2ppdCk7Ci0gICAgICAgIGppdC0+bV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2FycmF5U3RvcmFnZVN0cnVjdHVyZSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICBkb25lLmxpbmsoJmppdC0+bV9qaXQpOworICAgICAgICBpZiAo
bV9jb250aWd1b3VzU3RydWN0dXJlICE9IG1fYXJyYXlTdG9yYWdlT3JDb250aWd1b3VzU3RydWN0
dXJlKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBqaXQt
Pm1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG1fc2l6ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJ
T05fTEVOR1RIKSk7CisgICAgICAgICAgICBqaXQtPm1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9jb250aWd1b3VzU3RydWN0dXJlKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gaml0LT5tX2ppdC5qdW1wKCk7Cisg
ICAgICAgICAgICBiaWdMZW5ndGgubGluaygmaml0LT5tX2ppdCk7CisgICAgICAgICAgICBqaXQt
Pm1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9hcnJheVN0b3JhZ2VP
ckNvbnRpZ3VvdXNTdHJ1Y3R1cmUpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGRvbmUubGlu
aygmaml0LT5tX2ppdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaml0LT5tX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1fY29udGlndW91c1N0cnVjdHVyZSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24obV9mdW5jdGlvbiwgbV9y
ZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIG1fc2l6ZUdQUik7CiAgICAgICAgIEdQUlJlZyBjYW5UcmFt
cGxlID0gU3BlY3VsYXRpdmVKSVQ6OnBpY2tDYW5UcmFtcGxlKG1fcmVzdWx0R1BSKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9wbGFucy5zaXplKCk7IGktLTspCkBAIC0xMTUsNyArMTE4
LDcgQEAgcHJpdmF0ZToKICAgICBQX0pJVE9wZXJhdGlvbl9FU3RaIG1fZnVuY3Rpb247CiAgICAg
R1BSUmVnIG1fcmVzdWx0R1BSOwogICAgIFN0cnVjdHVyZSogbV9jb250aWd1b3VzU3RydWN0dXJl
OwotICAgIFN0cnVjdHVyZSogbV9hcnJheVN0b3JhZ2VTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJl
KiBtX2FycmF5U3RvcmFnZU9yQ29udGlndW91c1N0cnVjdHVyZTsKICAgICBHUFJSZWcgbV9zaXpl
R1BSOwogICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuLCAyPiBtX3BsYW5zOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIENhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2Fs
X2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKICAgICBjYXNlIG9w
X2NhdGNoOgotICAgIGNhc2Ugb3BfY29weV9yZXN0OgorICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6
CiAgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CiAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2No
aWNrZW5fcHJvbG9ndWU6CiAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAy
MDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA5Nyw5ICsxMDk3LDE2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgQ29w
eVJlc3Q6IHsKKyAgICBjYXNlIENyZWF0ZVJlc3Q6IHsKKyAgICAgICAgaWYgKCFncmFwaC5pc1dh
dGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgICAgICAvLyBU
aGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBy
ZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgICAgIHJlYWQoU3RhY2spOwotICAgICAgICB3cml0ZShIZWFwKTsK
KyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2JqZWN0
Q291bnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUs
NiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRT
dGFjazoKICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6CiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50
czoKLSAgICBjYXNlIENvcHlSZXN0OgogICAgIGNhc2UgTG9nU2hhZG93Q2hpY2tlblByb2xvZ3Vl
OgogICAgIGNhc2UgTG9nU2hhZG93Q2hpY2tlblRhaWw6CiAgICAgY2FzZSBHZXREeW5hbWljVmFy
OgpAQCAtMjg1LDYgKzI4NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIFN0ckNhdDoKICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAgICAgY2FzZSBT
dHJpbmdSZXBsYWNlUmVnRXhwOgorICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA0NDEz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwMCw5ICsxNTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBDb3B5UmVzdDogewotICAgICAgICAgICAgZml4
RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBjYXNlIENyZWF0ZVJlc3Q6
IHsKKyAgICAgICAgICAgIHdhdGNoSGF2aW5nQUJhZFRpbWUobm9kZSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtNjU5LDYgKzY1OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGRvVG9D
aGlsZHJlbihub2RlLCBbJl0gKEVkZ2UgZWRnZSkgeyByZXN1bHQgfD0gZWRnZSA9PSBjaGlsZDsg
fSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgYm9vbCBpc1dhdGNoaW5n
SGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgICAgIHJldHVybiB3YXRjaHBvaW50cygpLmlzV2F0Y2hlZChnbG9iYWxP
YmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsKKyAgICB9CiAgICAgCiAgICAgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxh
dGlvbi5nZXQoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzE5LDcgKzIzMTksNyBAQCBwdWJsaWM6CiAKICAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpCiAgICAgewotICAgICAgICBBU1NFUlQob3Ao
KSA9PSBDb3B5UmVzdCB8fCBvcCgpID09IEdldFJlc3RMZW5ndGgpOworICAgICAgICBBU1NFUlQo
b3AoKSA9PSBDcmVhdGVSZXN0IHx8IG9wKCkgPT0gR2V0UmVzdExlbmd0aCk7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcEluZm8pOwogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA0NDEzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTEsNyArMjkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgLyogUmVzdCBQYXJhbWV0ZXIgKi9c
CiAgICAgbWFjcm8oR2V0UmVzdExlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8o
Q29weVJlc3QsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDcmVhdGVSZXN0LCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIFN1cHBvcnQgZm9y
IGFsbG9jYXRpb24gc2lua2luZy4gKi9cCiAgICAgbWFjcm8oUGhhbnRvbU5ld09iamVjdCwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAyLDE3ICsxMTAyLDE2IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVD
bG8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29weVJlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFycmF5QXNDZWxsLCBSZWdpc3Rlciog
YXJndW1lbnRTdGFydCwgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbXNUb1NraXAsIHVuc2lnbmVkIGFy
cmF5U2l6ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVSZXN0KEV4ZWNT
dGF0ZSogZXhlYywgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mUGFy
YW1zVG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNpemUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKLSAgICBB
U1NFUlQoYXJyYXlTaXplKTsKLSAgICBKU0FycmF5KiBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4o
YXJyYXlBc0NlbGwpOwotICAgIEFTU0VSVChhcnJheVNpemUgPT0gYXJyYXktPmxlbmd0aCgpKTsK
LSAgICBhcnJheS0+c2V0TGVuZ3RoKGV4ZWMsIGFycmF5U2l6ZSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKQotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwgYXJndW1lbnRTdGFydFtpICsgbnVtYmVyT2ZQYXJhbXNUb1NraXBdLmpzVmFs
dWUoKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENv
bnRpZ3VvdXMpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2Yo
SlNWYWx1ZSksICJUaGlzIGlzIGEgc3Ryb25nIGFzc3VtcHRpb24gaGVyZS4iKTsKKyAgICBKU1Zh
bHVlKiBhcmd1bWVudHNUb0NvcHlSZWdpb24gPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KGFyZ3Vt
ZW50U3RhcnQpICsgbnVtYmVyT2ZQYXJhbXNUb1NraXA7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFy
cmF5KGV4ZWMsIHN0cnVjdHVyZSwgYXJndW1lbnRzVG9Db3B5UmVnaW9uLCBhcnJheVNpemUpOwog
fQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZURpcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVNj
b3BlZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRT
dGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgSlNMZXhpY2FsRW52aXJv
bm1lbnQqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSosIEpTRnVuY3Rpb24q
LCBpbnQzMl90IGFyZ3VtZW50Q291bnQpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUNsb25lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3Rlciog
YXJndW1lbnRTdGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSk7Ci12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29weVJlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUmVn
aXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mUGFyYW1zVG9Ta2lwLCB1bnNp
Z25lZCBhcnJheVNpemUpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJl
c3QoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNpemUpOwogZG91YmxlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw2ICs4MzYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgICAgIGNh
c2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAgY2FzZSBDcmVhdGVSZXN0OgogICAgICAgICBj
YXNlIE5ld0FycmF5QnVmZmVyOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNBcnJh
eSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNjMsNyArMTA2NCw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIENvcHlSZXN0OgogICAgICAgICBjYXNl
IFB1dER5bmFtaWNWYXI6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9u
IDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNyArMzQ2LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKLSAgICBjYXNlIENvcHlSZXN0OgorICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICBjYXNlIFN0
cmluZ1JlcGxhY2U6CiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhwOgogICAgIGNhc2UgR2V0
UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDQ0MTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODkwLDUxICszODkwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5n
QUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkg
ewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHNpemUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIo
dGhpcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgR1BSUmVnIHNpemVHUFIgPSBzaXpl
LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXpl
R1BSLCBUcnVzdGVkSW1tMzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCgxIDw8IDMpID09IHNpemVvZihK
U1ZhbHVlKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoCi0gICAgICAgICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHJlc3VsdEdQUiwg
c3RvcmFnZUdQUikpOwotICAgICAgICAgICAgbV9qaXQuc3ViUHRyKHNjcmF0Y2hHUFIsIHN0b3Jh
Z2VHUFIpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRl
eGluZ1R5cGUoKSk7Ci0gICAgICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5Pihy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAg
IEpTVmFsdWUgbmFuID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihuYW4udS5hc0JpdHMu
dGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihu
YW4udS5hc0JpdHMucGF5bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxv
b3AsICZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRo
R2VuZXJhdG9yPigKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgIGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZUdQUikpOwotICAgICAgICAgICAg
CisKKyAgICAgICAgICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoZ2xvYmFsT2Jq
ZWN0LCByZXN1bHRHUFIsIHNpemVHUFIsIG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC00OTA4LDggKzQ4NjgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgQ29weVJlc3Q6
IHsKLSAgICAgICAgY29tcGlsZUNvcHlSZXN0KG5vZGUpOworICAgIGNhc2UgQ3JlYXRlUmVzdDog
eworICAgICAgICBjb21waWxlQ3JlYXRlUmVzdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCkBAIC01NDM4LDYgKzUzOTgsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoUmFuZG9tKAogICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzaXplR1BS
LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBib29sIHNob3VsZENvbnZlcnRMYXJnZVNpemVU
b0FycmF5U3RvcmFnZSkKK3sKKyAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CisgICAgCisgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIGlmIChzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UpCisg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNU
UlVDVElPTl9MRU5HVEgpKSk7CisgICAgCisgICAgQVNTRVJUKCgxIDw8IDMpID09IHNpemVvZihK
U1ZhbHVlKSk7CisgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBtX2pp
dC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOworICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKAorICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0
b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7CisgICAgbV9qaXQuc3ViUHRyKHNjcmF0Y2hH
UFIsIHN0b3JhZ2VHUFIpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdU
eXBlKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IHNsb3dDYXNlcyk7CisgICAgCisgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgIAor
ICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICBKU1ZhbHVlIG5hbiA9
IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIFBOYU4pOworICAgICAgICAKKyAgICAg
ICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
c2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQu
bGFiZWwoKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobmFuLnUuYXNCaXRzLnRhZyks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5hbi51LmFzQml0cy5w
YXlsb2FkKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7CisgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93
UGF0aEdlbmVyYXRvcj4oCisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKKyAgICAgICAgICAgIHN0cnVjdHVyZSwKKyAgICAg
ICAgICAgIHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSA/IGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkgOiBzdHJ1Y3R1cmUsCisgICAgICAgICAgICBzaXplR1BSKSk7Cit9CisK
ICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIw
NDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTIsNDkgKzM4NTIsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hh
dmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUo
KSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gyKHRoaXMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNp
emUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNp
emVHUFIsIFRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RI
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoKDEgPDwgMykgPT0gc2l6ZW9m
KEpTVmFsdWUpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BS
LCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3Rv
cmFnZUdQUik7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+
KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNo
MkdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaDJHUFIpOwotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFy
cmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBy
ZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwK
LSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSwKLSAgICAgICAg
ICAgICAgICAgICAgc2l6ZUdQUikpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBjb21waWxl
QWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKGdsb2JhbE9iamVjdCwgcmVzdWx0R1BSLCBzaXplR1BS
LCBub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDg1NSw4ICs0ODE1
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBj
b21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgY2FzZSBDb3B5UmVzdDogewotICAgICAgICBjb21waWxlQ29weVJlc3Qobm9kZSk7Cisg
ICAgY2FzZSBDcmVhdGVSZXN0OiB7CisgICAgICAgIGNvbXBpbGVDcmVhdGVSZXN0KG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTU1MDUsNiArNTQ2NSw1MSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20oCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5l
d0FycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR1BSUmVnIHJlc3Vs
dEdQUiwgR1BSUmVnIHNpemVHUFIsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGJvb2wgc2hv
dWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlKQoreworICAgIEdQUlRlbXBvcmFyeSBz
dG9yYWdlKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAKKyAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNob3VsZENvbnZlcnRMYXJnZVNp
emVUb0FycmF5U3RvcmFnZSkKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlO
X0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpKTsKKyAgICAKKyAgICBBU1NFUlQo
KDEgPDwgMykgPT0gc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNj
cmF0Y2hHUFIpOworICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaEdQ
Uik7CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
LCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoCisgICAgICAg
IGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKKyAgICBt
X2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihpbmRleGluZ1R5cGUpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJy
YXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZTMy
KHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CisgICAgCisgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKSB7Cisg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFO
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2gyR1BS
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaDJHUFIpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFy
aWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCisgICAgICAgICAgICBzdHJ1
Y3R1cmUsCisgICAgICAgICAgICBzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2Ug
PyBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2Nh
dGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpIDogc3RydWN0dXJlLAorICAgICAgICAgICAgc2l6
ZUdQUikpOworfQorCiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDgyLDMwICs2NDgyLDc1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWQKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb3B5UmVzdChOb2Rl
KiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVJlc3QoTm9kZSogbm9k
ZSkKIHsKLSAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDb3B5UmVzdCk7CisgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gQ3JlYXRlUmVzdCk7CiAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcnJh
eSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisjaWYgIUNQVShYODYpCisgICAgaWYgKG1faml0Lmdy
YXBoKCkuaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkgeworICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJyYXlMZW5ndGgodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgYXJyYXlSZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgR1BSUmVnIGFycmF5TGVuZ3RoR1BSID0gYXJyYXlMZW5ndGguZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBhcnJheVJlc3VsdEdQUiA9IGFycmF5UmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wg
c2hvdWxkQWxsb3dGb3JBcnJheVN0b3JhZ2VTdHJ1Y3R1cmVGb3JMYXJnZUFycmF5cyA9IGZhbHNl
OworICAgICAgICBjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFycmF5UmVzdWx0R1BSLCBh
cnJheUxlbmd0aEdQUiwgQXJyYXlXaXRoQ29udGlndW91cywgc2hvdWxkQWxsb3dGb3JBcnJheVN0
b3JhZ2VTdHJ1Y3R1cmVGb3JMYXJnZUFycmF5cyk7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGFy
Z3VtZW50c1N0YXJ0KHRoaXMpOworICAgICAgICBHUFJSZWcgYXJndW1lbnRzU3RhcnRHUFIgPSBh
cmd1bWVudHNTdGFydC5ncHIoKTsKKworICAgICAgICBlbWl0R2V0QXJndW1lbnRTdGFydChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGFyZ3VtZW50c1N0YXJ0R1BSKTsKKworICAgICAgICBHUFJUZW1w
b3JhcnkgYnV0dGVyZmx5KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgY3VycmVudExlbmd0
aCh0aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWUo
dGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKHZhbHVl
LmdwcigpKTsKKyNlbHNlCisgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZVRhZyh0aGlzKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlUGF5bG9hZCh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3ModmFsdWVUYWcuZ3ByKCksIHZhbHVlUGF5bG9hZC5n
cHIoKSk7CisjZW5kaWYKKworICAgICAgICBHUFJSZWcgY3VycmVudExlbmd0aEdQUiA9IGN1cnJl
bnRMZW5ndGguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHku
Z3ByKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhh
cnJheVJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BS
KTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2tpcExvb3AgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGFycmF5TGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMCkp
OworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihhcnJheUxlbmd0aEdQUiwgY3VycmVu
dExlbmd0aEdQUik7CisgICAgICAgIG1faml0LmFkZFB0cihJbW0zMihzaXplb2YoUmVnaXN0ZXIp
ICogbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSksIGFyZ3VtZW50c1N0YXJ0R1BSKTsK
KworICAgICAgICBhdXRvIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICBtX2ppdC5zdWIz
MihUcnVzdGVkSW1tMzIoMSksIGN1cnJlbnRMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
VmFsdWUoSklUQ29tcGlsZXI6OkJhc2VJbmRleChhcmd1bWVudHNTdGFydEdQUiwgY3VycmVudExl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB2YWx1ZVJlZ3MpOworICAgICAg
ICBtX2ppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChi
dXR0ZXJmbHlHUFIsIGN1cnJlbnRMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSk7CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY3Vy
cmVudExlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDApKS5saW5rVG8obG9vcCwgJm1faml0KTsKKwor
ICAgICAgICBza2lwTG9vcC5saW5rKCZtX2ppdCk7CisgICAgICAgIGNlbGxSZXN1bHQoYXJyYXlS
ZXN1bHRHUFIsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vICFDUFUo
WDg2KQorCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFycmF5TGVuZ3RoKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3JhcnkgYXJndW1lbnRzU3RhcnQodGhpcyk7
Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFycmF5TGVuZ3RoKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKKyAgICBHUFJUZW1wb3JhcnkgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAodGhp
cyk7CiAKLSAgICBHUFJSZWcgYXJyYXlHUFIgPSBhcnJheS5ncHIoKTsKLSAgICBHUFJSZWcgYXJn
dW1lbnRzU3RhcnRHUFIgPSBhcmd1bWVudHNTdGFydC5ncHIoKTsKICAgICBHUFJSZWcgYXJyYXlM
ZW5ndGhHUFIgPSBhcnJheUxlbmd0aC5ncHIoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b25lID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhcnJheUxlbmd0aEdQ
UiwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBHUFJSZWcgYXJndW1lbnRzU3RhcnRHUFIgPSBhcmd1
bWVudHNTdGFydC5ncHIoKTsKIAogICAgIGVtaXRHZXRBcmd1bWVudFN0YXJ0KG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgYXJndW1lbnRzU3RhcnRHUFIpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKGFyZ3VtZW50c1N0YXJ0R1BSKTsKLSAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0Nl
bGwqIGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNr
aXAsIDQ6YXJyYXkgbGVuZ3RoCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db3B5UmVzdCwg
YXJyYXlHUFIsIGFyZ3VtZW50c1N0YXJ0R1BSLCBJbW0zMihub2RlLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpKSwgYXJyYXlMZW5ndGhHUFIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
YXJndW1lbnRzU3RhcnRHUFIpOwotICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKLSAgICBk
b25lLmxpbmsoJm1faml0KTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOwogCi0gICAgbm9SZXN1bHQo
bm9kZSk7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
cmVhdGVSZXN0LCByZXN1bHRHUFIsIGFyZ3VtZW50c1N0YXJ0R1BSLCBJbW0zMihub2RlLT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSwgYXJyYXlMZW5ndGhHUFIpOworICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CisKKyAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRSZXN0TGVuZ3RoKE5vZGUqIG5vZGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTc2MCw2ICs3NjAsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21waWxlSXNUeXBlZEFycmF5VmlldyhOb2RlKik7CiAKICAgICB2b2lkIGVtaXRDYWxsKE5v
ZGUqKTsKKworICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShKU0dsb2Jh
bE9iamVjdCosIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzaXplR1BSLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlLCBib29sIHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSA9
IHRydWUpOwogICAgIAogICAgIC8vIENhbGxlZCBvbmNlIGEgbm9kZSBoYXMgY29tcGxldGVkIGNv
ZGUgZ2VuZXJhdGlvbiBidXQgcHJpb3IgdG8gc2V0dGluZwogICAgIC8vIGl0cyByZXN1bHQsIHRv
IGZyZWUgdXAgaXRzIGNoaWxkcmVuLiAoVGhpcyBtdXN0IGhhcHBlbiBwcmlvciB0byBzZXR0aW5n
CkBAIC0xMjc0LDEwICsxMjc2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGwob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfSklUT3BlcmF0aW9uX0VDUlVpVWkgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRVJVaVVpIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEltbTMyIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKLSAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMuYXNUcnVz
dGVkSW1tMzIoKSwgYXJnNCk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLmFz
VHJ1c3RlZEltbTMyKCksIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNjSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKQEAgLTI0ODcsNyArMjQ4OSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUNvcHlSZXN0
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVSZXN0KE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVHZXRSZXN0TGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOb3RpZnlXcml0ZShO
b2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDQ0
MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJCeUlkOgogICAgIGNhc2Ug
UHV0R2V0dGVyQnlWYWw6CiAgICAgY2FzZSBQdXRTZXR0ZXJCeVZhbDoKLSAgICBjYXNlIENvcHlS
ZXN0OgorICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CiAgICAg
Y2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNDQxMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcyLDggKzk3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tX
YXRjaGRvZ1RpbWVyOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrV2F0Y2hkb2dUaW1lcigpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weVJlc3Q6Ci0gICAgICAgICAgICBj
b21waWxlQ29weVJlc3QoKTsKKyAgICAgICAgY2FzZSBDcmVhdGVSZXN0OgorICAgICAgICAgICAg
Y29tcGlsZUNyZWF0ZVJlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdl
dFJlc3RMZW5ndGg6CiAgICAgICAgICAgICBjb21waWxlR2V0UmVzdExlbmd0aCgpOwpAQCAtMzg2
MywyNiArMzg2Myw0MCBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAg
ICAgfQogCi0gICAgdm9pZCBjb21waWxlQ29weVJlc3QoKQotICAgIHsgICAgICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgZG9Db3B5UmVzdCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgdm9pZCBj
b21waWxlQ3JlYXRlUmVzdCgpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5pc1dhdGNoaW5n
SGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG1fbm9kZSkpIHsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMVmFsdWUg
YXJyYXlMZW5ndGggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBib29s
IHNob3VsZExhcmdlQXJyYXlTaXplQ3JlYXRlQXJyYXlTdG9yYWdlID0gZmFsc2U7CisgICAgICAg
ICAgICBMVmFsdWUgYXJyYXkgPSBjb21waWxlQWxsb2NhdGVBcnJheVdpdGhTaXplKGFycmF5TGVu
Z3RoLCBBcnJheVdpdGhDb250aWd1b3VzLCBzaG91bGRMYXJnZUFycmF5U2l6ZUNyZWF0ZUFycmF5
U3RvcmFnZSk7CisKKyAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5sb2FkUHRy
KGFycmF5LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBzdGFydExlbmd0aCA9IG1fb3V0LmFuY2hvcihhcnJheUxlbmd0aCk7CisgICAgICAg
ICAgICBMVmFsdWUgYXJndW1lbnRSZWdpb24gPSBtX291dC5hZGQoZ2V0QXJndW1lbnRzU3RhcnQo
KSwgbV9vdXQuY29uc3RJbnQ2NChzaXplb2YoUmVnaXN0ZXIpICogbV9ub2RlLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwo
YXJyYXlMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAorICAgICAgICAgICAgICAgIHVuc3Vy
ZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0YXJ0KSk7CisKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcFN0YXJ0LCBjb250aW51YXRpb24p
OworICAgICAgICAgICAgTFZhbHVlIHBoaU9mZnNldCA9IG1fb3V0LnBoaShJbnQzMiwgc3RhcnRM
ZW5ndGgpOworICAgICAgICAgICAgTFZhbHVlIGN1cnJlbnRPZmZzZXQgPSBtX291dC5zdWIocGhp
T2Zmc2V0LCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKHBoaU9mZnNldCwgbV9vdXQuYW5jaG9yKGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAg
IExWYWx1ZSBsb2FkZWRWYWx1ZSA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFw
cy52YXJpYWJsZXMsIGFyZ3VtZW50UmVnaW9uLCBtX291dC56ZXJvRXh0UHRyKGN1cnJlbnRPZmZz
ZXQpKSk7CisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5p
bmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM7CisgICAgICAgICAgICBtX291dC5zdG9yZShsb2Fk
ZWRWYWx1ZSwgbV9vdXQuYmFzZUluZGV4KGhlYXAsIGJ1dHRlcmZseSwgbV9vdXQuemVyb0V4dFB0
cihjdXJyZW50T2Zmc2V0KSksIE91dHB1dDo6U3RvcmU2NCk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuZXF1YWwoY3VycmVudE9mZnNldCwgbV9vdXQuY29uc3RJbnQzMigwKSksIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0YXJ0KSk7CiAKLSAgICAgICAgTFZhbHVl
IGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoYXJyYXkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoYXJyYXlMZW5ndGgsIG1fb3V0
LmNvbnN0SW50MzIoMCkpLAotICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3Vy
ZShkb0NvcHlSZXN0KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhkb0NvcHlSZXN0LCBjb250aW51YXRpb24pOwotICAgICAgICAv
LyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwg
MzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkgbGVuZ3RoCisgICAgICAgIExW
YWx1ZSBhcnJheUxlbmd0aCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBM
VmFsdWUgYXJndW1lbnRTdGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KCk7CiAgICAgICAgIExWYWx1
ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgVm9p
ZCxtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29weVJlc3QpLCBtX2NhbGxGcmFtZSwgbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIGdldEFyZ3VtZW50c1N0YXJ0KCksIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICBJbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZVJlc3QpLCBtX2NhbGxGcmFtZSwgYXJndW1l
bnRTdGFydCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAsIGFycmF5TGVuZ3RoKSk7CiAgICAgfQog
CiAgICAgdm9pZCBjb21waWxlR2V0UmVzdExlbmd0aCgpCkBAIC00MDI4LDgxICs0MDQyLDk5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpLCBtX291
dC5jb25zdEludFB0cihtX25vZGUtPnN0YXJ0Q29uc3RhbnQoKSksCiAgICAgICAgICAgICBtX291
dC5jb25zdEludFB0cihtX25vZGUtPm51bUNvbnN0YW50cygpKSkpOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTaXplKCkKKworICAgIExWYWx1ZSBjb21waWxlQWxs
b2NhdGVBcnJheVdpdGhTaXplKExWYWx1ZSBwdWJsaWNMZW5ndGgsIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUsIGJvb2wgc2hvdWxkTGFyZ2VBcnJheVNpemVDcmVhdGVBcnJheVN0b3JhZ2UgPSB0
cnVlKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHB1YmxpY0xlbmd0aCA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKLSAgICAgICAgICAgIG1fbm9kZS0+
aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlz
SGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdU
eXBlKCkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgaGFzVW5kZWNp
ZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAgICAgfHwgaGFzSW50
MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNDb250
aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpOworICAgICAgICBBU1NFUlQoCisgICAgICAgICAg
ICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8
IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBoYXNE
b3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0NvbnRp
Z3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogCi0gICAgICAgICAgICBMQmFzaWNC
bG9jayBmYXN0Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXJnZUNhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sg
ZmFpbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xv
d0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBmYXN0Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxh
cmdlQ2FzZSA9IHNob3VsZExhcmdlQXJyYXlTaXplQ3JlYXRlQXJyYXlTdG9yYWdlID8gbV9vdXQu
bmV3QmxvY2soKSA6IG51bGxwdHI7CisgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBudWxscHRyOworICAg
ICAgICBpZiAoc2hvdWxkTGFyZ2VBcnJheVNpemVDcmVhdGVBcnJheVN0b3JhZ2UpIHsKICAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwo
cHVibGljTGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVD
VElPTl9MRU5HVEgpKSwKICAgICAgICAgICAgICAgICByYXJlbHkobGFyZ2VDYXNlKSwgdXN1YWxs
eShmYXN0Q2FzZSkpOworICAgICAgICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0
Q2FzZSwgbGFyZ2VDYXNlKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBsYXJnZUNhc2UpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCByb3VuZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4g
Zm9yIG5ldyBBcnJheShibGFoKS4KLSAgICAgICAgICAgIExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBw
dWJsaWNMZW5ndGg7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBwYXlsb2FkU2l6
ZSA9Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHQodmVjdG9yTGVuZ3Ro
LCBwb2ludGVyVHlwZSgpKSwgbV9vdXQuY29uc3RJbnRQdHIoMykpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKLSAgICAgICAgICAg
ICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxs
b2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3ViKGVuZE9m
U3RvcmFnZSwgcGF5bG9hZFNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUg
b2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0ZXJmbHksIGZh
aWxDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihwdWJsaWNM
ZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAg
ICAgICAgIG1fb3V0LnN0b3JlMzIodmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0
dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24ndCByb3Vu
ZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4gZm9yIG5ldyBBcnJheShibGFoKS4KKyAgICAgICAgTFZh
bHVlIHZlY3Rvckxlbmd0aCA9IHB1YmxpY0xlbmd0aDsKKyAgICAgICAgCisgICAgICAgIExWYWx1
ZSBwYXlsb2FkU2l6ZSA9CisgICAgICAgICAgICBtX291dC5zaGwobV9vdXQuemVyb0V4dCh2ZWN0
b3JMZW5ndGgsIHBvaW50ZXJUeXBlKCkpLCBtX291dC5jb25zdEludFB0cigzKSk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKKyAgICAgICAgICAg
IHBheWxvYWRTaXplLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0
b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIHBheWxvYWRTaXpl
KTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0Fy
cmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENhc2UpOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuc3RvcmUzMihwdWJsaWNMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlf
cHVibGljTGVuZ3RoKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGJ1dHRl
cmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKworICAgICAgICBpbml0aWFs
aXplQXJyYXlFbGVtZW50cyhpbmRleGluZ1R5cGUsIHZlY3Rvckxlbmd0aCwgYnV0dGVyZmx5KTsK
KyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNo
b3Iob2JqZWN0KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAK
KyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZVZhbHVlOworICAgICAgICBpZiAoc2hvdWxkTGFyZ2VB
cnJheVNpemVDcmVhdGVBcnJheVN0b3JhZ2UpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKIAotICAgICAgICAgICAgaW5pdGlhbGl6ZUFycmF5
RWxlbWVudHMobV9ub2RlLT5pbmRleGluZ1R5cGUoKSwgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG9iamVjdCk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlQ2FzZSwg
ZmFpbENhc2UpOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VTdHJ1Y3R1cmUgPSBt
X291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoCiAgICAgICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlX
aXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChzbG93Q2FzZSk7Ci0g
ICAgICAgICAgICAKKwogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UsIHNsb3dD
YXNlKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhaWxTdHJ1Y3R1cmUgPSBtX291dC5h
bmNob3IobV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSk7CiAgICAgICAgICAgICBtX291dC5q
dW1wKHNsb3dDYXNlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVW
YWx1ZSA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIHN0cnVjdHVyZVZhbHVlID0gbV9vdXQucGhp
KAogICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKCksIGxhcmdlU3RydWN0dXJlLCBmYWlsU3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1Bh
dGgoCi0gICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0
aW9uc1syXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVWYWx1ZSwgcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoIWxhc3ROZXh0KTsKKyAgICAg
ICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVy
ZSk7CisgICAgICAgIH0KKworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1syXS5kaXJl
Y3RHUFIoKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc3RydWN0dXJlVmFsdWUsIHB1
YmxpY0xlbmd0aCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkocG9pbnRlclR5cGUoKSwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU5ld0FycmF5V2l0aFNp
emUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHB1YmxpY0xlbmd0aCA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKKyAgICAgICAgICAgIG1fbm9kZS0+
aW5kZXhpbmdUeXBlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlz
SGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdU
eXBlKCkpKSB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGNvbXBpbGVBbGxvY2F0ZUFycmF5V2l0
aFNpemUocHVibGljTGVuZ3RoLCBtX25vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxMSw2ICsyMTEsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIGFyZ3VtZW50
cygwKSB3aWxsIG5vdCBmZXRjaCB0aGUgJ3RoaXMnIHZhbHVlLiBUbyBnZXQvc2V0ICd0aGlzJywK
ICAgICAgICAgLy8gdXNlIHRoaXNWYWx1ZSgpIGFuZCBzZXRUaGlzVmFsdWUoKSBiZWxvdy4KIAor
ICAgICAgICBKU1ZhbHVlKiBhZGRyZXNzT2ZBcmd1bWVudHNTdGFydCgpIGNvbnN0IHsgcmV0dXJu
IGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4odGhpcyArIGFyZ3VtZW50T2Zmc2V0KDApKTsgfQogICAg
ICAgICBKU1ZhbHVlIGFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCkKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50ID49IGFyZ3VtZW50Q291bnQoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX2Nsb25lZF9hcmd1
bWVudHMpCiAgICAgICAgIERFRklORV9PUChvcF9hcmd1bWVudF9jb3VudCkKLSAgICAgICAgREVG
SU5FX09QKG9wX2NvcHlfcmVzdCkKKyAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9yZXN0KQog
ICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3Jlc3RfbGVuZ3RoKQogICAgICAgICBERUZJTkVfT1Ao
b3BfY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfT1Aob3BfYXNzZXJ0KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTMsNyArNDkzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyhJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2FyZ3VtZW50X2NvdW50KEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9jb3B5X3Jlc3QoSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9yZXN0KEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
YXNzZXJ0KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTgsOSArMTQ1OCw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KEluc3RydWMKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfY29weV9yZXN0
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfcmVzdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
Y29weV9yZXN0KTsKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2NyZWF0ZV9yZXN0KTsKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNyBAQCB0eXBlZGVmIHZv
aWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJ
T04gKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRlKiwgVk0qKTsKIHR5cGVkZWYgdm9pZCAo
SklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRl
ZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9aKShpbnQzMl90KTsKLXR5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNSVWlVaSkoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgUmVnaXN0ZXIqLCB1aW50MzJfdCwgdWludDMyX3QpOwordHlwZWRlZiBKU0Nl
bGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FUlVpVWkpKEV4ZWNTdGF0ZSosIFJl
Z2lzdGVyKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElP
TiAqVl9KSVRPcGVyYXRpb25fRU9KSVVpKShFeGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCosIHVpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogKEpJ
VF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFy
KiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYyLDkg
KzE3NjIsOSBAQCBfbGxpbnRfb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhbGxPcGNvZGVTbG93
UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKICAgICBkaXNwYXRjaCgzKQogCi1fbGxp
bnRfb3BfY29weV9yZXN0OgorX2xsaW50X29wX2NyZWF0ZV9yZXN0OgogICAgIHRyYWNlRXhlY3V0
aW9uKCkKLSAgICBjYWxsT3Bjb2RlU2xvd1BhdGgoX3Nsb3dfcGF0aF9jb3B5X3Jlc3QpCisgICAg
Y2FsbE9wY29kZVNsb3dQYXRoKF9zbG93X3BhdGhfY3JlYXRlX3Jlc3QpCiAgICAgZGlzcGF0Y2go
NCkKIAogX2xsaW50X29wX2luc3RhbmNlb2Y6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNDQxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0OCwyMCArODQ4LDE1IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9y
ZXNvbHZlX3Njb3BlKQogICAgIFJFVFVSTihyZXNvbHZlZFNjb3BlKTsKIH0KIAotU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NvcHlfcmVzdCkKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVh
dGVfcmVzdCkKIHsKICAgICBCRUdJTigpOwogICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9IE9QX0Mo
MikuanNWYWx1ZSgpLmFzVUludDMyKCk7Ci0gICAgaWYgKCFhcnJheVNpemUpIHsKLSAgICAgICAg
QVNTRVJUKCFqc0Nhc3Q8SlNBcnJheSo+KE9QKDEpLmpzVmFsdWUoKSktPmxlbmd0aCgpKTsKLSAg
ICAgICAgRU5EKCk7Ci0gICAgfQotICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkq
PihPUCgxKS5qc1ZhbHVlKCkpOwotICAgIEFTU0VSVChhcnJheVNpemUgPT0gYXJyYXktPmxlbmd0
aCgpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29u
dGlndW91cyk7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gcGNbM10udS51bnNpZ25l
ZFZhbHVlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVNpemU7IGkrKykKLSAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGkgKyBudW1QYXJhbXNUb1NraXApKTsKLSAgICBFTkQoKTsKKyAgICBKU1ZhbHVlKiBhcmd1
bWVudHNUb0NvcHlSZWdpb24gPSBleGVjLT5hZGRyZXNzT2ZBcmd1bWVudHNTdGFydCgpICsgbnVt
UGFyYW1zVG9Ta2lwOworICAgIFJFVFVSTihjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUs
IGFyZ3VtZW50c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXplKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9nZXRfYnlfaWRfd2l0aF90aGlzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDIwNDQxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTMsNyArMjUzLDcgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9yZXN1bWUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0
aF9zY29wZSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUp
OwotU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb3B5X3Jlc3QpOworU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfcmVzdCk7CiBTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2dldF9ieV9pZF93aXRoX3RoaXMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9nZXRfYnlfdmFsX3dpdGhfdGhpcyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX3B1dF9ieV9pZF93aXRoX3RoaXMpOwo=
</data>
<flag name="review"
          id="309502"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285962</attachid>
            <date>2016-08-12 15:13:47 -0700</date>
            <delta_ts>2016-08-12 19:16:14 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>68036</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQ0MTcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE2LTA4LTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBzdG9yZSBsb29wIGZvciBDb3B5UmVzdCBpbiBERkcgYW5k
IEZUTCBmb3IgY2VydGFpbiBhcnJheSBtb2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAg
UGl6bG8uCisKKyAgICAgICAgKiBzdHJlc3MvcmVzdC1wYXJhbWV0ZXItaGF2aW5nLWEtYmFkLXRp
bWUuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9yZXN0LXBhcmFtZXRlci1tYW55LWFyZ3Vt
ZW50cy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLXZhcmlvdXMt
dHlwZXMuanM6IEFkZGVkLgorCiAyMDE2LTA4LTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBPdmVycmlkZXNIYXNJbnN0YW5jZSBzaG91bGQgbm90IGJyYW5jaCBh
Y3Jvc3MgcmVnaXN0ZXIgYWxsb2NhdGlvbnMuCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yZXN0LXBh
cmFtZXRlci1oYXZpbmctYS1iYWQtdGltZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9yZXN0LXBhcmFtZXRlci1oYXZpbmctYS1iYWQtdGltZS5qcwkocmV2aXNpb24gMCkKKysrIEpT
VGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWhhdmluZy1hLWJhZC10aW1lLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFi
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCEiKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsK
KworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24gZm9vKC4uLmMpIHsKKyAgICAgICAg
cmV0dXJuIGM7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBsZXQgYXJyID0gWzEs
MiwzXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IGZvbyguLi5hcnIpOworICAgICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0g
Myk7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSBhcnIubGVuZ3RoKTsKKyAgICAg
ICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gYXJyWzBdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsx
XSA9PT0gYXJyWzFdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsyXSA9PT0gYXJyWzJdKTsKKyAg
ICB9CisKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0
eShBcnJheS5wcm90b3R5cGUsICIxMCIsIHsKKyAgICAgICAgZ2V0KCkgeyByZXR1cm4gMzU7IH0s
CisgICAgICAgIHNldCh4KSB7IGNhbGxlZCA9IHRydWU7IH0KKyAgICB9KTsKKyAgICBsZXQgY2Fs
bGVkMiA9IGZhbHNlOworICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBl
LCAiMCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcHJpbnQoIkluIGdldCEiKTsgcmV0
dXJuIDM1OyB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKHgpIHsgY2FsbGVkMiA9IHRydWU7IH0K
KyAgICB9KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAg
ICBsZXQgcmVzdWx0ID0gZm9vKC4uLmFycik7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3Ro
ID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gYXJyWzBdKTsKKyAgICAgICAg
YXNzZXJ0KHJlc3VsdFswXSA9PT0gMSk7CisgICAgICAgIGFzc2VydChyZXN1bHRbMV0gPT09IGFy
clsxXSk7CisgICAgICAgIGFzc2VydChyZXN1bHRbMl0gPT09IGFyclsyXSk7CisgICAgICAgIHJl
c3VsdFsxMF0gPSAyNTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsxMF0gPT09IDM1KTsKKyAgICAg
ICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworCisgICAgICAgIHJl
c3VsdFswXSA9ICJmb28iOworICAgICAgICBhc3NlcnQoIWNhbGxlZDIpOyAvLyBDcmVhdGluZyBh
IHJlc3Qgc2hvdWxkIGRlZmluZVByb3BlcnR5LCBlbnN1cmluZyB3ZSBkb24ndCBjYWxsIHRoZSBz
ZXR0ZXIuCisgICAgfQorCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7Cisg
ICAgICAgIGxldCByZXN1bHQgPSBmb28oLi4uYXJyKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdC5s
ZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQocmVzdWx0WzBdID09PSBhcnJbMF0pOworICAg
ICAgICBhc3NlcnQocmVzdWx0WzBdID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsxXSA9
PT0gYXJyWzFdKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsyXSA9PT0gYXJyWzJdKTsKKyAgICAg
ICAgcmVzdWx0WzExXSA9IDM1OworICAgICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMTIp
OworICAgICAgICByZXN1bHRbMTBdID0gMjU7CisgICAgICAgIGFzc2VydChyZXN1bHRbMTBdID09
PSAzNSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsK
KworICAgICAgICByZXN1bHRbMF0gPSAiZm9vIjsKKyAgICAgICAgYXNzZXJ0KCFjYWxsZWQyKTsg
Ly8gQ3JlYXRpbmcgYSByZXN0IHNob3VsZCBkZWZpbmVQcm9wZXJ0eSwgZW5zdXJpbmcgd2UgZG9u
J3QgY2FsbCB0aGUgc2V0dGVyLgorICAgIH0KK30KK3Rlc3QxKCk7CkluZGV4OiBKU1Rlc3RzL3N0
cmVzcy9yZXN0LXBhcmFtZXRlci1tYW55LWFyZ3VtZW50cy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1tYW55LWFyZ3VtZW50cy5qcwkocmV2aXNpb24gMCkK
KysrIEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLW1hbnktYXJndW1lbnRzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYg
KCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCEiKQorfQorbm9JbmxpbmUoYXNzZXJ0
KTsKKworbGV0IGNhbGxlZEdldCA9IGZhbHNlOworbGV0IGRlZmluZWRBY2Nlc3NvciA9IGZhbHNl
OworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBmdW5jdGlvbiBmb28oLi4ucmVzdCkgeworICAgICAg
ICByZXR1cm4gcmVzdDsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBjb25zdCBzaXplID0gODAwOworICAg
ICAgICBsZXQgYXJyID0gbmV3IEFycmF5KHNpemUpOworICAgICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgIGFycltpXSA9IGk7CisgICAgICAgIGxldCByZXN1
bHQgPSBmb28oLi4uYXJyKTsKKworICAgICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gYXJy
Lmxlbmd0aCk7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSBzaXplKTsKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGFz
c2VydChhcnJbaV0gPT09IHJlc3VsdFtpXSk7CisgICAgICAgICAgICBhc3NlcnQocmVzdWx0W2ld
ID09PSBpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lZEFjY2Vzc29yKSB7CisgICAg
ICAgICAgICBjYWxsZWRHZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdFswXTsKKyAgICAg
ICAgICAgIGFzc2VydCghY2FsbGVkR2V0KTsKKyAgICAgICAgICAgIGFyclswXTsKKyAgICAgICAg
ICAgIGFzc2VydChjYWxsZWRHZXQpOworCisgICAgICAgICAgICBsZXQgdGVzdEFyciA9IFsuLi5h
cnJdOworICAgICAgICAgICAgY2FsbGVkR2V0ID0gZmFsc2U7CisgICAgICAgICAgICB0ZXN0QXJy
WzBdOworICAgICAgICAgICAgYXNzZXJ0KCFjYWxsZWRHZXQpOworICAgICAgICB9CisgICAgfQor
fQordGVzdCgpOworCitkZWZpbmVkQWNjZXNzb3IgPSB0cnVlOworUmVmbGVjdC5kZWZpbmVQcm9w
ZXJ0eShBcnJheS5wcm90b3R5cGUsICIwIiwgeworICAgIGdldCgpIHsgY2FsbGVkR2V0ID0gdHJ1
ZTsgcmV0dXJuIDA7IH0sCisgICAgc2V0KHgpIHsgIH0KK30pOwordGVzdCgpOwpJbmRleDogSlNU
ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItdmFyaW91cy10eXBlcy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci12YXJpb3VzLXR5cGVzLmpzCShyZXZpc2lv
biAwKQorKysgSlNUZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItdmFyaW91cy10eXBlcy5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQhIik7Cit9Citub0lubGluZShh
c3NlcnQpOworCitmdW5jdGlvbiBmb28oYSwgYiwgLi4uYykgeworICAgIHJldHVybiBjOworfQor
bm9JbmxpbmUoZm9vKTsKK2Z1bmN0aW9uIGJhcihhLCBiLCAuLi5jKSB7CisgICAgcmV0dXJuIGM7
Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBiYXooYSwgYiwgLi4uYykgeyAvLyBhbGxv
dyB0aGlzIHRvIGJlIGlubGluZWQKKyAgICByZXR1cm4gYzsKK30KKworbm9JbmxpbmUoaXNOYU4p
OworCitmdW5jdGlvbiB0ZXN0MShmLCBpdGVycykgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
aXRlcnM7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gZigxMCwgMjAsIDIwLjUsIDIyLjQ1
LCAyMy41MCk7CisgICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICAgICAg
YXNzZXJ0KHJlc3VsdFswXSA9PT0gMjAuNSkKKyAgICAgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0g
MjIuNDUpCisgICAgICAgIGFzc2VydChyZXN1bHRbMl0gPT09IDIzLjUwKTsKKyAgICB9CisKKyAg
ICBsZXQgbyA9IHt9OworICAgIGxldCByZXN1bHQgPSBmKDEwLCAyMCwgMjAuNCwgbywgMjAuMik7
CisgICAgYXNzZXJ0KHJlc3VsdC5sZW5ndGggPT09IDMpOworICAgIGFzc2VydChyZXN1bHRbMF0g
PT09IDIwLjQpCisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gbykKKyAgICBhc3NlcnQocmVzdWx0
WzJdID09PSAyMC4yKTsKKworICAgIHJlc3VsdCA9IGYoMTAsIDIwLCAyMC40LCAyMC40NSwgTmFO
KTsKKyAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFsw
XSA9PT0gMjAuNCkKKyAgICBhc3NlcnQocmVzdWx0WzFdID09PSAyMC40NSkKKyAgICBhc3NlcnQo
aXNOYU4ocmVzdWx0WzJdKSk7Cit9Cit0ZXN0MShmb28sIDEwMDApOwordGVzdDEoYmFyLCAxMDAw
MCk7Cit0ZXN0MShiYXosIDEwMDAwKTsKKworZnVuY3Rpb24gbWFrZVRlc3QyKCkgeworICAgIHJl
dHVybiBldmFsKGAke01hdGgucmFuZG9tKCl9OworICAgICAgICA7KGZ1bmN0aW9uIHRlc3QyKGYs
IGl0ZXJzKSB7CisgICAgICAgICAgICBsZXQgYSA9IDEwOworICAgICAgICAgICAgbGV0IGIgPSAy
MDsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgICAg
ICAgICAgICAgIGlmIChpID09PSBpdGVycyAtIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgYiA9
IHt9OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gaXRlcnMgLSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgIGIgPSBOYU47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgbGV0IHIgPSBmKGEsIGIpOworICAgICAgICAgICAgICAgIGFzc2VydChyLmxlbmd0aCA9
PT0gMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHJbMF0gPT09IGEgfHwgKGlzTmFOKGEpICYm
IGlzTmFOKHJbMF0pKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHJbMV0gPT09IGIgfHwgKGlz
TmFOKGIpICYmIGlzTmFOKHJbMV0pKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pYCk7Cit9
CitmdW5jdGlvbiBmMSguLi5yZXN0KSB7IHJldHVybiByZXN0OyB9CitmdW5jdGlvbiBmMiguLi5y
ZXN0KSB7IHJldHVybiByZXN0OyB9CitmdW5jdGlvbiBmMyguLi5yZXN0KSB7IHJldHVybiByZXN0
OyB9CittYWtlVGVzdDIoKShmMSwgMTAwMCk7CittYWtlVGVzdDIoKShmMiwgMTAwMDApOworbWFr
ZVRlc3QyKCkoZjMsIDUwMDAwMCk7CisKK2Z1bmN0aW9uIHRlc3QzKGYsIGl0ZXJzKSB7CisgICAg
bGV0IG8gPSB7fTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAg
ICAgbGV0IHIgPSBmKGksIG8sIDI1KTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAyIHx8
IHIubGVuZ3RoID09PSAxMDAwMCk7CisgICAgICAgIGFzc2VydChyWzBdID09PSBvKTsKKyAgICAg
ICAgYXNzZXJ0KHJbMV0gPT09IDI1KTsKKyAgICAgICAgaWYgKHIubGVuZ3RoID09PSAxMDAwMCkK
KyAgICAgICAgICAgIGFzc2VydChyWzk5OTldID09PSAzMCk7CisgICAgfQorfQorCitmdW5jdGlv
biBmMTEoaSwgLi4ucmVzdCkgeworICAgIGlmIChpID09PSA5OTkpCisgICAgICAgIHJlc3RbOTk5
OV0gPSAzMDsKKyAgICByZXR1cm4gcmVzdDsKK30KK2Z1bmN0aW9uIGYyMihpLCAuLi5yZXN0KSB7
CisgICAgaWYgKGkgPT09IDQ5OTk5KQorICAgICAgICByZXN0Wzk5OTldID0gMzA7CisgICAgcmV0
dXJuIHJlc3Q7Cit9Cit0ZXN0MyhmMTEsIDEwMDApOwordGVzdDMoZjIyLCA1MDAwMCk7CisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisy
MDE2LTA4LTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIElu
bGluZSBzdG9yZSBsb29wIGZvciBDb3B5UmVzdCBpbiBERkcgYW5kIEZUTCBmb3IgY2VydGFpbiBh
cnJheSBtb2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU5NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAg
VGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBvbGQgY29weV9yZXN0IGJ5dGVjb2RlIHRvIGFjdHVhbGx5
IGFsbG9jYXRlIHRoZSByZXN0IGFycmF5IGl0c2VsZi4KKyAgICAgICAgVGhlIGJ5dGVjb2RlIGlz
IG5vdyBjYWxsZWQgY3JlYXRlX3Jlc3Qgd2l0aCBhbiBhbmFsb2dvdXMgQ3JlYXRlUmVzdCBub2Rl
IGluIHRoZSBERkcvRlRMLgorICAgICAgICBUaGlzIGFsbG93cyB0aGUgYnl0ZWNvZGUgdG8gYmUg
aW4gY29udHJvbCBvZiB3aGF0IHR5cGUgb2YgaW5kZXhpbmdUeXBlIHRoZSBhcnJheSBpcyBhbGxv
Y2F0ZWQKKyAgICAgICAgd2l0aC4gV2UgYWx3YXlzIGFsbG9jYXRlIHVzaW5nIEFycmF5V2l0aENv
bnRpZ3VvdXMgc3RvcmFnZSB1bmxlc3Mgd2UncmUgaGF2aW5nQUJhZFRpbWUoKS4KKyAgICAgICAg
VGhpcyBhbHNvIG1ha2VzIGFsbG9jYXRpbmcgYW5kIHdyaXRpbmcgaW50byB0aGUgYXJyYXkgZmFz
dC4gT24gdGhlIGZhc3QgcGF0aCwgdGhlIERGRy9GVEwKKyAgICAgICAgSklUIHdpbGwgZmFzdCBh
bGxvY2F0ZSB0aGUgYXJyYXkgYW5kIGl0cyBzdG9yYWdlLCBhbmQgd2Ugd2lsbCBkbyBhIG1lbW1v
dmUgZnJvbSB0aGUgcmVzdAorICAgICAgICByZWdpb24gb2YgYXJndW1lbnRzIGludG8gdGhlIGFy
cmF5J3Mgc3RvcmFnZS4KKworICAgICAgICBJJ20gc2VlaW5nIGEgMS0yJSBzcGVlZHVwIG9uIEVT
NlNhbXBsZUJlbmNoLCBhbmQgYWJvdXQgYSAyeCBzcGVlZHVwCisgICAgICAgIG9uIG1pY3JvIGJl
bmNobWFya3MgdGhhdCBqdXN0IHRlc3QgcmVzdCBjcmVhdGlvbiBzcGVlZC4KKworICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
VXNlRGVmLmg6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZSk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVyKToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkNh
bGxBcnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbEFy
cmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAg
KiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5
TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dXNlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpjb21waWxhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk6Cisg
ICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlUmVzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRSZXN0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvcHlSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoUmFuZG9tKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoUmFuZG9tKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVSZXN0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldFJlc3RMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3QXJyYXlCdWZmZXIp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQWxsb2NhdGVB
cnJheVdpdGhTaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZU5ld0FycmF5V2l0aFNpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ29weVJlc3QpOiBEZWxldGVkLgorICAgICAgICAqIGludGVycHJldGVyL0Nh
bGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFkZHJlc3NPZkFyZ3VtZW50c1N0
YXJ0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcmd1bWVudCk6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV9yZXN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NvcHlf
cmVzdCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorCiAyMDE2LTA4LTExICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBPdmVycmlkZXNIYXNJbnN0YW5jZSBzaG91bGQg
bm90IGJyYW5jaCBhY3Jvc3MgcmVnaXN0ZXIgYWxsb2NhdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCShyZXZpc2lvbiAy
MDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpz
b24JKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfSwK
ICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2Fzc2VydCIsICJsZW5ndGgiIDogMyB9LAotICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfY29weV9yZXN0IiwgImxlbmd0aCI6IDQgfSwKKyAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9yZXN0IiwgImxlbmd0aCI6IDQgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9yZXN0X2xlbmd0aCIsICJsZW5ndGgiOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9zYXZlIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9yZXN1bWUiLCAibGVuZ3RoIiA6IDMgfSwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lv
biAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKICAgICBjYXNlIG9wX2ps
ZXNzOgogICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6Ci0gICAgY2FzZSBvcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpbDoKLSAgICBjYXNlIG9wX2NvcHlfcmVzdDogeworICAgIGNhc2Ugb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWw6IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUxlbmd0aHNb
b3Bjb2RlSURdID4gMik7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwg
b3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CkBAIC0xOTAsNiArMTg5LDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAog
ICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgogICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9z
Y29wZToKICAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
Y3JlYXRlX3Jlc3Q6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6IHsKICAgICAgICAg
QVNTRVJUKG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdID4gMik7CiAgICAgICAgIGZ1bmN0b3IoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CkBAIC0zMTgsNyArMzE4LDYgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENv
ZGVCbAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGlu
c3RydWN0aW9uLT51Lm9wY29kZSk7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIC8vIFRo
ZXNlIGRvbid0IGRlZmluZSBhbnl0aGluZy4KLSAgICBjYXNlIG9wX2NvcHlfcmVzdDoKICAgICBj
YXNlIG9wX3B1dF90b19zY29wZToKICAgICBjYXNlIG9wX2VuZDoKICAgICBjYXNlIG9wX3Rocm93
OgpAQCAtNDY0LDYgKzQ2Myw3IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChD
b2RlQmwKICAgICBjYXNlIG9wX2RlbF9ieV92YWw6CiAgICAgY2FzZSBvcF91bnNpZ25lZDoKICAg
ICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czogCisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoK
ICAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDogewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVu
Z3Roc1tvcGNvZGVJRF0gPiAxKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0
aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDQ0MTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODMyLDExICs4MzIsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29k
ZSgKICAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImFyZ3VtZW50X2NvdW50IiwgcjApOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jb3B5X3Jlc3Q6IHsKKyAgICAgICAgY2Fz
ZSBvcF9jcmVhdGVfcmVzdDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50T2Zmc2V0ID0gKCsraXQpLT51LnVuc2lnbmVkVmFsdWU7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjb3B5
X3Jlc3QiKTsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImNyZWF0ZV9yZXN0Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CiAg
ICAgICAgICAgICBvdXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV1IiwgYXJndW1lbnRPZmZz
ZXQpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MzUsOSArNDQzNSw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzdFAKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocmVzdEFycmF5TGVuZ3RoLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
bnVtUGFyYW1ldGVyc1RvU2tpcCk7CiAKLSAgICBlbWl0TmV3QXJyYXlXaXRoU2l6ZShyZXN1bHQs
IHJlc3RBcnJheUxlbmd0aC5nZXQoKSk7Ci0KLSAgICBlbWl0T3Bjb2RlKG9wX2NvcHlfcmVzdCk7
CisgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfcmVzdCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHJlc3VsdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc3RBcnJh
eUxlbmd0aC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG51bVBhcmFtZXRl
cnNUb1NraXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA0NDEzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODYxLDcgKzI4NjEsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ2hlY2tUeXBlSW5mb0ZsYWdzOgogICAg
ICAgICBicmVhazsKIAotICAgIGNhc2UgQ29weVJlc3Q6CisgICAgY2FzZSBDcmVhdGVSZXN0Ogor
ICAgICAgICBpZiAoIW1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChu
b2RlKSkgLy8gVGhpcyBtZWFucyB3ZSdyZSBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgorICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNBcnJheSk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVjazogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlz
aW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzM0LDEzICszNzM0LDEyIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9yZXN0X2xlbmd0aCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX2NvcHlfcmVz
dDogeworICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7CiAgICAgICAgICAgICBub3RpY2VB
cmd1bWVudHNVc2UoKTsKLSAgICAgICAgICAgIE5vZGUqIGFycmF5ID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBOb2Rl
KiBhcnJheUxlbmd0aCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChDb3B5UmVzdCwgT3BJbmZvKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51LnVuc2lnbmVkVmFsdWUpLAotICAgICAgICAgICAgICAgIGFy
cmF5LCBhcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb3B5X3Jlc3Qp
OworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENyZWF0ZVJlc3QsIE9wSW5m
byhjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS51bnNpZ25lZFZhbHVlKSwgYXJyYXlMZW5ndGgpKTsK
KyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9yZXN0KTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIC8vID09PSBCaXR3aXNlIG9wZXJhdGlvbnMgPT09CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAg
ICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9yZXN1bHRHUFIocmVzdWx0R1BS
KQogICAgICAgICAsIG1fY29udGlndW91c1N0cnVjdHVyZShjb250aWd1b3VzU3RydWN0dXJlKQot
ICAgICAgICAsIG1fYXJyYXlTdG9yYWdlU3RydWN0dXJlKGFycmF5U3RvcmFnZVN0cnVjdHVyZSkK
KyAgICAgICAgLCBtX2FycmF5U3RvcmFnZU9yQ29udGlndW91c1N0cnVjdHVyZShhcnJheVN0b3Jh
Z2VTdHJ1Y3R1cmUpCiAgICAgICAgICwgbV9zaXplR1BSKHNpemVHUFIpCiAgICAgewogICAgICAg
ICBqaXQtPnNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbChmYWxzZSwgbV9wbGFucywgcmVzdWx0
R1BSKTsKQEAgLTk3LDEyICs5NywxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3BsYW5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgaml0LT5zaWxl
bnRTcGlsbChtX3BsYW5zW2ldKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBBc3NlbWJs
eUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIobV9zaXplR1BSKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgYmlnTGVuZ3RoID0gaml0LT5tX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBtX3NpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
TUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpOwotICAgICAgICBqaXQtPm1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9jb250aWd1b3VzU3RydWN0
dXJlKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBq
aXQtPm1faml0Lmp1bXAoKTsKLSAgICAgICAgYmlnTGVuZ3RoLmxpbmsoJmppdC0+bV9qaXQpOwot
ICAgICAgICBqaXQtPm1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9h
cnJheVN0b3JhZ2VTdHJ1Y3R1cmUpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZG9uZS5saW5rKCZq
aXQtPm1faml0KTsKKyAgICAgICAgaWYgKG1fY29udGlndW91c1N0cnVjdHVyZSAhPSBtX2FycmF5
U3RvcmFnZU9yQ29udGlndW91c1N0cnVjdHVyZSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmlnTGVuZ3RoID0gaml0LT5tX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBtX3NpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTUlO
X0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpOworICAgICAgICAgICAgaml0LT5t
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1fY29udGlndW91c1N0cnVj
dHVyZSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IGppdC0+bV9qaXQuanVtcCgpOworICAgICAgICAgICAgYmlnTGVuZ3RoLmxpbmsoJmppdC0+
bV9qaXQpOworICAgICAgICAgICAgaml0LT5tX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1fYXJyYXlTdG9yYWdlT3JDb250aWd1b3VzU3RydWN0dXJlKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBkb25lLmxpbmsoJmppdC0+bV9qaXQpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGppdC0+bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmUpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LT5jYWxs
T3BlcmF0aW9uKG1fZnVuY3Rpb24sIG1fcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBtX3NpemVHUFIp
OwogICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IFNwZWN1bGF0aXZlSklUOjpwaWNrQ2FuVHJh
bXBsZShtX3Jlc3VsdEdQUik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6
ZSgpOyBpLS07KQpAQCAtMTE1LDcgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgUF9KSVRPcGVyYXRp
b25fRVN0WiBtX2Z1bmN0aW9uOwogICAgIEdQUlJlZyBtX3Jlc3VsdEdQUjsKICAgICBTdHJ1Y3R1
cmUqIG1fY29udGlndW91c1N0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fYXJyYXlTdG9yYWdl
U3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9hcnJheVN0b3JhZ2VPckNvbnRpZ3VvdXNTdHJ1
Y3R1cmU7CiAgICAgR1BSUmVnIG1fc2l6ZUdQUjsKICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJT
YXZlUGxhbiwgMj4gbV9wbGFuczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
NSw3ICsyMzUsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAg
ICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX2dldF9w
YXJlbnRfc2NvcGU6CiAgICAgY2FzZSBvcF9jYXRjaDoKLSAgICBjYXNlIG9wX2NvcHlfcmVzdDoK
KyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgogICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgog
ICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgogICAgIGNhc2Ugb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOTcsOSArMTA5NywxNiBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBjYXNlIENvcHlSZXN0OiB7CisgICAgY2FzZSBDcmVhdGVSZXN0OiB7
CisgICAgICAgIGlmICghZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChu
b2RlKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSdyZSBhbHJlYWR5IGhhdmluZyBh
IGJhZCB0aW1lLgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShI
ZWFwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICByZWFkKFN0YWNr
KTsKLSAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsK
KyAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24g
MjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRz
OgogICAgIGNhc2UgUHV0VG9Bcmd1bWVudHM6Ci0gICAgY2FzZSBDb3B5UmVzdDoKICAgICBjYXNl
IExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZToKICAgICBjYXNlIExvZ1NoYWRvd0NoaWNrZW5UYWls
OgogICAgIGNhc2UgR2V0RHluYW1pY1ZhcjoKQEAgLTI4NSw2ICsyODQsNyBAQCBib29sIGRvZXNH
QyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBT
dHJpbmdSZXBsYWNlOgogICAgIGNhc2UgU3RyaW5nUmVwbGFjZVJlZ0V4cDoKKyAgICBjYXNlIENy
ZWF0ZVJlc3Q6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDAsOSArMTUwMCw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgQ29w
eVJlc3Q6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgY2FzZSBDcmVhdGVSZXN0OiB7CisgICAgICAgICAgICB3YXRjaEhhdmluZ0FCYWRU
aW1lKG5vZGUpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1OSw2ICs2NTksMTIg
QEAgcHVibGljOgogICAgICAgICBkb1RvQ2hpbGRyZW4obm9kZSwgWyZdIChFZGdlIGVkZ2UpIHsg
cmVzdWx0IHw9IGVkZ2UgPT0gY2hpbGQ7IH0pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KKworICAgIGJvb2wgaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICByZXR1cm4gd2F0Y2hw
b2ludHMoKS5pc1dhdGNoZWQoZ2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQo
KSk7CisgICAgfQogICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24o
KSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxOSw3ICsyMzE5
LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ29weVJlc3QgfHwgb3AoKSA9PSBHZXRSZXN0
TGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ3JlYXRlUmVzdCB8fCBvcCgpID09IEdl
dFJlc3RMZW5ndGgpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BJ
bmZvKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDcgKzI5MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdSZWdleHAsIE5vZGVSZXN1bHRKUykgXAog
ICAgIC8qIFJlc3QgUGFyYW1ldGVyICovXAogICAgIG1hY3JvKEdldFJlc3RMZW5ndGgsIE5vZGVS
ZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKENvcHlSZXN0LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgbWFjcm8oQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIFwKICAgICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAogICAgIG1h
Y3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwMiwxNyArMTEwMiwxNiBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvcHlSZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBhcnJheUFzQ2VsbCwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9m
UGFyYW1zVG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNpemUpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlUmVzdChFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyKiBhcmd1bWVudFN0
YXJ0LCB1bnNpZ25lZCBudW1iZXJPZlBhcmFtc1RvU2tpcCwgdW5zaWduZWQgYXJyYXlTaXplKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCi0gICAgQVNTRVJUKGFycmF5U2l6ZSk7Ci0gICAgSlNBcnJheSog
YXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGFycmF5QXNDZWxsKTsKLSAgICBBU1NFUlQoYXJyYXlT
aXplID09IGFycmF5LT5sZW5ndGgoKSk7Ci0gICAgYXJyYXktPnNldExlbmd0aChleGVjLCBhcnJh
eVNpemUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVNpemU7IGkrKykKLSAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGFyZ3VtZW50U3RhcnRbaSArIG51
bWJlck9mUGFyYW1zVG9Ta2lwXS5qc1ZhbHVlKCkpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihSZWdpc3RlcikgPT0gc2l6ZW9mKEpTVmFsdWUpLCAiVGhpcyBpcyBhIHN0cm9uZyBhc3N1
bXB0aW9uIGhlcmUuIik7CisgICAgSlNWYWx1ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0gYml0
d2lzZV9jYXN0PEpTVmFsdWUqPihhcmd1bWVudFN0YXJ0KSArIG51bWJlck9mUGFyYW1zVG9Ta2lw
OworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50c1Rv
Q29weVJlZ2lvbiwgYXJyYXlTaXplKTsKIH0KIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uT2JqZWN0SXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXIKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxp
bmVDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50KTsKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBK
U0Z1bmN0aW9uKiBjYWxsZWUpOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvcHlSZXN0
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25lZCBu
dW1iZXJPZlBhcmFtc1RvU2tpcCwgdW5zaWduZWQgYXJyYXlTaXplKTsKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVSZXN0KEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiBhcmd1bWVu
dFN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgdW5zaWduZWQgYXJyYXlT
aXplKTsKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCwg
aW50MzJfdCkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2Jq
ZWN0SXNPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZfSU5U
RVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MzYsNiArODM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIE5ld0FycmF5OgogICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAgICAgIGNh
c2UgQ3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjogewogICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDYz
LDcgKzEwNjQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgY2Fz
ZSBDb3B5UmVzdDoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDcgKzM0Niw3
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRz
OgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgY2FzZSBDb3B5UmVzdDoKKyAgICBjYXNl
IENyZWF0ZVJlc3Q6CiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAgIGNhc2UgU3RyaW5nUmVw
bGFjZVJlZ0V4cDoKICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5MCw1MSArMzg5MCwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlm
ICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFn
ZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0
aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIEdQUlJlZyBzaXplR1BSID0gc2l6ZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9TVE9S
QUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFT
U0VSVCgoMSA8PCAzKSA9PSBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICAgICAgbV9qaXQubW92
ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0
ZWRJbW0zMigzKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVk
SW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGVtaXRBbGxvY2F0
ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIpKTsKLSAgICAgICAgICAgIG1faml0
LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShub2RlLT5pbmRleGluZ1R5
cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIG5hbiA9IEpTVmFsdWUoSlNWYWx1ZTo6
RW5jb2RlQXNEb3VibGUsIFBOYU4pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGxvb3AgPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihU
cnVzdGVkSW1tMzIobmFuLnUuYXNCaXRzLnRhZyksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobmFuLnUuYXNCaXRzLnBheWxvYWQpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwotICAgICAgICAgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRv
cldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLAot
ICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSksCi0gICAgICAgICAg
ICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSksCi0gICAgICAgICAgICAgICAgICAg
IHNpemVHUFIpKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBjb21waWxlQWxsb2NhdGVO
ZXdBcnJheVdpdGhTaXplKGdsb2JhbE9iamVjdCwgcmVzdWx0R1BSLCBzaXplR1BSLCBub2RlLT5p
bmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDkwOCw4ICs0ODY4LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIENvcHlSZXN0OiB7Ci0gICAgICAgIGNvbXBpbGVDb3B5UmVzdChub2Rl
KTsKKyAgICBjYXNlIENyZWF0ZVJlc3Q6IHsKKyAgICAgICAgY29tcGlsZUNyZWF0ZVJlc3Qobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTQzOCw2ICs1Mzk4LDUzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJhbmRvbSgKICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9j
YXRlTmV3QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBHUFJSZWcg
cmVzdWx0R1BSLCBHUFJSZWcgc2l6ZUdQUiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgYm9v
bCBzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UpCit7CisgICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIAorICAgIEdQUlJlZyBzdG9yYWdlR1BS
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBpZiAoc2hvdWxkQ29udmVydExh
cmdlU2l6ZVRvQXJyYXlTdG9yYWdlKQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0z
MihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSkpOworICAgIAorICAgIEFT
U0VSVCgoMSA8PCAzKSA9PSBzaXplb2YoSlNWYWx1ZSkpOworICAgIG1faml0Lm1vdmUoc2l6ZUdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3Jh
dGNoR1BSKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSksIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZCgKKyAg
ICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHJlc3VsdEdQUiwgc3RvcmFnZUdQUikpOwor
ICAgIG1faml0LnN1YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVE
dXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8
SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgIAorICAgIG1faml0LnN0
b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgbV9qaXQuc3RvcmUzMihzaXplR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
VmVjdG9yTGVuZ3RoKCkpKTsKKyAgICAKKyAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkp
IHsKKyAgICAgICAgSlNWYWx1ZSBuYW4gPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91Ymxl
LCBQTmFOKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKG5hbi51LmFzQml0cy50YWcpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKFRy
dXN0ZWRJbW0zMihuYW4udS5hc0JpdHMucGF5bG9hZCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtU
byhsb29wLCAmbV9qaXQpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAg
CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxv
Y2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKKyAgICAgICAg
c3RydWN0dXJlLAorICAgICAgICBzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2Ug
PyBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2Nh
dGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpIDogc3RydWN0dXJlLAorICAgICAgICBzaXplR1BS
KSk7Cit9CisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTIsNDkgKzM4NTIsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmICghZ2xvYmFsT2Jq
ZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShub2RlLT5pbmRl
eGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBz
aXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcgc2l6
ZUdQUiA9IHNpemUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJ
T05fTEVOR1RIKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoKDEgPDwgMykg
PT0gc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJ
bmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uo
cmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRj
aEdQUiwgc3RvcmFnZUdQUik7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+
KFBOYU4pKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShzaXplR1BS
LCBzY3JhdGNoMkdQUik7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaDJHUFIp
OwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFi
ZWwoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0
Y2gyR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7
Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigK
LSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSwK
LSAgICAgICAgICAgICAgICAgICAgc2l6ZUdQUikpOwotICAgICAgICAgICAgCisgICAgICAgICAg
ICBjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKGdsb2JhbE9iamVjdCwgcmVzdWx0R1BS
LCBzaXplR1BSLCBub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDg1
NSw4ICs0ODE1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgY2FzZSBDb3B5UmVzdDogewotICAgICAgICBjb21waWxlQ29weVJlc3Qo
bm9kZSk7CisgICAgY2FzZSBDcmVhdGVSZXN0OiB7CisgICAgICAgIGNvbXBpbGVDcmVhdGVSZXN0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTU1MDUsNiArNTQ2NSw1MSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20oCiAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR1BS
UmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNpemVHUFIsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUs
IGJvb2wgc2hvdWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlKQoreworICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwor
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAKKyAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNob3VsZENvbnZl
cnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSkKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVk
SW1tMzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpKTsKKyAgICAKKyAg
ICBBU1NFUlQoKDEgPDwgMykgPT0gc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICBtX2ppdC5tb3ZlKHNp
emVHUFIsIHNjcmF0Y2hHUFIpOworICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwg
c2NyYXRjaEdQUik7CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGlu
Z0hlYWRlcikpLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
CisgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShyZXN1bHRHUFIsIHN0b3JhZ2VHUFIp
KTsKKyAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpOworICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdl
R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBtX2pp
dC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIG1faml0LnN0b3JlMzIoc2l6
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgCisgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5
cGUpKSB7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihQTmFOKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaDJHUFIpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBtX2ppdC5zdG9y
ZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2Ny
YXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgIG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaDJHUFIpLmxpbmtUbyhs
b29wLCAmbV9qaXQpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0
b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKKyAgICAgICAgc3Ry
dWN0dXJlLAorICAgICAgICBzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UgPyBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihBcnJheVdpdGhBcnJheVN0b3JhZ2UpIDogc3RydWN0dXJlLAorICAgICAgICBzaXplR1BSKSk7
Cit9CisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0ODIsMzAgKzY0ODIsNzUgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUNyZWF0ZUNsb25lZAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvcHlSZXN0KE5vZGUqIG5vZGUp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlUmVzdChOb2RlKiBub2RlKQogewot
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IENvcHlSZXN0KTsKKyAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBDcmVhdGVSZXN0KTsKIAotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFycmF5KHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyNpZiAhQ1BVKFg4NikKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5p
c1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcnJheUxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSBhcnJheVJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJS
ZWcgYXJyYXlMZW5ndGhHUFIgPSBhcnJheUxlbmd0aC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFy
cmF5UmVzdWx0R1BSID0gYXJyYXlSZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCBzaG91bGRB
bGxvd0ZvckFycmF5U3RvcmFnZVN0cnVjdHVyZUZvckxhcmdlQXJyYXlzID0gZmFsc2U7CisgICAg
ICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUobV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgYXJyYXlSZXN1bHRHUFIsIGFycmF5TGVu
Z3RoR1BSLCBBcnJheVdpdGhDb250aWd1b3VzLCBzaG91bGRBbGxvd0ZvckFycmF5U3RvcmFnZVN0
cnVjdHVyZUZvckxhcmdlQXJyYXlzKTsKKworICAgICAgICBHUFJUZW1wb3JhcnkgYXJndW1lbnRz
U3RhcnQodGhpcyk7CisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNTdGFydEdQUiA9IGFyZ3VtZW50
c1N0YXJ0LmdwcigpOworCisgICAgICAgIGVtaXRHZXRBcmd1bWVudFN0YXJ0KG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgYXJndW1lbnRzU3RhcnRHUFIpOworCisgICAgICAgIEdQUlRlbXBvcmFyeSBi
dXR0ZXJmbHkodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBjdXJyZW50TGVuZ3RoKHRoaXMp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkp
OworI2Vsc2UKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlVGFnKHRoaXMpOworICAgICAgICBH
UFJUZW1wb3JhcnkgdmFsdWVQYXlsb2FkKHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MgPSBKU1ZhbHVlUmVncyh2YWx1ZVRhZy5ncHIoKSwgdmFsdWVQYXlsb2FkLmdwcigpKTsK
KyNlbmRpZgorCisgICAgICAgIEdQUlJlZyBjdXJyZW50TGVuZ3RoR1BSID0gY3VycmVudExlbmd0
aC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseS5ncHIoKTsK
KworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFycmF5UmVz
dWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworCisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBza2lwTG9vcCA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgYXJyYXlMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigwKSk7CisgICAg
ICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGFycmF5TGVuZ3RoR1BSLCBjdXJyZW50TGVuZ3Ro
R1BSKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKEltbTMyKHNpemVvZihSZWdpc3RlcikgKiBub2Rl
LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSwgYXJndW1lbnRzU3RhcnRHUFIpOworCisgICAg
ICAgIGF1dG8gbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgY3VycmVudExlbmd0aEdQUik7CisgICAgICAgIG1faml0LmxvYWRWYWx1ZShK
SVRDb21waWxlcjo6QmFzZUluZGV4KGFyZ3VtZW50c1N0YXJ0R1BSLCBjdXJyZW50TGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHZhbHVlUmVncyk7CisgICAgICAgIG1faml0
LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJ1dHRlcmZs
eUdQUiwgY3VycmVudExlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKKyAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjdXJyZW50TGVu
Z3RoR1BSLCBUcnVzdGVkSW1tMzIoMCkpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworCisgICAgICAg
IHNraXBMb29wLmxpbmsoJm1faml0KTsKKyAgICAgICAgY2VsbFJlc3VsdChhcnJheVJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gIUNQVShYODYpCisK
KyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJyYXlMZW5ndGgodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBhcmd1bWVudHNTdGFydCh0aGlzKTsKLSAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJyYXlMZW5ndGgodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOworICAgIEdQUlRlbXBvcmFyeSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCh0aGlzKTsKIAot
ICAgIEdQUlJlZyBhcnJheUdQUiA9IGFycmF5LmdwcigpOwotICAgIEdQUlJlZyBhcmd1bWVudHNT
dGFydEdQUiA9IGFyZ3VtZW50c1N0YXJ0LmdwcigpOwogICAgIEdQUlJlZyBhcnJheUxlbmd0aEdQ
UiA9IGFycmF5TGVuZ3RoLmdwcigpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGFycmF5TGVuZ3RoR1BSLCBUcnVz
dGVkSW1tMzIoMCkpOworICAgIEdQUlJlZyBhcmd1bWVudHNTdGFydEdQUiA9IGFyZ3VtZW50c1N0
YXJ0LmdwcigpOwogCiAgICAgZW1pdEdldEFyZ3VtZW50U3RhcnQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBhcmd1bWVudHNTdGFydEdQUik7Ci0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoYXJn
dW1lbnRzU3RhcnRHUFIpOwotICAgIC8vIEFyZ3VtZW50czogMDpleGVjLCAxOkpTQ2VsbCogYXJy
YXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBvZiBhcmd1bWVudHMgdG8gc2tpcCwgNDph
cnJheSBsZW5ndGgKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvcHlSZXN0LCBhcnJheUdQ
UiwgYXJndW1lbnRzU3RhcnRHUFIsIEltbTMyKG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCkpLCBhcnJheUxlbmd0aEdQUik7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhhcmd1bWVu
dHNTdGFydEdQUik7Ci0gICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAotICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKLSAgICBub1Jlc3VsdChub2RlKTsK
KyAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZVJl
c3QsIHJlc3VsdEdQUiwgYXJndW1lbnRzU3RhcnRHUFIsIEltbTMyKG5vZGUtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCkpLCBhcnJheUxlbmd0aEdQUik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKKworICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldFJlc3RMZW5ndGgoTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIw
NDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtNzYwLDYgKzc2MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBp
bGVJc1R5cGVkQXJyYXlWaWV3KE5vZGUqKTsKIAogICAgIHZvaWQgZW1pdENhbGwoTm9kZSopOwor
CisgICAgdm9pZCBjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0
KiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNpemVHUFIsIEluZGV4aW5nVHlwZSwgYm9vbCBz
aG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UgPSB0cnVlKTsKICAgICAKICAgICAv
LyBDYWxsZWQgb25jZSBhIG5vZGUgaGFzIGNvbXBsZXRlZCBjb2RlIGdlbmVyYXRpb24gYnV0IHBy
aW9yIHRvIHNldHRpbmcKICAgICAvLyBpdHMgcmVzdWx0LCB0byBmcmVlIHVwIGl0cyBjaGlsZHJl
bi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJpb3IgdG8gc2V0dGluZwpAQCAtMTI3NCwxMCArMTI3Niwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAg
fQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
Q1JVaVVpIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBJbW0zMiBhcmczLCBH
UFJSZWcgYXJnNCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3Bl
cmF0aW9uX0VSVWlVaSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBJbW0z
MiBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczLmFzVHJ1c3RlZEltbTMyKCksIGFyZzQpOwot
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMi5hc1RydXN0ZWRJbW0zMigpLCBhcmcz
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVy
YXRpb25fRUpzY0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIGltcGwpCkBAIC0yNDg3LDcgKzI0ODksNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21waWxlUHV0VG9Bcmd1bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNj
b3BlZEFyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1l
bnRzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVDb3B5UmVzdChOb2RlKik7CisgICAgdm9pZCBj
b21waWxlQ3JlYXRlUmVzdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UmVzdExlbmd0aChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlTm90aWZ5V3JpdGUoTm9kZSopOwogICAgIGJvb2wgY29t
cGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjks
NyArMjI5LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAg
IGNhc2UgUHV0R2V0dGVyU2V0dGVyQnlJZDoKICAgICBjYXNlIFB1dEdldHRlckJ5VmFsOgogICAg
IGNhc2UgUHV0U2V0dGVyQnlWYWw6Ci0gICAgY2FzZSBDb3B5UmVzdDoKKyAgICBjYXNlIENyZWF0
ZVJlc3Q6CiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Miw4ICs5
NzIsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKICAgICAg
ICAgICAgIGNvbXBpbGVDaGVja1dhdGNoZG9nVGltZXIoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvcHlSZXN0OgotICAgICAgICAgICAgY29tcGlsZUNvcHlSZXN0KCk7Cisg
ICAgICAgIGNhc2UgQ3JlYXRlUmVzdDoKKyAgICAgICAgICAgIGNvbXBpbGVDcmVhdGVSZXN0KCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgogICAgICAg
ICAgICAgY29tcGlsZUdldFJlc3RMZW5ndGgoKTsKQEAgLTM4NjMsMjYgKzM4NjMsNDAgQEAgcHJp
dmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KIAotICAgIHZvaWQgY29t
cGlsZUNvcHlSZXN0KCkKLSAgICB7ICAgICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGRv
Q29weVJlc3QgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgIHZvaWQgY29tcGlsZUNyZWF0ZVJlc3QoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hw
b2ludChtX25vZGUpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTFZhbHVlIGFycmF5TGVuZ3RoID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgYm9vbCBzaG91bGRMYXJnZUFycmF5U2l6
ZUNyZWF0ZUFycmF5U3RvcmFnZSA9IGZhbHNlOworICAgICAgICAgICAgTFZhbHVlIGFycmF5ID0g
Y29tcGlsZUFsbG9jYXRlQXJyYXlXaXRoU2l6ZShhcnJheUxlbmd0aCwgQXJyYXlXaXRoQ29udGln
dW91cywgc2hvdWxkTGFyZ2VBcnJheVNpemVDcmVhdGVBcnJheVN0b3JhZ2UpOworCisgICAgICAg
ICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQubG9hZFB0cihhcnJheSwgbV9oZWFwcy5KU09i
amVjdF9idXR0ZXJmbHkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RhcnRMZW5ndGgg
PSBtX291dC5hbmNob3IoYXJyYXlMZW5ndGgpOworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50
UmVnaW9uID0gbV9vdXQuYWRkKGdldEFyZ3VtZW50c1N0YXJ0KCksIG1fb3V0LmNvbnN0SW50NjQo
c2l6ZW9mKFJlZ2lzdGVyKSAqIG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSkpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGFycmF5TGVuZ3RoLCBtX291dC5j
b25zdEludDMyKDApKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKGxvb3BTdGFydCkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIExWYWx1
ZSBwaGlPZmZzZXQgPSBtX291dC5waGkoSW50MzIsIHN0YXJ0TGVuZ3RoKTsKKyAgICAgICAgICAg
IExWYWx1ZSBjdXJyZW50T2Zmc2V0ID0gbV9vdXQuc3ViKHBoaU9mZnNldCwgbV9vdXQuaW50MzJP
bmUpOworICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwaGlPZmZzZXQsIG1fb3V0
LmFuY2hvcihjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICBMVmFsdWUgbG9hZGVkVmFsdWUg
PSBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCBhcmd1bWVu
dFJlZ2lvbiwgbV9vdXQuemVyb0V4dFB0cihjdXJyZW50T2Zmc2V0KSkpOworICAgICAgICAgICAg
SW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9w
ZXJ0aWVzOworICAgICAgICAgICAgbV9vdXQuc3RvcmUobG9hZGVkVmFsdWUsIG1fb3V0LmJhc2VJ
bmRleChoZWFwLCBidXR0ZXJmbHksIG1fb3V0Lnplcm9FeHRQdHIoY3VycmVudE9mZnNldCkpLCBP
dXRwdXQ6OlN0b3JlNjQpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGN1
cnJlbnRPZmZzZXQsIG1fb3V0LmNvbnN0SW50MzIoMCkpLCB1bnN1cmUoY29udGludWF0aW9uKSwg
dW5zdXJlKGxvb3BTdGFydCkpOwogCi0gICAgICAgIExWYWx1ZSBhcnJheUxlbmd0aCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGFycmF5KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKGFycmF5TGVuZ3RoLCBtX291dC5jb25zdEludDMyKDApKSwKLSAg
ICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoZG9Db3B5UmVzdCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
ZG9Db3B5UmVzdCwgY29udGludWF0aW9uKTsKLSAgICAgICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMs
IDE6SlNDZWxsKiBhcnJheSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3VtZW50
cyB0byBza2lwLCA0OmFycmF5IGxlbmd0aAorICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGFyZ3VtZW50U3RhcnQg
PSBnZXRBcmd1bWVudHNTdGFydCgpOwogICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KSk7Ci0gICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgIFZvaWQsbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbkNvcHlSZXN0KSwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSks
Ci0gICAgICAgICAgICBnZXRBcmd1bWVudHNTdGFydCgpLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCwgYXJyYXlMZW5ndGgpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25DcmVhdGVSZXN0KSwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50U3RhcnQsIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUdl
dFJlc3RMZW5ndGgoKQpAQCAtNDAyOCw4MSArNDA0Miw5OSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2Rl
LT5zdGFydENvbnN0YW50KCkpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ub2Rl
LT5udW1Db25zdGFudHMoKSkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTmV3QXJy
YXlXaXRoU2l6ZSgpCisKKyAgICBMVmFsdWUgY29tcGlsZUFsbG9jYXRlQXJyYXlXaXRoU2l6ZShM
VmFsdWUgcHVibGljTGVuZ3RoLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBib29sIHNob3Vs
ZExhcmdlQXJyYXlTaXplQ3JlYXRlQXJyYXlTdG9yYWdlID0gdHJ1ZSkKICAgICB7Ci0gICAgICAg
IExWYWx1ZSBwdWJsaWNMZW5ndGggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oCi0gICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYg
IWhhc0FueUFycmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAg
ICAgQVNTRVJUKAotICAgICAgICAgICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKQotICAgICAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpCi0gICAgICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpCi0gICAgICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhp
bmdUeXBlKTsKKyAgICAgICAgQVNTRVJUKAorICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpKTsKIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VDYXNlID0gbV9vdXQu
bmV3QmxvY2soKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQubmV3
QmxvY2soKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3Qmxv
Y2soKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Js
b2NrKCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBtX291
dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBsYXJnZUNhc2UgPSBzaG91bGRMYXJn
ZUFycmF5U2l6ZUNyZWF0ZUFycmF5U3RvcmFnZSA/IG1fb3V0Lm5ld0Jsb2NrKCkgOiBudWxscHRy
OworICAgICAgICBMQmFzaWNCbG9jayBmYWlsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKHNob3VsZExhcmdl
QXJyYXlTaXplQ3JlYXRlQXJyYXlTdG9yYWdlKSB7CiAgICAgICAgICAgICBtX291dC5icmFuY2go
CiAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKHB1YmxpY0xlbmd0aCwgbV9vdXQu
Y29uc3RJbnQzMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSksCiAgICAg
ICAgICAgICAgICAgcmFyZWx5KGxhcmdlQ2FzZSksIHVzdWFsbHkoZmFzdENhc2UpKTsKKyAgICAg
ICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdENhc2UsIGxhcmdlQ2FzZSk7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhmYXN0Q2FzZSwgbGFyZ2VDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
V2UgZG9uJ3Qgcm91bmQgdXAgdG8gQkFTRV9WRUNUT1JfTEVOIGZvciBuZXcgQXJyYXkoYmxhaCku
Ci0gICAgICAgICAgICBMVmFsdWUgdmVjdG9yTGVuZ3RoID0gcHVibGljTGVuZ3RoOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgcGF5bG9hZFNpemUgPQotICAgICAgICAgICAgICAg
IG1fb3V0LnNobChtX291dC56ZXJvRXh0KHZlY3Rvckxlbmd0aCwgcG9pbnRlclR5cGUoKSksIG1f
b3V0LmNvbnN0SW50UHRyKDMpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJ1
dHRlcmZseVNpemUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgcGF5bG9hZFNpemUsIG1f
b3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5k
R2V0RW5kKGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIHBheWxvYWRTaXpl
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGFsbG9jYXRlT2Jq
ZWN0PEpTQXJyYXk+KHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBmYWlsQ2FzZSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIocHVibGljTGVuZ3RoLCBidXR0ZXJmbHksIG1f
aGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMy
KHZlY3Rvckxlbmd0aCwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgp
OworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3Qgcm91bmQgdXAgdG8gQkFTRV9WRUNUT1Jf
TEVOIGZvciBuZXcgQXJyYXkoYmxhaCkuCisgICAgICAgIExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBw
dWJsaWNMZW5ndGg7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcGF5bG9hZFNpemUgPQorICAg
ICAgICAgICAgbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHQodmVjdG9yTGVuZ3RoLCBwb2ludGVyVHlw
ZSgpKSwgbV9vdXQuY29uc3RJbnRQdHIoMykpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJ1
dHRlcmZseVNpemUgPSBtX291dC5hZGQoCisgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKGJ1dHRl
cmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkg
PSBtX291dC5zdWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgIAorICAgICAg
ICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0dXJlLCBidXR0
ZXJmbHksIGZhaWxDYXNlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIocHVibGlj
TGVuZ3RoLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAg
ICAgIG1fb3V0LnN0b3JlMzIodmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVy
Zmx5X3ZlY3Rvckxlbmd0aCk7CisKKyAgICAgICAgaW5pdGlhbGl6ZUFycmF5RWxlbWVudHMoaW5k
ZXhpbmdUeXBlLCB2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSk7CisgICAgICAgIAorICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG9iamVjdCk7CisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJ1
Y3R1cmVWYWx1ZTsKKyAgICAgICAgaWYgKHNob3VsZExhcmdlQXJyYXlTaXplQ3JlYXRlQXJyYXlT
dG9yYWdlKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CiAKLSAgICAgICAgICAgIGluaXRpYWxpemVBcnJheUVsZW1lbnRzKG1fbm9kZS0+aW5k
ZXhpbmdUeXBlKCksIHZlY3Rvckxlbmd0aCwgYnV0dGVyZmx5KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihvYmplY3Qp
OwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhsYXJnZUNhc2UsIGZhaWxDYXNlKTsKICAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlU3RydWN0dXJlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNv
bnN0SW50UHRyKAogICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKTsK
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoc2xvd0Nhc2UpOwotICAgICAgICAgICAgCisKICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBzbG93Q2FzZSk7CiAgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYWlsU3RydWN0dXJlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50
UHRyKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChzbG93Q2FzZSk7Ci0gICAg
ICAgICAgICAKKwogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlVmFsdWUgPSBtX291dC5waGkoCisg
ICAgICAgICAgICBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0LnBoaSgKICAgICAgICAgICAgICAgICBw
b2ludGVyVHlwZSgpLCBsYXJnZVN0cnVjdHVyZSwgZmFpbFN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAg
IFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNs
b3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkp
OwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlVmFsdWUsIHB1
YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkocG9p
bnRlclR5cGUoKSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKCFsYXN0TmV4dCk7CisgICAgICAgICAgICBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgc3RydWN0
dXJlVmFsdWUgPSBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpOworICAgICAgICB9CisKKyAg
ICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAg
IFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNs
b3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNh
bGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkpOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1
ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1cm4g
bV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTaXplKCkKKyAgICB7CisgICAgICAg
IExWYWx1ZSBwdWJsaWNMZW5ndGggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oCisgICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYg
IWhhc0FueUFycmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShjb21waWxlQWxsb2NhdGVBcnJheVdpdGhTaXplKHB1YmxpY0xlbmd0aCwg
bV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuaAkocmV2aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDcgQEAg
bmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBhcmd1bWVudHMoMCkgd2lsbCBub3QgZmV0Y2gg
dGhlICd0aGlzJyB2YWx1ZS4gVG8gZ2V0L3NldCAndGhpcycsCiAgICAgICAgIC8vIHVzZSB0aGlz
VmFsdWUoKSBhbmQgc2V0VGhpc1ZhbHVlKCkgYmVsb3cuCiAKKyAgICAgICAgSlNWYWx1ZSogYWRk
cmVzc09mQXJndW1lbnRzU3RhcnQoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KHRoaXMgKyBhcmd1bWVudE9mZnNldCgwKSk7IH0KICAgICAgICAgSlNWYWx1ZSBhcmd1bWVu
dChzaXplX3QgYXJndW1lbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChhcmd1bWVudCA+
PSBhcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKICAg
ICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQogICAgICAgICBERUZJ
TkVfT1Aob3BfYXJndW1lbnRfY291bnQpCi0gICAgICAgIERFRklORV9PUChvcF9jb3B5X3Jlc3Qp
CisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfcmVzdCkKICAgICAgICAgREVGSU5FX09QKG9w
X2dldF9yZXN0X2xlbmd0aCkKICAgICAgICAgREVGSU5FX09QKG9wX2NoZWNrX3RkeikKICAgICAg
ICAgREVGSU5FX09QKG9wX2Fzc2VydCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMjA0NDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDkzLDcgKzQ5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9hcmd1bWVudF9jb3VudChJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRfb3BfY29weV9yZXN0KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF9jcmVhdGVfcmVzdChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jaGVja190ZHoo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2VydChJbnN0cnVjdGlvbiop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDU4LDkgKzE0NTgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1
bWVudF9jb3VudChJbnN0cnVjCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2NvcHlfcmVzdChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Jlc3QoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2NvcHlfcmVzdCk7CisgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF9jcmVhdGVfcmVzdCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNDQx
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjIsNyArMjYyLDcgQEAgdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpW
X0pJVE9wZXJhdAogdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9F
Vm0pKEV4ZWNTdGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklU
T3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElP
TiAqVl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJ
T04gKlZfSklUT3BlcmF0aW9uX0VDUlVpVWkpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVy
KiwgdWludDMyX3QsIHVpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAq
Q19KSVRPcGVyYXRpb25fRVJVaVVpKShFeGVjU3RhdGUqLCBSZWdpc3RlciosIHVpbnQzMl90LCB1
aW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VP
SklVaSkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqLCB1aW50MzJfdCk7CiB0eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9w
ZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgY2hhciogKEpJVF9PUEVSQVRJT04gKlBf
SklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlz
aW9uIDIwNDQxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTc2Miw5ICsxNzYyLDkgQEAgX2xsaW50X29w
X3RvX2luZGV4X3N0cmluZzoKICAgICBjYWxsT3Bjb2RlU2xvd1BhdGgoX3Nsb3dfcGF0aF90b19p
bmRleF9zdHJpbmcpCiAgICAgZGlzcGF0Y2goMykKIAotX2xsaW50X29wX2NvcHlfcmVzdDoKK19s
bGludF9vcF9jcmVhdGVfcmVzdDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgY2FsbE9wY29k
ZVNsb3dQYXRoKF9zbG93X3BhdGhfY29weV9yZXN0KQorICAgIGNhbGxPcGNvZGVTbG93UGF0aChf
c2xvd19wYXRoX2NyZWF0ZV9yZXN0KQogICAgIGRpc3BhdGNoKDQpCiAKIF9sbGludF9vcF9pbnN0
YW5jZW9mOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsMjAg
Kzg0OCwxNSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBS
RVRVUk4ocmVzb2x2ZWRTY29wZSk7CiB9CiAKLVNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb3B5
X3Jlc3QpCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Jlc3QpCiB7CiAgICAgQkVH
SU4oKTsKICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSBPUF9DKDIpLmpzVmFsdWUoKS5hc1VJbnQz
MigpOwotICAgIGlmICghYXJyYXlTaXplKSB7Ci0gICAgICAgIEFTU0VSVCghanNDYXN0PEpTQXJy
YXkqPihPUCgxKS5qc1ZhbHVlKCkpLT5sZW5ndGgoKSk7Ci0gICAgICAgIEVORCgpOwotICAgIH0K
LSAgICBKU0FycmF5KiBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oT1AoMSkuanNWYWx1ZSgpKTsK
LSAgICBBU1NFUlQoYXJyYXlTaXplID09IGFycmF5LT5sZW5ndGgoKSk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgIHVuc2ln
bmVkIG51bVBhcmFtc1RvU2tpcCA9IHBjWzNdLnUudW5zaWduZWRWYWx1ZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspCi0gICAgICAgIGFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCBpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpICsgbnVtUGFyYW1zVG9T
a2lwKSk7Ci0gICAgRU5EKCk7CisgICAgSlNWYWx1ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0g
ZXhlYy0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSArIG51bVBhcmFtc1RvU2tpcDsKKyAgICBS
RVRVUk4oY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCBhcmd1bWVudHNUb0NvcHlSZWdp
b24sIGFycmF5U2l6ZSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lk
X3dpdGhfdGhpcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAyMDQ0MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1
Myw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcmVzdW1lKTsKIFNMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwogU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpOwogU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKTsKLVNMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfY29weV9yZXN0KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfY3JlYXRlX3Jlc3QpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlf
aWRfd2l0aF90aGlzKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X3Zh
bF93aXRoX3RoaXMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWRf
d2l0aF90aGlzKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDQxMykKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA4LTEyICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIElubGluZSBzdG9yZSBsb29w
IGZvciBDb3B5UmVzdCBpbiBERkcgYW5kIEZUTCBmb3IgY2VydGFpbiBhcnJheSBtb2RlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL3Jl
c3QtcGFyYW1ldGVyLWNvbnN0cnVjdGlvbi1wZXJmb3JtYW5jZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcmVzdC1wYXJhbWV0ZXItY29uc3RydWN0aW9uLXBlcmZv
cm1hbmNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3Jl
c3QtcGFyYW1ldGVyLWNvbnN0cnVjdGlvbi1wZXJmb3JtYW5jZS5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorICAgICAgICAodGVzdDEpOgorICAgICAgICAodGVzdDIuZm9vKToKKyAgICAgICAg
KHRlc3QyKToKKwogMjAxNi0wOC0xMiAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZWJhc2VsaW5lIGpzL2RvbS9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJp
YnV0ZXMuaHRtbCBhZnRlciByMjA0Mzk2LgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9y
ZXN0LXBhcmFtZXRlci1jb25zdHJ1Y3Rpb24tcGVyZm9ybWFuY2UtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcmVzdC1wYXJhbWV0ZXItY29uc3RydWN0
aW9uLXBlcmZvcm1hbmNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvcmVzdC1wYXJhbWV0ZXItY29uc3RydWN0aW9uLXBlcmZvcm1hbmNlLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcmVzdC1w
YXJhbWV0ZXItY29uc3RydWN0aW9uLXBlcmZvcm1hbmNlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3Jlc3QtcGFyYW1ldGVyLWNvbnN0cnVjdGlvbi1wZXJmb3JtYW5jZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcmVzdC1wYXJhbWV0ZXItY29uc3RydWN0aW9u
LXBlcmZvcm1hbmNlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3Jlc3QtcGFyYW1ldGVyLWNvbnN0cnVjdGlvbi1wZXJmb3JtYW5jZS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL3Jlc3QtcGFyYW1ldGVyLWNvbnN0cnVjdGlvbi1wZXJmb3JtYW5jZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9yZXN0LXBhcmFtZXRlci1jb25zdHJ1Y3Rpb24tcGVyZm9ybWFuY2UuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcmVzdC1w
YXJhbWV0ZXItY29uc3RydWN0aW9uLXBlcmZvcm1hbmNlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcmVzdC1wYXJhbWV0ZXItY29uc3RydWN0
aW9uLXBlcmZvcm1hbmNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKKyJ1c2Ug
c3RyaWN0IjsKKworZnVuY3Rpb24gZm9vKC4uLnJlc3QpIHsKKyAgICByZXR1cm4gcmVzdDsKK30K
K25vSW5saW5lKGZvbyk7CisKK2NvbnN0IGl0ZXJzID0gOTAwMDAwOworZnVuY3Rpb24gdGVzdDEo
KSB7CisgICAgbGV0IG8gPSB7fTsKKyAgICBsZXQgYSA9IFtdOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgaXRlcnM7IGkrKykKKyAgICAgICAgZm9vKDEwLCAyMCwgbywgNTUsIGEsIDEyMC4zNDEs
IGEsIG8pOworfQorCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBmb28oLi4ucmVz
dCkgeyAvLyBBbGxvdyB0aGlzIHRvIGJlIGlubGluZWQuCisgICAgICAgIHJldHVybiByZXN0Owor
ICAgIH0KKyAgICBsZXQgbyA9IHt9OworICAgIGxldCBhID0gW107CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBpdGVyczsgaSsrKQorICAgICAgICBmb28oMTAsIDIwLCBvLCA1NSwgYSwgMTIwLjM0
MSwgYSwgbyk7Cit9CisKK3Rlc3QxKCk7Cit0ZXN0MigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>